如何使用ajax,jquery和php更新表中的数据?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (97)

有人可以帮助我的PHP和jQuery吗?我尝试使用PHP,jQuery和Ajax更改密码。我知道这种方法有点奇怪。但我想更多地了解Ajax,jQuery和PHP。我想在不显示或输入当前密码的情况下更新我的密码。我希望我的文本框为空,如果我输入内容,它将在我的数据库表中更改我的密码。不需要输入我当前的密码。我的问题是它没有更新我的密码。如何更新我的数据库密码?取决于谁登录。

<?php 
     $conn = new mysqli("localhost", "root", "", "mydb");
 if(isset($_POST["btnChange"])) {
        $checkUser = $conn->query("SELECT * FROM tbl_user WHERE id= $_SESSION[id]");
        if ($checkUser->num_rows > 0) {
            $conn->query("UPDATE tbl_user SET password = '$_POST[new_password]' WHERE id= $_SESSION[id]");
            echo "Update Successfully!";
        }
    }
?>

$(document).ready(function(){

	$("#btnChange").click(function(){
		$.ajax({
			url:"insert.php",
			method:"post",
			data:{btnChange: "", new_password: $("#new_password").val(),},
			success: function(data){
				alert(data);
			}
		});
	});
});

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="jquery/jquery.js"></script>
        <script src="changeapasswordjs.js"></script>
        <title>Change password</title>
    </head>
    <body> 
        <h1>Change password</h1>
        <form id="simpleForm">
            <div>
                <label for="new_password">Your new_password</label>
                <input type="password" name="new_password" id="new_password" />
            </div> 
            <br>
            <div>
                <button id="btnChange">Change password</button>
            </div>    
        </form>  
    </body>
</html>
提问于
用户回答回答于

首先,我认为你的代码错过了一个非常重要的声明,即session_start()声明。

其次,id会话无法按照您在代码中调用它的方式调用,您必须添加这样的引号$_SESSION['id']

您还需要添加引号,WHERE clause使其成为有效的语句,如下所示:WHERE id = '$_SESSION['id']'。同样,你$_POST以错误的方式访问数组,你必须添加这样的引号$_POST['new_password']

纠正这些错误后,最终代码应如下所示:

<?php
session_start(); //Initializing session
     $conn = new mysqli("localhost", "root", "", "mydb");
 if(isset($_POST["btnChange"])) {
        $checkUser = $conn->query("SELECT * FROM tbl_user WHERE id='".$_SESSION['id']."'");
        if ($checkUser->num_rows > 0) {
            $conn->query("UPDATE tbl_user SET password = '".$_POST["new_password"]."' WHERE id='".$_SESSION['id']."'");
            echo "Update Successfully!";
        }
    }
?>

UPDATE

请重现此代码else,如果用户不存在,建议使用语句。

 <?php
 session_start(); //Initializing session
      $conn = new mysqli("localhost", "root", "", "mydb");
  if(isset($_POST["btnChange"])) {
         $checkUser = $conn->query("SELECT * FROM tbl_user WHERE id='".$_SESSION['id']."'") or die(mysqli_error($conn));
         if ($checkUser->num_rows > 0) {
             $conn->query("UPDATE tbl_user SET password = '".$_POST['new_password']."' WHERE id='".$_SESSION['id']."'");
             echo "ID: ".$_SESSION['id'];
         }
         else {
             echo "User doesn't exist.";
             echo "<br>ID: ".$_SESSION['id'];
         }
     }
 ?>
用户回答回答于

要访问数组,键必须是引号,如此['key']。此外,您可以环绕{}变量以将其输出到字符串中。

// First query you do
$checkUser = $conn->query("SELECT * FROM tbl_user WHERE id = '{$_SESSION['id']}'");

// Second query you do
$conn->query("UPDATE tbl_user SET password = '{$_POST['new_password']}' WHERE id = '{$_SESSION['id']}'");

您还缺少输出的内容类型,应该在json中编码您的响应:

header('Content-Type: application/json');
echo json_encode("Update Successfully!");

此外,要访问超级变量$_SESSION,必须先session_start()访问变量之前使用。

此外,没有任何问题相关,但关键点仍在继续,您的查询倾向于SQL注入,您应该考虑打开错误登录

扫码关注云+社区

领取腾讯云代金券