#php #html #variables
#php #HTML #переменные
Вопрос:
У меня есть index.php в корневой папке, имеющей дело со всеми командами. На странице url «root /?a = a amp; b = b» у меня есть форма для POST для добавления нового элемента.
После отправки формы страница должна вернуться к «root /?a = a amp; b = b» и будет показан новый элемент (в настоящее время я использую header(‘Location: ‘ . $_SERVER[‘HTTP_REFERER’])).
Тем временем на странице есть div «root /?a=aamp;b =b». Если страница возвращается после отправки формы, она должна быть показана; в противном случае (ПЕРЕХОД на эту страницу), она должна быть скрыта.
В настоящее время я добавляю «amp;success = true» в конце URL-адреса. Но после отправки формы в URL-адресе появляется «amp;success = true», и если я обновляю страницу, хотя и не возвращаюсь из отправки формы, div все еще отображается.
Интересно, есть ли способ передать переменную вместо изменения URL после отправки формы. Кроме того, я не хочу использовать $_SESSION.
Спасибо за помощь!
Комментарии:
1. Помимо Session, другими методами являются $_COOKIE, $ _POST, файлы или базы данных. Что не так с сессионной переменной?
Ответ №1:
Это распространенная проблема, и самый простой способ, который я знаю, чтобы обойти это при использовании Post-Redirect-Get, — это установить cookie в ответе на POST, а затем немедленно удалить его в ответе на GET.
Ответ №2:
На странице, где вы хотите показать скрытый div, вам также нужно проверить referer
Если вы переходите на эту страницу со страницы с формой, вы должны показать div, иначе не показывать
Вы также можете сделать это, проверив REQUEST_METHOD на url «root /?a =a amp; b = b», например
if($_SERVER['REQUEST_METHOD'] == 'GET'){
// do what you wonna to do
$showForm = false;
} else if($_SERVER['REQUEST_METHOD'] == 'POST'){
// There is an action of submitting your form.
// Do this, after that show info
$showForm = true;
}
if($showForm){
echo '<div id="hiddenDiv">Hello hidden div</div>';
}
Ответ №3:
Этот ответ предполагает, что вы публикуете и перенаправляете обратно без какого-либо вмешательства пользователя. Если на странице обработки формы требуется действие пользователя, то большая часть этого не будет применяться…
Почти во всех формах, которые я пишу post, используется один и тот же URL (используйте action =»»). Это действительно значительно упрощает жизнь. Я бы решительно отказался от любого использования HTP_REFERER , поскольку это необязательное поле, которое полностью зависит от браузера. Большинство из них не отправляют ссылки или отправляют их только при определенных обстоятельствах.
Я бы также настоятельно рекомендовал вам пересмотреть, действительно ли необходимо перенаправлять из процессора форм. Я подозреваю, что вы делаете это, чтобы пользователь случайно не перепостил одно и то же, но все современные браузеры выдают нормальное сообщение, если пользователь пытается обновить POST-запрос, поэтому в этом не должно быть необходимости. Если вы не выполняете перенаправление из процессора форм, вы можете отобразить сообщение об успешном завершении на странице обработки, что устраняет любую необходимость использовать COOKIE или СЕАНС.