mysql — Неправильное имя пользователя / пароль — Как правильно отразить это

Я пытаюсь закодировать форму входа в PHP. Вход / выход работает нормально, однако мне немного любопытно, как правильно отобразить «Неправильное имя пользователя / пароль» для моего конкретного кода.

Вот мой код (из login.php, который включен в index.php на боковой панели):

<form method="post" action="security.php">
<input name="username" type="text" placeholder="Username" id="username"><br />
<input name="password" type="password" placeholder="Password" id="password"><br />
<input name="login" type="submit" value="Log in" class="login">
<small><input type="checkbox"> Keep me logged in</small>
</form>
<?php
if ($failed == 1) {
echo "Wrong Username / Password";
}
?>

А вот мой код для security.php:

<?php
require 'connect.php';

// username and password sent from form
$tbl_name = 'users';
$username=$_POST['username'];
$password=$_POST['password'];

// To protect MySQL injection
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result = mysqli_query($conn, $sql);

// Mysql_num_row is counting table row
$count = mysqli_num_rows($result);

// If result matched $username and $password, table row must be 1 row
if($count == 1)
{
// Register $username, $password and redirect to file "login_success.php"session_start();
$_SESSION["username"] = $username;
header("location:home.php");
}
else {
$failed = 1;
header("location:index.php");
}
?>

Как вы можете видеть или не видеть, я пытался использовать переменную, установленную в security.php с именем $ failed, которая установлена ​​в security.php и используется в if in login.php для отображения сообщения об ошибке. Я знаю, что это даже не близко к работе, но это был единственный способ, чтобы я мог сказать вам, что я пытаюсь сделать. Любая помощь?

0

Решение

Попробуй это security.php:

if($count == 1)
{
// Register $username, $password and redirect to file "login_success.php"session_start();
$_SESSION["username"] = $username;
header("location:home.php");
}
else {
header("location:index.php?msg=failed");
}

И это в index.php:

if (isset($_GET["msg"]) && $_GET["msg"] == 'failed') {
echo "Wrong Username / Password";
}
1

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

Вы должны добавить LIMIT 1 к вашему SQL-запросу.

В противном случае сделать header("location:index.php?success=false");

Тогда вы можете проверить это:

if( !empty( $_GET[ 'success' ] ) && ( $_GET[ 'success' ] == FALSE ) )
{
echo 'failed login';
}
0

В своем коде безопасности в разделе «Ошибка входа в систему» ​​вы можете изменить:

$failed = 1;
header("location:index.php");

чтобы:

$failed = 1;
include "./login.php";

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

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