2012-07-19 109 views
0

我有一個過去一直在工作的HTML表單的PHP處理腳本。我們已經廣泛地使用了表單,並且所有事情都進入了數據庫。現在我再次使用它(在同一頁上,它到目前爲止一直處於非活動狀態),我在處理複選框時遇到了一些麻煩。PHP MultiCheckbox處理返回空

我一直在玩弄它,試圖看看我搞亂了什麼,我收集到我必須錯誤地處理PHP中的複選框。這是我目前有:

HTML:

<label for="race" style="padding-right: 15px;">Race:</label> 
    White <input type="checkbox" name="raceWhite" value="White" /> 
    Black <input type="checkbox" name="raceBlack" value="Black" /> 
    Asian/Pacific Islander <input type="checkbox" name="raceAsian" value="Asian/Pacific Islander" /> 
    Hispanic/Latino <input type="checkbox" name="raceHispanic" value="Hispanic/Latino" /> 
    Other <input type="checkbox" id="race" name="raceOther" value="Other" /> 

這是我的PHP:

if (isset($_POST['raceWhite'])) 
    $white = true; 
else echo "wtf is going on"; 
if (isset($_POST['raceBlack'])) 
    $black = true; 
if (isset($_POST['raceAsian'])) 
    $asian = true; 
if (isset($_POST['raceHispanic'])) 
    $hispanic = true; 
if (isset($_POST['raceOther'])) 
    $otherRace = true; 

我很擔心,因爲我呼應了,如果「跆拳道是要去」我正確理解,這是因爲我測試這個時確實檢查了raceWhite的複選框。此外,使用這種方法,我的數據庫將這些數據反映爲NULL - 即複選框未被檢查。

但是,用我的舊代碼,DB將所有值都翻轉爲1,表示所有複選框被選中。我的舊代碼是這樣的:

HTML:

<label for="race" style="padding-right: 15px;">Race:</label> 
    White <input type="checkbox" name="race[]" value="White" /> 
    Black <input type="checkbox" name="race[]" value="Black" /> 
    Asian/Pacific Islander <input type="checkbox" name="race[]" value="Asian/Pacific Islander" /> 
    Hispanic/Latino <input type="checkbox" name="race[]" value="Hispanic/Latino" /> 
    Other <input type="checkbox" id="race" name="race[]" value="Other" /> 

PHP:

$raceList = $_POST["race"]; 
$n = count($raceList); 
for($i = 0; $i < $n; $i++){ 
    switch($raceList[$i]){ 
     case "White": 
      $white = 1; 
     case "Black": 
      $black = 1; 
     case "Asian/Pacific Islander": 
      $asian = 1; 
     case "Hispanic/Latino": 
      $hispanic = 1; 
     case "Other": 
      $otherRace = 1; 
    } 
} 

任何幫助將不勝感激。我相信我只是想念一些簡單的東西。這是我第一次在這裏提出問題,所以如果我遺漏了未來應該包括的任何內容,請告訴我。

回答

1

你可以寫是

$white = (isset($_POST['raceWhite']) && $_POST['raceWhite']=='White') ? 1 : 0; 
$black = (isset($_POST['raceBlack']) && $_POST['raceBlack']=='Black') ? 1 : 0; 
$asian = (isset($_POST['raceAsian']) && $_POST['raceAsian']=='Asian/Pacific Islander') ? 1 : 0; 
$hispanic = (isset($_POST['raceHispanic']) && $_POST['raceHispanic']=='Hispanic/Latino') ? 1 : 0; 
$otherRace = (isset($_POST['raceOther']) && $_POST['raceOther']=='Other') ? 1 : 0; 
+0

它的工作!非常感謝。你能解釋我做錯了什麼嗎? – teepee7593 2012-07-19 04:30:55

+0

歡迎您.. 您正在檢查isset並且未對值進行比較,如果未選中複選框,則不分配值。 if(isset($ _POST ['raceWhite']))' '$ white = true;' 而不是如果你寫了 'if(isset($ _ POST ['raceWhite'])&& $ _POST ['' '白色')' '$ white = true;' 'else $ white = false;' 然後它可以工作。 – 2012-07-19 04:45:05

+0

我現在看到。我曾嘗試通過switch語句比較這些值,但如果未檢查,我不知道必須分配一個值。再次感謝你 – teepee7593 2012-07-19 11:38:11