Не выводит данные из БД
Я написал форму входа на сайт. Добавил 1 пользователя и если ввожу данные от него, то все работает, но стоит ввести данные от другого, так сайт не пропускает и крашится.
Листинг PHP скрипта
<?php
require_once "func/connect.php";
global $mysqli;
session_start();
$user = array();
$login = $_POST['username'];
$pass = $_POST['password'];
connectDB();
$result = mysqli_query($mysqli,"SELECT * FROM `user` where `login` = '".$login."' AND `pass` = '".$pass."'");
var_dump($result);
if($result)
{ $user = $result->fetch_assoc();
var_dump($user);
if (count($user) != 0) {
if ($user['admin'] == "yes") {
setcookie("name", $user['name'], time()+7200, "/");
setcookie("surname", $user['surname'], time()+7200, "/");
setcookie("admin", $user['admin'], time()+7200, "/");
} else {
setcookie("name", $user['name'], time()+7200, "/");
setcookie("surname", $user['surname'], time()+7200, "/");
}
header('Location: ../Pages/index.php');
} else {
$_SESSION['message'] = "Неверный логин или пароль";
header('Location: ../../login.php');
}
} else {
$_SESSION['message'] = "Ошибка запроса на сервер. Попробуйте позже.";
header('Location: ../../login.php');
}
closeDB();
Ответы (1 шт):
Автор решения: Crasher
→ Ссылка
Да, соглашусь с предыдущим комментатором, все плохо. Используйте PDO для работы с mysql.
ПРИМЕР:
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'имябазы');
define('DB_USER', 'юзер');
define('DB_PASS', 'пароль');
define('DB_CHAR', 'utf8');
class DB
{
protected static $instance = null;
public function __construct() {}
public function __clone() {}
public static function instance()
{
if (self::$instance === null)
{
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => TRUE,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"
);
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR;
self::$instance = new PDO($dsn, DB_USER, DB_PASS, $opt);
}
return self::$instance;
}
public static function __callStatic($method, $args)
{
return call_user_func_array(array(self::instance(), $method), $args);
}
public static function run($sql, $args = null)
{
$stmt = self::instance()->prepare($sql);
$stmt->execute($args);
return $stmt;
}
}
$login = $_POST["login"];
$pass = $_POST["pass"];
$query = "SELECT from user WHERE login = ? AND pass = ?";
$res = DB::run($query, array($login, md5($pass)))->fetch();
- В res будет ассоциативный массив строки из БД, делайте с ней, что хотите.
- Самое элементарное - храним в базе не открытые пароли, а md5 хэши, лучше дополнительно шифровать с кодовым словом
- Админ, или юзер - не должно хранится в куках. Проверяйте это уже на бэкенде. Отдали куки (имя пользователя и хэш пароля) - поискали их в базе, нашли колонку с идентификатором роли пользователя, и уже от этого пляшем
- Все-же лучше почитать, как делается авторизация пользователей, чтобы лучше понимать всю механику, и как это делать не стоит. Как у Вас сделано - точно не стоит
