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


Bad value for attribute action on element form: Must be non-empty

我的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';
        }
    }
?>

W3C HTML检查器(验证器(的维护者。如果您的目标只是让检查器不发出错误,那么一种方法是继续将#作为HTML源中action属性的值,然后使用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添加到文档中,或者使用验证器的"文档类型"选项根据特定的文档类型验证文档。

  • 还有很多,但我没有把它们包括在这里

解决方案:

您需要声明一个有效的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';
        }
    }
?>
  • 旁注:您还可以将PHP放在上面,这两种方法都经过了正确验证

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

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

在省略它的同时,W3验证器似乎发现action=""无效,并且正在为表单的操作寻找有效的文件。


编辑:

鉴于新接受的答案(我的答案是不接受的(,请注意如果禁用Javascript,您的代码将无法正常工作。

我试过

  <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">

但是由于在我的案例中$_SERVER["PHP_SELF"]总是index.PHP(.htaccess中的一些规则确实强制执行了这一点(,因此解决方案不起作用。

在我的情况下,我不得不使用:

<form action="<?=htmlspecialchars($_SERVER["REQUEST_URI"]);?>" method="post">

这将返回到您以前的页面。

对我来说,解决方案是删除空的action属性。表单仍然有效,并且验证错误已经消除。