Почему мой код неверно проверяет имя пользователя и пароль? Все это позволяет происходить бесплатно вход всех комбинаций пользователь + пароль

Я понятия не имею, почему это позволяет бесплатный вход для любой комбинации пароля и имени пользователя, я перепробовал все, что мог, но безрезультатно. Малейшая помощь будет оценена. Php здесь должен выводиться прямо в форму под ним.

<?php
if (isset($_POST['name'])) {

$username = $_POST['name'];
$apassword = $_POST['password'];

$host = "127.0.0.1";
$user = "root";
$password = "";
$database = "test_site";
$table = "admin";

$link = mysqli_connect($host, $user, $password, $database);

if (!$link) {
echo "Error: Unable to connect to MySQL.";
exit;
}

$query = "SELECT first_name, last_name, password FROM $table WHERE username='$username' AND password='$apassword'";
$result = mysqli_query($link, $query);
if (mysqli_num_rows($result)==1) {
$row = mysqli_fetch_assoc($result);
$first_name = $row['first_name'];
$last_name = $row['last_name'];
}
mysqli_close($link);

echo "Hello, " . $_POST['name'] . ".";
} else {
$error = "Your Login Name or Password is invalid";
?><form name="login" method="POST" action="index.php">
<table align="center">
<tr>
<td><font size="2">Username:</font></td>
<td><input size="11" type="username" name="name" placeholder="Username" required></td>
</tr>
<tr>
<td><font size="2">Password:</font></td>
<td><input size="11" type="password" name="password" placeholder="Password" required></td>
</tr>
<tr>
<td><input type="submit" value="Login"></td>
</tr>
</table>
</form>

<?php
}
?>

-1

Решение

Если вы видите сообщение об успехе для всех неверных паролей, это должно быть связано с логикой, которую вы написали. Пожалуйста, смотрите ниже код:

    if (mysqli_num_rows($result)==1){
//assume only one record found matching the username password pair
$row = mysqli_fetch_assoc($result);
$first_name = $row['first_name'];
$last_name = $row['last_name'];
echo "Hello, " . $_POST['name'] . ".";
}else{
$error = "Your Login Name or Password is invalid";
}
mysqli_close($link);
1

Другие решения

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

if(!$result){
echo "Incorrect username or password";
}
else{
echo "Hello, " . $_POST['name'] . ".";
}

Переменная $resultДо тех пор, пока не будет получен результат, будет возвращено значение false, поэтому в основном он напечатает «Hello», если найдет те учетные данные, которые вы передали в запросе, и «Неверное имя пользователя или пароль», если это не так.

Я также рекомендую вам проверить это: Как я могу предотвратить SQL-инъекцию в PHP? а также Сводка функций расширения MySQLi а также для более сложных обработок.

Я надеюсь, что это помогло вам 🙂

1

По вопросам рекламы [email protected]