Как перенаправить после успешного входа в систему? [PHP]

#php #login

#php #аутентификация

Вопрос:

Я создал систему входа в систему. Страница регистрации работает как шарм. Но есть некоторые проблемы со страницей входа. Когда я пытаюсь войти в систему, он регистрирует меня, но остается на той же странице входа. Я имею в виду, что на странице входа в систему нет видимых изменений даже после входа в систему. Я хочу, чтобы он перенаправлял после успешного входа в систему, я пробовал заголовки, но по какой-то странной причине это не сработало.

Мой код (PHP на странице):

 <?php  //Start the Session
session_start();
 require('connect.php');
//3. If the form is submitted or not.
//3.1 If the form is submitted
if (isset($_POST['username']) and isset($_POST['password'])){
//3.1.1 Assigning posted values to variables.
$username = $_POST['username'];
$password = $_POST['password'];
//3.1.2 Checking the values are existing in the database or not
$query = "SELECT * FROM `user` WHERE username='$username' and password='$password'";

$result = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($result);
//3.1.2 If the posted values are equal to the database values, then session will be created for the user.
if ($count == 1){
$_SESSION['username'] = $username;
header("location:redirectafterlogin.php"); //header to redirect, but doesnt work
}else{
//3.1.3 If the login credentials doesn't match, he will be shown with an error message.
echo "Invalid Login Credentials.";
}
}

?>    
  

HTML на странице:

 <title> Login</title>
<link rel="stylesheet" type="text/css" href="usr_style.css" />
</head>
<body>
<!-- Form for logging in the users -->

<div class="register-form">

<p>Please login to continue</p>

<h1>Login</h1>
<form action="login.php" method="POST">
    <p><label>User Name : </label>
    <input id="username" type="text" name="username" required placeholder="username" /></p>

     <p><label>Passwordamp;nbsp;amp;nbsp; : </label>
     <input id="password" type="password" name="password" required placeholder="password" /></p>

    <a class="btn" href="register.php">Register</a>
    <input class="btn" type="submit" name="submit" value="Login" />
    </form>
</div>
</body>
</html>
  

Что я делаю не так?

Редактировать:

Redirectafterlogin.php код (это в основном гостевая книга):

 <body>
<div class="main">
<br>


        <div id="title"><h2>Post</h2></div>
        <br>
    <div id="f">
    <form id="form1" name="form1" method="post" action="addpost.php">

    <table id="g">

        <td>Post</td>
        <td><textarea name="comment" placeholder="Please type your post here...." rows=10 cols=50 id="comment"></textarea></td>
    </tr>
    <tr>
        <td>amp;nbsp;</td>
        <td><input id="btn" type="submit" name="Submit" value="Post" /> <input id="btn" type="reset" name="Submit2" value="Reset" /></td>
    </tr>
    </table>

    </form>

</div>
<hr>



<?php

$host=""; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name=""; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect server ");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name ORDER BY ID DESC LIMIT 50";
$result=mysql_query($sql);

while($rows=mysql_fetch_array($result)){
?>


<div id="post_info">
<br>


<div id="author">
Name:
<?php echo htmlspecialchars($rows['name']); ?> 
</div>

<div id="time">
Time: <?php echo htmlspecialchars($rows['datetime']); ?>
</div>

<br>

<div id="post">
<pre><?php echo htmlspecialchars($rows['comment']); ?></pre>
</div>

</div>
<br>

<?php
}
mysql_close(); //close database
?>
  

Ошибка:

Предупреждение: session_start(): не удается отправить сеансовые cookie-заголовки, уже отправленные (вывод начался с /customers/7/e/5/sattapesatta.com/httpd.www/login.php:5) в /customers/7/e/5/sattapesatta.com/httpd.www/login.php в строке 6 Предупреждение: session_start(): не удается отправить ограничитель кэша сеанса -заголовки уже отправлены (вывод начался с /customers/7/e/5/sattapesatta.com/httpd.www/login.php:5) в /customers/7/e/5/sattapesatta.com/httpd.www/login.php в строке 6 1 Предупреждение: невозможно изменить информацию заголовка — заголовки, уже отправленные (вывод начался с /customers/7/ e / 5/sattapesatta.com/httpd.www/login.php:5 ) в /customers/7/e/5/sattapesatta.com/httpd.www/login.php в строке 20

