mysql — страница аутентификации PHP не будет сопоставлять ввод пользователя с данными, хранящимися в базе данных

Моя страница аутентификации PHP не получает данные из БД правильно, когда вводятся правильные учетные данные, продолжает появляться неправильный эхо-сигнал. Пожалуйста, кто-нибудь может пролить свет на то, где я иду не так? Большое спасибо.

РЕДАКТИРОВАТЬ: Извините, я забыл упомянуть, что он должен быть уязвимым для инъекций, так как я хочу использовать его для демонстрации.

HTML:

<form method="POST" action="connection.php">
User <br><input type="text" name = "user" size="40"><br>
Password <br><input type ="password" name="pass" size="40"><br>
<input id="button" type="submit" name="submit" value="Log-In">

PHP:

<?php

// Grab User submitted information
$user = $_POST["user"];
$pass = $_POST["pass"];

// Connect to the database
$con = mysqli_connect("localhost","my_user","my_pass");
// Make sure we connected successfully
if(! $con)
{
die('Connection Failed'.mysqli_error());
}

// Select the database to use
mysqli_select_db(login, $con);

$result = mysqli_query("SELECT usernames, password FROM accounts WHERE usernames = $user");

$row = mysqli_fetch_array($result);if($row[usernames]==$user && $row[password]==$pass)
echo"You are a validated user.";
else
echo"Sorry, your credentials are not valid, Please try again.";

?>

Детали БД:

имя базы данных: логин

Название таблицы: счета

Количество строк:
имена пользователей
пароль

0

Решение

Вам необходимо добавить базу данных в строку подключения:

$con = mysqli_connect("localhost","my_user","my_pass", "my_db");

Вы не должны mysqli_select_db(), (Который вы в любом случае использовали неправильно.)

От документы:

Эта функция должна использоваться только для изменения базы данных по умолчанию для соединения. Вы можете выбрать базу данных по умолчанию с 4-м параметром в mysqli_connect(),

Вам нужно заключать строки в кавычки при запросе (см. Предупреждения ниже):

"... WHERE usernames = '$user'" // added quotes around $user

Вам нужно добавить кавычки к вашим идентификаторам:

if($row[usernames]==$user && $row[password]==$pass) // wrong way

С цитатами

if($row['usernames']==$user && $row['password']==$pass) // right way

Если у вас нет кавычек вокруг этих PHP, они будут считать их константами и могут не отображаться должным образом в зависимости от настроек вашего сервера.

ПРЕДУПРЕЖДЕНИЕ!

Маленький бобби говорит Ваш сценарий подвержен риску атак SQL-инъекций. Узнать о подготовленный заявления для MySQLi. Четное избежать строки не безопасно!

Никогда не храните простые текстовые пароли! Пожалуйста, используйте РНР встроенные функции обрабатывать безопасность пароля. Если вы используете версию PHP менее 5.5, вы можете использовать password_hash() пакет совместимости. Не нужно экранировать пароли или используйте любой другой очищающий механизм перед их перемешиванием. Делать это изменения пароль и вызывает ненужное дополнительное кодирование.

2

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector