Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Возврат к предыдущему URL
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


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

> Без описания
chiv
Отправлено: 17 Мая, 2005 - 13:55:15
Post Id



Full Member


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

Карма 0




Создавал такую тему в разделе JavaScript теперь настало время PHPУлыбка
Я так понял, что за это дело отвечает переменная $_SERVER['HTTP_REFERER']...
Написал код:
CODE:
$ref=$_SERVER['HTTP_REFERER'];
if (isset($ref))
{
echo "<a href=\"$ref\">вернуться</a>";
}
else
{
echo "<a href=\"http://www.mysite.ru/index.php\">на главную</a>";
}

В результате всегда выводится на главнуюОгорчение
Подскажите что не такhelp
 
 Top
TvoyWeb Администратор
Отправлено: 17 Мая, 2005 - 17:39:54
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




chiv
Ну для начала немного неверно написан код.
Дело в том что $_SERVER['HTTP_REFERER'] либо есть либо его нет.
Ты в скрипте присваешь переменной $ref значение $_SERVER['HTTP_REFERER'].
Но если $_SERVER['HTTP_REFERER'] нету, то переменная $ref все равно будет присутствовать в скрипте, только ее значение будет как false.
Я бы написал этот код иначе:
CODE:
$ref = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER']:False;
if ($ref === False)
{
echo "<a href=\"http://www.mysite.ru/index.php\">на главную</a>";
}
else
{
echo "<a href=\"$ref\">вернуться</a>";
}
 
 Top
shade2
Отправлено: 18 Мая, 2005 - 00:34:26
Post Id



Newbie


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2005  
Откуда: г. Майкоп

Карма 0




Я сделал не много иначе:
CODE:
// Ссылка на предыдущую страницу
$back = $_SERVER['HTTP_REFERER'];
if ( isset($_GET['back']) ) $back = $_GET['back'];
if ( isset($_POST['back']) ) $back = $_POST['back'];
// Если ссылка не на наш сайт, то правим на главную страницу нашего сайта :)
if ( $back[0] !== '/' && substr($back, 0, strlen("http://$_SERVER[SERVER_NAME]")) !== "http://$_SERVER[SERVER_NAME]" )
$back = "http://$_SERVER[SERVER_NAME]/index.php";
$INFO['back'] = $back;

В таком случае мы можем передать ссылку назад через GET или POST, что удобно, например, когда пользователь авторизуется на сайте, но с первого раза ошибаеться в пароле/имени

Вот пример шаблона
CODE:

<div>{ERRORS}</div>
Имя <input type="text" name="name" value="{NAME}" /><br />
Пароль <input type="password" name="pass" /><br />
<input type="hidden" name="back" value="{BACK}" />
<input type="submit" />


PS: Проверку - наша ли страница - надо проверять иначе, т.к. например сайт может быть доступен по двум домерам (Например, http://www.site.ru и http://site.ru)
 
 Top
TvoyWeb Администратор
Отправлено: 18 Мая, 2005 - 01:55:09
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




shade2
И зачем так заморачиваться?
CODE:
<?
//если присутсвует заголовок реферера, то есть страница не загружена с
//чистого листа
if(isset($_SERVER['HTTP_REFERER'])){
//если реферер с нашего сайта
if(eregi("^http://$_SERVER[SERVER_NAME]*",$_SERVER['HTTP_REFERER'])){
//ссылкой назад будет $_SERVER['HTTP_REFERER']
$back = $_SERVER['HTTP_REFERER'];
} else {//В противном случае, ссылкой будет главная страница сайта
$back = "http://".$_SERVER['SERVER_NAME'];
}
} else {//Если реферера нет и страница загружена с чистого листа
//ссылкой будет главная страница сайта
$back = "http://".$_SERVER['SERVER_NAME'];
}
echo $back;
?>

Можешь проверить. И не нужно в формах лишние скрытые поля.
shade2 пишет:
т.к. например сайт может быть доступен по двум домерам (Например, http://www.site.ru и http://site.ru)

А вот этого я не понял. Как правило с www это просто алиас сайта.
Или тебе нужно еще определять и это тоже?
 
 Top
chiv
Отправлено: 18 Мая, 2005 - 02:24:44
Post Id



Full Member


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

Карма 0




TvoyWeb, shade2
Спасибо!
Всё работает. Только я так и не понял почему у меня всегда выводилось на главную, а не вернуться...
 
 Top
shade2
Отправлено: 18 Мая, 2005 - 03:37:57
Post Id



Newbie


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2005  
Откуда: г. Майкоп

Карма 0




TvoyWeb пишет:
А вот этого я не понял. Как правило с www это просто алиас сайта.
Или тебе нужно еще определять и это тоже?

Да, алиас, но представь, пользователь зашел на www.site.ru/page.html от туда на www.site.ru/login.php там ссылка назад site.ru/index.html, а не www.site.ru/page.html потому, что твой рег не учитывает алиасы. Например мой сайт доступен как http://zolotov.h14.ru и http://www.zolotov.h14.ru я везде разбрасываю ссылки первого варианта, но, как оказалось, на мой сайт заходили и по второму алиасу, из-за чего у меня в списке обратных ( http://zolotov.h14.ru/backlink.php ) ссылок писутвовал мой же сайт, хотя я его хотел бы игнорировать (но делал проверку только на первого варианта).

TvoyWeb пишет:
И зачем так заморачиваться?

Для удобства пользователя Подмигивание
Пользователь зашел на /page.html от туда на /login.php, ввел пароль, не верно, опять оказался на /login.php, но HTTP_REFERER указывает уже не на /page.html (как хотелось бы), а на /login.php
 
 Top
TvoyWeb Администратор
Отправлено: 18 Мая, 2005 - 04:43:47
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




shade2 пишет:
Да, алиас, но представь, пользователь зашел на www.site.ru/page.html от туда на www.site.ru/login.php там ссылка

Так сделай так чтобы пользователь попадал на сайт без www, как бы он не набрал адрес.
Это делается при помощи модуля апача mod_rewrite. Просто пишешь необходимые правила в .htaccess и все. И тебе не придется выдумывать лишних скрытых полей в формах.
Попробуй зайти на форум с www и без. И еще посмотри вот это http://nowww.ru
chiv пишет:
Только я так и не понял почему у меня всегда выводилось на главную,

Я же говорю, ты проверял инициализирована ли у тебя переменная $back или нет. А она у тебя всегда была инициализирована.
 
 Top
shade2
Отправлено: 18 Мая, 2005 - 04:58:52
Post Id



Newbie


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2005  
Откуда: г. Майкоп

Карма 0




TvoyWeb пишет:
Так сделай так чтобы пользователь попадал на сайт без www, как бы он не набрал адрес.

Бог с ними (c алиасами), я по другой причине это делаю (см. выше) - хотя и это дело вкуса, просто я думаю, что так удобнее.
 
 Top
TvoyWeb Администратор
Отправлено: 18 Мая, 2005 - 09:44:21
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




shade2 пишет:
что так удобнее.

Чего же удобного? Ты лишний код пищешь и лишнюю работу проделываешь. Здесь на форуме в некоторых местах используеются реферер для автоматического возврата на страницу.
Вобщем дело вкуса.
 
 Top
chiv
Отправлено: 18 Мая, 2005 - 13:02:48
Post Id



Full Member


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

Карма 0




Цитата:
Я же говорю, ты проверял инициализирована ли у тебя переменная $back или нет. А она у тебя всегда была инициализирована.

Дык и я про тож... Хорошо
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0, скрытых: 0)
« PHP/Perl »


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



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0498]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33