php - 使用 ajax 向我的服务器发送了一个对象,似乎无法使用 php 获取数据

标签 php mysql ajax

我已经使用这段 AJAX 向我的 PHP 发送了两条数据:

function ajax_post(){
    // Create our XMLHttpRequest object
    var request = new XMLHttpRequest();
    // Create some variables we need to send to our PHP file
    var url = "php/addUser.php";
    var username = document.getElementById("newUserName").value;
    var password = document.getElementById("newUserPass").value;
    var newUsername = "user_name="+username;
    var newPassword="password="+password;
    request.open("POST", url, true);
    // Set content type header information for sending url encoded variables in the request
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    // Access the onreadystatechange event for the XMLHttpRequest object
    request.onreadystatechange = function() {
        if(request.readyState == 4 && request.status == 200) {
            var return_data = request.responseText;
            document.getElementById("output").innerHTML = return_data;
        }
    };
    // Send the data to PHP now... and wait for response to update the status div
    request.send({newUsername,newPassword}); // Actually execute the request

这是应该获取这两条数据并将其插入我的 mysql 数据库的 PHP 代码。

//Connect to the database

$connection = mysqli_connect($host, $user, $pass, $db, $port)or die(mysql_error());

$userName=$_POST['newUsername'];
$userPassword=$_POST['newPassword'];

$query="INSERT INTO users(user_name,password)
VALUES('$userName','$userPassword')";

if ($connection->query($query) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $query . "<br>" . $connection->error;
}

$connection->close();

当 AJAX 运行时,它运行时没有错误,并将数据发送到我服务器上的 PHP 代码。然后 PHP 代码运行并没有错误地完成,但是当我检查我的数据库时,新用户被插入到数据库中,但它是空的。我很确定它在我的 PHP 代码中,但我还没有弄明白。

最佳答案

request.send() 的参数应该是一个 URL 编码的字符串,而不是一个对象。

request.send(newUsername + '&' + newPassword);

请注意,在设置变量时还应使用 encodeURIComponent,以防它们包含特殊的 URL 字符。

var newUsername = "user_name=" + encodeURIComponent(username);
var newPassword = "password=" + encodeURIComponent(password);

此外,您的对象语法不正确。对象的语法是

{ prop1: value1, prop2: value2, ... }

{ var1, var2 } 应该给你一个语法错误。

您还使用了错误的 $_POST 键。键应该匹配 = 之前的参数名称,而不是表单字段的 ID。

$userName = $_POST['user_name'];
$userPassword = $_POST['password'];

您还应该在 PHP 中使用准备好的语句而不是变量替换,以防止 SQL 注入(inject)问题。

$query = "INSERT INTO users (user_name, password) VALUES (?, ?)";
$stmt = $connection->prepare("ss", $userName, $userPassword);
if ($stmt->execute()) {
    echo "New record created successfully";
} else {
    echo "Error: " . $query . "<br>" . $stmt->error;
}
$connection->close();

关于php - 使用 ajax 向我的服务器发送了一个对象,似乎无法使用 php 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29807575/

相关文章:

php - Laravel 路线不适用于生产

php - Drupal 7 使用 If 条件 mysql 数据库选择查询

html - 获取div在数据库中的坐标

javascript - 无法使用ember在浏览器中读取pdf内容

javascript - JQuery AJAX URL 本地或绝对

php - 遇到 PHP preg_replace 问题

javascript - Node JS 应用程序不处理 php 邮件程序代码

php - Simplesamlphp 落后于负载均衡器时失败

MySQL对具有不同字段的多个表进行全文搜索

javascript - 有关暂停的相关视频在 JW 播放器 6 中不起作用