(PHP) Не происходит перенаправление браузера Opera с помощью header('Location:').

VadimRU
Дата: 13.09.2006 20:01:15
Добрый день всем!

У меня сложилась такая ситуация: форма логин и логаут нормально работают в IE, но, если попытаться зайти через Оперу, то показывается такое сообщение:

автор
Состояние перенаправления
Адрес был перенаправлен на . Пожалуйста, щелкните ссылку для перехода.
Вы можете включить автоматическое перенаправление в настройках.


- а по идее пользователь должен зайти в систему ( показывается типа привет Вадим, ваш ID 001, статистика и т д ) .


Потом если открыть заново первую страницу и обновить (в Опере, там же) - то получается так, что все же залогиниться удалось, только перенавравления не работает правильно, хотя в IE все работает ведь.

Такая же проблема после Logout - белая страница и сообщение выше показывается.

Вот код:


LOGIN:
автор


<?
session_start();
require("config.php");
if($_POST["submit"] AND $_POST["privet"]){
$pass=md5($_POST["pass"]);
$query = mysql_query("SELECT * FROM `new` WHERE `login` = '".$_POST['login']."' AND `password` = '".$pass."'") or die(mysql_error());
$result = mysql_num_rows($query);
//echo $result;
$memberid=@mysql_result($query,0,"memberid");
if($result>0){
$inlog = 1;$edit=1;
session_register("inlog");
session_register("memberid");
session_register("edit");
header("Location: $refer");
}
else
{
header("Location: $HTTP_REFERER?&err=1");
;}
;} else {
header("Location:/");
;}
?>


LOGOUT:
автор

<?
session_start();
session_destroy();
header("Location:");
?>


Кто знает, в чем проблема ? Странно что в IE все работает отлично, а вот Опера ставит палки ((
*
Дата: 13.09.2006 23:40:35
Location укажите в соответствии с RFC, для начала. И полагаться на HTTP_REFERER - несусветная глупость - используйте хидден, если приспичило.
Гутманс
Дата: 14.09.2006 09:56:37
VadimRU
Добрый день всем!

У меня сложилась такая ситуация: форма логин и логаут нормально работают в IE, но, если попытаться зайти через Оперу, то показывается такое сообщение:

автор
Состояние перенаправления
Адрес был перенаправлен на . Пожалуйста, щелкните ссылку для перехода.
Вы можете включить автоматическое перенаправление в настройках.


- а по идее пользователь должен зайти в систему ( показывается типа привет Вадим, ваш ID 001, статистика и т д ) .


Потом если открыть заново первую страницу и обновить (в Опере, там же) - то получается так, что все же залогиниться удалось, только перенавравления не работает правильно, хотя в IE все работает ведь.

Такая же проблема после Logout - белая страница и сообщение выше показывается.

Вот код:


LOGIN:
автор


<?
session_start();
require("config.php");
if($_POST["submit"] AND $_POST["privet"]){
$pass=md5($_POST["pass"]);
$query = mysql_query("SELECT * FROM `new` WHERE `login` = '".$_POST['login']."' AND `password` = '".$pass."'") or die(mysql_error());
$result = mysql_num_rows($query);
//echo $result;
$memberid=@mysql_result($query,0,"memberid");
if($result>0){
$inlog = 1;$edit=1;
session_register("inlog");
session_register("memberid");
session_register("edit");
header("Location: $refer");
}
else
{
header("Location: $HTTP_REFERER?&err=1");
;}
;} else {
header("Location:/");
;}
?>


LOGOUT:
автор

<?
session_start();
session_destroy();
header("Location:");
?>


Кто знает, в чем проблема ? Странно что в IE все работает отлично, а вот Опера ставит палки ((


А где $refer определяетя-то.. Что-то не заметно этого?
VadimRU
Дата: 14.09.2006 12:18:20
*
Location укажите в соответствии с RFC, для начала.

Можно пример?

автор
И полагаться на HTTP_REFERER - несусветная глупость - используйте хидден, если приспичило.

Если пример будет - было бы хорошо. Hidden у меня используется в index.php - там в место формы авторизации после рефреша появляется форма пользователя, типа:

автор
<?
if($_SESSION["inlog"])
{ ?>
<br>Здравствуйте.<br>Ваш ID: <?echo $_SESSION["memberid"] ?>
<br>• <a href="тест-вопрос.php?id=<?echo $_SESSION["memberid"]?>&page=ed" class=nav>Настройка</a>
<br> • <a href="тест-вопрос.php?id=<?echo $_SESSION["memberid"]; ?>" class=nav>Статистика</a>
<br> • <a href="тест-вопрос.php?id=<?echo $_SESSION["memberid"]; ?>&page=prt" class=nav>Партнеры</a>
<br>
• <a href="logout.php" class=nav>Выход</a>
<?
;} else
{
?>


А если пароль неверный, то там же показывается что неверный пароль. Вот код:
<input type="hidden" name="submit" value="1">
<input type="hidden" name="privet" value="1"><?if($err==1)echo'<br><font color=red>Неверный пароль</font>';?><?;}?>


Дело в том, что все это прекрасно и без проблем работает в IE, а вот Опера, Мозилла почему-то перенаправлению не делают после авторизации. Как решить проблему, знающие есть?




ГУТМАНС:
автор
А где $refer определяетя-то.. Что-то не заметно этого?

Не знаю. Код не мой, тем более я PHP не знаю. Просто программиста нет и не будет теперь - а сайт работает с ошибками, решил попросить помощи у знатоков. Какие изменения сделать, чтоб форма авторизации работала на всех броузерах ?
Anjey aka PM
Дата: 14.09.2006 12:43:05
Уважаемый, возвращайте правильный респонз-статус-код
VadimRU
Дата: 14.09.2006 12:46:41
Помогите :)
Anjey aka PM
Дата: 14.09.2006 12:57:34
VadimRU
Помогите :)


читать ссылку выше, это РАЗ. Читать ТУТ

писать так:

header("Location: $refer", true, 303 /* или 302, сами решайте, ЧИТАЙТЕ МЛЯ!!!*/);

ЗЫ: может вам еще и ширинку расстегнуть?

ЗЫЫ: Матадор, сори за оффтоп, но нежелание этого парня разобраться при готовых то ссылках уже начинает БЕСИТЬ

Модератор: Сообщение отредактировано
VadimRU
Дата: 14.09.2006 13:02:42
Ты что такой агрессивный появился? Я выше написал, что во всем этом ничего не понимаю. Нефиг тыкать мне, е6е и с таким тоном. Если помогаешь человеку - сделай это нормально, а не так, как ты делаешь.
Hratchia
Дата: 14.09.2006 13:05:44
VadimRU
Помогите :)


1. пишите аккуратно и не сорите в коде:) (нашел кучу ненужных ;)
2. Этот код должен размещаться строго вначале - без лишних пробелов и т.п.,
иначе header не сработает.
3. WHERE `login` = '".$_POST['login']. - не плохо было бы обработать $_POST['login'] (htmlspeciachars) прежде чем подставлять сюда




