#php
#php
Вопрос:
Добрый день, выполняя свой проект, я застрял на странице входа в систему.
Это может быть действительно тривиальный вопрос или, может быть, даже дубликат, но я не могу найти никакого решения в Интернете.
По какой-то причине мой php-скрипт просто пропускает мою форму входа и продолжает создавать сеанс и перенаправлять на index.php .
Вот мой php-скрипт для проверки наличия электронной почты и пароля в базе данных:
if(isset($_POST['login'])) {
require 'connect.php';
$email = $_POST['email'];
$password = $_POST['password'];
$select_userdata = "select * from users where password ='$password' AND email = '$email'";
$run_check = mysqli_query($dbconfig, $select_userdata);
$check_user = mysqli_num_rows($run_check);
/**Error part**/
if ($check_user == 0) {
echo "<script>alert('Password or email is incorrect')</script>";
echo "<script>window.open('login.php','_self')</script>";
} else {
$_SESSION['email'] = $email;
echo "<script>alert ('You Have Been Logged in')</script>";
header('Location: index.php');
exit;
}
}
if(isset($_GET['logout'])) {
unset($_SESSION['email']);
}
По какой-то причине скрипту все равно, есть ли у меня адрес электронной почты и пароль в базе данных или нет. Он «притворяется», что есть такой адрес электронной почты и пароль, и переходит к $ _SESSION[’email’] = $email;
Мой вопрос в том, что я делаю не так, и как мне это исправить?
Комментарии:
1. вы вызывали session_start() на этой странице? если нет, он будет только притворяться, что что-то делает с $ _SESSION
2. да, я вызвал session_start() в начале функции. По какой-то причине я не могу обновить код, но, пожалуйста, поверьте мне на слово. 🙂
3. потому
$_SESSION['email'] = $email;
что и перенаправление НЕ находятся внутриif ($check_user == 0) {...}
, поэтому они всегда происходят после чтения базы данных, несмотря ни на что. Предупреждения Javascript не останавливают процесс, как вызовthrow new Exception("");
в C #. Либо вставьтеexit()
,if ($check_user == 0) {
либо вставьте другой материалif ($check_user == 0) {
4. или, скорее, поместите другой материал в else
5. это действительно странно. Я вставил другие данные в else, но теперь он говорит, что адрес электронной почты или пароль неверны. Я изменил код, должно ли это выглядеть так?
Ответ №1:
Проблема в вашей логике, а не в вашем коде. Значение $check_user равно 0 или больше, для вашего кода разницы нет. он всегда достигает строки $ _SESSION [’email’] = $email; . Попробуйте это:
<?php
session_start();
include'functions/dbconfig.php';
if(isset($_POST['login'])) {
require 'functions/connect.php';
$email = $_POST['email'];
$password = md5($_POST['password']);
$select_userdata = "select * from users where password ='$password' AND email = '$email'";
$run_check = mysqli_query($dbconfig, $select_userdata);
$check_user = mysqli_num_rows($run_check);
if ($check_user == 0)
{
echo "<script>alert('Password or email is incorrect')</script>";
echo "<script>window.open('login.php','_self')</script>";
}
else
{
$_SESSION['email'] = $email;
echo "<script>alert ('You Have Been Logged in')</script>";
header('Location: index.php');
exit;
}
}
if(isset($_GET['logout'])) {
unset($_SESSION['email']);
}
?>
Комментарии:
1. По какой-то причине я все еще получаю сообщение об ошибке, что мой пароль или адрес электронной почты неверны.
2. Ошибки нет, просто указано, что пароль или адрес электронной почты неверны. В основном — check_user == 0. Но адрес электронной почты и пароль на 100% верны. Может быть, это потому, что я сохраняю пароль в базе данных в формате md5?
3. Да, вы должны ввести пароль md5 перед вашим sql.
4. Не могли бы вы показать мне, как это сделать в случае входа в систему? Я только что попробовал $passwordmd5 = md5($password); а затем изменил свой запрос: $select_userdata на выбор passwordmd5, но по-прежнему никаких результатов.
5. Я только что все исправил с вашей помощью. Большое вам спасибо. Могу ли я отредактировать ваш код, чтобы сделать его ответом?