首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP post请求未识别的索引错误

PHP post请求未识别的索引错误
EN

Stack Overflow用户
提问于 2016-08-15 16:14:17
回答 3查看 76关注 0票数 0

我正在尝试编写一个页面来向php脚本发出POST请求,我觉得我做得很好,它在其他地方都可以工作,所以看起来似乎是这样,但我一直收到一个“不明错误”,它不工作,我怎么才能让它工作呢?

Javascript:

代码语言: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:

代码语言:javascript
运行
复制
<?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);
?>
EN

回答 3

Stack Overflow用户

发布于 2016-08-15 16:21:06

您需要正确使用jquery。

例如,var email = $("email").val(); //IS WRONG应该是(如果您输入了“id=”) var email = $("#email").val();,如果您只有姓名,则可以使用var email = $("[name='email']").val();

有点离题:如果您正在使用form ajax submit,可以考虑使用jquery方法serialize 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');

票数 0
EN

Stack Overflow用户

发布于 2016-08-15 16:30:04

你的代码无法工作的原因有很多。@AucT和@ so已经解决了你的Javascript方面的问题,所以我将重点介绍PHP。您的查询代码为:

代码语言:javascript
运行
复制
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "...";
$conn->close();

请注意:

  • 你永远不会执行你的查询。$sql只是一个保存在内存中的字符串。
  • 您正在将mysqli函数与mysql_函数(mysql_affected_rows)混合在一起;这将不起作用您正在将POST数据直接插入到查询中,因此您很容易受到SQL injection
  • At的攻击。最后,您回显了JSON,但是您并没有告诉浏览器要使用这种格式的

改为执行以下操作:

代码语言:javascript
运行
复制
$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);
票数 0
EN

Stack Overflow用户

发布于 2016-08-15 16:32:05

我认为你搞错了你的jquery数据,他们应该有标识符,像id用'#‘表示,类用'.’表示,这是你在输入参数中有“id=name of id=”的输入参数:

代码语言: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";
    }});
});
});

或者像这样,在输入参数中有“name of class= field”:

代码语言: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";
    }});
});
});

或者,如果您想直接使用该名称,请遵循以下内容:

代码语言:javascript
运行
复制
$(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";
    }});
});
});

我希望这对你有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38951550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档