Riorganizzare la pagina PHP in modo che l’intestazione sia prima dell’HTML

La mia intestazione non sta reindirizzando alla pagina corretta perché credo di avere elementi HTML prima. Sono nuovo di PHP e ho bisogno di aiuto per riorganizzare la mia pagina, quindi questo non è il caso. Se sostituisco la riga dell’intestazione con

print_r("location.href='changepassword.php?success'"); 

funziona perfettamente, tuttavia so che non è una buona pratica usare JS. Una volta che è stato mostrato l’uno, posso così il resto come nessuno di loro sul mio sito web funziona! Di seguito la mia pagina changepassword.php:

   $value) { if (empty($value) && in_array($key, $required_fields) == true) { $errors[] = 'Fields marked with an asterisk are required'; break 1; } } if ($_POST['current_password'] === $member_data['mem_password']) { if(trim($_POST['password']) !== trim($_POST['password_again'])){ $errors[] = 'Your new passwords do not match'; } else if (strlen($_POST['password'])    

Change Password

  • Current Password*:
  • New Password*:
  • Repeat New Password*:

Questo accordo dovrebbe funzionare. Spostiamo semplicemente la password di modifica if() sopra qualsiasi documento. Nota il comando die() che dice a PHP di interrompere l’elaborazione. Non c’è bisogno di eseguire il resto della sceneggiatura quando abbiamo istruito il browser a continuare altrove.

Come indicato da Dan di seguito, ti consigliamo di assicurarti che i tuoi file include() d non contengano output.

 $value) { if (empty($value) && in_array($key, $required_fields) == true) { $errors[] = 'Fields marked with an asterisk are required'; break 1; } } if ($_POST['current_password'] === $member_data['mem_password']) { if(trim($_POST['password']) !== trim($_POST['password_again'])){ $errors[] = 'Your new passwords do not match'; } else if (strlen($_POST['password']) <6) { $errors[] = 'Your password must be at least 6 characters'; } } else { $errors[] = 'Your current password is incorrect'; } } if(empty($_POST) === false && empty($errors) === true) { change_password($session_mem_id, $_POST['password']); header('Location: changepassword.php?success=1'); die(); } ?>    

Change Password

  • Current Password*:
  • New Password*:
  • Repeat New Password*:

Il tuo header deve andare prima di ogni output. Questo include i tuoi include. include ("storescripts/init.php"); , include ("includes/overall/head.php"); , include ("includes/overall/template_header.php"); qualsiasi output fermerà l’intestazione.

Questa non è una risposta, forse informazioni utili se non lo sai.

Per usare la funzione header() – devi eseguirlo prima di qualsiasi eco, print_r, ecc.

Altre parole: “product of” header(); la funzione deve essere il primo dato inviato al browser.

È ansible utilizzare il buffer di output .

In PHP, le intestazioni devono essere inviate prima del contenuto. Quindi, una volta che hai prodotto qualcosa (include echo , print , ecc., E qualsiasi cosa al di fuori dei blocchi Compresi gli spazi bianchi ), le intestazioni non possono essere modificate.

Tuttavia: ciò che puoi fare è triggersre il buffering dell’output, che invierà tutto l’output in un buffer temporaneo. Quel buffer non verrà emesso finché non lo dici.

Il modello di base è:

 ob_start(); //Turn on output buffering at the // beginning of your script echo "Hello world!"; //Here would be your HTML document if ($redirect) //This would be your condition for redirection header('Location: otherpage.php'); else ob_flush(); //At the very end, send the buffer to the browser 

Ci sono un certo numero di opzioni per terminare il buffering. In questo caso ho semplicemente scaricato l’output usando ob_flush() , ma puoi consultare la documentazione di PHP per varie altre opzioni.