2013-05-27 65 views
0

試圖學習PHP與測試和嘗試方法我掙扎着isset()。 這裏是我的代碼有:問題與Isset()函數

<form action="validate.php" method="POST"> 
    <label title="User Input"> Custom Header Name</label> 
    <input type="text" name="user_input"> 
    <button type="submit" id="pageName">Submit</button> 
</form> 

和PHP文件是

<?php 
    if(isset($_POST['user_input'])) 
    { 
    echo "Input Is Set"; 
    } else{ 
      echo "Not Yet Set"; 
      } 
?> 

我這兩種情況下(空或填充輸入),我得到的第一個消息「輸入設置」的結果! 你能讓我知道爲什麼會發生這種情況嗎?

+1

很確定這是因爲即使它沒有填寫它仍然發送user_input的空白帖子。 isset只檢查是否存在內容。 – lemondrop

+0

Hola lemondrop,但我測試了像$ name這樣的litral php變量的isset()函數;它工作得很好如何不在這裏工作 –

+0

只需檢查他們有什麼你需要的答案。 – lemondrop

回答

2

這是因爲user_inputisset一旦形式也提交如果沒有填充它,以避免錯誤只需添加一個!empty檢查

if(isset(($_POST['user_input'])) && (!empty($_POST['user_input']))) 
+1

正是我打字。 –

+0

嗨法比奧,謝謝reply.Honestly我不想驗證輸入現在。事實上,我的問題是,如果isset()函數是檢查變量是否已設置?那麼爲什麼它不在這裏工作? –

+0

@MonaCoder正如我告訴過你的,這是因爲如果它沒有被填充,當表單被提交時它仍然發送一個空值,因爲isset()將是真的,所以真的需要檢查是否與空不同。 – Fabio

0

你可以嘗試像

<?php 
    if($_POST['user_input'] != '') 
    { 
    echo "Input Is Set"; 
    } else{ 
      echo "Not Yet Set"; 
      } 
?> 

或者使用if (!empty($_POST['user_input'])

檢查,看它是否持有任何價值。這應該工作

+1

,它會被通知,如果它沒有設置:) – Robert

1

相反isset,你可以這樣做:

<?php 
    if(isset($_POST['user_input'])) 
    { 
    if (!empty($_POST['user_input'])) { 
     echo "Input Is Set"; 
    } else { 
     echo "Input is empty!"; 
    } 
    } else{ 
    echo "Not Yet Set"; 
    } 
?> 

更多信息:http://php.net/manual/en/function.empty.php

0

你檢查它的設置,但你應該檢查如果它是空的。

短版:

<?php 
    echo isset($_POST['user_input']) && !empty($_POST['user_input'] ? "Input is set" : "not set"; 
?> 
0

我推薦你一起工作的strlen()有2個原因:

if (strlen($_POST['user_input']) > 0 && strlen($_POST['user_input']) < 80) 
{ ... } 
  1. 你可以肯定的變量沒有被剛剛成立,但它也確實包含數據
  2. 您應該從POST和GET中限制字符串以避免長時間注入查詢。

最好的是讓自己的包裝安全和isset檢查在一個小幫手功能。