Ошибка расположения заголовка Php

#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>";
?>