Система входа в PHP

Поэтому у меня небольшая проблема с моей системой входа в PHP. При попытке входа в систему он продолжает указывать неверное имя пользователя / пароль, хотя он хранится в базе данных и существует неопределенный индекс. Страница авторизации

<?php include("header.php"); ?>
<?php
if(isset($_POST["user_login"]) && isset($_POST["password_login"])){
$user_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["user_login"]);
$password_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["password_login"]);
$password_login_md5 = md5($password_login);
$sql = mysql_query("SELECT id FROM `users` WHERE username='$user_login'AND       password='$password_login_md5' LIMIT 1");

$userCount = mysql_num_rows($sql);
if($userCount == 1){
while($row = mysql_fetch_array($sql)){
  $id = $row["id"];
}
if (isset($_SESSION["user_login"]) && isset($_POST["user_login"])){
$_SESSION["user_login"] = $user_login;
header("Location: home.php");
exit();
}
}else{
echo '<div class="echo">Username/Password is incorrect</div>';
exit();
}
}
?>

Страница заголовка

<?php
mysql_connect("localhost","root") or die("Couldnt connect");
mysql_select_db("pageslip") or die("Couldnt slect db");
?>
<?php
session_start();
if(isset($_SESSION['user_login'])){
$user = $_SESSION["user_login"];
}
else
{
//header("Location: home.php");
}
?>

Страница выхода

<?php
session_start();
session_destroy();
header("Location: index.php");
?>

Домашняя страница

<?php
include("header.php");
if(isset($_SESSION["user_login"]) && isset($_POST["user_login"])){
echo $_SESSION["user_login"];
}
?>

В настоящее время я пока не беспокоюсь о хэше паролей, и было бы полезно остановиться на теме проблемы и получить прямое решение.

2 ответа

Решение

Примечание: я использую mysqli_ вместо mysql_, но не думаю, что mysqli_ автоматически защитит ваши приложения. Вы должны узнать больше.

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

Форма сортировки, которую я создал, здесь

<form action="login.php" method="POST">
<!--As i gave the file name login.php, if your file name is different you 
can change it.-->
    Username:<input type="text" name="user_login"><br/>
    Password:<input type="password" name="password_login"><br>
    <input type="submit">
</form>

Теперь отсюда начинается ваш код

Для Login.php (вы можете изменить имя файла., Как вы хотите)

<?php include("header.php"); ?>
<?php
if(isset($_POST["user_login"]) && isset($_POST["password_login"])){
$user_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["user_login"]);
$password_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["password_login"]);
//$password_login_md5 = md5($password_login); i removed this line as you say you 
//are not worry about the security, at this time. 
$sql = mysqli_query($con,"SELECT id FROM `users` WHERE username='$user_login'AND password='$password_login' LIMIT 1")or die(mysqli_error($con));

$userCount = mysqli_num_rows($sql);
if($userCount == 1){
while($row = mysqli_fetch_array($sql)){
  $id = $row["id"];

  $_SESSION['user_login']=$_POST['user_login'];
}
if (isset($_SESSION["user_login"]) && isset($_POST["user_login"])){
$_SESSION["user_login"] = $user_login;
header("Location: home.php");
exit();
}
}else{
echo '<div class="echo">Username/Password is incorrect</div>';
exit();
}
}
?>

** Причина:** это всегда показывает это сообщение, что имя пользователя / пароль неверны, это потому, что то, как вы закодировали, означает, что ваш запрос ничего не возвращает. не потому, что вы ввели неправильное имя пользователя или пароль в вашей форме. это только означает, что вы не выполнили свой запрос должным образом.

** Заголовок страницы.**

<?php
$con=  mysqli_connect('localhost', 'root', '', 'pageslip') or die(mysqli_error($con));

?>
<?php
session_start();
if(isset($_SESSION['user_login'])){
$user = $_SESSION["user_login"];
}
else
{
//header("Location: home.php");
}
?>

Страница выхода.

<?php
session_start();
session_destroy();
header("Location: index.php");
?>

Домашняя страница

<?php
include("header.php");
if(isset($_SESSION["user_login"]) ){
echo $_SESSION["user_login"];
}

?>

//**Note: ** I change this line 
//if(isset($_SESSION["user_login"]) && isset($_POST["user_login"])){ 
//to this if(isset($_SESSION["user_login"]) ){
//Means i removed this part && isset($_POST["user_login"]) 
//Reason i am explaining below

Reason:: на домашней странице вы не можете получить доступ к переменной $_post, переменная. Запрос Post доступен только для страницы действий, например, если form action="loging.php", вы не можете получить к ней доступ ни на одной другой странице.

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

Чтобы понять это лучше, сделайте две вещи на домашней странице, сначала используйте var_dump($_session); и проверьте результат, он произведет массив, и используйте var_dump($_post); это даст результат, подобный этому массиву (0) { } означает, что в $ _post нет ничего для домашней страницы.

Надеюсь, вы поняли идею.

И у вас есть еще одна проблема неопределенного индекса.

Это не большая проблема. Я предполагаю, что у вас есть эта проблема в разделе формы. Это просто означает, что вы не определили индекс. просто добавьте это в верхней части формы, как это. $ _POST ['user_login']="";

он исчезнет, ​​повторите это для каждой неопределенной ошибки индекса.

Вы не устанавливаете свою сессию. Вы только читаете это. Из-за этого ваше выражение if возвращает false и отображается сообщение об ошибке.

Другие вопросы по тегам