Комментарии:

1. Попробуйте header("Location: http://www.yoursite.com/redirectafterlogin.php"); использовать полный http вызов.

2. Ммм ..?! Вы прочитали вопрос? Я использовал заголовки, но по какой-то странной причине они не работают. Любые другие способы, которые я могу перенаправить? Или я помещаю заголовок не в то место?

3. Ммм…. Да, я прочитал вопрос. Это ваш полный код или на той же странице есть еще что-то, о чем мы не знаем? Вы говорите, что ваш вход в систему прошел успешно.

4. Я думаю, что я разместил заголовок не в том месте. Что вы думаете?

5. Сделайте var_dump($count); или echo $count; сразу после $count = mysql_num_rows($result); того, как посмотрите, что проходит. Я предполагаю, что ваш логин не работает, как вы думаете. Добавьте сообщения об ошибках в начало вашего файла (ов) error_reporting(E_ALL); ini_set('display_errors', 1);

Ответ №1:

Когда вы хотите выполнить перенаправление с помощью заголовка функции, вы должны написать его правильно, чтобы он работал.

 header('Location: ...');
  

Если вы не используете заглавную букву и пробел после двоеточия, это не сработает. Пожалуйста, прочитайте руководство по php.net .

(Редактировать)
Я также видел в комментариях, чтобы попытаться добавить полный путь, это не обязательно, чтобы заставить его работать.

Комментарии:

1. «Я также видел в комментариях попытку добавить полный путь, это необязательно, чтобы заставить его работать». То же самое касается верхнего регистра L . Недопустимым является header(' Location: ...'); или header(' location: ...'); с пробелом перед Location или location . Лучше сначала задать вопрос, а затем ответить.

2. Не обязательно, чтобы в местоположении была прописная буква L или пробел, необходимый после двоеточия, я использую последнюю версию PHP. Не уверен насчет более старой версии PHP.

Ответ №2:

Попробуйте это

 заголовок ("Местоположение: redirectafterlogin.php ");
 выход;

Также из документации PHP

Помните, что header() должен вызываться перед отправкой любого фактического вывода, будь то с помощью обычных HTML-тегов, пустых строк в файле или из PHP. Очень распространенной ошибкой является чтение кода с включенными или требующими функциями или другой функцией доступа к файлам и наличие пробелов или пустых строк, которые выводятся перед вызовом header() . Та же проблема существует при использовании одного файла PHP / HTML.

http://www.php.net/manual/en/function .header.php

Ответ №3:

Самый простой способ:

  1. Поместите это перед любым HTML-кодом на вашей странице (перед этим кодом не должно быть ни единого пробела) <? php ob_start(); ?>

  2. Используйте это — оно чувствительно к регистру- <?php header("Location: youraddress.html");?>

  3. Закройте его, когда закончите <?php ob_end_flush(); ?>

Ответ №4:

Удалите пробелы и новые строки перед заголовком:

 session_start();
 require('connect.php');
  

Это должно быть:

 session_start();
require('connect.php'); // whitespace removed
  

И ваш:

 $query = "SELECT * FROM `user` WHERE username='$username' and password='$password'";

$result = mysql_query($query) or die(mysql_error());
  

Должно быть просто:

 $query = "SELECT * FROM `user` WHERE username='$username' and password='$password'";
$result = mysql_query($query) or die(mysql_error());
  

Комментарии:

1. «Должно быть просто:» Чего мне здесь не хватает? Они оба одинаковые. Кроме того, // whitespace removed пробел предназначен для «выше», а не ниже session_start();

2. Я просто удалил пробелы. Возможно, вы получаете сообщение об ошибке «заголовки уже отправлены». Перед заголовками, такими как пробелы или следующие строки, не должно быть выходных данных.

3. Я попытался удалить пробелы, но все то же самое.

4. Я не получаю никаких ошибок. Страница не меняется. Похоже, что он почти перезагрузился.

5. Вы можете проверить, отправлены ли уже заголовки, замените перенаправление на : if (headers_sent()) { die("Redirect failed."); }