#php
#php
Вопрос:
У меня проблема с расположением заголовка php, что я делаю, так это получаю некоторые данные из своей базы данных, а затем выполняю проверку if else, и в зависимости от этого я перенаправляю пользователя на следующую страницу, вот мой код
if($claim_status == 'Pending Verification')
{
$page = "pending-verification.php?verifyid=".$id."";
}
elseif($claim_status == 'Pending PO Clearance')
{
$page = "po-clearance.php?verifyid=".$id."";
}
elseif($claim_status == 'Payment Approved')
{
$page = "payment-approved.php?verifyid=".$id."";
}
elseif($claim_status == 'Payment Receipt')
{
$page = "confirm-claim.php?verifyid=".$id."";
}
elseif($claim_status == 'Billing')
{
$page = "billing.php?verifyid=".$id."";
}
elseif($claim_status == 'Billed')
{
$page = "billed.php?verifyid=".$id."";
}
header("Location:$page");
$claim_status
это переменная, которую я получаю из своей базы данных.
Ошибка, которую я получаю (на этой странице есть цикл перенаправления), как я могу позаботиться об этом, пожалуйста, помогите мне
Спасибо
Комментарии:
1. Попробуйте заменить последнюю инструкцию заголовка на print
header("Location:$page");
->print("Location:$page");
и посмотрите, что будет напечатано.2. Кроме того, действуют ли у вас какие-либо правила перезаписи?
3. @SalmanA классный чувак, я не был уверен, что это можно сделать большими пальцами
4. вы не должны использовать так много других if, вместо этого используйте массив
5. …или оператор case, или функциональное отображение.
Ответ №1:
Похоже, что вы создаете Location
заголовок независимо от того, что ( header
оператор не находится внутри if
… по крайней мере, не в коде, которым вы поделились), поэтому он всегда будет перенаправляться (и всегда с неправильным заголовком местоположения, даже когда $page
определен, он не может быть абсолютным URI).
Выдает только Location
, когда вы действительно хотите перенаправить.
Ответ №2:
Не отвечаю на ваш вопрос, но вам следует избегать многих других, если. Ваш код должен выглядеть следующим образом:
$allowedStatus = array (
'Pending Verification' => 'pending-verification',
'Pending PO Clearance' => 'po-clearance'
//> Etc
);
На этом этапе легко создать свой $page
var
$page = $allowedStatus[$claim_status] . '.php?verifyid=' . $id;
Ответ №3:
Используйте case вместо инструкций if-elsif. Кроме того, убедитесь, что перед header() нет другого вывода php;
switch($claim_status) {
case 'Pending Verification':
$page = "pending-verification.php?verifyid=".$id."";
break;
case 'Pending PO Clearance';
$page = "po-clearance.php?verifyid=".$id."";
break;
case 'Payment Approved';
$page = "payment-approved.php?verifyid=".$id."";
break;
case 'Payment Receipt';
$page = "confirm-claim.php?verifyid=".$id."";
break;
case 'Billing';
$page = "billing.php?verifyid=".$id."";
break;
case 'Billed';
$page = "billed.php?verifyid=".$id."";
break;
default:
$page = ''; //Set a default rediraction page in case $claim_status is invalid.
break;
}
header("Location:$page");
Комментарии:
1. это так же плохо, как и все остальное, если, прочитайте мой ответ, чтобы получить лучший код
2. Я увидел это после того, как опубликовал ответ. Намного лучшая версия. Единственное, что вам нужно сделать, это проверить, существует ли ключ массива, чтобы $page всегда был действительным. если (array_key_exists($claim_status, $allowedStatus)) { $page = $allowedStatus[$claim_status] . ‘.php?verifyid=’ . $id; } else { $page = «error_handling.php «; }
Ответ №4:
Вы можете использовать javascript, чтобы остановить цикл перенаправления
<?php
$redirect_page = 'page.php';
echo "<script type='text/javascript'>window.location=$redirect_page</script>";
?>