-1

私はこのサイトの助けを借りてこれに取り組んできました。playersテーブルに複数の行を (値に基づいて)挿入できるようになりまし$add-rowsた。eventsまた、テーブル 1 行に挿入する必要があります。playersフォームを送信すると、うまく挿入されますが、挿入されませんevents

これは、2 つのクエリに必要なすべての値を含む私のフォームです。

<form id="form-add" name="form-add" method="POST" enctype="multipart/form-data" action="page.php">
<input name="add-name" id="add-name" type="text" value="Event">
<input name="add-start" id="add-start" type="text" value="">
<input name="add-end" id="add-end" type="text" value="">
<input name="add-loc" id="add-loc" type="text" value="">
<input name="add-rows" id="add-rows" type="text" value="">
<input name="add-submit" id="add-submit" type="submit" value="Add" />
<input type="hidden" name="submitted" value="TRUE" />
</form>

これらは、フォームから投稿している値です

<?php
$add_name = $_POST['add-name'];
$add_start = $_POST['add-start'];
$add_end = $_POST['add-end'];
$add_loc = $_POST['add-loc'];
$add_rows = $_POST['add-rows'];
$add_url = date('Y-m-d',strtotime($add_start)).'-'.str_replace('-',' ',($add_name));

if(isset($_POST['submitted'])) { //check if form submitted
    //connection
    $mysqli = new mysqli('host', 'user', 'pass', 'db_name');

    //this is the first query - to insert multiple rows in to players table (from same form)
    $query  = "INSERT INTO players (position, event, start, end, name, one, two, three, four, five, six) 
        VALUES ('', '$add_url', '$add_start', '$add_end', '', 'Yes', 'No', 'No', 'No', 'No', 'No');" .
        str_repeat(", ('', '$add_url', '$add_start', '$add_end', '', 'Yes', 'No', 'No', 'No', 'No', 'No')", $add_rows - 1);

    //this is the 2nd query - to insert to events table (from same form)
    $query .= "INSERT INTO events (ur, name, start, end, loc) VALUES ('$add_url', '$add_name' '$add_start', '$add_end', '$add_loc');";

    // execute query - $result is false if the first query failed
    $result = mysqli_multi_query($mysqli, $query);

    if ($result) {
        do {
            // grab the result of the next query
            if (($result = mysqli_store_result($mysqli)) === false && mysqli_error($mysqli) != '') {
                echo "Query failed: " . mysqli_error($mysqli);
            }
        } while (mysqli_more_results($mysqli) && mysqli_next_result($mysqli)); // while there are more results
    } else {
        echo "First query failed..." . mysqli_error($mysqli);
    }
}//end of form submit if
?>
4

1 に答える 1

1

あなたのコードには3つの主な欠陥があります

  1. あなたが使用しmysqli_multi_query()ているのは、ここでは役に立たず、コードを過度に複雑にするだけです。
  2. プレースホルダーを使用していないため、コードがインジェクションに対して脆弱になります
  3. データベースに同一の行を挿入していますが、これはデータベース法に対する犯罪です。

したがって、2 つのクエリを作成します。1 つは player テーブルに 1 つのレコードを挿入し、もう 1 つはイベントに挿入します。
準備されたステートメントを使用して、2 つの別々の呼び出しでそれらを実行します。
mysqli はそれらでは使用できないため、代わりに PDO を使用してください。

于 2013-03-13T02:13:43.647 に答える