2011-12-31 11 views
8

Sto lavorando su un progetto e sono obbligato a eseguire il mio programma sul server web di qualcun altro. È una pagina di accesso piuttosto semplice con cui sto avendo il problema. Il programma funziona correttamente se lo eseguo tramite il mio host locale tramite WAMP. Il problema che sto avendo è che la porzione reindirizzata non funziona correttamente, convalida l'utente e avvia una sessione, ma quando arriva al reindirizzamento non accade nulla.Alternativa a "header" per reindirizzare in PHP

Sto facendo qualcosa di sbagliato con la mia sintassi che ritengo altamente improbabile dato che funziona correttamente tramite il mio host locale. Oppure, in alternativa, penso che il server non abbia quella funzione (non è sicuro se sia possibile scegliere quali moduli il server supporta anche se sono sicuro che sia fattibile).

Non so se è importante, ma stanno usando "cpanel" che è dove posso accedere ai file e ci sono tutti nella stessa directory quindi se qualcuno potrebbe dirmi dove sto andando male o suggerire un'alternativa a reindirizzando tramite "header" qualsiasi aiuto sarebbe molto apprezzato. Mi sono guardato attorno ma sembra che "header" sia il cavallo da lavoro standard.

Heres il codice che ho:

if((!empty($_POST['username'])) && (!empty($_POST['password']))) 
{ 
// username and password sent from Form 
$myusername = $_POST['username']; 
$mypassword = $_POST['password']; 


$sql="SELECT UserName FROM User WHERE UserName='$myusername' and  Password='$mypassword'"; 

$result=mysql_query($sql); 

$row=mysql_fetch_array($result); 
//$active=$row['active']; 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1) 
{ 
    echo "we made if to the if"; 
    session_start(); 
    session_register("myusername"); 
    $_SESSION['login_user']=$myusername; 
    echo "right b4 the re-direct"; 
    header("location: UI.php"); 
      exit; 
} 
else 
    echo "Your user name/password was not correct pleast TRY AGAIN!!!"; 

} 

Update: In risposta alle dichiarazioni circa gli echi avrei il problema possibile che sto elaborando la mia forma nello stesso file e usando echo $ _SERVER [ 'PHP_SELF ']

+1

Ti hanno attivato la segnalazione degli errori? Sei sicuro al 100% che la condizione sia soddisfatta e che l'intestazione sia stata inviata? –

+0

Non è possibile visualizzare la pagina prima della chiamata dell'intestazione. Le tue istruzioni di debug impediscono il reindirizzamento. – JJJ

+0

Sì, ho provato a rimuoverli ma non lo reindirizzano correttamente – cpowel2

risposta

1

Da the docs:

Ricordate che header() deve essere chiamato prima di ogni uscita effettiva viene inviato, sia da normali tag HTML, righe vuote in un file, o da PHP.

Il tuo echo sta causando il reindirizzamento, come qualsiasi altro output inviato prima dell'intestazione.

0

Il reindirizzamento tramite le intestazioni è illegale se qualsiasi contenuto è arrivato. Elimina tutti gli echo e dovrebbe funzionare. Se tu do vuoi che ci sia un messaggio mostrato all'utente prima del reindirizzamento, probabilmente dovrai farlo con JavaScript via location.href.

1

Non è possibile impostare le intestazioni dopo aver emesso del testo, quindi si sposta la chiamata header prima delle istruzioni echo (bene nel proprio caso) o si utilizza output buffering.

37

Io uso questa funzione per il rinvio ...

che opera in tutta situations..even se intestazioni sono già sent..or anche JavaScript è disabilitato ..

function redirect($url) 
{ 
    if (!headers_sent()) 
    {  
     header('Location: '.$url); 
     exit; 
     } 
    else 
     { 
     echo '<script type="text/javascript">'; 
     echo 'window.location.href="'.$url.'";'; 
     echo '</script>'; 
     echo '<noscript>'; 
     echo '<meta http-equiv="refresh" content="0;url='.$url.'" />'; 
     echo '</noscript>'; exit; 
    } 
} 
+2

questa è roba buona .. – Laurent

+0

Lavora perfettamente grazie !!! –

+0

Grande. funziona come un fascino. – amilaishere

0

Probabilmente avete già inviato il contenuto al browser prima che venga inviata l'intestazione php. Questo può essere solo un \ n dopo un tag php di chiusura (?>)

Per trovare il luogo in cui viene generato l'output indesiderato può essere difficile su progetti più grandi o lunghe code di classi che si estendono l'un l'altro. per trovare il problema si può fare questo:

error_reporting(E_ALL); 
ini_set("display_errors", 1); 
header("Location: https://mydomain.com/myLoginAdress/"); 
die(); 

Strict segnalazione degli errori getterà la linea e il file di output.

2

Utilizzando il codice qui sotto abbiamo reindirizzare pagina

$page = $_SERVER['REQUEST_URI']; 
echo '<script type="text/javascript">'; 
echo 'window.location.href="'.$page.'";'; 
echo '</script>'; 
0
echo "<script>window.location.href='yourPage.php'</script>";