#php #web #login #db2 #credentials
#php #веб #аутентификация #db2 #учетные данные
Вопрос:
Я использую php и ibm db2 для создания простой страницы входа. Однако код не обеспечивает желаемых результатов, как ожидалось.
Вот мой код:
if (isset($_POST['login'])) {
$username = ($_POST['username']);
$password = ($_POST['password']);
if (empty($username)) {
array_push($errors, "Username is required");
}
if (empty($password)) {
array_push($errors, "Password is required");
}
elseif (count($errors)==0) {
//$password = md5($password);
$query = "SELECT * FROM people WHERE username = '$username' AND password = '$password'";
$results = db2_exec($db, $query);
if (db2_num_rows($results)) {
$_SESSION['username'] = $username;
$_SESSION['success'] = "Logged in successfully";
//echo "<script type='text/javascript'>window.location.href = 'index.php';</script>";
header('Refresh: 0; URL=index.php', true, 301);
}else{
array_push($errors, "Wrong username/password combination, Please try again.");
}
}
}
Комментарии:
1. Не пишите «.. не работает …». Вместо этого, пожалуйста, напишите, что вы ожидали , а также что на самом деле происходит.
2. И не храните простые пароли в db.
3. Какую ошибку вы получаете? пожалуйста, опишите ошибку
4. Вы не можете использовать db2_num_rows() для получения размера результирующего набора, это ваша ошибка. Вы должны протестировать результат действия выборки.
5. @mao ok отредактировано выше, спасибо
Ответ №1:
Вы не можете использовать db2_num_rows
() для получения количества строк в результирующем наборе.
Это db2_num_rows()
сообщает о количестве вставленных / обновленных / удаленных строк, на которые повлияла самая последняя инструкция insert / update / delete.
Если вы хотите проверить наличие хотя бы одной строки в результирующем наборе, используйте один из документированных методов для извлечения строки из результирующего набора. Эти функции вернут true, если есть строка, в противном случае вернут false, если строки нет или их больше нет.
Рассмотрите возможность использования подготовленной инструкции в соответствии с примерами, чтобы запрос компилировался только один раз и выполнялся много раз.
Ответ №2:
теперь запрос решен, спасибо всем вам! Я публикую работающий код здесь;
if (isset($_POST['login'])) {
$username = ($_POST['username']);
$password = ($_POST['password']);
if (empty($username)) {
array_push($errors, "Username is required");
}
if (empty($password)) {
array_push($errors, "Password is required");
}
elseif (count($errors)==0) {
$password = md5($password);
$query = "SELECT * FROM people WHERE username = '$username' AND password = '$password'";
$results = db2_exec($db, $query);
$row = db2_fetch_assoc($results);
if ($row['username']== $username amp;amp; $row['password'] == $password) {
$_SESSION['username'] = $username;
$_SESSION['success'] = "Logged in successfully";
header('Refresh: 0; URL=index.php', true, 301);
}else{
array_push($errors, "Wrong username/password combination, Please try again.");
}
}
}