2010-08-15 58 views
3

我只想讓php確定一個複選框是否被選中,但是我遇到了一個獲得正確返回的問題。請幫助。

我的HTML代碼

<label> 
    <input name="Language" type="checkbox" id="aa" checked="checked" /> 
    One</label> 
    <label> 
    <input name="Language" type="checkbox" id="bb" />Two</label> 
    <label> 
    <input type="checkbox" name="Language" id="cc" />Three</label> 

我值傳遞由$ _GET方法到PHP

我的PHP代碼:

$aa=$_GET["aa"]; 
$bb=$_GET["bb"]; 
$cc=$_GET["cc"]; 


echo $aa."<br>"; 
echo $bb."<br>"; 
echo $cc."<br>"; 

輸出 真 假 假

我n ext只想確定每個盒子是否被檢查過,如果是的話,做一些事情。

if ($aa == true) { $abc="checked";} 
else { $abc="not checked"; } 

if ($bb == true) { $cde="checked";} 
else { $cde="not checked"; } 


if ($fgh == true) { $fgh="checked";} 
else { $fgh="not checked"; } 

但是,if語句總是返回true,即使未選中該框。我嘗試過「===」和「!=」的變體,但它似乎不起作用。

TIA

回答

4
if (isset($_GET['checkbox_name'])) { ... } 

表單控件(與文件輸入的異常,並與圖像輸入一些特殊的規則)總是提交。在查詢字符串或表單編碼的POST正文中沒有布爾的概念。

該id是無關緊要的 - 只有名稱和值的問題(至少就PHP而言)。

既然你沒有給他們的價值觀,他們會,IIRC,默認爲on所以如果你正在做一個比較,你應該找那個。用isset看起來很簡單。儘管如此,你的示例給了它們所有相同的名稱和值,所以你不能區分它們。

此外,由於PHP表單數據解析器的怪異性,如果需要多個具有相同名稱的元素,則必須以[]結束。

你可能想要做這樣的事情:

<label> 
<input name="Language[]" type="checkbox" id="aa" checked="checked" value="One" /> 
One</label> 
<label> 
<input name="Language[]" type="checkbox" id="bb" value="Two" />Two</label> 
<label> 
<input type="checkbox" name="Language[]" id="cc" value="Three" />Three</label> 

重要:注意增加值和名稱的變化。

然後在PHP $_GET['Language']將是一個檢查複選框的值的數組,你可以循環。

+0

謝謝大衛 – jamex 2010-08-17 15:40:30

1

嘗試isset()

我覺得你的HTML代碼應該像

<label> 
    <input name="Language[]" type="checkbox" id="aa" checked="checked" value ="1" />One  
</label> 
<label> 
    <input name="Language[]" type="checkbox" id="bb" value ="2" />Two 
</label> 
<label> 
    <input name="Language[]" type="checkbox" id="cc" value ="3" />Three 
</label> 

,然後通過使用像

$count = count($_GET["Language"]);的東西,你可以指望複選框選中的號碼。

或做

$arr = $_GET["Language"]; //$arr is an array that contains the values of the checked checkboxes 

然後你可以foreach陣列

foreach($arr as $item) 
    { 
     echo $item . "</br>"; /* Will print 1,2 and 3 (mind newlines)*/ 
    } 
+0

這隻會告訴你,如果你至少有一個複選框被選中,而不是哪個複選框被選中。 – Quentin 2010-08-15 16:54:30

+0

@David:Oopz,已更正。即使我認爲'Language'應該是一個數組。 – 2010-08-15 16:54:37

+0

它不會。如果這個名字不以'[]'(或'[foo]'(這是另一個故事)'結尾),那麼PHP將取最後一個值並忽略其他值。只有按照命名約定,它纔會將其變成一個數組。 – Quentin 2010-08-15 16:58:21

0

在我的PHP在我是從$_POST['checkbox_name'],我發現該變量的值爲on當包廂檢查(即,即使複選框已清除,它仍存在)。

+0

同樣的問題,我有。 – jamex 2010-08-18 07:03:44