array_key_exists是否给出误报?

时间:2017-10-17 14:54:20

标签: php arrays

显然我知道array_key_exists没有给出误报。我做错了什么。我只想引起你的注意。 :)

但是说真的。我这样做是为了练习。

这是我的代码:

<?php
$error = "";
if($_POST) 
{   
    if (!array_key_exists('email',$_POST)) {
        $error .= "<p>You did not submit an e-mail address. Please try again.</p>";
    }
    if (!array_key_exists('password',$_POST)) {
        $error .= "<p>You did not submit a password. Please try again.</p>";
    }
    echo $error;

    print_r($_POST);
}
?>

如果我不提交电子邮件或密码,echo $error则不会输出任何内容。 print_r($_POST)输出我发送的任何内容。

我在这里缺少什么?

4 个答案:

答案 0 :(得分:1)

$_POST['email']['password']存在但是空的,您应该看到print_r($_POST);

您应该检查value而不是key

答案 1 :(得分:0)

我认为你应该使用

empty($_POST['email'])

而不是array_key_exists

答案 2 :(得分:0)

为什么不检查function doprint { param( [string[]]$a ) $a[0] ; $a[1] } $arg = @('yes','no') doprint $arg 而不是empty($_POST['email'])

两者都会检查!array_key_exists是否存在,并检查它们是否不是key

NULL还会检查它是否为empty数组,0(作为int和作为字符串),空字符串等。

修改

我迟到了

答案 3 :(得分:-1)

我会在表单中添加隐藏的输入

<input type="hidden" name="formSubmitted" value="1" />

然后您可以检查已提交的表单,而不是检查您的$_POST数组是否存在。此外,如果您的字段在提交时都是空的,则会提供单独的机制来识别,而不是假设您的两个字段都有效。

<?php
$error = "";

if(isset($_POST['formSubmitted']) && $_POST['formSubmitted'] == 1) {    
    if (!array_key_exists('email',$_POST)) {
        $error .= "<p>You did not submit an e-mail address. Please try again.</p>";
    }

    if (!array_key_exists('password',$_POST)) {
        $error .= "<p>You did not submit a password. Please try again.</p>";
    }

    echo $error;

    print_r($_POST);
}
?>

我还假设您(将)有其他形式的验证,以确保电子邮件地址和密码符合此处未显示的一些基本要求。