2012-01-11 4 views
2

私は、HTMLフォームのmysqlデータに基づいてチェックリストを生成しています。送信ボタンがクリックされると、PHPスクリプトはmysqlデータベースの "complete"フィールドを変更します。可変長のリストを使って、一度に複数のアイテムを処理するにはどうしたらいいですか?現在、2つ以上のボックスをクリックすると、1つだけが処理されます。PHPでHTMLチェックボックスフォームを処理する

ここでHTMLフォームです:

<form method='post' action='listprocessor.php'> 
<input style="float:right" type='checkbox' name='complete_goal' value='61'>Milk</input> 
<input style="float:right" type='checkbox' name='complete_goal' value='117'>Eggs</input> 
<input style="float:right" type='checkbox' name='complete_goal' value='118'>Bread</input> 
<input style="float:right" type='submit' name='submitbtn' value='Completed'></input> 
</form> 

、ここに簡略化PHPの:

$_POST['submitbtn']; 

$completed_goal = $_POST['complete_goal']; 

$query = mysql_query("UPDATE notes SET complete='1' where note_id='$completed_goal'"); 

答えて

3

あなたの入力要素名は、complete_goal[]のような配列でなければなりません。

<input style="float: right;" type="checkbox" name="complete_goal[]" value="61">Milk</input> 

あなたはWHERE note_id IN (<?php echo implode(',', $_POST['completed_goal']); ?>)を使用して単一のクエリですべてを更新することができます。

$query = mysql_query("UPDATE `notes` SET `complete` = '1' WHERE `note_id` IN (" . implode(',', $_POST['completed_goal']) . ")"); 
0

おそらくこれは、(それが私の頭の上からだったような構文をチェックする必要がある場合があります)動作しますが。あなたがそれらすべてを処理するのに安全ですので、チェックし「イマイチ任意のチェックボックスが$ complete_goals配列にリストされているべきではありません:)

foreach ($_REQUEST['complete_goal'] as $key) { 
    $query = mysql_query("UPDATE notes SET complete='1' where note_id='$key'"); 
} 
3

作業をする必要があり、それが役に立てば幸い。 Afaikは同じ名前のすべての入力はラジオボタンのように扱われます。したがって、すべてのチェックボックスを使用して配列を作成する必要があります。

<form method='post' action='listprocessor.php'> 
    <input style="float:right" type='checkbox' name='complete_goal[]' value='61'>Milk</input> 
    <input style="float:right" type='checkbox' name='complete_goal[]' value='117'>Eggs</input> 
    <input style="float:right" type='checkbox' name='complete_goal[]' value='118'>Bread</input> 

    <input style="float:right" type='submit' name='submitbtn' value='Completed'></input> 
</form> 

<?php 
    if(isset($_POST['complete_goal'])) 
    { 
    $query = mysql_query("UPDATE `notes` SET `complete`='1' WHERE `note_id` IN ('".implode("','", array_values($complete_goal))."');"); 
    } 
?> 

EDIT:mysql updateのChris N 'ideaを追加しました。

0

私は、あなたが取り扱いを提出するために使用しているスクリプト内のチェックボックスのすべてをつかむ、各チェックボックスに一意の名前属性を使用して行いたい

foreach($post_fields as $post_field_name) { 
    if(isset($_POST[$post_field_name])) { 
    // do your query 
    } 
} 
関連する問題