<?
session_start();
require("config.php");
if($_POST["submit"] AND $_POST["privet"])
{
	$pass=md5($_POST["pass"]);
	$query = mysql_query("SELECT * FROM `new` WHERE `login` = '".$_POST['login']."' AND `password` = '".$pass."'") or die(mysql_error());
	$result = mysql_num_rows($query);
	//echo $result;
	$memberid=@mysql_result($query,0,"memberid");
	
	if($result>0)
	{
	$inlog = 1;$edit=1;
	session_register("inlog");
	session_register("memberid");
	session_register("edit");
	header("Location: $refer");
	}
	else 
	{
		$failUrl="loginfail.php??&err=1";
		header("Location: $failUrl");
	}
}
else
{
	header("Location:/");
}
?>
Anjey aka PM
Дата: 14.09.2006 13:15:12
VadimRU
Ты что такой агрессивный появился? Я выше написал, что во всем этом ничего не понимаю. Нефиг тыкать мне, е6е и с таким тоном. Если помогаешь человеку - сделай это нормально, а не так, как ты делаешь.


господин уважаемый, вам дали ссылку, Вы ее читали??? Здесь форум где людям помогают РАЗБИРАТСЯ С ПРОБЛЕМАМИ а не писать за них код. Я вам дал ДОСТАТОЧНО информации, было бы желание почитать, даже ДО МЕНЯ вам сказали указать Location в соответствии с RFC. Та ссылка которую я вам дал есть ни что иное как одна из ссылок, которую выдал гугл учитесь искать, Если не умеете и за вас ищут, то хватит вылазить на шею.

Тут люди добровольно помогают другим и делают это как хотят, т.к. им за это дело ничего не платят. И если вам 3-жды ткнули носом куда искать вы после этого постите неопределенно "Помогите", тогда уж извините -- разбирайтесь со своими проблемами сами.

ЗЫ: Мимопроходящего на вас нету.

Отдельно для Hratchia: посылая Location посылайте правильный респонз-код. по ХТТП РФЦ 200 ОК локейшн не предусматривает (пускай и обрабатывается браузерами)

Прошу читать внимательно:

Hypertext Transfer Protocol -- HTTP/1.1 RFC 2616
The Location response-header field is used to redirect the recipient to a location other than the Request-URI for completion of the request or identification of a new resource. For 201 (Created) responses, the Location is that of the new resource which was created by the request. For 3xx responses, the location SHOULD indicate the server's preferred URI for automatic redirection to the resource. The field value consists of a single absolute URI.