簡體   English   中英

PHP發布請求未識別索引錯誤

[英]PHP post request unidentified index error

我正在嘗試編寫一個頁面以向php腳本發出POST請求,我覺得我做對了,它在其他地方都可以使用,因此看來,但是我一直收到“無法識別的錯誤”,它將無法正常工作,我該如何使用它?

Javascript:

$(document).ready(function() {
    $("#x").click(function() {
        var email = $("email").val();
        var pass = $("password").val();
        var confirmPass = $("confirmPassword").val();
        var name = $("name").val();
        var question = $("question").val();
        var answer = $("answer").val();

        if(pass != confirmPass) {
            alert("Passwords do not match!");
            return;
        }

        var stuff = {email: email, pass: pass, name: name, question: question, answer: answer};

        $.ajax({method: "POST", url: "addAccount.php", data: stuff, success: function(result) {
            alert(result);
            window.location.href = "../Dashboard";
        }});
    });
});

PHP:

<?php
    $servername = "localhost";
    $username = "root";
    $password = "*********";
    $dbname = "myDB";

    $conn = new mysqli($servername, $username, $password, $dbname);

    $email = $_POST["email"];
    $pass = $_POST["pass"];
    $name = $_POST["name"];
    $question = $_POST["question"];
    $answer = $_POST["answer"];

    $sql = "INSERT INTO accounts (accountEmail, accountPassword, accountName, accountQuestion, accountRecover) VALUES ('$email', '$pass', '$name', '$question', '$answer')";
    $conn->close();

    if(mysql_affected_rows() > 0) {
        $response = "Account added successfully!";
    }
    else {
        $response = "Couldn't add account!";
    }

    $pre = array("Response" => $response);
    echo json_encode($pre);
?>

您需要正確使用jquery。
例如var email = $("email").val(); //IS WRONG var email = $("email").val(); //IS WRONG應該是(如果您輸入了id =“ email”) var email = $("#email").val(); 如果只有名字,則可以使用var email = $("[name='email']").val();

有點離題:如果您使用表單ajax提交,請考慮使用jquery方法序列化https://api.jquery.com/serialize/以獲取所有表單值(或某些jquery ajaxform插件)。

求你了! 不要做不安全的mysql語句。 看在上帝的份上,使用准備好的陳述。 如果您需要非常基本的內容,請使用准備好的語句或考慮https://phpdelusions.net/pdo/pdo_wrapper

還有一個小技巧:在回顯json之前,先使json標頭<?php header('Content-type:application/json;charset=utf-8');

您的代碼無法正常運行的原因很多。 @AucT和@gentle已經解決了Javascript方面的問題,因此我將重點介紹PHP。 您的查詢代碼是:

$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "...";
$conn->close();

注意:

  • 您永遠不會執行查詢。 $sql只是保存在內存中的字符串。
  • 您正在將mysqli函數與mysql_函數( mysql_affected_rows )混合使用; 那行不通
  • 您將POST數據直接插入查詢中,因此您很容易受到SQL注入的攻擊
  • 最后,您回顯JSON,但尚未告訴瀏覽器使用這種格式

改為這樣做:

$conn = new mysqli(...);
//SQL with ? in place of values is safe against SQL injection attacks
$sql = "INSERT INTO accounts (accountEmail, accountPassword,
          accountName, accountQuestion, accountRecover) VALUES (?, ?, ?, ?, ?)";

$error = null;
//prepare query and bind params. save any error
$stmt = $conn->prepare($sql);
$stmt->bind_param('sssss',$email,$pass,$name,$question,$answer)
        or $error = $stmt->error;

//run query. save any error
if(!$error) $stmt->execute() or $error = $stmt->error;

//error details are in $error
if($error) $response = "Error creating new account";
else $response = "Successfully created new account";

//set content-type header to tell the browser to expect JSON
header('Content-type: application/json');
$pre = ['Response' => $response];
echo json_encode($pre);

我認為您錯了您的jquery數據,它們應該具有標識符,例如由“#”表示的id和由“。”表示的類,這是因為您在輸入參數中具有id =“字段名稱”:

$(document).ready(function() {
$("#x").click(function() {
    var email = $("#email").val();
    var pass = $("#password").val();
    var confirmPass = $("#confirmPassword").val();
    var name = $("#name").val();
    var question = $("#question").val();
    var answer = $("#answer").val();

    if(pass != confirmPass) {
        alert("Passwords do not match!");
        return;
    }

    var stuff = {email: email, pass: pass, name: name, question: question, answer: answer};

    $.ajax({method: "POST", url: "addAccount.php", data: stuff, success: function(result) {
        alert(result);
        window.location.href = "../Dashboard";
    }});
});
});

或像這樣,您將在輸入參數中添加class =“ field of name”:

$(document).ready(function() {
$("#x").click(function() {
    var email = $(".email").val();
    var pass = $(".password").val();
    var confirmPass = $(".confirmPassword").val();
    var name = $(".name").val();
    var question = $(".question").val();
    var answer = $(".answer").val();

    if(pass != confirmPass) {
        alert("Passwords do not match!");
        return;
    }

    var stuff = {email: email, pass: pass, name: name, question: question, answer: answer};

    $.ajax({method: "POST", url: "addAccount.php", data: stuff, success: function(result) {
        alert(result);
        window.location.href = "../Dashboard";
    }});
});
});

或者,如果您想直接使用名稱,請遵循以下步驟:

$(document).ready(function() {
$("#x").click(function() {
    var email = $("input[name='email']").val();
    var pass = $("input[name='pasword']").val();
    var confirmPass = $("input[name='confirmPassword']").val();
    var name = $("input[name='name']").val();
    var question = $("input[name='question']").val();
    var answer = $("input[name='answer']").val();

    if(pass != confirmPass) {
        alert("Passwords do not match!");
        return;
    }

    var stuff = {email: email, pass: pass, name: name, question: question, answer: answer};

    $.ajax({method: "POST", url: "addAccount.php", data: stuff, success: function(result) {
        alert(result);
        window.location.href = "../Dashboard";
    }});
});
});

我希望這可以幫助你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM