У меня возникла проблема с тем, чтобы этот код работал на веб-сайте, который я хотел бы запустить в ближайшее время. В частности, когда я вхожу в заголовок, он не будет перенаправляться после успешного входа в систему. Я использовал этот код много раз, и у меня никогда не было проблем с ним. Единственная разница в том, что я использую другой сервер и другую базу данных. Вот код, который вызывает у меня проблемы:
<?php /*set all the variables*/ $email = $_POST['email']; $password = sha1($_POST['password']); /* hash the password*/ $conn = mysqli_connect ('servername', 'username', 'password', 'databasename') or die('Error connecting to MySQL server'); /*select the id from the users table that match the conditions*/ $sql = "SELECT id FROM users WHERE email = '$email' AND password = '$password'"; $result = mysqli_query($conn, $sql) or die('Error querying database.'); $count = mysqli_num_rows($result); if ($count == 1) { echo 'Logged in Successfully.'; $row = mysqli_fetch_array($result); session_start(); $_SESSION['user_id'] = $row['id']; /*If true head over to the users table*/ header('location: users_table.php'); } /*If invalid prompt them to adjust the previous entry*/ else { echo '<h2>Invalid Login</h2><br />'; echo '<h2>Click <a href="javascript:history.go(-1)">HERE</a> to go back and adjust your entry.</h2>'; } mysqli_close($conn); ?>
Дело не в правильном подключении, потому что я получаю сообщение «успешный вход», но он не будет перенаправлять вообще.
Спасибо за все ответы, я попытался удалить эхо, но все, что я получаю сейчас, это пустая страница, я подумал, может быть, это браузер, который я использовал, поэтому переключился на другой, и я все еще просто получаю пустую страницу, любые другие предложения?
Вы не можете повторить что-либо перед своим header
.
echo 'Logged in Successfully.';
Это приводит к тому, что вызов header
не работает.
if ($count == 1) { echo 'Logged in Successfully.'; //this statement is creating problem $row = mysqli_fetch_array($result); session_start(); $_SESSION['user_id'] = $row['id']; /*If true head over to the users table*/ header('location: users_table.php'); }
Это происходит потому, что вы эхом отзываете что-то перед заголовком. Вы должны использовать ob_start()
при запуске и ob_end_flush()
в конце документа.
или не эхо перед header()
. Как мы обнаружили, вы не включили ошибку. Поэтому включите ее.
Вы не можете публиковать header
после echo
… если это действительно сработало, вы никогда не увидите текст (он просто перенаправит). (Чтобы исправить удаление / прокомментировать echo
строку)
Также для заголовка местоположения требуется абсолютный / полный URL (хотя многие браузеры, похоже, справляются с относительными URL-адресами).
Если вы хотите сделать это таким образом (покажите какой-то статус перед рукой), используйте переадресацию HTML или Javascript, которая запускается через пару секунд.
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Logged in Successfully.</title> <meta http-equiv="REFRESH" content="5;url=http://www.example.com/users_table.php"></HEAD> <BODY> Logged in Successfully. </BODY> </HTML>
Javascript
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>Logged in Successfully.</title> </HEAD> <BODY onLoad="setTimeout(function() { window.location='http://www.example.com/users_table.php'},5000)"> Logged in Successfully. </BODY> </HTML>
Еще лучше, чтобы страница users_table.php
отображала успешное сообщение для входа и использовала перенаправление заголовка.