使用isset()验证表单字段

时间:2011-01-17 02:30:20

标签: php

验证我的表单字段不为空时遇到问题。我以为我过去曾使用过isset但我在下面遇到问题。我知道我可以用==“”做到这一点,但想以这种方式弄明白。

if(isset($_POST['submit'])){
$error= false;
 if (isset($_POST['name'])){$name=$_POST['name'];}else{$error=true; $error_message="enter a name"; echo "no name";};

     if(!$error){
                //SUBMIT TO DATABASE
      }else{  echo $error_message;
      }

}

但我一直收到error_message未设置的错误。

3 个答案:

答案 0 :(得分:5)

Isset()只测试变量是否存在。在POST表单中几乎总是如此(即使变量为空)。为了确保它们不是,请使用empty()测试。 这是代码:

if(count($_POST) > 0){
    $error = false;
    if (!empty($_POST['name']))
        $name = $_POST['name'];
    else{
        $error = true;
        $error_message = "enter a name";
        echo "no name";
    }
    if(!$error)
        //SUBMIT TO DATABASE
    else
        echo $error_message;
}

你的第一个其他后面的分号也有语法错误。 注意,设置为0的变量被检测为空。查看http://php.net/manual/en/function.empty.php

答案 1 :(得分:1)

首先,我建议使用此方法确定是否有帖子。我通常使用以下之一:

if($_POST)

OR

if(count($_POST) > 0)

第二个isset()调用(检查名称)没问题。尝试使用完整大写字母将$ false变量设置为TRUE或FALSE。您还可以分别使用0和1表示TRUE和FALSE;它们可以正常使用if($ error)和if(!$ error)。我相信这就是你的问题所在。也就是说,$ error从未正确设置,因此它实际上不是TRUE,而是'false'。但是,因为没有设置$ _POST ['name'],而且$ error_message也没有设置。如果这对您有用,请告诉我。如果没有,我会进一步调查。

答案 2 :(得分:1)

空的PHP字符串不为null:

$a = '';
echo isset($a); //true
echo $a == ''; //true

使用==代替

您还可以使用empty($var)功能