#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-форма
- что вы видите в строке запроса после публикации формы.
и ошибка…
- используете ли вы какие-либо перенаправления заголовков при обработке формы?