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

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

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Возврат к предыдущему URL
ТвойWeb » WebMaster класс » PHP/Perl » Возврат к предыдущему URL

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

1. chiv - 17 Мая, 2005 - 13:55:15 - перейти к сообщению
Создавал такую тему в разделе 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
2. TvoyWeb - 17 Мая, 2005 - 17:39:54 - перейти к сообщению
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>";
}
3. shade2 - 18 Мая, 2005 - 00:34:26 - перейти к сообщению
Я сделал не много иначе:
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)
4. TvoyWeb - 18 Мая, 2005 - 01:55:09 - перейти к сообщению
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 это просто алиас сайта.
Или тебе нужно еще определять и это тоже?
5. chiv - 18 Мая, 2005 - 02:24:44 - перейти к сообщению
TvoyWeb, shade2
Спасибо!
Всё работает. Только я так и не понял почему у меня всегда выводилось на главную, а не вернуться...
6. shade2 - 18 Мая, 2005 - 03:37:57 - перейти к сообщению
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
7. TvoyWeb - 18 Мая, 2005 - 04:43:47 - перейти к сообщению
shade2 пишет:
Да, алиас, но представь, пользователь зашел на www.site.ru/page.html от туда на www.site.ru/login.php там ссылка

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

Я же говорю, ты проверял инициализирована ли у тебя переменная $back или нет. А она у тебя всегда была инициализирована.
8. shade2 - 18 Мая, 2005 - 04:58:52 - перейти к сообщению
TvoyWeb пишет:
Так сделай так чтобы пользователь попадал на сайт без www, как бы он не набрал адрес.

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

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

Дык и я про тож... Хорошо

Форум на AlfaSpace.NET


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

[Script Execution time: 0.0301]     [ 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