Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Авторизация пользователя
Gaer  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 49
Пользователь №: 43135
На форуме: 5 месяцев, 4 дня
Карма:




День добрый, помогите разобраться:

В одной директории лежат три файла:

index.php (вход на ресурс)
check.php (проверка пользователя)
main.php (страница авторизованного пользователя)

что хотелось бы реализовать:
1. На index.php пользователь вводит логин и пароль, которые отправляются на check.php
2. check.php проверяет полученные данные, если они корректны переправляет пользователя на main.php, если нет то на index.php

скрипт index.php

<!DOCTYPE html>
<
html>
<
head>
<
meta charset="UTF-8">
<
title> Главная страница </title>
</
head>
<
body>
<
form action="check.php" method="post">
<
fieldset>
<
legend> Авторизация пользователя </legend>
<
table>
<
tr>
<
td> Логин: </td>
<
td> <input type="text" name="login"> </td>
</
tr>
<
tr>
<
td> Пароль:</td>
<
td> <input type="password" name="pass"> </td>
</
tr>
<
tr>
<
td></td>
<
td> <input type="submit" value="ВХОД"> </td>
</
tr>
</
table>
</
fieldset>
</
form>
</
body>
</
html>


скрипт check.php

<?php
// переменная для URL
$path = $_SERVER['PHP_SELF'];

// Массив с логинами и паролями пользователей
$arrUser = ['qwer' => 1234,
'qwe' => 123];

// Проверка пользователя и переход на страницу для авторизованного пользователя
if (isset($_POST['login']) && isset($_POST['pass'])) {
$login = $_POST['login']; // логин для куки и сессии
$pass = $_POST['pass']; // пароль для куки и сессии
setcookie('login', $login, time()+600); // ставим куки
session_start(); // запускаем сессию
$_SESSION['login'] = $login; // логин для сессии

// поиск в массве пользователя и проверка его пароля

foreach ($arrUser as $value => $item) {
if (($value == 'qwer') && ($arrUser[$value])==1234) {
header('Location :'.$path.'/../main.php'); // переход для авторизованного пользователя
break;
} else {
header('Location :'.$path.'/../index.php'); // переход для неавторизованного пользователя
}
}
}

?>


скрипт main.php


<?php
include __DIR__.'function.php';
session_start();
echo $_SESSION['login'];
?>


Ошибку не могу найти, в файле check.php до строки:
header('Location :'.$path.'/../main.php'); // переход для авторизованного пользователя

все работает, но вот переадресации на main.php не происходит.
Подскажите где ошибся? И что поправить?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2605
Пользователь №: 5568
На форуме: 8 лет, 4 месяца, 25 дней
Карма: 30




Перечитай логику в foreach . Ерунда полная.
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Gaer  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 49
Пользователь №: 43135
На форуме: 5 месяцев, 4 дня
Карма:




