У меня есть обычная форма в моем php-файле, после того, как она отправлена, она должна эхо-сообщения. Помещая что-либо в action = "", единственный способ, которым я могу думать о отображении сообщения, – это сохранить его в сеансе и отобразить его, когда страница загружается, если есть набор сеансов.
Все работает отлично, как сейчас, но w3c validator говорит, что у меня есть ошибка:
Плохое значение для действия атрибута для элемента: должно быть не пусто.
Как я могу исправить эту ошибку, не помещая # или index.php в поле действия?
РЕДАКТИРОВАТЬ:
<form action="" method="post"> <input type="email" name="email" placeholder="Enter your email"> <input type="submit" name="submit" value="SEND"> </form> <?php if(isset($_POST['submit']) && isset($_POST['email'])){ if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false){ echo 'This isn\'ta valid email'; }else{ echo 'Great'; } } ?>
Здесь хранитель W3C HTML Checker (валидатор). Если ваша цель состоит в том, чтобы заставить контрольную панель не испускать эту ошибку, один из способов сделать это – пойти и поставить #
в качестве значения для атрибута action
в свой HTML-код, но затем удалить его с помощью JavaScript, например:
<form action="#" method="post"> <script>document.querySelector("form").setAttribute("action", "")</script> <input type="email" name="email" placeholder="Enter your email"> <input type="submit" name="submit" value="SEND"> </form>
При использовании валидатора W3C https://validator.w3.org/ было представлено следующее:
Строка 1, столбец 1: объявление типа документа; будет анализироваться без проверки
Тип документа не может быть определен, поскольку документ не содержит правильной декларации DOCTYPE. Документ не похож на HTML, поэтому автоматический откат не может быть выполнен, и документ проверяется только на синтаксис базовой разметки.
Узнайте, как добавить doctype в документ из нашего FAQ или использовать параметр Тип документа валидатора для проверки вашего документа на определенный тип документа.
Решение:
Вам нужно объявить допустимые теги doctype и <head><title>
, так как это также приведет к ошибкам, если они опущены.
Затем используйте action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"
Как я сказал в комментариях.
Теперь ваш код будет проверяться следующим образом:
<!DOCTYPE html> <head> <title>Test page</title> </head> <body> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post"> <input type="email" name="email" placeholder="Enter your email"> <input type="submit" name="submit" value="SEND"> </form> </body> </html> <?php if(isset($_POST['submit']) && isset($_POST['email'])){ if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false){ echo 'This isn\'ta valid email'; }else{ echo 'Great'; } } ?>
Использование action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"
следующее / подобное в источнике HTML:
<form action="/folder/file.php" method="post">
В то время как опустив это, вы создали action=""
который, как представляется, валидатор W3 нашел недействительным и ищет действительный файл для действия формы.
Редактировать:
В свете недавно принятого ответа (мое не принято), обратите внимание, что ваш код не будет работать должным образом, если Javascript будет отключен.