私は姓/名字変更用のユーザパネルを作成しようとしています。MySQL/PHP/jQuery - クエリの問題
私はconsole.log(data)
と{fname: "Damian", lname: "Doman", id: "20"}
を見ることができるので、$ajax
フォーム処理がうまくいっているようです。
また、phpクラスは私がフォームを送信した後も実行されているようですが、print 'Your name has been changed! To go back, please click <a href="userpage.php">here</a>';
という意味です。
最後に、クエリー自体(UPDATE members SET fname = ?, lname = ? WHERE id = ?
)は疑問符ではなく値でSQLコンソールを手動で起動すると完全に機能します。
まだ全体のスクリプトはうまくいきません、私はそれが成功しているというメッセージを受け取りますが、まだテーブルはUPDATE
を取得しません。
HTML:
<div class="changename-form-wrapper">
<h1>Define your first and last names here:</h1>
<div class="form-group">
<input type="text" name="fname" id="fname" tabindex="3" class="form-control ui-autocomplete-input" placeholder="First name..." value="">
</div>
<div class="form-group">
<input type="text" name="lname" id="lname" tabindex="4" class="form-control ui-autocomplete-input" placeholder="Last name...">
</div>
<div class="form-group">
<input type="text" name="id" id="id" tabindex="4" class="form-control ui-autocomplete-input" style="display:none;" value="<?=$_SESSION['user']['id']?>">
</div>
<div class="form-group">
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
<input type="button" name="name-submit" id="name-submit" tabindex="4" class="form-control btn btn-login" value="Apply">
</div>
</div>
</div>
</div>
<div class="alert-space">
<div class="ui-widget" style="display:none;">
<div class="ui-state-error ui-corner-all">
<div class="p"><span class="ui-icon ui-icon-alert"></span></div><div class="p"><div class="ui-state-error-text"></div></div>
</div>
</div>
</div>
jQueryの/ AJAX:
$("#name-submit").click(function(){
var data = { "fname": $('#fname').val(), "lname": $('#lname').val(), "id": $('#id').val() };
if($("#fname").val() != "" && $("#lname").val() != ""){
$.ajax({
method: "POST",
url: 'changename.php',
data: data,
}).done(function(msg) {
console.log(data);
if(msg !== ""){
$(".ui-widget").show();
$(".ui-state-error-text").html(msg);
}else{
window.location = "userpage.php";
}
});
}else{
$(".ui-widget").show();
$(".ui-state-error-text").html("<strong>Error:</strong> Please, fill in both the first and last name.");
}
});
CHANGENAME.PHPのフォームハンドラ:
<?php
require_once '../../class/user.php';
require_once '../../config.php';
$id = filter_input(INPUT_POST, 'id', FILTER_SANITIZE_STRING);
$fname = filter_input(INPUT_POST, 'fname', FILTER_SANITIZE_STRING);
$lname = filter_input(INPUT_POST, 'lname', FILTER_SANITIZE_STRING);
if($user->userUpdate($id, $fname, $lname)) {
print 'Your name has been changed! To go back, please click <a href="userpage.php">here</a>';
die;
} else {
$user->printMsg();
die;
};
そして最後にuserUpdate($id, $fname, $lname)
クラスコード:
public function userUpdate($id,$fname,$lname){
$pdo = $this->pdo;
if(isset($id) && isset($fname) && isset($lname)){
$stmt = $pdo->prepare('UPDATE members SET fname = ?, lname = ? WHERE id = ?');
if($stmt->execute([$id,$fname,$lname])){
return true;
}else{
$this->msg = 'User information change failed.';
return false;
}
}else{
$this->msg = 'Provide a valid data.';
return false;
}
}
私が間違って何をしているのですか?私は現時点でコンソールに何のエラーもありません。
jqueryを除外してフォームに入れてみませんか? –
'if($ stmt-> execute([$ id、$ fname、$ lname])){'はそのクエリの順序が間違っているようです。 –
クエリが正しく実行され、何も更新されないため、エラーは発生しません。 –