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その値は非表示を上書きします。これはあなたのために働くはずです。

2番目inputは常に最初をオーバーライドします。この場合checkboxesPOSTチェックを外すと、非表示の入力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>

以下は、送信時に (各 chX に対して) 2 つの配列のいずれかを提供します。

未チェック:

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 に答える