#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.
Ответ №3:
Самый простой способ:
-
Поместите это перед любым HTML-кодом на вашей странице (перед этим кодом не должно быть ни единого пробела)
<? php ob_start(); ?>
-
Используйте это — оно чувствительно к регистру-
<?php header("Location: youraddress.html");?>
- Закройте его, когда закончите
<?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."); }