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 が複数の行をターゲットにする可能性があるため、挿入の間にページの更新が行われずに複数のレコードが入力されると、問題が発生します。
各挿入の間にページの更新が実行される場合、問題はありません。
何か案は?前もって感謝します。