一切
似乎都是正确的,但空白值继续插入到我的数据库中。它似乎没有使用 $_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'));