не работает вход, код пропускает пользователя даже с неверным паролем
<?php
session_start();
require('connect.php');
if (isset($POST['name'])&& isset($POST['password'])) {
$name = $POST['name'];
$password = $POST['password'];
$query = "SELECT * FROM users WHERE name = '$name' and password = '$password'";
$result = mysqli_query($connection, $query) or die(mysqi_error($connection));
$count = mysqli_num_rows($result);
if ($count == 1) {
$_SESSSION['name'] = $name;
}else {
$fmsg = "error"; }
if (isset($_SESSSION['name'])) {
$username = $_SESSSION['name'];
}
}
?>
Ответы (1 шт):
Автор решения: Sire IMPACTUS
→ Ссылка
Используй защищенное соединение. Вот класс подключения к бд.
use PDO;
use PDOException;
class DATABASE
{
static function Response($sql, $params = [])
{
try {
$user = 'root';
$pass = '';
$name = 'sirexnovel_database';
$host = "127.0.0.1";
$connection = new PDO("mysql:host=$host;dbname={$name}", $user, $pass);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
$stmt = $connection->prepare($sql);
if (!empty($params)) {
foreach ($params as $key => $val) {
$stmt->bindValue(':' . $key, $val);
}
}
$stmt->execute();
return $stmt;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br>";
print "Error!: " . $e->getTraceAsString() . "\n";
die();
}
}
static function RequestAsRow($sql, $params = [])
{
return self::Response($sql, $params)->fetchAll(PDO::FETCH_ASSOC);
}
static function RequestAsColumn($sql, $params = [])
{
return self::Response($sql, $params)->fetchColumn();
}
}
Дальше подключи этот файл.
session_start();
require('DATABASE.php');
if (isset($POST['name'])&& isset($POST['password'])) {
$sql = "SELECT 1 FROM users WHERE name = :name AND password = :pass";
$opt = [
'name' => $POST['name'],
'pass' => $POST['password']
];
$res = DATABASE::RequestAsColumn($sql, $opt);
if($res != false)
$_SESSSION['name'] = $name;
else
$fmsg = "error";
}
if (isset($_SESSSION['name'])) {
$username = $_SESSSION['name'];
}
Как-то так.
UPD: немного поясню за функции.
RequestAsRow — Возвращает массив, содержащий все строки результирующего набора (В текущем случает массива будет ассоциативный)
RequestAsColumn — Возвращает данные одного столбца следующей строки результирующего набора (В текущем случае будет 1, иначе false. Проверка сделана для того, чтобы ты, если захочешь, мог поменять 1 на любой столбец таблицы)