У меня есть форма отправки сообщений на ту же страницу, чтобы удалить изображение на сервере с помощью php. На этой странице есть несколько форм и представлены, и по какой-то причине он не будет работать с использованием Internet Explorer. Прекрасно работает с Chrome и Firefox. После нажатия отправить страницу выполняет код в первом, если (isset ($ _ POST не правильный ниже).
HTML
<form action="owner.php" method="post" class="registration_form"> <input type="text" name="album_name" /> <input type="text" name="album_code" /> <input type="hidden" name="add_album" value="TRUE" /> <input type="submit" value="Create Album" /> </form> <form action="owner.php" method="post" class="registration_form"> <input type="hidden" name="albumdelete" value="TRUE" /> <input type="radio" name="album" value="'.$album[$key_Number].'"> <input type="submit" value="Delete"> </form> <form action="owner.php" method="post"> <input type="hidden" value="true" name="picdelete"> <input type="hidden" name="picture" value="'+d[o].src+'"> <input type="submit" value="Delete This Picture" > </form>
PHP
if (isset($_POST['add_album'])) { all of my add album code **********This is the code it runs***** } else if (isset($_POST['albumdelete'])) { }else if (isset($_POST['picdelete'])) { *********This is the code it should run********* Works fine on all browsers I test except IE. Tried multiple computers }
Использование isset ($ _ POST ['submit']), чтобы проверить, была ли форма опубликована или отправлена, является плохой практикой, потому что она несовместима с Internet Explorer.
Этот метод зависит от кнопки отправки формы, присутствующей в массиве $ _POST. Проблема заключается в том, что Internet Explorer не отправляет кнопку отправки в качестве переменной post, если пользователь нажал клавишу ввода, чтобы отправить форму.
Вот типичный пример:
PHP-код
<?php if(isset($_POST['submit'])) { // a form was submitted (POSTED) } ?>
Я вижу это все время даже с промежуточными и выше программистами. Возможно, проблема связана со многими низкими качествами или устаревшими онлайн-учебниками PHP, которые доступны.
Если вы полагаетесь на этот метод, и пользователь использовал клавишу ввода для отправки формы, то, скорее всего, произойдет то, что страница будет просто обновляться. Очевидно, это может быть очень неприятно для пользователя, особенно если это длинная форма. Это отказ в доступе, пользователи всегда должны использовать ключ ввода для отправки форм. Примером может служить специальный браузер, который обслуживает отключенных пользователей, которые не могут использовать мышь, или пользователя с любым браузером без мыши.
Решение
Лучшей практикой проверки наличия формы является использование переменной сервера REQUEST_METHOD. Эта переменная будет установлена в POST, если форма была отправлена (при условии, что форма имеет метод POST. Ниже приведена наилучшая практика для обнаружения отправки формы с PHP.
PHP-код
<?php if($_SERVER['REQUEST_METHOD'] == 'POST') { // a form was submitted (POSTED) } ?>
Вышеупомянутое работает во всех браузерах, поскольку оно не зависит от кнопки отправки, присутствующей в пост-переменных.