4

テーブルから入力された行を含むフォームがあります。各行には、ユーザーがオンまたはオフにできる「チェックボックス」があります。

フォームが送信されたときに、どのチェックボックスが選択されているかを読み取り、結果をデータ テーブルに挿入できるようにしたいと考えています。

これまでの私のコードフォーム:

<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<table
<?php do { ?>
<tr>
<td>input type="text" name="InspectRoomNo" value="<?php print $row_InspectItems['AuditItemNo']; ?>"></td>
<td>php echo $row_InspectItems['AuditItem']; ?>td>
<td>input name="check[]" type="checkbox"  ></td>
</tr>
<?php } while ($row_InspectItems = mysql_fetch_assoc($InspectItems)); ?>
<input type="submit" value="Insert record">
</table>

挿入: テーブルから $Items を取得します

while($row = mysql_fetch_assoc($Items))
{
$array[] = $row['AuditItem'];
}


foreach($array as $id) {
$AuditItemID = mysql_real_escape_string($id);

if(isset($_POST['check'])){
$Checked = mysql_real_escape_string($_POST['check'][$row]);
}
}

私が抱えている問題は、チェックボックスが選択されていなくても、すべてのチェックボックスの戻り値が true であることです。

誰でもこの問題を整理するのを手伝ってくれますか?

どうもありがとう。

4

3 に答える 3

8

次のようにします。

if(!empty($_POST['check'])) {
    foreach($_POST['check'] as $check) {
        echo $check; 
    }
}
于 2013-02-07T14:03:16.650 に答える
2

チェックボックス名の中に項目 ID を入れる必要があります。

<td><input name="check[<?= $row_InspectItems['AuditItem']; ?>]" type="checkbox" /></td>

次に、単純に反復できます。

foreach ($_POST['check'] as $id => $value) {
    // do stuff with your database
}

ID のリストは簡単に偽造できるため、このスクリプトを実行する人は誰でも信頼できると思います。現在のユーザーがそれらのレコードを更新する権限を持っていることを確認してください。

于 2013-02-07T14:02:19.393 に答える
0

$_POST['check']何が起こっているのかというと、選択されたチェックボックスのみがサーバーに送信されるため、配列(これは配列です!)が画面に表示されているアイテムの数よりも少ないことがわかります。

どのチェックボックスがチェックされたかがわかるようにIDを追加し、単一の値ではなく配列を処理するようにphp処理コードを適合させる必要があります。

また、すべての行を上書きしてInspectRoomNoいるので、そこでも配列を使用する必要があります。

フォーム側は次のようになります。

<td><input type="text" name="InspectRoomNo[<?php echo row_InspectItems['AuditItemNo']; ?>]" value="<?php print row_InspectItems['AuditItemNo']; ?>"></td>
<td><?php echo $row_InspectItems['AuditItem']; ?></td>
<td><input name="check[<?php echo row_InspectItems['AuditItemNo']; ?>]" type="checkbox"  ></td>
于 2013-02-07T14:06:46.560 に答える