Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果字段为空,则显示错误-PHP_Php_Forms_Validation_Submit - Fatal编程技术网

如果字段为空,则显示错误-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";
   }
}