Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не редиректит

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Perun
Отправлено: 25 Февраля, 2017 - 18:34:19
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $_SESSION['er'] = array();
  3. if (isset($_POST['log_in'], $_POST['login'], $_POST['pass'])) {  // If the LOG IN button was clicked    
  4.    if (!empty($_POST['login']) && !empty($_POST['pass'])) {
  5.       $auth = query("  SELECT * FROM `users`
  6.                       WHERE
  7.                         `login`    = '".arrrealstr($_POST['login'])."'
  8.                       AND
  9.                         `password` = '".passhash($_POST['pass'])."'                            
  10.                       LIMIT 1
  11.                   ");      
  12.         if (mysqli_num_rows($auth)) {  //  If requested login and pass exist in DB        
  13.            $str = mysqli_fetch_assoc($auth);        
  14.              if ($str['activate'] == '1') {  // If an account is activated
  15.                 if (isset($_POST['auto'])) {  // If the REMEMBER ME option is checked
  16.                    setcookie('login', (passhash($str['login']).$str['password']), time() +36000000, '/'); // Set the user cookie
  17.                 }            
  18.                 $_SESSION['login'] = $str; // Set a session for this user
  19.                 $status = 1; // Set the variable for choosing authorization html form in the view part
  20.                 $login = $_SESSION['login']['login'];
  21.                 header("Location: ".'/index.php?'.$_SERVER['QUERY_STRING']); // Redirect to the refferer
  22.                 exit();          
  23.              }
  24.              else { $_SESSION['er'] = 'This user is registered, but not activated.'; }
  25.         }
  26.         else { $_SESSION['er'] = 'There is no registered user with entered login and password on site.'; }
  27.    }
  28.    else { $_SESSION['er'] = 'The LOGIN and PASSWORD fields cannot be empty!'; }
  29. }
  30. else {
  31.   if(isset($_SESSION['login'])) { // If the LOG IN button is not clicked but a session exists
  32.       $res = query("  SELECT * FROM `users`
  33.                      WHERE
  34.                         `login`    = '".arrrealstr($_SESSION['login']['login'])."'                            
  35.                      LIMIT 1
  36.                        ");
  37.       if (mysqli_num_rows($res)) {  
  38.          $check = mysqli_fetch_assoc($res); // Get user data for the active session
  39.          if ($check['activate'] == 2) { // If the ban flag in DB is set
  40.             if (isset($_COOKIE['login'])) {
  41.                setcookie('login', (passhash($_SESSION['login']['login']).$_SESSION['login']['password']), time() -38000000, '/');
  42.              }
  43.              unset($_SESSION['login']);
  44.              $_SESSION['exit'] = 'Your account is disactivated now!';
  45.              header('Location: '.DOMAIN.'/index.php?page=exit'); // Redirect to the exit page
  46.              exit();
  47.          }
  48.          else {
  49.             $status = 1;
  50.             $login = $check['login'];
  51.          }        
  52.       }
  53.       else {
  54.          unset($_SESSION['login']);
  55.          $_SESSION['exit'] = 'There is a session\'s error.';
  56.          header('Location: '.DOMAIN.'/index.php?page=exit');
  57.          exit();
  58.       }
  59.   }    
  60.   elseif(isset($_COOKIE['login'])) { // If a user cookie exists  
  61.         $res = query("  SELECT * FROM `users`
  62.                        WHERE
  63.                        `hash`    = '".passhash($_COOKIE['login'])."'                            
  64.                        LIMIT 1
  65.                    ");
  66.         if (mysqli_num_rows($res)) {
  67.             $check = mysqli_fetch_assoc($res);
  68.             $_SESSION['login'] = $check;  // Set a user session
  69.             $status = 1;
  70.             $login = $_SESSION['login']['login'];              
  71.         }
  72.         else {
  73.            $_SESSION['exit'] = 'There is a cookie\'s error.';
  74.            header('Location: http://www.d.local/index.php?page=exit');
  75.            exit();
  76.          }
  77.  
  78.      }else { $_SESSION['er'] = 'Enter LOGIN and PASSWORD to enter the site.'; }  
  79. }
  80. if (isset($_POST['log_out'], $_SESSION['login'])) {  // If a user session exists and the LOG OUT button is clicked
  81.    
  82.    if (isset($_COOKIE['login'])) {
  83.       setcookie('login', (passhash($_SESSION['login']['login']).$_SESSION['login']['password']), time() -38000000, '/');
  84.    }
  85.    unset($_SESSION['login']);  // Unset user session if logout  
  86.    header("Location: ".'/index.php?'.$_SERVER['QUERY_STRING']); // Redirect to the refferer
  87.    exit();
  88. }
  89. // If the "REGISTER" button is clicked
  90. if (isset($_POST['reg'])) {
  91.   header("Location: ".'/index.php?module=reg&page=reg'); // Redirect to the "REGISTER" form if the "REGISTER" button is clicked
  92.   exit();
  93. }
  94. ?>

В 74 строке по редиректу выдает ошибку браузера - проблему с переадресацией. Не может корректно завершить редирект...
Не могу найти причину..
 
 Top
Строитель Модератор
Отправлено: 25 Февраля, 2017 - 19:22:54
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Perun пишет:
В 74 строке по редиректу выдает ошибку браузера - проблему с переадресацией. Не может корректно завершить редирект.
А редирект выполняется на эту же страницу? Я так понимаю, весь ваш этот код прописан в файле index.php, и редирект выполняется на него же, но с передачей некоторых get-параметров? Если это так, то добавьте в это условие
PHP:
скопировать код в буфер обмена
  1. else {
  2.     $_SESSION['exit'] = 'There is a cookie\'s error.';
  3.     header('Location: http://www.d.local/index.php?page=exit');
  4.     exit();
  5. }
ещё одну проверку
PHP:
скопировать код в буфер обмена
  1. elseif (empty($_GET['page']) || $_GET['page'] != 'exit') {
  2.     $_SESSION['exit'] = 'There is a cookie\'s error.';
  3.     header('Location: http://www.d.local/index.php?page=exit');
  4.     exit();
  5. }
 
 Top
Perun
Отправлено: 25 Февраля, 2017 - 19:48:55
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Строитель пишет:
А редирект выполняется на эту же страницу? Я так понимаю, весь ваш этот код прописан в файле index.php, и редирект выполняется на него же, но с передачей некоторых get-параметров?

Скрипт отдельный, но инклюдится каждый раз в index.php. Наверное, нельзя сказать, что редиректит прям на себя, а в части представления через маршрутизатор подключается HTML файл exit.html.

Добавил проверку, работает, но раз 10 уже перечитал, никак не въеду в суть этой проверки в контексте.... Можете объяснить ход мыслей для тех кто в танке??
То, кудя я делал переадресацию мне понятно. а тут ступор... Причем в другах участках кода такая же переадресация, и там редиректит без проблем.

(Отредактировано автором: 25 Февраля, 2017 - 19:51:03)

 
 Top
Строитель Модератор
Отправлено: 25 Февраля, 2017 - 20:12:22
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Perun пишет:
Можете объяснить ход мыслей
В вашем варианте все ветвления условий if приводили выполнение кода в этот блок :

else {
$_SESSION['exit'] = 'There is a cookie\'s error.';
header('Location: http://www.d.local/index.php?page=exit');
exit();
}

Далее в этом блоке срабатывал редирект на httр://www.d.local/index.php?page=exit ...
И так снова и снова (зацикливание). И чтобы избежать зацикливания, я добавил ещё одно условие, в котором проверяется, не было ли ранее редиректа. Если переменная $_GET['page'] пуста, или не соответствует строке "exit", значит редиректа ещё небыло, и можно его выполнять. Ну а поле редиректа станет доступна $_GET['page'], и мы уже не попадём в этот блок с редиректом, т.к. условие не выполнится.
 
 Top
Perun
Отправлено: 25 Февраля, 2017 - 20:32:44
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Спасибо. теперь вижу какая проблема с переадресацией. Спасибо за вариант решения! Но насколько я понимаю - это "костыль" и нужно пересматривать решение с переадресией на ошибку?
И попутно вопрос: Стоит ли озаботиться обработкой такой ошибки? Я имею в виду - переадресации, обработка и вывод ошибок на экран, или пусть этим браузер занимается? Это по сути довольно не стандартная ситуация - подделка куки, либо еще вариант - какие-то ошибки в БД
Как вариант, возможно проще, и мне так логически понятнее - просто удалять куку у клиента?
Плюсик за помощь не имею технической возможности поставить...

(Отредактировано автором: 25 Февраля, 2017 - 20:33:57)

 
 Top
Строитель Модератор
Отправлено: 25 Февраля, 2017 - 20:42:47
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Perun пишет:
Но насколько я понимаю - это "костыль" и нужно пересматривать решение с переадресией на ошибку?
Да.
Perun пишет:
И попутно вопрос: Стоит ли озаботиться обработкой такой ошибки? Я имею в виду - переадресации, обработка и вывод ошибок на экран, или пусть этим браузер занимается?
Если что-то нужно сообщить пользователю, касающееся его не корректных действий на странице (не верно заполнено поле, и т.п.), то лучше сообщить.
Perun пишет:
Как вариант, возможно проще, и мне так логически понятнее - просто удалять куку у клиента?
Верно, ведь пользователь нажал на кнопку "Выход".
Perun пишет:
Плюсик за помощь не имею технической возможности поставить
Я знаю - карма для вас станет доступна после набора пяти десяти постов на нашем форуме Закатив глазки
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB