元素表单上属性操作的值不正确:必须为非空

Bra*_*eal 7 html php w3c-validation

我的php文件上有一个常规表单,在提交之后它必须回显一条消息.通过在action =""中添加任何内容,我能想到显示消息的唯一方法是将其存储到会话中,并在页面加载时显示它(如果有会话集).

一切都工作得很好,但是w3c验证器说我有一个错误:

元素表单上属性操作的值不正确:必须为非空.

如何在不必将#或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\'t a valid email';
        }else{
           echo 'Great';
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

Fun*_*ner 6

在使用W3C验证器https://validator.w3.org/时,提供了以下内容:

第1行,第1列:无文件类型声明; 将进行解析而无需验证

无法确定文档类型,因为该文档没有正确的DOCTYPE声明.该文档看起来不像HTML,因此无法执行自动回退,并且仅根据基本标记语法检查文档.

了解如何从常见问题解答中将文档类型添加到文档中,或使用验证程序的文档类型选项根据特定文档类型验证文档.

  • 还有更多,但我没有在这里包括它们.

解决方案:

您需要声明一个有效的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\'t a valid email';
        }else{
           echo 'Great';
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)
  • 旁注:您也可以将PHP放在最上面,两种方法都可以正确验证.

使用action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"在HTML源代码中生成以下/类似内容:

<form action="/folder/file.php" method="post">

虽然省略action=""了W3验证器似乎发现无效并且正在为表单的操作寻找有效文件.


编辑:

根据新接受的答案(我的未被接受),请注意如果禁用Javascript,您的代码将无法正常运行.


sid*_*ker 6

这里是W3C HTML Checker(验证器)的维护者.如果您的目标只是让检查器不发出错误,那么一种方法是继续将HTML中#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>
Run Code Online (Sandbox Code Playgroud)

  • 解决损坏的“验证器”的方法。 (2认同)