header () non reindirizzando automaticamente a un'altra pagina indice

quando faccio clic su login .. non mi reindirizza automaticamente a home.php, devo aggiornare la pagina per farlo redirect. Suppongo che la prima intestazione () funzioni perfettamente bc e stia rispondendo a un aggiornamento della pagina. ciò che non funziona è la seconda intestazione () all'interno dell'istruzione if. Che cosa sto facendo di sbagliato? Grazie mille per il vostro aiuto.

login.php

<?php session_start(); if($_SESSION['user']!=""){ header("Location: home.php"); } include_once 'db.php'; if(isset($_POST['login'])){ $uname = mysqli_real_escape_string($conn, $_POST['uname']); $upass = mysqli_real_escape_string($conn, $_POST['upass']); $sql = "SELECT * FROM users WHERE username='$uname'"; $result = $conn->query($sql); $row = $result->fetch_assoc(); if($row['password']==$upass){ $_SESSION['user'] = $row['username']; header("Location: home.php"); } else{ echo "Unable to log in, please try again."; } } ?> <html> <head> <meta charset="utf-8"> </head> <body> <form method="post"> <input type="text" name="uname" placeholder="User Name" required /><br> <input type="text" name="upass" placeholder="Password" required /><br> <button type="submit" name="login">login</button> </form> </body> </html> 

home.php

 <?php session_start(); if(isset($_POST['logout'])) { session_destroy(); unset($_SESSION['user']); header("Location: index.php"); } ?> Welcome <?php echo $_SESSION['user'];?> <html> <head> <meta charset="utf-8"> </head> <body> <form method="post"> <button type="submit" name="logout">Sign Out</button> </form> </body> 

db.php

 <?php $conn = new mysqli(); $conn->connect('localhost', 'singta', 'Lante1', 'wuzzdb'); if ($conn->connect_errno) { echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " . $mysqli->connect_error; } ?> 

index.php

 <?php session_start(); if($_SESSION['user']!=""){ header("Location: home.php"); }else{ echo "You're not logged In"; } ?> <html> <head> <meta charset="utf-8"> </head> <body> <br><br><br> <a href="login.php">Login Here</a> </body> 

Una chiamata di function header() invia un'intestazione al browser indicandogli where andare, ma non interrompe l'esecuzione dello script PHP. Quindi, dopo una chiamata a header() usata per il reindirizzamento, in quasi tutti i casi dovrebbe essere necessario exit; subito dopo.

 <?php session_start(); if($_SESSION['user']!=""){ header("Location: home.php"); exit; } 

Anche sulla tua seconda chiamata a header() .

Nota aggiuntiva

Dovresti anche verificare che $_SESSION['user'] esista prima di provare a farlo in questo modo

 session_start(); if( isset($_SESSION['user']) && $_SESSION['user']!=""){ header("Location: home.php"); exit; } 

Ciò deve essere eseguito ovunque si verifichi per l' user nella session, poiché se non sono stati registrati non esiste effettivamente.

Questo è uno dei problemi con l'apprendimento di PHP su un server LIVE in cui la visualizzazione degli errori è distriggersta. Quindi mentre stai imparando o anche dopo, mentre sviluppi uno script su un server live, ricorda di aggiungere queste 2 linee all'inizio degli script che stai sviluppando

 <?php error_reporting(E_ALL); ini_set('display_errors', 1); 

Ma poi ricorda di rimuovere quando uno script funziona come una ctriggers forma per mostrare a un utente questo tipo di errore.