目的:ユーザーがチェックボックスの使用可能なリストから項目を選択できるようにし、添付されたIDでDBを更新できるようにします。$ _POSTの後、選択したアイテムがチェックされます。
問題:フォームが送信されると、現在のチェックボックスではなく、前のチェックボックスのセットが返されます。何も変更せずにフォームを再送信すると、チェックボックスの新しいセットが利用できるようになります。基本的に、新しい値は、送信btnが2回押された後にのみ表示されます。
コード:DBにクエリを実行して、フォームにチェックボックスを入力する関数...
function chCheck($conn){
$sql = "Select CHEESE, ID, OnMenu from CheeseSelections";
$result=$conn->query($sql);
while($row=$result->fetch_assoc())
{
if ($row['OnMenu']==="True"){
$str = "<input type='checkbox' name='chList[]' value='".$row['ID']."' id='".$row['CHEESE']."' checked/>";
$str .= "<label for ='".$row['CHEESE']."'>".$row['CHEESE']."</label>";
$str .= " <a href=\"#\">view/edit item</a><br />";
echo $str;
}
elseif ($row['OnMenu']==="False"){
$str = "<input type='checkbox' name='chList[]' value='".$row['ID']."' id='".$row['CHEESE'];
$str .= "/> <label for ='".$row['CHEESE']."'>".$row['CHEESE']."</label>";
$str .= " <a href=\"#\">view/edit item</a><br />";
echo $str;
}
}
}
HTML
<form name="chCheck" method="post" action="">
<?php chCheck($conn); ?>
<input type="submit" name="update" value="Update Selections"></br>
</form>
$ _POST
if ($_POST)
{
$ids = $_POST['chList'];
$sql = "UPDATE CheeseSelections SET CheeseSelections.OnMenu = \"False\";";
foreach($ids as $items){
$sql .= "UPDATE CheeseSelections SET CheeseSelections.OnMenu = \"True\" WHERE CheeseSelections.ID IN (".$items."); ";
}
//echo $sql;
mysqli_multi_query($conn, $sql);
mysqli_query($conn, $sql);
printf("Affected rows (UPDATE): %d\n", $conn->affected_rows);
printf("Error Code: %d\n", $conn->errno);
}
ロジック:送信すると、「OnMenu」の列全体が「False」に設定されます。$ _POSTから収集されたIDは、「True」に設定されます。これにより、列の設定が解除されてからリセットされます。この論理は正しいですか?私は別の方法で何をすべきですか?
ありがとうございました。