2

jQuery/AJAX を使用して、a) $firstname、$lastname、および自動インクリメント $user_id で構成される HTML テーブル内の既存のレコードを更新しようとしています。b) 新しいデータベース エントリを ID 番号と表示と共に返します。ページを更新せずに HTML に表示します。

計画は、jQuery .on("click"...) を使用して 2 つの名前フィールドのデータを取得し、php ファイル add-user.inc.php を起動してこれらを挿入し、$user_id の値を NULL のままにすることです。したがって、自動インクリメントします。

$(document).on("click", ".insert", function(){
    var firstname = $('input.newdata[name="firstname"]').val();
    var lastname = $('input.newdata[name="lastname"]').val();
    $.ajax({ // begin insert ajax
        url: "php-includes/add-user.inc.php",
        type: "GET",
        data: { // begin insert data
            'firstname': firstname,
            'lastname': lastname
        }, // end insert data            
    }); // end insert ajax
// closing }); comes later

次に、クリック イベント内で、ブラウザーが新しく挿入された行を正しく識別して、ページを更新せずにさらにデータを操作できるように、別の AJAX 呼び出しを使用して、この新しく挿入されたレコードの id 値を取得します。

    $.ajax({ // begin retrieve ajax
        url: "php-includes/retrieve-user_id.inc.php",
        data: "",
        datatype: "application/json",
        type: 'get',
        success: function(data) {
           var user_id = data;

            // declare var newrecord which is a table row containing
            // <tr> with the variable user_id as its ID
            // and <td>s containing inputs containing the newly inserted data

           $('table tr:last').before(newrecord); // .. and insert this into the table
        },  // end retrieve data
    }); // end retrieve ajax
});

add-user.inc.php:

// connect to db

$firstname = $_GET['firstname'];
$lastname = $_GET['lastname'];

$insert_user_sql = "INSERT INTO `table` (user_id, firstname, lastname)
    VALUES (NULL,'$firstname','$lastname')";

$result = $db->query($insert_user_sql);

取得-user_id.inc.php

// connect to db

$retrieve_user_sql = "SELECT `user_id` from `table` ORDER BY `user_id` DESC LIMIT 1";
$retrieve_user_result = $db->query($retrieve_user_sql);
$retrieve_user_num_rows= $retrieve_user_result->num_rows;


if ($retrieve_user_num_rows > 0) { 
    while ($row = $retrieve_user_result->fetch_object()) {
        $user_id = $row->user_id;
        $result = ($user_id + 1);
    }
} else {
    $result = 1;
}

 echo $result;

HTML に挿入された user_id 番号が断続的に間違っており、1 ではなく 2 ずつ増加することもあれば、増加しないこともあり、ページが更新されて正しい ID 番号が純粋な PHP を介して取得されるまで、同じ ID を持つ 2 つのテーブル行が表示されます。単一の ID が複数の行をターゲットにする可能性があるため、挿入の間にページの更新が行われずに複数のレコードが入力されると、問題が発生します。

各挿入の間にページの更新が実行される場合、問題はありません。

何か案は?前もって感謝します。

4

1 に答える 1

2

GETデータの挿入にa を使用しないでGETください。呼び出しは冪等でなければなりません。

代わりに、最後に挿入された ID を応答で返すリクエストを発行し、POSTその値を ajax リクエストのコールバックで使用する必要があります。

$(document).on("click", ".insert", function(){
    var firstname = $('input.newdata[name="firstname"]').val();
    var lastname = $('input.newdata[name="lastname"]').val();
    $.ajax({ // begin insert ajax
        url: "php-includes/add-user.inc.php",
        type: "POST",
        data: { // begin insert data
            'firstname': firstname,
            'lastname': lastname
        },
        success: function(response){

          // do your stuff here with the retrieved id

        }
    }); // end insert ajax
// closing }); comes later

successハンドラーが追加されたことに注意してください。

于 2013-04-23T11:23:36.453 に答える