ここで別の質問で述べたように、私はログインクラスを作成していますが、いくつかの追加オプションを用意しています。AJAXを使用したMySQLテーブルからのエントリの削除
1人がユーザーを削除しています。これを行うために使用しているコードを示します。このようになりますが、HTMLでのこの関数の結果を見ることができるように
public function listUsers() {
$sql = "SELECT username FROM user";
if($stmt = $this->conn->prepare($sql)) {
$stmt->bind_result($usrn);
$stmt->execute();
while ($row = $stmt->fetch()) {
$stmt->bind_result($usrn);
echo '<form name="delete-user" id="'.$usrn.'" class="delete-user" method="post" action="#">'.
'<fieldset class="user-wrapper">'.
'<label for="user" class="user-label">User</label>'.
'<input type="text" name="user" class="user" value="'.$usrn.'" autocomplete="off" readonly="readonly" />'.
'</fieldset>'.
'<fieldset class="delete-wrapper">'.
'<button type="submit" name="delete" class="delete">Delete</button>'.
'</fieldset>'.
'</form>';
}
$stmt->close();
echo '<div class="message-handling"></div>';
}
else {
$error = true;
$message['error'] = true;
$message['message'] = "The Users Could Not Be Listed";
return json_encode($message);
}
}
:
まず私はこの機能を使用しているすべてのユーザーをリスト
<form name="delete-user" id="altceva" class="delete-user" method="post" action="#">
<fieldset class="user-wrapper">
<label for="user" class="user-label">User</label>
<input type="text" name="user" class="user" value="altceva" autocomplete="off" readonly="readonly" />
</fieldset>
<fieldset class="delete-wrapper">
<button type="submit" name="delete" class="delete">Delete</button>
</fieldset>
</form>
フォームのIDを実際には各ユーザーの名前です(ユーザーごとにフォームはユーザーのIDで作成されます)。また、私はそれを別の関数に渡してそのユーザーを削除する必要があるので、入力の値もユーザー名を持っています。
次は、削除したいユーザーをAJAXで削除しようとしています。私はこれまでのところ、この機能を持っている:アクションを処理する
var ids = $('.delete-user-content form[id]').map(function(){
return this.id;
}).get();
jQuery.each(ids, function() {
console.log("#" + this + ' .delete');
$("#" + this + ' .delete').click(function() {
$('.delete-user-content .message-handling').fadeOut();
$.ajax({
type: 'POST',
url: 'assets/class/login/process.php',
dataType: 'json',
data: {
delusername: $('.delete-user input.user').val()
},
success:function(data) {
if(data.error === true) {
$('.delete-user-content .message-handling').text(data.message).fadeIn();
console.log(data.message);
setTimeout(function() {
$('.delete-user-content .message-handling').fadeOut();
}, 15000);
}
else {
$('.delete-user-content .message-handling').text(data.message).fadeIn();
console.log(data.message);
$('#'+id).fadeOut();
array.splice(index, 1);
setTimeout(function() {
$('.delete-user-content .message-handling').fadeOut();
}, 15000);
}
},
error:function(XMLHttpRequest,textStatus,errorThrown) {
$('.delete-user-content .message-handling').text('Error | Check PHP log for information').fadeIn();
console.log('Error | Check PHP log for information');
}
});
return false;
});
});
そして、PHPの関数は、このいずれかになります。
public function deleteUser($user) {
$sql = "DELETE FROM user WHERE username = '$user'";
if($stmt = $this->conn->prepare($sql)) {
$stmt->execute();
$stmt->close();
$error = false;
$message['error'] = false;
$message['message'] = "The User ".$user." Has Been Deleted";
return json_encode($message);
}
else {
$error = true;
$message['error'] = true;
$message['message'] = "The User Could Not Be Deleted";
return json_encode($message);
}
}
しかし、事は、これは正常に動作しないということです。 1つの問題は、リストされた最後のユーザーを削除すると、実際に最初のユーザーが削除されます。その後、私は1つの削除を行った後、別の削除をクリックすると他のものは削除されません、それはちょうど最初の時と同じユーザーが削除されたことを教えてくれます。
今、私はこれはたくさんのコードであり、それを理解するのは難しいと知っていますが、誰かがそれを手伝ってくれますか?
を、履歴追跡、統計やその他の理由のために、それが一般的です実際にレコードを削除するのではなく、無効にするか無効にするかを選択します。それはあなたの現在の問題の一部を解決するかもしれません。 – DOK
OK。では、削除する代わりに非アクティブにするにはどうすればよいですか?また、私は新しいユーザーを作成するときにこれは問題を引き起こしませんか? – Roland
ちょっとした注意:すでにpaylodデータ($ user)をSQLクエリに入れた場合、そのデータをサニタイズ/エンコード/エスケープする必要があります。プリペアドステートメントは、プレースホルダー/パラメーターを使用し、それらのパラメーターにペイロードを割り当てる場合にのみ、その部分から解放します。 – VolkerK