#php #mysql #forms #pdo
Вопрос:
Я создал систему входа в систему с целью входа в систему пользователя, найдя соответствующий хэшированный пароль в базе данных, но когда страница запущена, она не работает и показывает ошибку сервера «в настоящее время не в состоянии обработать этот запрос». Цель состоит в том, чтобы успешно войти в систему пользователя и распечатать приветственное сообщение, как только я увижу этот результат, я планирую перенаправить его на измененную домашнюю страницу. При попытке отладки я вижу, что проблема заключается в коде, который я сделал, пытаясь подключиться к таблице в моей базе данных с помощью метода PDO. **ОБНОВЛЕНИЕ: Я отредактировал свой код, и теперь он работает, но когда я ввожу правильные данные для входа из своей базы данных, все равно появляется сообщение об ошибке «Сведения об ошибке входа» * * Ниже приведен мой код
PHP-код:
<?php
session_start();
global $email;
global $emailErr;
global $pswError;
if(isset($_POST ['login'])) {
include("connectdb.php"); //connecting to Database
$email = $_POST['email']; //creating email and password variable from the form
$psw = $_POST['psw'];
if (empty($email) || empty($psw)) {
$err = "<p class = error > Please enter your personal email and your password </p>";
} else {
try{
$query = "SELECT * FROM organiser WHERE email = ?";
$result = $db->query($query);
$result->execute(array($email));
$user_info = $result->fetchAll();
// $staff = $user_info['staff'];
if (!empty($user_info)) {
if (password_verify($_POST['psw'], $user_info['password']) {
$_SESSION['name'] = $user_info['name'];
//$_SESSION["loggedIn"]=true;
$welcome = "<p class = success> success </p>";
header("location: home.php")
exit();
} else {
$message = "<p class = error> Email Or Password is wrong </p> ";
echo $message;
}
} else {
$message = "<p class = error> Email Or Password is wrong </p> ";
echo $message;
}
} catch (PDOException $ex){
//this catches the exception when it is thrown
echo "Login Error details:". $ex->getMessage();
}
}
}
мой connectdb.php код:
<?php # connectdb.php
$host = "localhost";
$dbname="u_180014367_db";
$username = "";
$password = "";
// Creates a PDO object called $db and establishes the MySQL database connection
try{
$db = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $ex) {
?>
<p>Sorry, a database error occurred.</p>
<p> Error details: <em> <?= $ex->getMessage() ?> </em></p>
<?php
}
?>
Комментарии:
1. Проверьте журналы вашего сервера для получения дополнительной информации. Однако вы используете неопределенный
$sth
для выполнения запроса вместо$result
, который вы выполнили вместо подготовленного в предыдущей строке.2. спасибо, я отредактировал его, но логин не работает, когда я ввел правильные данные для входа
3. Предупреждение: Будьте осторожны с вашим кодом, следуйте этому руководству по ПРЕДОТВРАЩЕНИЮ SQL-ИНЪЕКЦИЙ , вам не хватает защиты для вашего
$_POST['email'];
и$psw = $_POST['psw'];
4. @bolaOyetade
$result = $db->query($query);
должно быть$result = $db->prepare($query);
. Поскольку вы не готовите запрос, PDO не знает, как заполнить заполнитель.