如果字段为空,则显示错误-PHP
如果任何字段为空,我希望在同一页上显示错误 我已经有了这个功能,但空错误会在页面加载时立即显示,而不是在提交空字段时显示如果字段为空,则显示错误-PHP,php,forms,validation,submit,Php,Forms,Validation,Submit,如果任何字段为空,我希望在同一页上显示错误 我已经有了这个功能,但空错误会在页面加载时立即显示,而不是在提交空字段时显示 <?php // Required field names $required = array('triangleSide1', 'triangleSide2', 'triangleSide3'); // Loop over field names, make sure each one exists and is not empty
<?php
// Required field names
$required = array('triangleSide1', 'triangleSide2', 'triangleSide3');
// Loop over field names, make sure each one exists and is not empty
$error = false;
foreach($required as $field)
{
if (empty($_POST[$field]))
{
$error = true;
}
}
if ($error)
{
echo "ALL FIELDS ARE REQUIRED";
}
else
{
echo header('Location: formSuccess.php');
}
?>
有什么想法吗?--更新//我尝试了所有答案,到目前为止没有任何结果如果您有输入,您知道该输入将始终与表单一起提交,例如隐藏的输入:
<input type='hidden' name='formsubmit' value='1'>
另外,您也不会回显header()的返回值。请尝试isset而不是test of empty
if (empty($_POST[$field]))
变成
if (isset($_POST[$field]))
将您在帖子中查看的所有内容包装在以下内容中:
if (strtolower($_SERVER['REQUEST_METHOD']) == 'post')
{
// Your code containing checks here
}
这样,它只会在使用POST请求时触发。然后需要javascript验证。在现代浏览器中,向文本字段添加'required=“required'”同样有效()只需将if($error)更改为if($error=true),if语句不知道如何处理$error,可能只是检查它是否存在。添加=true不会改变任何东西。遗憾的是,
=
是一个赋值运算符,如果($error=true)不起作用(或者至少不会以您认为的方式起作用),那么将比较运算符更改为if($error==true)
会,但这与PHP语言中的if($error)
完全相同,因此将其更改为那样是毫无意义的:只要if($error)就没有问题了
只要你没有严格评估类型。不太明白我对输入类型隐藏行做了什么?如果你还没有保证设置的输入,那么你可以将该隐藏输入添加到表单中,这样无论用户输入什么,该隐藏值都会被发送,提供了一种可靠的方法来知道何时提交表单,这实际上会让事情变得更糟-empty()
检查变量是否已设置并且具有真实的ish值,isset()
仅检查变量是否已设置。。。在这里,只要设置了$\u POST[$field]
(而不是未设置时),不管它是否保存任何数据,都不会否定isset()
,就会触发错误。真的吗?那是错误的。。。您正在设置$check
,然后检查是否未设置?我想这可能比之前我不得不投反对票的答案更错误。。。OP在问题if(空($\u POST[$field])中有什么内容
完全正确。请确保此验证代码包装在一个条件下,例如在if语句中,并且仅当在$\u POST super global中设置了“submit”值时才会执行,也就是说表单已提交Checking isset for$check将确保没有任何必填字段留空或未设置。您正在从可能具有空值的必填字段数组中读取数据。$check=null代码><代码>设置($check)==true
<代码>空($check)==true
。。。您的条件$check=trim($\u POST[$field])
将1:分配$check=null
和2:抛出PHP“未定义索引”通知。在这种情况下,如果(!isset($check)
将永远不会发生,因为isset($check)
将永远不会计算为false
…实际上trim()
将把它转换为字符串,因此$check=trim($\u POST[$field])
当表单尚未发布时,将分配$check=“”
-无论哪种方式,它仍然是定义的。你是什么意思,相同的结果?如果你用这种方式包装代码,它只会在post请求时触发,因此这一定意味着你已经通过post到达页面。在这种情况下,你必须添加额外的检查。你使用的PHP版本是什么?empty
在不同的版本中表现不同此外,对于复选框,如果设置了键,则必须使用isset()
进行检查,因为如果未选中,它们将不会显示。
OR another way ( I have something similar in one of my pages)
function check_presence($value){
return isset($value) && $value!=="";
}
function validate($required){
global $error
foreach($required as $field){
$value = trim($_POST[$field]);
if (!check_presence($value)){
$error = true;
}
}
return $error;
}
then on the page containing the form and its validation code
$required = array('triangleSide1', 'triangleSide2', 'triangleSide3');
if(isset($_POST["submit"]){
$error = validate($required);
if ($error){
echo "ALL FIELDS ARE REQUIRED";
}
}
OR another way ( I have something similar in one of my pages)
function check_presence($value){
return isset($value) && $value!=="";
}
function validate($required){
global $error
foreach($required as $field){
$value = trim($_POST[$field]);
if (!check_presence($value)){
$error = true;
}
}
return $error;
}
then on the page containing the form and its validation code
$required = array('triangleSide1', 'triangleSide2', 'triangleSide3');
if(isset($_POST["submit"]){
$error = validate($required);
if ($error){
echo "ALL FIELDS ARE REQUIRED";
}
}