2011-04-10 98 views
1

我是新來的PHP的世界,並放在一起的表格,乘以一個輸入的值。但是,當我嘗試驗證某人是否未輸入任何值來返回錯誤消息時,它會顯示該消息。我的代碼如下。感謝您能否提出改進建議。這是爲什麼!isset似乎不起作用?

<?php 

$counter = 0; 

if(isset($_POST["submit"])) { 
    $start = $_POST["start"]; 
    $end = $_POST["end"]; 
    $multiply = $_POST["multiplication"]; 

// if($_POST["start"] == "" && $_POST["end"] == "" && $_POST["multiplication"] == "") { 
    // print "Please enter some values"; 
// } 

if(!isset($_POST["start"], $_POST["end"], $_POST["multiplication"])) { 
    print "Please enter some values"; 

} 

// for($start;$start<$end;$start++) { 
    // $counter = $counter +1; 
    // $multiplication = $counter * $multiply; 
    // print "$counter <br />"; 
    // print "$counter multiplied by $multiply = $multiplication <br />"; 

// } 

} 

?> 
<html> 
<head> 
    <title>Sample Multiplication</title> 
</head> 
<body> 
    <form name="multiply" method="post" action="multiplication_sample.php"> 
     <input type="text" name="start" value="<?php if(isset($_POST["start"])) { print $start; } ?>"> 
     <input type="text" name="end" value="<?php if(isset($_POST["end"])) { print $end; } ?>"> 
     <input type="text" name="multiplication" value="<?php if(isset($_POST["multiplication"])) { print $multiply; } ?>"> 
     <input type="submit" name="submit" value="submit"> 
    </form> 

<?php 

if(isset($_POST["submit"])) { 

for($start;$start<$end;$start++) { 
    $counter = $counter + 1; 
    $multiplication = $counter * $multiply; 
    print "$counter multiplied by $multiply = $multiplication <br />"; 
} 

} 

?> 
</body> 
</html> 
+0

如果用戶沒有爲每個表單域指定任何值,我希望表單顯示消息。 – PeanutsMonkey 2011-04-10 22:16:59

回答

7

我認爲isset將確保一個變量不是NULL,然而,「空」是不一樣的空。如果你提交一個空白值的表單,變量仍然被設置,它只是空的。

+0

那麼下面的代碼驗證空表單字段的唯一方法? if($ _ POST [「start」] ==「」&& $ _POST [「end」] ==「」&& $ _POST [「multiplication」] ==「」){ print「請輸入一些值」; } 那麼,何時表單字段的值爲NULL? 它只是複選框和單選按鈕具有NULL值嗎? – PeanutsMonkey 2011-04-10 22:10:03

+0

我相信複選框不會發送一個值,除非選中。單選按鈕本質上應該總是有價值的。 – 2011-04-10 22:20:16

+0

因此,如果我不選擇一個單選按鈕,它仍然會發送一個值? – PeanutsMonkey 2011-04-10 22:22:48

2

當表單被提交時,輸入字段的內容被髮送到服務器。

如果這些輸入字段爲空,那麼服務器爲每個輸入獲取一個空字符串 - 但它會得到某些內容;因此,$_POST["start"], $_POST["end"], $_POST["multiplication"]項目已設置 - 即使它們僅包含空字符串。

你可以檢查:

  • 如果字段包含一個空字符串:if ($_POST["start"] === '')
  • 或者,如果如果只包含空格:if (trim($_POST["start"]) === '')
  • 或者,如果他們是emptyif (empty($_POST["start"]))
+0

好的。我不明白一個空字符串,當一個項目沒有設置,我認爲是NULL的區別。 – PeanutsMonkey 2011-04-10 22:13:35

+0

空字符串表示一些信息:它是一個空字符串*(在某些情況下,它可能是有效的輸入)* ;;;沒有設置的變量意味着根本沒有信息。 – 2011-04-10 22:28:31

+0

對不起,但我沒有關注。你能給我一個空值的例子,一個NULL值,一個變量和一個未設置的變量? – PeanutsMonkey 2011-04-10 22:32:20

0

如果未定義字段,則您的代碼將在<html> ta之前的html中打印您的消息g出現。大多數瀏覽器不會顯示或顯示在意想不到的地方。

您應該將消息顯示移動到用戶可以看到它的html的某處。

和其他人士指出,除了在頁面中的字段將有一個空值的第一個呼叫,但仍然存在(等isset將返回TRUE

0

我希望,我理解你的權利。它是

if(!isset($_POST["start"], $_POST["end"], $_POST["multiplication"])) { 
    print "Please enter some values"; 
} 

這不正常?看起來,你認爲一個空字符串意味着什麼都沒有設置,什麼是不正確的。

$x = ""; 
isset($x); // true 

改爲使用empty()或僅使用$_POST['start'] == ''

+0

謝謝。我不明白NULL和empty之間的區別是什麼。你能詳細說明嗎? – PeanutsMonkey 2011-04-10 22:11:19

+0

@ user700543:'null'是一個特殊的值,這意味着像「無」。它是特殊類型'null'的唯一值。函數'empty()'測試 - 顧名思義 - 如果一個變量的值是空的,例如它的空字符串或數組。 'isset()'測試,如果變量被設置爲全部,並且它不是'null'。表單字段(只要它們存在)總是字符串,所以你不能用'isset()' – KingCrunch 2011-04-10 22:16:54

+0

測試他們的內容。對不起,如果我不太關注。函數empty()測試變量是否爲空,即用戶沒有指定任何值,但函數isset()測試該值是否設置,以及是否爲空。你是什​​麼意思,如果它不是null?什麼可以爲空? – PeanutsMonkey 2011-04-10 22:21:14