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 :: Проблемы с $_SERVER["HTTP_REFERER"]

 PHP.SU

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


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

> Описание: Не получается сделать переход на предыпредыдущую страницу
quinlena
Отправлено: 30 Ноября, 2012 - 06:36:40
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Всем здравствуйте! Проблема состоит в том, что на странице login.php создаю скрытое поле:
CODE (html):
скопировать код в буфер обмена
  1. <td><input type="hidden" name="ssil" value="<? print $_SERVER["HTTP_REFERER"];?>"></td>


Оно запоминает предыдущую страницу. Потом:
PHP:
скопировать код в буфер обмена
  1. $ssil=$_POST['ssil'];
  2. if($ssil="http://адрессайта/login.php"){
  3.  echo "<script>document.location.href='index.php';</script>";
  4. }
  5. else{
  6. echo "<script>document.location.href=".$ssil.";</script>";
  7. }

Но почему-то условие не срабатывает и постоянно переходит на index.php
В чем может быть проблема?
 
 Top
dubasua
Отправлено: 30 Ноября, 2012 - 06:53:22
Post Id



Посетитель


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


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




$_SERVER["HTTP_REFERER"] не будет работать в include, только на первой странице. Если Вы подключаете файл include, и там вызываете $_SERVER["HTTP_REFERER"], он будет пустой.
 
 Top
quinlena
Отправлено: 30 Ноября, 2012 - 06:54:47
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




dubasua пишет:
$_SERVER["HTTP_REFERER"] не будет работать в include, только на первой странице. Если Вы подключаете файл include, и там вызываете $_SERVER["HTTP_REFERER"], он будет пустой.

Файл не подключается include! Это просто входная страница, и в ней это поле.
 
 Top
dubasua
Отправлено: 30 Ноября, 2012 - 06:57:40
Post Id



Посетитель


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


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




А исходный код смотрели. Что там выводит?
 
 Top
quinlena
Отправлено: 30 Ноября, 2012 - 06:59:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




dubasua пишет:
А исходный код смотрели. Что там выводит?

Перед тем, как жму "Вход" в поле сохраняется нужный адрес
 
 Top
avtor.fox
Отправлено: 30 Ноября, 2012 - 07:22:47
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




quinlena
Распишите структуру (вход, проверка, редирект). Приведите код входа и прочее. И всё время смотрите входные данные.
 
 Top
quinlena
Отправлено: 30 Ноября, 2012 - 07:29:09
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




avtor.fox пишет:
quinlena
Распишите структуру (вход, проверка, редирект). Приведите код входа и прочее. И всё время смотрите входные данные.

