2017-10-17 83 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); 
} 
?> 

我也假設你(會)有一些其他形式的檢驗,以確保電子郵件地址和密碼滿足在這裏省略了一些基本要求。