sql >> データベース >  >> RDS >> Mysql

PHPが複数のチェックボックスとテキストボックスの配列をMySQLデータベースに挿入

    implodeを使用しないでください 。これにより、フォーム内のすべてのコンマ区切りのリストが挿入する各行に配置され、チェックされているすべてのボックスに対してこれが繰り返されます。配列にインデックスを付けて、各行に1つのアイテムを挿入するだけです。

    ただし、フォームにチェックボックスがある場合は、チェックされているものだけが送信されます。この結果、$_POST['checkbox']のインデックスが作成されます。 配列は対応する$_POST['item']と一致しません および$_POST['quantity'] 要素。明示的なインデックスをcheckboxに入れる必要があります 名前を関連付けることができるようにします。

    <form method = "POST">
    
    <input type = "hidden" name = "item[]" value = "cupcake">
    <input type = "text" name = "items" value = "cupcake" readonly><br>
    <b>Price :</b> <span name = "price" value = "3.00">$17.00</span><br>
    Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
    <input tabindex="1" name="checkbox[0]" type="checkbox" value="17" /><span>Add to Cart</span></label></div></div></td><br>
    
    <input type = "hidden" name = "item[]" value = "cake">
    <input type = "text" name = "items" value = "cake" readonly><br>
    <b>Price :</b> <span name = "price" value = "20.00">$20.00</span><br>
    Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
    <input tabindex="1" name="checkbox[1]" type="checkbox" value="20" /><span>Add to Cart</span></label></div></div></td><br>
    
    <input type = "submit" name = "insertBT"><br>
    </form>
    

    次に、PHPコードは次のようになります。

    $stmt = $conn->prepare("INSERT INTO purchases (Product, Quantity, Price) VALUES (?, ?, ?)");
    $stmt->bind_param("sis", $name, $quantity, $price);
    foreach ($_POST['checkbox'] as $i => $price) {
        $name = $_POST['name'][$i];
        $quantity = $_POST['quantity'][$i];
        $stmt->execute();
    }
    

    ところで、HTMLに価格を入れるのは悪い考えのようです。ユーザーがフォームを送信する前にWebインスペクターを使用してHTMLを変更することを妨げるものは何もないため、価格を下げることができます。フォームを処理するときにデータベースから価格を取得する必要があります。

    また、元のコードではMySQLiを使用してデータベース接続を開いたが、mysql_queryを使用して挿入を試みたことに注意してください。 $conn->query()の代わりに 。そのようなAPIを混在させることはできません。 myql_query mysql_connectで接続を開いた場合にのみ使用できます 。




    1. LIKE句で角かっこをエスケープするにはどうすればよいですか?

    2. C#コードからSQL Serverストアドプロシージャにステップインするにはどうすればよいですか?

    3. Postgresqlサーバー上のpostgresという名前のデフォルトデータベース

    4. MySQLの現在の時刻に2時間を追加しますか?