Вот код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include_once("config.php");
  3. checkLoggedIn("no");
  4. $title="Страница авторизации";
  5. $fname = './tpl/header_cli1.html';
  6. $fcontent = file_get_contents($fname);
  7. echo $fcontent;
  8. function log_append($str, $file){
  9.         global $users;
  10.         $sql = mysql_connect("localhost","base","пароль");
  11.         mysql_select_db("vol_base");
  12.         $message=sprintf("INSERT INTO `logs` (`user`, `file`,`act`)
  13.                          values ('%s','%s','%s')",
  14.                         $_SESSION['login'],
  15.                         $file,
  16.                         $str
  17.                          );
  18.         if(!mysql_query($message,$sql)){
  19.                                                 echo $message;die();
  20.                                 }
  21. }
  22. if(isset($_POST["submit"])) {
  23.   field_validator("login name", $_POST["login"], "alphanumeric", 4, 43);
  24.   field_validator("password", (md5(md5($_POST['password']).$salt)), "string", 4, 43);
  25.   if($messages){
  26.     doIndex();
  27.    
  28.     exit;
  29.   }
  30.  
  31.     if( !($row = checkPass($_POST["login"], (md5(md5($_POST['password']).$salt))) )) {
  32.         $messages[]="Неправильный логин или пароль, попробуйте снова!";
  33.     }
  34.  
  35.   if($messages){
  36.     doIndex();
  37.     exit;
  38.   }
  39.  
  40.   cleanMemberSession($row["login"], $row["pas"],$_SERVER['REQUEST_URI']);
  41.   $str='User Log In!';
  42.   log_append($str,pathinfo(__FILE__,PATHINFO_FILENAME));
  43.    $today=date("Y-m-d");
  44.   $now_date = strtotime(date("d-m-Y")); // Результат 1259614800 секунд
  45.         $future_date = $now_date+432000;
  46.         $holiday=date("Y-m-d",$future_date);
  47.           mysql_query("SET NAMES 'utf8'");
  48.  $hol=mysql_query("SELECT * from `holidays` where `date_hol`BETWEEN '".$today."' AND '".$holiday."'",$link);
  49.  $dep=mysql_query("select `id_dep` from `users_sys` where `login`='".$_SESSION["login"]."'",$link);
  50.  $dep=mysql_fetch_assoc($dep);
  51.  
  52. $today=date("Y-m-d");
  53.   $now_date = strtotime(date("d-m-Y")); // Результат 1259614800 секунд
  54.         $future_date = $now_date+432000;
  55.         $holiday=date("Y-m-d",$future_date);
  56.           //mysql_query("SET NAMES 'cp1251'");
  57.  $hol=mysql_query("SELECT * from `holidays` where `date_hol`BETWEEN '".$today."' AND '".$holiday."'",$link);
  58.  $dep=mysql_query("select `id_dep` from `users_sys` where `login`='".$_SESSION["login"]."'",$link);
  59.  $dep=mysql_fetch_assoc($dep);
  60. $count_mes=0;
  61. if($count_mes==0){
  62.  ?>     <link href="css/jquery.alerts.css" rel="stylesheet" />
  63.         <script type="text/javascript" src="js/jquery.alerts.js"></script><?
  64. while($holi=mysql_fetch_array($hol)){
  65. $kol=date("d-m-Y",strtotime($holi['date_hol']));
  66.  $koli=strtotime($kol);
  67.  
  68.         echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><script>
  69. alert('До праздника ".$holi['name_hol']." осталось".floor(($koli- $now_date) / 86400 )." дн.');
  70.  
  71. </script> ";
  72. }
  73. }
  74. $ssil=$_POST['ssil'];
  75. if($ssil="http://адрессайта/login.php"){
  76.         //echo $ssil;die();
  77.  echo "<script>document.location.href='index.php';</script>";
  78. }
  79. else{
  80. echo "<script>document.location.href=".$ssil.";</script>";
  81. }
  82.  
  83. }
  84. else {
  85.   doIndex();
  86.  
  87. }
  88.  
  89. function doIndex() {
  90.   global $messages;
  91.   global $title;
  92. ?>
  93. <html>
  94. <head>
  95. <title><?PHP print $title; ?></title>
  96. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  97. </head>
  98. <body>
  99.         <div id="cont">
  100.                 <div id="conteiner"><div id="sign">
  101. <h3><?PHP print $title; ?></h3>
  102. <?PHP
  103. if($messages) { displayErrors($messages); }
  104. ?>
  105. <form action="<?PHP print $_SERVER["PHP_SELF"]; ?>" method="POST">
  106. <table>
  107. <tr><td>Логин:</td><td><input type="text" name="login"
  108. value="<?PHP print isset($_POST["login"]) ? $_POST["login"] : "" ; ?>"
  109. maxlength="15"></td></tr>
  110. <tr><td>Пароль:</td><td><input type="password" name="password" value="" maxlength="15"></td></tr><br></br>
  111. <tr align="center"><td>&nbsp;</td><td><input name="submit" type="submit" class="submit" value="Вход"></td></tr>
  112. <td><input type="hidden" name="ssil" value="<? print $_SERVER["HTTP_REFERER"];?>"></td>
  113. </table>
  114. </form>
  115. </div>
  116. </div>
  117. </div>
  118. </body>
  119. </html>
  120. <?PHP
  121.  
  122. }
  123. ?>
  124. <style>
  125.     #conteiner{
  126.         position: relative;
  127.         width: 500px;
  128.         height: 300px;
  129.         background: url(/images/content_bg.png);
  130.         margin: auto;
  131.         top: 100px;
  132.         border-radius: 10px 10px 10px 10px;
  133. -moz-border-radius: 10px 10px 10px 10px;
  134. -khtml-border-radius:10px 10px  10px 10px;
  135.  box-shadow: 0px 1px 10px #010101;
  136.  padding: 20px;
  137.     }
  138.     #sign{
  139.         margin: auto;
  140.         position: relative;
  141.         width: 300px;
  142.        
  143.     }
  144. </style>

