не работает вход, код пропускает пользователя даже с неверным паролем

<?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 на любой столбец таблицы)

→ Ссылка