0

嗨,我想在 php 中使用多组复选框,并且我想检查或不检查每个数组中的所有值。我的问题是数组只包含检查值。

这是我的代码:-

  if($_POST['send']){
            $co = count($_POST['recomID']);
               for($i=0; $i<= $co -1 ;$i++) {
 $result = mysql_query("UPDATE `recom` SET
 `crit1` = '".$_POST['ch1'][$i] ."',
 `crit2` = '".$_POST['ch2'][$i]."',
 `crit3` = '".$_POST['ch3'][$i]."',
 `crit4` = '".$_POST['ch4'][$i]."', WHERE `id` = '".$_POST['recomID'][$i]."'");
               }
       }


 while($recomObject = mysql_fetch_object($recomResult)){

    echo '   
    <tr>
    <td>'.$recomObject->op.'</td>
    <td align="center"><input type="checkbox" value="1" name="ch1[]" /></td>
    <td align="center"><input type="checkbox" value="1" name="ch2[]" /></td>
    <td align="center"><input type="checkbox" value="1" name="ch3[]" /></td>
    <td align="center"><input type="checkbox" value="1" name="ch4[]" /></td>
    <td><input type="hidden" name="recomID[]" value="'.$recomObject->id.'"/>
    </td>
    </tr>';}
4

3 回答 3

2

我以前遇到过这种情况,我通过checkbox在同名之前放置一个隐藏的输入来解决。如果checkbox选中,则该值将覆盖隐藏。这应该适合你。

第二个input总是覆盖第一个。在这种情况下,如果未选中checkboxes则不要POST,这意味着隐藏输入POST的值为 0

PHP:

<?php 

if (isset($_POST['ch1'])) {
    echo '<pre>', print_r($_POST['ch1'], true), '</pre>';
    echo '<pre>', print_r($_POST['ch2'], true), '</pre>';
    echo '<pre>', print_r($_POST['ch3'], true), '</pre>';
    echo '<pre>', print_r($_POST['ch4'], true), '</pre>';
}

?>

HTML:

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
    <!-- Row 1 Checkboxes -->
    <input type="hidden" value="0" name="ch1[0]" />
    <input type="checkbox" value="1" name="ch1[0]" />
    <input type="hidden" value="0" name="ch2[0]" />
    <input type="checkbox" value="1" name="ch2[0]" />
    <input type="hidden" value="0" name="ch3[0]" />
    <input type="checkbox" value="1" name="ch3[0]" />
    <input type="hidden" value="0" name="ch4[0]" />
    <input type="checkbox" value="1" name="ch4[0]" />

    <br />

    <!-- Row 2 Checkboxes -->
    <input type="hidden" value="0" name="ch1[1]" />
    <input type="checkbox" value="1" name="ch1[1]" />
    <input type="hidden" value="0" name="ch2[1]" />
    <input type="checkbox" value="1" name="ch2[1]" />
    <input type="hidden" value="0" name="ch3[1]" />
    <input type="checkbox" value="1" name="ch3[1]" />
    <input type="hidden" value="0" name="ch4[1]" />
    <input type="checkbox" value="1" name="ch4[1]" />

    <!-- And so forth... -->

    <input type="submit">
</form>

[x] [ ] [x] [ ]
[ ] [x] [ ] [x]  [ SUBMIT ]

输出:

Array
(
    [0] => 1
    [1] => 0
)
Array
(
    [0] => 0
    [1] => 1
)
Array
(
    [0] => 1
    [1] => 0
)
Array
(
    [0] => 0
    [1] => 1
)

编辑

$i = 0;
while($recomObject = mysql_fetch_object($recomResult)){
    echo '   
        <tr>
        <td>'.$recomObject->op.'</td>
        <input type="hidden" value="0" name="ch1['.$i.']" />
        <input type="hidden" value="0" name="ch2['.$i.']" />
        <input type="hidden" value="0" name="ch3['.$i.']" />
        <input type="hidden" value="0" name="ch4['.$i.']" />
        <td align="center"><input type="checkbox" value="1" name="ch1['.$i.']" /></td>
        <td align="center"><input type="checkbox" value="1" name="ch2['.$i.']" /></td>
        <td align="center"><input type="checkbox" value="1" name="ch3['.$i.']" /></td>
        <td align="center"><input type="checkbox" value="1" name="ch4['.$i.']" /></td>
        <td><input type="hidden" name="recomID[]" value="'.$recomObject->id.'"/>
        </td>
        </tr>';
    $i++;
}
于 2013-03-22T18:28:53.213 回答
0

您需要为每个复选框使用相同的名称,但值不同:

<td align="center"><input type="checkbox" value="0" name="ch[]" /></td>
<td align="center"><input type="checkbox" value="1" name="ch[]" /></td>
<td align="center"><input type="checkbox" value="2" name="ch[]" /></td>
<td align="center"><input type="checkbox" value="3" name="ch[]" /></td>

现在,要获得一个数组,其中每个选中的框都是 1,每个未选中的框都是 0,提交后...

if (isset($_POST['ch'])) { // assuming form method = post

    $max = 3 // set number of checkboxes -1

    for ($i = 0;$i <= $max;$i++)

    $ch[$i] = intval(in_array($i,$_POST['ch']));

} else $ch = array();

编辑:要为每个复选框获取 0 或 1,请执行...

<td align="center"><input type="checkbox" value="1" name="ch1" /></td>
<td align="center"><input type="checkbox" value="1" name="ch2" /></td>
<td align="center"><input type="checkbox" value="1" name="ch3" /></td>
<td align="center"><input type="checkbox" value="1" name="ch4" /></td>

然后提交后...

if (isset($_POST['ch1'])) $ch1=0; else ch1=1;
...

如果您有大量复选框,您将$_POST使用foreach

于 2013-03-22T18:23:41.807 回答
0

此方法将为您提供选中/未选中状态以及 4 个数组

形式:

html>
<form method="post">
    <input type="hidden" name="ch1[]" value="0">
    <input type="checkbox" name="ch1[]" value="1">
    <input type="hidden" name="ch2[]" value="0">
    <input type="checkbox" name="ch2[]" value="1">
    <input type="hidden" name="ch3[]" value="0">
    <input type="checkbox" name="ch3[]" value="1">
    <input type="hidden" name="ch4[]" value="0">
    <input type="checkbox" name="ch4[]" value="1">
    <input type="submit">
</form>

以下将在提交时给出 2 个数组之一(对于每个 chX)

未选中:

array([0] => "0")

检查:

array([0] => "1", [1] => "0")

因此,您将始终在[0]索引中拥有一个值。示例 PHP:

if(isset($_POST['ch1'][0])){ //do check anyway
  echo $_POST['ch1'][0];
}
于 2013-03-22T19:01:09.030 回答