jetistyum Не совсем понял, обход массива написан не правильно или что-то еще?
Если при обходе массива вставить
foreach ($arrUser as $value => $item) {
if (($value == 'qwer') && ($arrUser[$value])==1234) {
echo 'Пользователь найден';
break;
} else {

то сообщение Пользователь найден выдается, т.е, поиск пользователя и проверка его пароля выполняется вроде как верно
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 5 дней
Карма: 77




Может тебе так сделать ?
// Массив с логинами и паролями пользователей
$arrUser = [
'login' => 'password',
'login2' => 'password2'
];


....


$login = $_POST['login']; // логин для куки и сессии
$pass = $_POST['pass']; // пароль для куки и сессии

// Проверка логина

if (isset($arrUser[ $login ])) {
// Проверка пароля
if ($arrUser[ $login ] == $pass) {
// пароль найден
// только тут вешаем куку и делаем переадресацию

die();
} else {
// неверный пароль
}
}
else {
// Пользователь не найден
}


Это сообщение отредактировал Kusss - 11.08.2016 - 13:43
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Derack  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 90
Пользователь №: 18445
На форуме: 7 лет, 4 месяца, 11 дней
Карма: 1




подозрительно знакомый код...
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Gaer  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 49
Пользователь №: 43135
На форуме: 5 месяцев, 4 дня
Карма:




Kusss, спасибо за стремление помочь, но что-то все равно не перенаправляет, поправил согласно предложенному примеру:

 
<?php
// переменная для URL
$path = $_SERVER['PHP_SELF'];

if(isset($_POST['login']) && isset($_POST['pass'])) {
// данные пользователя полученные для авторизации
$login = $_POST['login'];
$pass = $_POST['pass'];
}

// Массив с логинами и паролями авторизованных пользователей
$arrUser = ['qwer' => 1234,
'qwe' => 123];

if($arrUser[$login] == $pass){
setcookie('login', $login, time()+600);
session_start();
$_SESSION['login'] = $login;
// echo 'Ошибок нет';
header('Location :'.$path.'/../main.php');
die();
} else {
header('Location :'.$path.'/../index.php');
}
?>


Но в адресной строке браузера все равно висит .../check.php и переправляться не желает.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Gaer  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 49
Пользователь №: 43135
На форуме: 5 месяцев, 4 дня
Карма:




если убрать коммент в строке
// echo 'Ошибок нет';
, то надпись выдается
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 5 дней
Карма: 77




Цитата
'PHP_SELF'
Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например,$_SERVER['PHP_SELF'] в скрипте по адресу http://example.com/foo/bar.php будет /foo/bar.php. Константа __FILE__ содержит полный путь и имя файла текущего (то есть подключенного) файла. Если PHP запущен в командной строке, эта переменная содержит имя скрипта, начиная с PHP

что у тебя в результат должно получиться ?
Цитата
/check.php/../index.php
Какую переадресацию ты хочешь увидеть ?

Это сообщение отредактировал Kusss - 11.08.2016 - 14:47
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Gaer  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 49
Пользователь №: 43135
На форуме: 5 месяцев, 4 дня
Карма:




Полагаю, если файлы лежат в одной директории, то должен выбраться файл index.php или main.php
Я мыслю header в случае корректого имени и пароля пользователя должен отправить по пути .../check.php/../main.php

если вставить результат работы echo $path.'/../main.php'; в адресную строку браузера, то переправляет на правильный ресурс:

if($arrUser[$login] == $pass){
setcookie('login', $login, time()+600);
session_start();
$_SESSION['login'] = $login;
// echo $path.'/../main.php';
header('Location :'.$path.'/../main.php');
die();
} else {
header('Location :'.$path.'/../test/index.php');
}


Это сообщение отредактировал Gaer - 11.08.2016 - 15:03
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Gaer  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 49
Пользователь №: 43135
На форуме: 5 месяцев, 4 дня
Карма:




Блин, я как-то криво объяснил 8/
В общем в зависимости от проверки логина и пароля в массиве, должно переправить на main.php если пользователь и пароль корректны и на index.php если нет. А у меня почему-то все остается по адресу check.php

Это сообщение отредактировал Gaer - 11.08.2016 - 14:59
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Gaer  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 49
Пользователь №: 43135
На форуме: 5 месяцев, 4 дня
Карма:




Нашел ошибку!!!! Надо убрать пробел между Location и :
Уффф....

Вот так работает :


if($arrUser[$login] == $pass){
setcookie('login', $login, time()+600);
session_start();
$_SESSION['login'] = $login;
// echo $path.'/../main.php';
header('Location:'.$path.'/../main.php');
} else {
header('Location:'.$path.'/../test/index.php');
}


Это сообщение отредактировал Gaer - 11.08.2016 - 15:29
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 5 дней
Карма: 77




header('Location: /main.php');
будет тебе файл из корня

Это сообщение отредактировал Kusss - 11.08.2016 - 15:33
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
miketomlin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 27
Пользователь №: 43211
На форуме: 4 месяца, 4 дня
Карма:




Gaer, нахуа адрес с точками в Location пихать? Пробел нужно добавить после двоеточия.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
miketomlin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 27
Пользователь №: 43211
На форуме: 4 месяца, 4 дня
Карма:




POST-обработчик лучше делать по тому же адресу, что и у формы. Нефиг плодить сущности на ровном месте.

Пользователя лучше вести от защищаемой страницы к странице входа, а не наоборот, если конечно нет цели сделать «бутылочное горлышко». Впрочем его лучше сделать опцией и использовать более классическую логику.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса