Делаю ре-директ для админ панели. Задача : если человек попробует вести в адресную строку путь к админ панели, то его перебросит на форму авторизации. Возникли трудности
Создал файл functions.php
<?php
$mysqli = false;
function connectDB() {
global $mysqli;
$mysqli = new mysqli("localhost", "root", "", "Hunter");
}
function checkUser($login) {
global $mysqli;
connectDB();
$result_set = $mysqli->query ("SELECT * FROM `admin` WHERE 'login'='$login' AND 'password'='$password'");
$row = $result_set->fetch_assoc();
closeDB();
if ($result_set->fetch_assoc()) return true;
else return false;
}
function isAdmin($login) {
global $mysqli;
connectDB();
$result_set = $mysqli->query ("SELECT * FROM `admin` WHERE 'login'='$login'");
$row = $result_set->fetch_assoc();
closeDB();
return $row["ident"];
}
function closeDB() {
global $mysqli;
$mysqli->close();
}
?>
Таблица admin имеет 4 поля : id, login, password, ident. indent - просто нейки идентификатор(единица)
В верху формы авторизации пишу:
<?php
session_start();
require_once "lib/functions.php";
if (checkUser($_SESSION["login"], $_SESSION["password"])){
header("Location: index.php");
exit;
}
?>
Инициализация сессии > подкл файла function.php > условие (если администратор уже авторизован, перекинуть на админ панель). Ну и снизу форма входа
Для самой админ панели создаю файл start.php , пишу :
<?php
session_start();
require_once "/lib/functions.php";
if (!((checkUser($_SESSION["login"], $_SESSION["password"])) &&
(isAdmin($_SESSION["login"])))) {
header("Location: login.php");
exit;
}
?>
Подкл файла functions.php > условие на отрицание > редирект на форму авторизации
Ну и на самой админ панели подключаю файл start.php.
Редирект проходит, если я попытаюсь вести путь к админ панели > перебросит на форму авторизации. Но вот когда ввожу данные ( логин и пароль), то форма просто обновляется, или же редирект происходит. Помогите доработать код, указать на ошибки. Очень нужна помощь!
Более подробно раскрою суть своих комментариев в ответе.
Ваша форма должна передовать данные методом POST (на мой взгляд для авторизации он предпочтителен) или GET. Метод указывается в виде атрибута тэга form
, вот так:
<FORM method="post">
Скрипт php получает данные такой формы в глобальную системную переменную $_POST, которая является ассоциированным массивом. Т.е. если вам нужно получить значение элементы формы с именем скажем name1, например <INPUT type="text" name="name1">
, то в php-скрипте, она будет получена как $_POST['name1']
.
Т.е. ваша функция авторизации в упрощённом должна выглядеть примерно так:
function checkUser($login, $password) { //тут не забудьте добавить второй параметр, иначе функция переменную $password не увидит
global $mysqli;
$result_set = $mysqli->query ("SELECT * FROM `admin` WHERE 'login'='$login' AND 'password'='$password'");
if($result_set->num_rows == 1) {
$row = $result_set->fetch_assoc();
$_SESSION['UserID'] = $row['id'] //Определяем переменную сессии с id пользователя
$_SESSION['login'] = $row['login'] //Определяем системную переменную с логином пользователя
$auth = true;
} else
$auth = false;
return $auth;
}
Тогда в форме авторизации у вас должно быть:
<?php
session_start();
require_once "lib/functions.php";
// хотя вот тут по хорошему нужно встроить проверку на то, что $_POST["login"] вообще существует, т.к. он появится только после отправки формы
if (checkUser($_POST["login"], $_POST["password"])){
header("Location: index.php");
exit;
}
?>
А в самой админке:
<?php
session_start();
require_once "/lib/functions.php";
if (!isset($_SESSION["login"]) || ($_SESSION['UserID']>0) == false) {
header("Location: login.php");
exit;
}
?>
Как то так, но по хорошему нужно ещё встроить проверку получаемых значений, а не передавать их напрямую в базу + как я говорил в комментариях, в базе хранить не пароль в открытом виде, а его хэш, соответственно и в функцию проверки передавать хэш пароля.
Если вам нужно сделать редирект, лучше использовать настройки .htaccess файла. Для примера:
RewriteEngine On
RewriteRule ^adminpanel https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Подскажите, пожалуйста, как в Laravel хранить данные о пользователе после его авторизации?
Код регистрации пользователейПосле нажатия на кнопку , редирект не происходит
Вот по этой статье делал При переходе в браузере к контроллеру user все работает, но при использовании любого RESTClient при любом методе возвращается...
Нужно запрограммировать на PHP, чтобы имея число 103 (например) мы могли узнать число без %(% = 3% от суммы)