(Добавление)
avtor.fox пишет:
quinlena
Распишите структуру (вход, проверка, редирект). Приведите код входа и прочее. И всё время смотрите входные данные.

И еще, после нажатия на "вход" почему-то в $_SERVER["HTTP_REFERER"] записывается login.php(((
Может можно $_SERVER["HTTP_REFERER"] чем-то заменить?

(Отредактировано автором: 30 Ноября, 2012 - 07:30:05)

 
 Top
avtor.fox
Отправлено: 30 Ноября, 2012 - 07:43:01
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




quinlena
А теперь давайте проанализируем (код просмотрел бегло).
У Вас форма отправляется сама на себя*. При первом входе на страницу логина, реферер пишется правильный. Далее логинимся. И после всех манипуляций реферер меняется на предыдущую страницу, а точнее на login.php. Так же он поменяется если вылезло сообщение о неправильном вводе логина или пароля (заново же отправим данные, а реферер обновится опять на login.php).

Разнесите форму входа и проверку данных по разным скриптам (файлам).

И грубо писать такое значение из первоисточника ($_SERVER['HTTP_REFERER']). Лучше последим за ним, например вот так -

PHP:
скопировать код в буфер обмена
  1. $_SESSION['refer'] = (preg_match('#/login.php#', $_SERVER['HTTP_REFERER']))?$_SESSION['refer']:$_SERVER['HTTP_REFERER'];
 
 Top
quinlena
Отправлено: 30 Ноября, 2012 - 07:45:33
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




[quote=avtor.fox][/quote]
Нужно занести в сессию и там хранить?
 
 Top
avtor.fox
Отправлено: 30 Ноября, 2012 - 07:48:06
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




quinlena
Как вариант. Смотрите чему равен реферер и если он Вас не устраивает, оставляете предыдущее значение (в сессии). Например.
 
 Top
quinlena
Отправлено: 30 Ноября, 2012 - 07:48:46
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




avtor.fox пишет:
quinlena
Как вариант. Смотрите чему равен реферер и если он Вас не устраивает, оставляете предыдущее значение (в сессии). Например.

Спасибо. Попробую. Надеюсь получится
 
 Top
sKaa
Отправлено: 30 Ноября, 2012 - 08:02:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


Зачем вообще вам этот реферер? Подменить его - дело двух минут.
(Добавление)
И регулярка тут тоже не к месту - имхо. Там где можно обойтись функциями для работы со строками, нужно обходится именно ими.
 
 Top
quinlena
Отправлено: 30 Ноября, 2012 - 08:04:11
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




sKaa пишет:
Зачем вообще вам этот реферер? Подменить его - дело двух минут.

Чтоб допустим вам пришло письмо со ссылкой, вы нажали на нее, вбили логин с паролем и перешли дальше по этой ссылке
(Добавление)
avtor.fox пишет:
quinlena
Как вариант. Смотрите чему равен реферер и если он Вас не устраивает, оставляете предыдущее значение (в сессии). Например.

Ничего не понимаю, вот этот код теперь в другом файле:
PHP:
скопировать код в буфер обмена
  1. $ssil=$_POST['ssil'];
  2.  
  3. if($_POST['ssil']="http://адрес/login.php"){
  4.         echo $ssil;die();
  5.  echo "<script>document.location.href='index.php';</script>";
  6. }
  7. else{
  8. echo "<script>document.location.href=".$ssil.";</script>";
  9. }

Главное первое условие срабатывает, но в echo $ssil пишет ту ссылку с которой пришла...
 
 Top
avtor.fox
Отправлено: 30 Ноября, 2012 - 08:15:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




sKaa
Вы видимо не понимаете.
Подменить можно всё что угодно, а я привёл лишь пример. Работайте со строками, да как угодно, дело Ваше.

quinlena
В ПОСТ рефера хранить не нужно. Проверяйте $_SESSION['refer']
 
 Top
KingStar
Отправлено: 30 Ноября, 2012 - 09:37:42
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




нужно еще помнить, что если пользователь наберет URL в адресной строке (а не перейдет на неё с другой страницы), то его referer будет пуст


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB