Я не могу использовать GET и POST одновременно в PHP

#php #forms #post #get

#php #формы #Публикация #получить

Вопрос:

В верхней части моей страницы у меня есть это:

 <?php $id = $_GET['id']; ?>
  

Затем у меня есть некоторые условия проверки формы, которые считываются из POST:

 if (isset($_POST['completeSubmit'])) {
        //code
}
  

И, наконец, у меня есть HTML-форма, которая выглядит следующим образом:

 <form action="<?php echo $_SERVER['PHP_SELF']."?id=$id"; ?>" name="complete" method="post">
<input type="submit" id="textButton" name="completeSubmit" value="[mark as complete]">
</form> 
  

Доступ к странице изначально осуществляется с помощью GET с переменной id, подобной этой:

 http://website.com/page.php?id=1
  

Все последующие отправки формы (которые перенаправляются на ту же страницу) завершаются неудачей. Я знаю, что вы не можете отправлять как GET, так и POST в одном запросе, но, поскольку моя форма отправляется с $_SERVER['PHP_SELF']."?id=$id" использованием POST, разве это не должно работать? Я впервые пытаюсь это сделать, поэтому вполне возможно, что я упустил что-то тривиальное.

Комментарии:

1. Это должно работать по своей сути — возможно, вы захотите изучить другие области на предмет возможных ошибок..

2. Да, это должно сработать. ПОЛУЧЕНИЕ и ПУБЛИКАЦИЯ одновременно действительно возможны. Вы можете попробовать проверить HTML-код вашей формы, чтобы увидеть, правильный ли атрибут action. Сброс переменных $_GET и $ _POST. на вашей целевой странице также может быть полезно.

3. обычно атрибуты ID и NAME должны быть равны…

4. @jeanreis извините, что разочаровал вас, но ПОЛУЧИТЬ и ОПУБЛИКОВАТЬ одновременно совершенно невозможно.

5. ответ @tandu здесь лучше всего подходит — хотя это правда, что вы не можете одновременно получать HTTP и HTTP POST, переменные $ _GET должны быть доступны из запроса POST

Ответ №1:

Вы можете использовать get и post одновременно, но не должны. Если вы хотите продолжить отправку идентификатора, это так просто, как:

 <form ...
   <input type="submit" ...
   <input type="hidden" name="id"
      value="<?php echo htmlspecialchars($_GET['id'], ENT_QUOTES); ?>" />
</form>
  

Комментарии:

1. 1 для этого решения просто отправьте начальное значение $_GET[‘id’] вместе с вашим post-запросом. Это самый чистый способ.

2. Я тоже пробовал это, и, похоже, это не сработало. Я продолжу расследование, спасибо за совет.

3. Заставил это работать, оказывается, там была небольшая ошибка, скрывающаяся вокруг. Я выбрал этот метод, поскольку он более чистый.

4. Я знаю, что это действительно старый пост, но на всякий случай: ПОЧЕМУ нельзя использовать post и get одновременно? Есть ли что-то особенно неправильное в этом, о чем я должен знать? Или это просто считается «грязным»? Моя ситуация: я получаю сообщение, сгенерированное извне (результат транзакции платежа), и могу только запрограммировать, где его получить. Поэтому я ввел параметр в URL, чтобы добавить к нему свои собственные данные.

Ответ №2:

Конечно, вы не можете использовать методы GET и POST одновременно.

Однако вы можете использовать строку запроса при отправке формы с использованием метода POST, который используется для заполнения массива $_GET.

Чтобы найти определенную ошибку, вы должны предоставить больше информации. По крайней мере, 2 вещи:

  • как выглядит HTML-форма
  • что вы видите в строке запроса после публикации формы.

и ошибка…

  • используете ли вы какие-либо перенаправления заголовков при обработке формы?