我的网站上有一个注册页面,我想为其执行PHP和AJAX验证。我将显示我的代码模板(我的代码更大),以尝试解释问题。
registration.php
<!DOCUMENT html>
<html>
<head>
<script>
$(document).ready(function(){
$("#signupForm").submit(function(event){
event.preventDefault();
var firstNameInput = $("#firstName").val();
var lastNameInput = $("#firstName").val();
$(".messageForm").load("inculdes/signup.script.php", {
firstName: firstNameInput,
lastName: lastNameInput
});
});
});
</script>
</head>
<body>
<form id="signupForm" action="includes/signup.script.php" method="POST">
<input id="firstName" type="text" name="firstName">
<input id="firstName" type="text" name="firstName">
<button id="submit" name="submit" type="submit">Submit</button>
<div class="messageForm"></div>
</form>
</body>
</html>
signup.script.php
<?php
if (isset($_POST['submit'])) {
include "dbconn.script.php";
$firstName = $_POST['firstName'];
$lastName = $_POST['lastName'];
//Validators for inputs in PHP with various error messages (1-15) and database INSERT and SELECT functions.
...
} else {
echo "<span>Error 16</span>";
exit();
}
}
?>
<script>
// JQuery validator for inputs and CSS style changers based on errors
...
</script>
我的问题是,当我单击Submit按钮时,收到错误消息“ Error 16”,因此我的函数跳过了整个PHP脚本,并且没有将数据插入数据库。我的结论是,问题是因为未设置变量$_POST['submit']
,因为当我将第一行代码更改为if (!isset($_POST[submit'']))
时,它的作用就像是魅力,但是我不想散失阻止用户执行以下操作的功能:在浏览器的URL字段中键入signup.script.php
并运行它。如何纠正此问题?我看过的教程中有此代码,在这种情况下,它可以正常工作。
P.S。如果需要解决此问题,我将扩展我的代码,因为我想节省空间,所以我给出了它的简写版本。
答案 0 :(得分:3)
您只是不随请求一起发送“提交”。 您可以在此处添加它:
$(".messageForm").load("inculdes/signup.script.php", {
firstName: firstNameInput,
lastName: lastNameInput,
submit: 1
});
或检查isset($_POST['firstName'])
边注::如果没有使用load()
传递的对象,则将是GET请求。值得记住...
请求方法
如果将数据作为对象提供,则使用POST方法。否则,假定为GET。
答案 1 :(得分:0)
根据jQuery.load()(这是一种简写的jQuery.ajax
方法)的jQuery文档,这听起来像是$_GET
而不是$_POST
。 ..最好将jQuery.ajax()之类的东西与method: 'POST'
结合使用-或在PHP中检查$_GET
。
答案 2 :(得分:0)
亲爱的仔细检查您的JavaScript代码
event.preventDefault(); // Preventing default form submission
$(".messageForm").load("inculdes/signup.script.php", {
firstName: firstNameInput,
lastName: lastNameInput
});
仅将firstName和lastName发布到signup.script.php
您正在尝试检查isset($_POST['submit'])
直到您在帖子中传递“提交”(例如firstName和lastName)之前,肯定是错误的
$(".messageForm").load("inculdes/signup.script.php", {
firstName: firstNameInput,
lastName: lastNameInput,
submit: 'yes'
});
希望有帮助