jQuery / PHP POST不起作用


jQuery / PHP POST not working

一切

似乎都是正确的,但空白值继续插入到我的数据库中。它似乎没有使用 $_POST 来获取值。我也尝试了 _GET 美元和 _REQUEST 美元,但这些值似乎仍然没有被拾取。我知道由于插入了静态"视频"文本,空白行被添加到数据库中。

.HTML:

<form>
    <div class="form-group">
        <input type="text" class="form-control" name="firstName" id="firstName"
               placeholder="First Name">
    </div>
    <div class="form-group">
        <input type="text" class="form-control" name="lastName" id="lastName"
               placeholder="Last Name">
    </div>
    <div class="form-group">
        <input type="text" class="form-control" name="email" id="email"
               placeholder="Email">
    </div>
    <button type="submit" id="view" class="btn bds-button btn-block">View
    </button>
</form>

JavaScript:

$(document).ready(function() {
$('form').validate({
    rules: {
        firstName: {
            required: true
        },
        lastName: {
            required: true
        },
        email: {
            required: true,
            email: true
        }
    },
    messages: {
        firstName: "Please enter your first name",
        lastName: "Please enter your last name",
        email: {
            required: "Please enter your email",
            email: "Please enter a valid email",
        }
    },
    highlight: function(element) {
        $(element).closest('.form-group').addClass('has-error');
    },
    unhighlight: function(element) {
        $(element).closest('.form-group').removeClass('has-error');
    },
    errorElement: "span",
    errorClass: 'help-block',
    errorPlacement: function(error, element) {
        if(element.parent('.input-group').length) {
            error.insertAfter(element.parent());
        } else {
            error.insertAfter(element);
        }
    },
    submitHandler: function(form) {
        var firstName = $("#firstName").val();
        var lastName = $("#lastName").val();
        var email = $("#email").val();
        $.ajax({
            type: "POST",
            url: "php/post-viewer.php",
            data: {'firstName' : firstName, 'lastName' : lastName, 'email' : email},
            dataType: 'json',
            success : function(text){
            }
        });
    }
});
});

.PHP:

<?php
$servername = "XXXX";
$username = "XXXX";
$password = "XXXX";
$dbname = "XXXX";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$first_name = $_POST['firstName'];
$last_name = $_POST['lastName'];
$email = $_POST['email'];
$sql = "INSERT INTO viewers (demo, first_name, last_name, email)
VALUES ('Video', '$first_name', '$last_name', '$email')";
if ($conn->query($sql) === TRUE) {
    echo $first_name;
    //echo "New record created successfully";
} else {
    echo $first_name;
    //echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>

在 ajax 方法上,试试这个...

var vfirstName = $("#firstName").val();
var vlastName = $("#lastName").val();
var vemail = $("#email").val();
data: JSON.stringify({firstName : vfirstName, lastName : vlastName, email : vemail})

请像这样使用 AJAX:

$.ajax({
        type: "POST",
        url: "php/post-viewer.php",
        data: $('form').serialize(),
         success: function (response) {
          alert('form was submitted');
        }
    });

通过 AJAX 运行脚本的问题在于,当您开发出现问题时会发生什么时,您对发生的事情缺乏可见性。

所以你必须想出一种方法来恢复这种可见度,我使用了很多方法,这里有几个。

编写包含信息的输出文件

<?php
function dump($str)
{
    file_put_contents('mydump.txt', $str.PHP_EOL, FILE_APPEND );
}

$servername = "XXXX";
$username = "XXXX";
$password = "XXXX";
$dbname = "XXXX";
dump($_POST);
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$first_name = $_POST['firstName'];
$last_name = $_POST['lastName'];
$email = $_POST['email'];
$sql = "INSERT INTO viewers (demo, first_name, last_name, email)
VALUES ('Video', '$first_name', '$last_name', '$email')";
dump($sql);
if ($conn->query($sql) === TRUE) {
    dump("New record created successfully");
} else {
    dump("Error: " . $sql . PHP_EOL . $conn->error);
}
$conn->close();
?>

现在,您可以检查文件以了解发生了什么。使用dump()功能添加您喜欢的任何内容

生成一个 json 对象来保存信息并将其返回到 AJAX 调用

<?php
$response = new stdClass();
$servername = "XXXX";
$username = "XXXX";
$password = "XXXX";
$dbname = "XXXX";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$response->dollarPOST = $_POST;    
$first_name = $_POST['firstName'];
$last_name = $_POST['lastName'];
$email = $_POST['email'];
$sql = "INSERT INTO viewers (demo, first_name, last_name, email)
VALUES ('Video', '$first_name', '$last_name', '$email')";
if ($conn->query($sql) === TRUE) {
    $response->status = 'OK';
    $response->statusMsg = "New record created successfully";
} else {
    $response->status = 'FAILED';
    $response->statusMsg = "CREATE FAILED";
    $response->sqlErrMsg = $conn->error;
    $response->sqlStatement = $sql;
}
$conn->close();
echo json_encode($response);
?>

现在,当您运行 AJAX 时,请查看返回的响应

submitHandler: function(form) {
    $.ajax({
        type: "POST",
        url: "php/post-viewer.php",
        data: {'firstName' : $("#firstName").val(), 
               'lastName' : $("#lastName").val(), 
               'email' : $("#email").val()
        },
        dataType: 'json',
        success : function(response){
            if (response.status == 'FAILED') {
                alert(response.statusMsg + response.sqlErrorMsg);
            } else {
                alert('YIPPEEE Kia A Mum');
            }
        }
    });
}

另请记住,可以在if (response.status == 'FAILED') {上设置断点,然后使用调试器查看response对象中返回的所有数据。这省去了您编写大量alerts

代码

我能够使用 parse_str 函数来解决它:

parse_str(file_get_contents('php://input'));