元素形式的属性操作值错误:必须为非空
Bad value for attribute action on element form: Must be non-empty
我的 php 文件上有一个常规表格,提交后必须回显一条消息。
通过将任何内容放入 action="",我能想到的显示消息的唯一方法是将其存储到会话中并在页面加载时显示它(如果存在会话集)。
现在一切正常,但 w3c 验证器说我有一个错误:
Bad value for attribute action on element form: Must be non-empty.
如何在不将 # 或 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 验证器 https://validator.w3.org/ 时,出现了以下内容:
Line 1, Column 1: no document type declaration; will parse without validation
The document type could not be determined, because the document had no correct DOCTYPE declaration. The document does not look like HTML, therefore automatic fallback could not be performed, and the document was only checked against basic markup syntax.
Learn how to add a doctype to your document from our FAQ, or use the validator's Document Type option to validate your document against a specific Document Type.
- 还有很多,但我没有把它们包括在这里。
解决方法:
您需要声明一个有效的文档类型和 <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 中生成了 following/similar 来源:
<form action="/folder/file.php" method="post">
虽然省略它,但生成了 action=""
,W3 验证器似乎发现它无效,并且正在为表单的操作寻找有效文件。
编辑:
鉴于新接受的答案(我的未被接受),请注意 如果 Javascript 被禁用,您的代码将无法正常工作。
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>
我试过
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
但是因为在我的例子中 $_SERVER["PHP_SELF"] 总是 index.php(.htaccess 中的一些规则确实强制这样做)解决方案不起作用。
在我的例子中,我不得不使用:
<form action="<?=htmlspecialchars($_SERVER["REQUEST_URI"]);?>" method="post">
此 return 到您之前所在的同一页面。
对我来说,解决方案是 删除 空的 action
属性。表单仍然有效,验证错误消失了。
我的 php 文件上有一个常规表格,提交后必须回显一条消息。 通过将任何内容放入 action="",我能想到的显示消息的唯一方法是将其存储到会话中并在页面加载时显示它(如果存在会话集)。
现在一切正常,但 w3c 验证器说我有一个错误:
Bad value for attribute action on element form: Must be non-empty.
如何在不将 # 或 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 验证器 https://validator.w3.org/ 时,出现了以下内容:
Line 1, Column 1: no document type declaration; will parse without validation
The document type could not be determined, because the document had no correct DOCTYPE declaration. The document does not look like HTML, therefore automatic fallback could not be performed, and the document was only checked against basic markup syntax.
Learn how to add a doctype to your document from our FAQ, or use the validator's Document Type option to validate your document against a specific Document Type.
- 还有很多,但我没有把它们包括在这里。
解决方法:
您需要声明一个有效的文档类型和 <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 中生成了 following/similar 来源:
<form action="/folder/file.php" method="post">
虽然省略它,但生成了 action=""
,W3 验证器似乎发现它无效,并且正在为表单的操作寻找有效文件。
编辑:
鉴于新接受的答案(我的未被接受),请注意 如果 Javascript 被禁用,您的代码将无法正常工作。
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>
我试过
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
但是因为在我的例子中 $_SERVER["PHP_SELF"] 总是 index.php(.htaccess 中的一些规则确实强制这样做)解决方案不起作用。
在我的例子中,我不得不使用:
<form action="<?=htmlspecialchars($_SERVER["REQUEST_URI"]);?>" method="post">
此 return 到您之前所在的同一页面。
对我来说,解决方案是 删除 空的 action
属性。表单仍然有效,验证错误消失了。