PHP显示XMLHttpRequest发送的POST数据不存在?

PHP shows POST data sent by XMLHttpRequest does not exist?

提问人:chessie 提问时间:11/11/2023 更新时间:11/11/2023 访问量:26

问:

我目前正在尝试在 XAMPP 上创建一个注册页面。我的系统总结是,当用户单击提交按钮时,JS 通过 POST 对 php 文件执行 xmlhttprequest,该文件将用户的数据上传到数据库并创建一个新帐户。但是,经过一些调试后,很明显 php 文件似乎没有收到任何 POST 数据。

我的JS:

form.addEventListener("submit", function (ev) {
    ev.preventDefault();
    xhr = new XMLHttpRequest();
    xhr.timeout = 10000;
    xhr.open("POST", "/db/signup.php");
    xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=---------------------------974767299852498929531610575");
    xhr.addEventListener("timeout", function () {
        errorMsg("Timed out. Try again later.")
    }, false);
    xhr.addEventListener("readystatechange", 
        function () {
            if (xhr.readyState == 4) {
                if (xhr.status == 200 && xhr.responseText !== null) {
                    // if (xhr.responseText.startsWith("ERROR: ")) {             regular code
                    //     loadingIcon.style.opacity = "0";
                    //     errorMsg(xhr.responseText.slice(6));
                    // } else {
                    //     location.href = "/?message=Created%20account!";
                    // }
                    errorMsg(xhr.responseText);   //                             debugging code
                } else {
                    location.href = "/500.html";
                }
            }
        },
    false);
    xhr.send(new FormData(form));
}, false);

我的 PHP:

try {
  $statement = $pdo->prepare("INSERT INTO users (name, email, password, birthday, imgpath) VALUES (:n, :e, :p, :dob, :imgpath)");
  $statement->execute(
    ["n" => $_POST["name"], "e" => $_POST["email"],"p" => password_hash($_POST["password"], PASSWORD_BCRYPT), "dob" => $_POST["dob"], "imgpath" => $path ?? ""]);
} catch (PDOException $e) {
  if ($e->errorInfo[1] == 1062) {
    $error = "Already an account with email \"" . htmlspecialchars($_POST["email"], ENT_QUOTES | ENT_HTML5) . "\"";
  } else {
    $error = "An error occured. Try again later.";
  }
}

注意:这些只是我整个代码的一部分

我希望你能找到解决我问题的方法。感谢所有帮助!

php post xmlhttprequest

评论

0赞 ADyson 11/11/2023
P.S. 我不会给自己设置。让 XHR 处理正确的事情。这很容易成为你的问题。删除该行,然后重试xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=---------------------------974767299852498929531610575");
0赞 chessie 11/11/2023
@ADyson 就是这样!当我删除那行代码时,它起作用了。非常感谢!

答:

1赞 ADyson 11/11/2023 #1

删除

xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=---------------------------974767299852498929531610575");

从您的 Javascript 代码中。您无需手动设置,XHR 会为您处理并确保正确完成。