MySQL データベースへの複数のチェックボックスおよびテキストボックス配列の挿入: 一般的な問題の解決
複数のチェックボックスおよびテキストボックス配列を含むクエリは、PHP で問題を引き起こす可能性があります。この記事では、チェックボックスがチェックされていないのにチェックボックスがオンとして表示される理由と、データベースへのデータの挿入に失敗する理由という 2 つの具体的な問題について説明します。
チェックボックスの表示の問題
原因は、すべてのチェックボックス値のカンマ区切り文字列を生成する implode の使用です。この方法では、特定のチェックボックスがチェックされているかどうかに関係なく、リスト全体がすべてのデータベース行に誤って挿入されます。
これを修正するには、フォームの HTML 内のチェックボックス名に明示的なインデックスを割り当てます。そうすることで、$_POST['checkbox'] 配列内の対応するチェックボックスの値を、implode に依存せずに、付随する $_POST['item'] および $_POST['quantity'] 要素に簡単に関連付けることができます。
データベース挿入失敗
チェックボックスはチェックされた項目の値のみを送信するという事実により、別の問題が発生します。これにより、$_POST['checkbox'] 配列のインデックスと、対応する $_POST['item'] および $_POST['quantity'] 要素の間に不一致が生じます。
この問題を解決するには、変更された形式でチェックボックス名に割り当てられたインデックス。これにより、値の適切なペアが可能になり、データベース内の各行に正しいデータ セットが含まれることが保証されます。
さらに、mysql_query を使用する代わりに、$conn->query() メソッドを使用します。データベース接続に使用される MySQLi API と一致します。
更新された PHP コード:
<br>$stmt = $conn->prepare(" INSERT INTO 購入品 (製品、数量、価格) VALUES (?, ?, ?)");<br>$stmt->bind_param("sis", $name, $quantity, $price);<br>foreach ( $_POST['checkbox'] as $i => $price) {</p> <pre class="brush:php;toolbar:false">$name = $_POST['name'][$i]; $quantity = $_POST['quantity'][$i]; $stmt->execute();
}
追加のセキュリティ対策
セキュリティ上の予防措置として、価格は HTML に保存するのではなく、データベースから取得することをお勧めします。これにより、ユーザーはフォームを送信する前に Web インスペクターで価格を変更できなくなります。
以上が複数のチェックボックスおよびテキストボックス配列を MySQL データベースに挿入する方法: 一般的な問題への対処の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。