У меня есть страница входа в систему, которую я создал с помощью php, и у меня возникла проблема с тем, чтобы заставить меня перейти на страницу администратора после того, как я вошел в систему правильно. Я знаю, что логин, который я использую, правильный, поскольку я только что создал его, и если он ошибается, он должен сказать мне. Однако, как только я вхожу в систему, вся страница просто пустая, и веб-адрес говорит, что я все еще на странице входа, а не на админа.
Я проверил журнал ошибок и в нем говорится: «Предупреждение PHP: невозможно изменить информацию заголовка – уже отправленные заголовки (вывод запущен на /admin/login.php:6) в /admin/includes/functions.php в строке 4"
Это код, к которому относится журнал ошибок:
function redirect_to($new_location) { header("Location: " . $new_location); exit; }
Я не понимаю, что указывает ошибка. Я использовал этот точный код раньше, когда узнал, как создавать страницы входа и администрирования, и у меня не было никаких проблем, когда я тестировал его, используя WAMP на своем компьютере. Теперь, когда я положил его на сервер своего сайта, эта ошибка появляется. Я не уверен, где начать поиск неисправностей, потому что, если я выберу эту функцию, тогда она не будет перенаправляться вообще. Любая помощь будет оценена супер!
Вот основной код, который я использую для страницы входа, если это помогает:
<?php require_once("includes/session.php"); ?> <?php require_once("includes/db_connection.php"); ?> <?php require_once("includes/functions.php"); ?> <?php require_once("includes/validation_functions.php"); ?> <?php $username = ""; if (isset($_POST['submit'])) { // Process the form // validations $required_fields = array("username", "password"); validate_presences($required_fields); if (empty($errors)) { // Attempt Login $username = $_POST["username"]; $password = $_POST["password"]; $found_admin = attempt_login($username, $password); if ($found_admin) { // Success // Mark user as logged in $_SESSION["admin_id"] = $found_admin["id"]; $_SESSION["username"] = $found_admin["username"]; redirect_to("http://thehummingbirdplace.com/admin/admin.php"); } else { // Failure $_SESSION["message"] = "Username/password not found."; } } } else { // This is probably a GET request } // end: if (isset($_POST['submit'])) ?> <?php $layout_contect = "admin"; ?> <?php include("includes/layouts/header.php"); ?> <div id="main"> <div id="navigation"> </div> <div id="page"> <?php echo message(); ?> <?php echo form_errors($errors); ?> <h2>Login</h2> <form action="login.php" method="post"> <p>Username: <input type="text" name="username" value="<?php echo htmlentities($username); ?>" /> </p> <p>Password: <input type="password" name="password" value="" /> </p> <input type="submit" name="submit" value="Submit" /> </form> </div> </div> <?php include("includes/layouts/footer.php"); ?>
Дело в том, что функция заголовка должна вызываться до того, как какой-либо вывод будет отправлен в браузер.
Попробуйте использовать это вместо заголовка ():
echo '<meta HTTP-EQUIV="REFRESH" content="0; url='.$new_location.'">';
Ваш код отправляет пустые строки, которые квалифицируются как текст, отображаемый браузером.
Требование, чтобы информация заголовка отправлялась перед любым текстом, подлежащим визуализации, и команда перенаправления отправляется в заголовок.
Посмотрите на этот код.
<?php require_once("includes/session.php"); ?> <?php require_once("includes/db_connection.php"); ?> <?php require_once("includes/functions.php"); ?> <?php require_once("includes/validation_functions.php"); ?> <?php $username = ""; if (isset($_POST['submit'])) { // Process the form : { ?>
В строке 5 сегмента кода есть пустая строка. Вы должны удалить это, чтобы передать заголовок.
Будьте внимательны и для вывода в прилагаемые файлы. Если вы не уверены или не контролируете, переместите вызовы require_once () после перенаправления.
Вы пропускали пустые строки каждый раз, когда вы закрывали свой php-код, и вводите новую строку, что заставляет его рассматривать как строку, которая была эхом. Если вы не отгоняете что-либо в остальной части включенных файлов, это должно работать, я также рекомендую добавить exit (); после перенаправления.
<?php require_once("includes/session.php"); require_once("includes/db_connection.php"); require_once("includes/functions.php"); require_once("includes/validation_functions.php"); $username = ""; if (isset($_POST['submit'])) { // Process the form // validations $required_fields = array("username", "password"); validate_presences($required_fields); if (empty($errors)) { // Attempt Login $username = $_POST["username"]; $password = $_POST["password"]; $found_admin = attempt_login($username, $password); if ($found_admin) { // Success // Mark user as logged in $_SESSION["admin_id"] = $found_admin["id"]; $_SESSION["username"] = $found_admin["username"]; redirect_to("http://thehummingbirdplace.com/admin/admin.php"); } else { // Failure $_SESSION["message"] = "Username/password not found."; } } } else { // This is probably a GET request } // end: if (isset($_POST['submit'])) $layout_contect = "admin"; include("includes/layouts/header.php"); ?> <div id="main"> <div id="navigation"> </div> <div id="page"> <?php echo message(); ?> <?php echo form_errors($errors); ?> <h2>Login</h2> <form action="login.php" method="post"> <p>Username: <input type="text" name="username" value="<?php echo htmlentities($username); ?>" /> </p> <p>Password: <input type="password" name="password" value="" /> </p> <input type="submit" name="submit" value="Submit" /> </form> </div> </div> <?php include("includes/layouts/footer.php"); ?>
в<?php require_once("includes/session.php"); require_once("includes/db_connection.php"); require_once("includes/functions.php"); require_once("includes/validation_functions.php"); $username = ""; if (isset($_POST['submit'])) { // Process the form // validations $required_fields = array("username", "password"); validate_presences($required_fields); if (empty($errors)) { // Attempt Login $username = $_POST["username"]; $password = $_POST["password"]; $found_admin = attempt_login($username, $password); if ($found_admin) { // Success // Mark user as logged in $_SESSION["admin_id"] = $found_admin["id"]; $_SESSION["username"] = $found_admin["username"]; redirect_to("http://thehummingbirdplace.com/admin/admin.php"); } else { // Failure $_SESSION["message"] = "Username/password not found."; } } } else { // This is probably a GET request } // end: if (isset($_POST['submit'])) $layout_contect = "admin"; include("includes/layouts/header.php"); ?> <div id="main"> <div id="navigation"> </div> <div id="page"> <?php echo message(); ?> <?php echo form_errors($errors); ?> <h2>Login</h2> <form action="login.php" method="post"> <p>Username: <input type="text" name="username" value="<?php echo htmlentities($username); ?>" /> </p> <p>Password: <input type="password" name="password" value="" /> </p> <input type="submit" name="submit" value="Submit" /> </form> </div> </div> <?php include("includes/layouts/footer.php"); ?>