2012-07-19 85 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