1

こんにちは私はforeachループを使用してチェックボックスリストを生成しています。チェックされたvalueチェックボックスをデータベースに渡したいです。

foreach($this->lis as $lst)
 {?>
  <tr>
    <td>
     <input type="checkbox" name="list" value="1" />
         <label for="list_32"><?php echo $list->nList ?></label>
    </td>
  </tr>
 <?php } ?>

チェックボックスをオンにしたときに、ラベル名をデータベースに渡したいのですが、誰かが助けてくれます。

4

4 に答える 4

4

このコードを確認してください。チェックボックス名、つまりlist[]として配列を取る必要があります。フォームが送信されると、その値を使用してデータベースに挿入できます。

<? 
    if(isset($_POST['submit'])) // once form is submitted build your logic
    {
        $list = $_POST['list'];
        foreach($list as $value)
        {
            echo "<br />Checked: $value";
            // use $value to insert into database
            $sql = "insert into...";
            mysql_query($sql);
        }
    }
?>
<form name="frm" method="post">
<table>
<? foreach($this->lis as $lst)
 {?>
  <tr>
    <td>
     <input type="checkbox" name="list[]" value="<?php echo $list->nList ?>" />
         <label for="list_32"><?php echo $list->nList ?></label>
    </td>
  </tr>
 <?php } ?>
 <tr>
    <td><input name="submit" value="Submit" type="submit" /></td></tr></table>
</form>
于 2012-06-26T04:36:39.507 に答える
2

わかりました、いくつか問題があります..

まず、php タグを頻繁に開いたり閉じたりしないようにしてください。HTML をエコー バックするだけです。PHP に頻繁に出入りすると、パフォーマンスの問題が発生します。

したがって、最初に、ここでフォームを設定する必要があります。フォームは 2 番目のページを指す必要があります (または isset 関数を使用して自己処理しますが、わかりやすくするために前者のソリューションを使用しましょう)。2 番目のページは、ユーザーがチェックした内容に基づいて、DB にダンプする内容です。

フォームの HTML は次のとおりです。

<form action="database.php" method="POST">
    <div>
        <label for="checkbox1">This is the first option:</label>
        <input type="checkbox" id="checkbox1" name="checkbox1" />
    </div>
    <div>
        <label for="checkbox2">This is the second option:</label>
        <input type="checkbox" id="checkbox2" name="checkbox2" />
    </div>
    <div>
        <input type="submit" />
    </div>
</form>

繰り返しますが、これを foreach ループにエコー バックすることをお勧めします。短い関数でこれを実現できます。

したがって、誰かが「送信」ボタンを押すと、2 番目のページ (database.php と呼んでいます) に移動し、オプションが POST 配列に格納されます。DB エントリを処理するときは、常に GET ではなく POST を使用することをお勧めします。

したがって、このページでは、どのチェックボックスが選択されているかを確認し、必要に応じてデータベースを更新します。

if (isset($_POST['checkbox1']))
{
    // user ticked checkbox1
    $sql = "UPDATE table
            SET 'checkbox1' = 1
            WHERE 'user' = 'username';"
    mysqli_query($sql); 
}

これは大まかな解決策であることに注意してください-これをどのように行っているかを正確に教えてくれなかったので、DBがユーザーの投票などに関連付けられていると想定しています。値を増やしてcheckbox1を更新することもできます..など.

お役に立てれば。

  • エオガン
于 2012-06-26T04:37:03.340 に答える
0

名前には [] を使用する必要があります (配列であるため)。したがって、この場合は name="list[]" になります。次に、それを送信すると(投稿または取得)、リスト[]配列でチェックされたデータを取得するだけです。あなたの質問を理解したかどうかわかりません。私がしなかった場合; もう少し情報を共有してください。

于 2012-06-26T04:26:07.827 に答える
0

これがあなたが探しているものだと思います:

foreach($this->lis as $lst)
 {?>
  <tr>
    <td>
     <input type="checkbox" name="list[<?php echo $list->nList ?>]" value="1" />
     <label for="list_32"><?php echo $list->nList ?></label>
    </td>
  </tr>
 <?php } ?>

次に、PHPforeach($_POST['list'] as $listval)でもう一度ループします。フォーム$_POST$_GET使用している場合はに置き換えGETます。

編集:echo $list->nListこの変数がループ内で変更されないか、タイプミスであることに気付きました。echo $lst->nListそれがタイプミスだと仮定すると、代わりにそうあるべきです。タイプミスでない場合は、それを削除しname="list[]"て HTML に含める必要があります

于 2012-06-26T04:32:39.440 に答える