Я понятия не имею, почему это позволяет бесплатный вход для любой комбинации пароля и имени пользователя, я перепробовал все, что мог, но безрезультатно. Малейшая помощь будет оценена. 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
}
?>
Если вы видите сообщение об успехе для всех неверных паролей, это должно быть связано с логикой, которую вы написали. Пожалуйста, смотрите ниже код:
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);
Вы пропускаете проверку самостоятельно. Вы просто запрашиваете и после этого показываете сообщение Hello, так что это будет очень простой подход, чтобы направлять вас:
if(!$result){
echo "Incorrect username or password";
}
else{
echo "Hello, " . $_POST['name'] . ".";
}
Переменная $result
До тех пор, пока не будет получен результат, будет возвращено значение false, поэтому в основном он напечатает «Hello», если найдет те учетные данные, которые вы передали в запросе, и «Неверное имя пользователя или пароль», если это не так.
Я также рекомендую вам проверить это: Как я могу предотвратить SQL-инъекцию в PHP? а также Сводка функций расширения MySQLi а также для более сложных обработок.
Я надеюсь, что это помогло вам 🙂