2017-10-17 85 views
-4

很明显,我知道array_key_exists没有给出误报。我做错了什么。我只是想抓住你的注意力。 :)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); 
} 
?> 

当我不提交电子邮件或密码,回声$误差输出什么。 print_r($ _ POST)输出我发送的任何内容。我在这里错过了什么?

+0

请更改您的标题以适当反映您的问题。点击诱饵是错误的。 “很显然,我知道array_key_exists并没有给出误报。” – kchason

+0

我不知道该怎么说。 – Pipkin

+1

*“我在这里错过什么?”* - 这是html。 –

回答

1

$ _POST ['email']和['password']存在但是为空,您应该看到它与print_r($_POST); 您应该检查值而不是密钥。

0

我认为你应该使用

empty($_POST['email']) 

,而不是array_key_exists

0

为什么不检查empty($_POST['email'])而不是!array_key_exists?

两者都会检查密钥是否存在,并检查它们是否不为NULL。

空将additionaly检查它是否没有空数组,0(int和作为字符串),空字符串等

编辑

我迟到

+0

由于POST值永远不能为null,所以'isset'在这里不会对'array_key_exists'做任何事情。 – deceze

+0

纠正它们是否来自html表单。这里只考虑POST数据转发,例如当有人没有添加表单字段时,其余的客户端请求 –

+1

HTTP没有'null'类型。这一切都只是字符串。没有HTTP POST值可以是'null'。 – deceze

-1

我想补充一个隐藏输入到您的表格

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

然后您可以检查表单是否已提交,而不是检查e存在你的$_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); 
} 
?> 

我也假设你(会)有一些其他形式的检验,以确保电子邮件地址和密码满足在这里省略了一些基本要求。