redirect — header () не работает в php, когда URL содержит параметры?

Так что я использую $_GET захватить URL, чтобы использовать его позже, но когда я использую $_GET это не будет перенаправлять!

Итак, вот мой пример кода:
URL: http://localhost/project/active.php/?s=ieugfshd&h=qwuyrbcq&i=1

PHP-код:

<?php
include 'init.php';
$s = trim($_GET['s']);
$h = trim($_GET['h']);
$i = trim($_GET['i']);
$q = key_check($s,$h,$i);
if($q == 1)
{
header("location:password_active.php");
exit;
}
if($q == 0)
{
header("location:login_failed.php");
exit;
}
?>

РЕДАКТИРОВАТЬ:
функция key_check ()

function key_check($k1,$k2,$id)
{
$query = mysql_query("select key1 from users where user_id = '$id'");
$key1 =mysql_result($query,0);
$query = mysql_query("select key2 from users where user_id = '$id'");
$key2 =mysql_result($query,0);
$y=strcmp($k1,$key1);
$z=strcmp($k2,$key2);
if($y || $z == 0)
{
return 1;
}
else
{
return 0;
}
}

Теперь, когда я пытаюсь это сделать, я получил «1», но я получаю

Эта веб-страница имеет цикл перенаправления

Но мой password_active.php не имеет никаких перенаправлений. Это просто HTML-страница.

0

Решение

URL, который вы используете для доступа к вашему скрипту:

http://localhost/project/active.php/?s=ieugfshd&h=qwuyrbcq&i=1

Это загружает active.php, который выполняет свою роль, а затем пытается отправить следующий заголовок:

header("location:password_active.php");

Браузер получает этот заголовок и пытается разрешить этот относительный URL, добавив password_active.php после последней косой черты перед строкой запроса (что ?s=xxx строка).

Итак, ваш браузер загружается:

http://localhost/project/active.php/password_active.php?s=ieugfshd&h=qwuyrbcq&i=1

Это загружает active.php снова, который снова выполняет свою роль, а затем снова отправляет тот же заголовок и загружает эту страницу:

http://localhost/project/active.php/password_active.php?s=ieugfshd&h=qwuyrbcq&i=1

Снова. И опять. И опять. После нескольких попыток ваш браузер понимает, что что-то идет не так, и останавливается.

Вы должны использовать абсолютный URL в заголовке HTTP:

header("Location: /project/password_active.php");

Также обратите внимание, как должны быть написаны HTTP-заголовки в соответствии со стандартом.


Случайные заметки:

  • Согласно именам файлов, $s а также $h оба пароля. Вам следует хэш их, и не передавая их через URL.
  • if($y || $z == 0) вряд ли будет работать, как вы думаете, так как он будет оцениваться как if y or not z в псевдокоде, в то время как вы, возможно, хотели if not y and not z для проверки пароля.

Кроме того, хорошая точка для звонка exit() после Location заголовок. Вы никогда не должны забывать об этом, так как это очень важно и может вызвать некоторые проблемы в ваших сценариях, если вы их забудете.

4

Другие решения

Попробуйте удалить / после file.php. Как index.php? I = sa

1

По вопросам рекламы [email protected]