2015-07-10 101 views
-1

這是我的表單,類別來自while循環的數據庫。 我想將選中的輸入只插入到數據庫中。我如何發佈複選框與PHP?

如何檢測選中哪個複選框?

<form action="account.php" method="POST"> 
    <ul class="account-info"> 
     <li>Category1 : <input type="checkbox" value="val1" name="cat1"></li> 
     <li>Category2 : <input type="checkbox" value="val2" name="cat1"></li> 
     <li>Category3 : <input type="checkbox" value="val3" name="cat1"></li> 
     <!-- while continues --> 
     <li>Category100 : <input type="checkbox" value="val100" name="cat1"></li> 
    </ul> 
    <input type="submit" value="submit" /> 
</form> 
+0

只有選擇複選框在傳遞POST數組。 –

+0

你可能會想到一個單選按鈕。 (因爲你問哪一個被選中,並將它們全部命名爲cat1)。你的代碼中有複選框,每一個都需要一個唯一的名字,然後你可以在表單發佈時在php中檢查每一個。 – RightClick

+0

@RightClick他們不需要唯一命名,請檢查我的答案。 – Styphon

回答

2

account.php只有複選框將被張貼。因爲您已經將它們命名爲相同,但只會發佈1個最後一個複選框。如果你希望他們有相同的名稱和作爲一個數組來通過您需要的名稱後添加[],是這樣的:在那裏它們被提交,你可以做到這一點

<input type="checkbox" value="val100" name="cat1[]"> 

然後在您的account.php

foreach($_POST['cat1'] as $val) 
{ 
    echo "$val<br>"; 
} 

這將回顯所有檢查框的值。

+0

它的okey,但cat2?或cat75我不知道會添加多少類別。 –

+0

@sonerkaya使用'[]'會生成只有複選框的數組。所以如果他們檢查cat2和cat75,那麼只有這2個會被添加到數組中。所以使用foreach循環它會循環兩次,只允許你使用這兩個值。 –

0

你可以檢查一下這樣的: 該代碼將檢查哪些類別被激活 假設你的數據庫從0您account.php返回類別X

$i = 0; 
    while(true){ 
    if ($_POST["cat".$i."]) { 
     //category activated 
    } 
    else { 
     //no category found -> loop ends 
     break; 
    } 
    $i++; 
    } 
+0

它的okey,但cat2?或cat75我不知道會添加多少類別。我不能手動編寫代碼,因爲類別來自數據庫 –

0

變化name="cat1"name="cat[1][]"

foreach($_POST['cat'] as $category){ 
    foreach($category as $value){ 
     echo $value; 
    } 
} 
+0

它的okey,但cat2?或cat75我不知道會添加多少類別。我不能手動編寫代碼,因爲類別來自數據庫 –

+0

那麼你想這樣做'貓[1] []'爲名稱 – cmorrissey

+0

我已經更新了我的答案 – cmorrissey

0

首先,你有y我們的選項設置好像它們都是單選按鈕,並且所有名稱都具有相同的名稱,在3種可能的情況下變成1個值。如果你想讓他們成爲傳統的複選框,你必須給他們分開的名字。

在你的PHP

你會檢查array_key_exists有問題的複選框的名字,這是怎麼了,我通常的形式翻譯的複選框領域更容易使用:

<?php 
    $checked = array(
     'cat1' => array_key_exists('cat1', $_POST), 
     'cat2' => array_key_exists('cat2', $_POST), 
     'cat3' => array_key_exists('cat3', $_POST) 
    ); 
    print_r($checked); 
    exit; 
?>