Я совершенно не знаком с PDO, поэтому прошу прощения, если я сделал здесь простую ошибку. Кроме того, если об этом ответили ранее. Я искал, но не мог найти. Моя проблема заключается в том, что когда я печатаю сеансы, он печатает «Array ([user_id] => 1)», но имя пользователя и пароль, которые я ввел для user_id 2. Я пробовал это с использованием имени пользователя и пароля, и он по-прежнему дает id 1. Таким образом, я выделил $ user_id до создания сеанса, и это 1. Но я не могу понять, откуда он получает это 1? Потому что в базе данных нет идентификатора 1. Может кто-нибудь пролить некоторый свет на это?PDO возвращает неправильное значение
Вот код из моего входа в файл:
<?php
require 'core.inc.php';
if(isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
if (!empty($username) && !empty($password)) {
$stmt = $db->prepare("SELECT password FROM users WHERE username = ?");
$stmt->bindParam(1, $username);
$hash = $stmt->execute();
$password_verified = password_verify($password, $hash);
if ($password_verified = true) {
$stmt_id = $db->prepare("SELECT id FROM users WHERE username = ?");
$stmt_id->bindParam(1, $username);
$user_id = $stmt_id->execute();
echo $user_id;
$id_num_rows = $stmt_id->rowCount();
if ($id_num_rows == 0) {
echo 'You have entered a wrong password';
}else if($id_num_rows == 1){
$_SESSION['user_id'] = $user_id;
print_r($_SESSION);
}
} else {
echo("Please enter a username and password.");
}
}
}
?>
<!DOCTYPE html>
<header>
</header>
<body>
<form action ="<?php echo $current_file;?>" method="post">
<div class='field'>
<label for="username">Username: </label><input type='text'
name='username'/><br>
</div>
<div class='field'>
<label for ="password">Password: </label><input type='password'
name='password'/>
</div>
<div class='field'>
<label for='remember'>
<input type='checkbox' name="remember" id="remember"/> Remember me
</label>
</div>
<input type='submit' value='Log in'/>
</form>
</body>
</html>
<And here is the code from core.inc.php
<?php
session_start();
require 'connect.inc.php';
ob_start();
$current_file = $_SERVER['SCRIPT_NAME'];
@$http_referer = $_SERVER['HTTP_REFERER'];
function loggedin(){
if(isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])) {
return true;
}else{
return false;
}
}
?>
<Core.inc.php uses connect.inc.php which is added below:
<?php
try {
$db = new PDO('mysql:host=localhost;dbname=goal;charset=utf8','root','');
var_dump($db);
echo 'connected';
}
catch(Exception $e){
echo 'Error 1 has occured';
}
?>
Я не понимаю, что вы принимаете пароль, но не используете его для варификации. – WisdmLabs
Вы не получаете набор результатов PDO ('execute()' этого не делает). Как только вы исправите это (см. Обман), ваш код должен запуститься – Machavity
@Machavity благодарит много. Очень помог. – Niall