Проблема с двойной загрузкой данных PHP isset() и $_POST

Я знаю, что делаю что-то не так, используя комбинацию isset(), $_POST и $_GET, но мне интересно, какой самый простой и безболезненный способ решить мою проблему.

Проблема возникает, когда я отправляю HTML-форму... Она перезагружает страницу с данными публикации. Я фиксирую отправку с помощью функции php isset(), обрабатываю данные $_POST, а затем запускаю window.location, чтобы обновить страницу с некоторыми данными $_GET.

Например...

//example.php
...

<form action="" method="post">

  <input name="stage1name" type="text" class="textfield" size="22" value="<?php echo $ClaimRow['ClaimantName']; ?>">
  <input name="VehicleEngine" type="text" class="textfield" size="20" value="<?php echo $vehiclerow['VehicleEngine']; ?>">
  <input name="VehicleFuel" type="text" class="textfield" size="20" value="<?php echo $vehiclerow['VehicleFuel']; ?>">

  <input name="submitInfo" type="submit" value="<?php echo $LANG_Claims_Change_Info; ?>" />

</form>

...
<?php  

    if (isset($_POST['submitInfo']))
    { 
        $stage1name= mysqli_real_escape_string($db, $_POST['stage1name']);
        $VehicleEngine= mysqli_real_escape_string($db, $_POST['VehicleEngine']);
        $VehicleFuel= mysqli_real_escape_string($db, $_POST['VehicleFuel']);
        mysqli_query($db, "DO SOME COOL SQL HERE");

        //I've done what I need to do so lets reload the page with the updated data

        echo "<script>window.location='example.php?vehicle=" . $vehicleID . "&claimTab=Personal'</script>";

    }
?>

Как я уже говорил, этот метод прекрасно работает, однако пользователь получает эффект «двойной нагрузки» и вызывает очень эпилептические припадки.

Есть идеи, как лучше с этим бороться?

Спасибо

ИЗМЕНИТЬ – Дополнительный пример

Я понял, что этот пример может не иметь полного смысла, поэтому я собрал другой пример, который, надеюсь, будет.

...

<form action="" method="post">  
    <select name="addresstype[]" id="multiselectfrom" onchange='this.form.submit();' size="9" style="width:110px; text-align:center;">
        <option style="<?php if ($AddType == 'Claimant') { echo'background-color:#9AD3F1 !important;'; } ?>" value="Claimant"><?php echo $LANG_Claims_Claimant; ?></option>
        <option style="<?php if ($AddType == 'Vehicle') { echo'background-color:#9AD3F1 !important;'; } ?>" value="Vehicle"><?php echo $LANG_Claims_Vehicle; ?></option>
        <option style="<?php if ($AddType == 'Repairer') { echo'background-color:#9AD3F1 !important;'; } ?>" value="Repairer"><?php echo $LANG_Claims_Repairer; ?></option>
        <option style="<?php if ($AddType == 'Insurer') { echo'background-color:#9AD3F1 !important;'; } ?>" value="Insurer"><?php echo $LANG_Claims_Insurer; ?></option>
        <option style="<?php if ($AddType == 'Fleet') { echo'background-color:#9AD3F1 !important;'; } ?>" value="Fleet"><?php echo $LANG_Claims_Fleet; ?></option>
    </select>
</form>

...

<?php
    if (isset($_POST['addresstype']))
    { 
        foreach ($_POST['addresstype'] as $addresstype) {
            $addresstype2 = $addresstype;
        }
        echo "<script>window.location='claims.php?claimID=" . $claim . "&claimTab=Addresses&AddressType=" . $addresstype2 . "'</script>";
    }
?>

Предполагается, что в приведенном выше примере принимается результат формы и изменяется window.location в зависимости от результата формы. Это работает, однако при этом дважды загружает страницу.


person Ryan    schedule 08.02.2016    source источник
comment
header('Location: example.php?vehicle=' . $vehicleID . '&claimTab=Personal'); затем die();   -  person cmorrissey    schedule 08.02.2016
comment
вы снова отправляете данные на той же странице example.php, и я не видел никакого использования отправки значений параметра в виде строки запроса.   -  person Anant Kumar Singh    schedule 08.02.2016
comment
добавление штампа(); после того, как window.location ничего не делает, так как он уже убил себя. A-2-A Я считаю, что мой пример не очень хорош. Я опубликую другой пример, и, возможно, это будет иметь больше смысла.   -  person Ryan    schedule 09.02.2016
comment
почему вы не используете ajax jquery?   -  person Amol Navsupe    schedule 09.02.2016
comment
можете привести пример? Я использую ajax для некоторых таблиц, но я не на 100% с ajax.   -  person Ryan    schedule 09.02.2016


Ответы (2)


Заменить дворец:

echo "<script>window.location='example.php?vehicle=" . $vehicleID . "&claimTab=Personal'</script>";

С участием:

echo "<META HTTP-EQUIV = 'Refresh' Content = '0; URL =example.php?vehicle=" . $vehicleID . "&claimTab=Personal'>";
person FarZan Takhsha    schedule 09.02.2016
comment
К сожалению, не работает. В тех случаях, когда это было бы применимо, он по-прежнему загружается дважды, а в случаях, когда я пытаюсь передать результат формы, то есть в дополнительном примере он не передает дополнительное значение, он просто обновляется. - person Ryan; 09.02.2016

После долгих испытаний. Оказывается, CMorriesy был прав. Однако для дальнейшего использования вам нужно будет включить output_buffering = on в php.ini, а также добавить <?php ob_start(); ?> в самую первую строку вашего кода.

header('Location: example.php?vehicle=' . $vehicleID . '&claimTab=Personal'); die();

person Ryan    schedule 12.02.2016