複数のチェックボックスから$ _POSTを取得します


158

私はその中に複数のチェックボックスを備えた1つのフォームを持っています(それぞれがコードを持っています):

<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>">

$row['Report ID']データベースの主キーはどこにあるのか-それぞれの値は異なります。

チェックされているチェックボックスを確認するにはどうすればよいですか?(多分複数)

これは受信ボックスシステム用であり、その下にボタンをクリックして(クリックすると)$row['Report ID']、チェックボックスがオンになっているすべてのメッセージ(のID:)を削除します。

回答:


333

フォームの名前をに設定すると、check_list[]すべてのチェックボックスに配列($_POST['check_list'][])としてアクセスできます。

リクエストされたサンプルは次のとおりです。

<form action="test.php" method="post">
    <input type="checkbox" name="check_list[]" value="value 1">
    <input type="checkbox" name="check_list[]" value="value 2">
    <input type="checkbox" name="check_list[]" value="value 3">
    <input type="checkbox" name="check_list[]" value="value 4">
    <input type="checkbox" name="check_list[]" value="value 5">
    <input type="submit" />
</form>
<?php
if(!empty($_POST['check_list'])) {
    foreach($_POST['check_list'] as $check) {
            echo $check; //echoes the value set in the HTML form for each checked checkbox.
                         //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
                         //in your case, it would echo whatever $row['Report ID'] is equivalent to.
    }
}
?>

4
1つのcheck_list []チェックボックスをエコーする例を教えていただけますか?(そして、それは選択された2つについても同様ですか?)ありがとうございます。
James Andrew

2
また、HTMLに値が設定されていない場合は、$checkと等しくなるように指定する必要がありますon
Sean Walsh、

9
if($_POST)-役に立たない、$_POST常に本当でしょう。!empty($_POST['check_list'])代わりにチェックする必要があります。
マルティンスBriedis

3
@MārtiņšBriedis存在しない場合、配列インデックスが範囲外になります。より適切なチェックは次のようになりますarray_key_exists('check_list', $_POST) && !empty($_POST['check_list'])
Tyzoid

2
@Tyzoid empty()はこのエラーの原因にはなりません。マニュアルから:empty() does not generate a warning if the variable does not exist.
マルティンスBriedis

22

編集以下のコメントで@Marcが言ったことを反映します。

すべてのポストされた値をループすることができます。

HTML:

<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />

PHP:

foreach($_POST['check_list'] as $item){
  // query to delete where item = $item
}

1
奇妙なエラー:警告:30行目の/home1/mountgam/public_html/zombiewrath/reports.phpのforeach()に無効な引数が指定されました= /
James Andrew

2
これは[]、PHPで$ _POST値を配列として作成するフィールド定義で構文を使用する場合にのみ機能します。そうでなければ、それは単一の非配列値となり、foreach()ループが爆発する原因となります。
マークB

1
私は両方を試しましたが、もう一度やり直します(フォーム/名前に[]がない場合)
James Andrew

16

それに応じてチェックボックスに名前を付ける必要があります。

<input type="checkbox" name="check_list[]" value="…" />

次に、チェックされたすべてのチェックボックスにアクセスできます

// loop over checked checkboxes
foreach($_POST['check_list'] as $checkbox) {
   // do something
}

ps。出力を適切にエスケープするようにしてください(htmlspecialchars()


12
<input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>">

そして投稿後、それらをループすることができます:

   if(!empty($_POST['check_list'])){
     foreach($_POST['check_list'] as $report_id){
        echo "$report_id was checked! ";
     }
   }

または、前のページから投稿された特定の値を取得します。

if(isset($_POST['check_list'][$report_id])){
  echo $report_id . " was checked!<br/>";
}

12

申し訳ありませんが、古いトピックですが、@ JamesRattrayや他の人が問題を抱えていたため、これは1つの重要な部分です。

PHPスクリプトに複数の値を投稿する場合は、input(を使用して/>)タグを自分で閉じないでください。タグを自分で閉じると、配列定義が終了し、送信時に単一の値のみがスクリプトにポストされます。実際、@Sconeの回答は、/>が変更されるまで機能しない可能性があります。

このWarning: Invalid argument supplied for foreach() in /home1/...場合、これがPHPエラーの原因です。

編集:以下のコメントに記載されているように、さらなる調査により、これはDOCTYPEに依存することが示唆されています。XHTMLにDOCTYPEを設定している場合は、inputタグを閉じる必要があります。HTML5のDOCTYPEセットがある場合は、inputタグを閉じないようにする必要があります。これは、ユーザーがページを表示しているブラウザーと、コードで指定されているDOCTYPEをどれだけ順守しているかによって決まる可能性もあります。


不正解です。自己終了入力タグは、PHPに渡される値に影響を与えません。
ラプター2015

@Raptorさらなる研究では、はい、影響を受ける可能性があり、あなたが言うように、影響はありません。しかし、さらなる調査では、DOCTYPEが設定されている場合にのみ影響を受けます。HTML5はタグが閉じていると認識しません(閉じていると無効になります)が、XHTMLではタグを閉じる必要があります。ここのW3Schools情報ページを参照してください:リンク
Jon Gallup

@Raptor W3Schoolはエラーで一杯になる可能性がありますが、W3School(および他のWebサイト)が提供する可能性のある情報は、質問に対して説得力があることに注意することが重要です。何かをトラブルシューティングするプロセスでは、情報を試して問題を修正するための情報は、情報がないよりも優れていると述べています。この場合、別の参照が必要な場合、W3は、入力タグが非準拠になるため、決して閉じないように指定します。元の回答を編集してDOCTYPEを反映させます。
ジョンギャラップ2015

5

とても簡単です。注意してください、あなたはすぐにそれを手に入れます!:)

php配列に送信されるhtml配列を作成します。HTMLコードは次のようになります。

<input type="checkbox" name="check_list[1]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[2]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[3]" alt="Checkbox" value="checked">

どこに[1] [2] [3]いるIDあなたがすることを意味し、あなたのメッセージのsのechoあなたの$row['Report ID']その場所に。

次に、フォームを送信すると、PHP配列は次のようになります。

print_r($check_list)

[1] => checked [3] => checked

チェックしたものとチェックしなかったものに応じて。

これからもよろしくお願いします。


6
ではなくでcheck_list[]始まることを覚えておいてください。check_list[0]check_list[1]
アービター2014年

1
value = "checked"は逆効果です。値が指定されていない場合、「オン」になります。送信する値をvalue属性で指定する利点は、PHP配列のインデックスにする必要がないほぼ任意のデータを送信できることです。foreachを使用した配列値の反復は、キーの反復よりも簡単です。
Rudiger W.

0

En mi caso necesito que venga en unsólovalor、por lo tanto no me vale una matriz。

    // Primero paso las matrices del post a valores separados por coma.
    foreach($_POST as $n => $v) if (is_array($v)) $_POST[$n] = implode(",", $v);

Con esto me aseguro que los valores sean 1 y separados por coma。MySQLのプエドハセルラコンサルタント、ベンガアンマトリズo no:

Where id in ($_POST["id"])
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.