我的网站上有一个注册页面,我想为它实现PHP和AJAX验证。我将展示我的代码模板(我的代码要大得多(,试图解释这个问题。
注册.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>
注册.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>
我的问题是,当我点击提交按钮时,我会收到错误消息"错误16",所以我的函数跳过整个PHP脚本,不将数据插入数据库。我得出的结论是,问题是因为变量$_POST['submit']
没有设置,因为当我将第一行代码更改为if (!isset($_POST[submit'']))
时,它的工作方式很有魅力,但我不想失去阻止用户在浏览器的URL字段中键入signup.script.php
并运行它的能力。如何纠正这一点?我看的教程有这样的代码,在这种情况下,它可以毫无问题地工作。
附言:如果需要解决这个问题,我会扩展我的代码,因为我想腾出空间,所以我给出了它的简写版本
您只是不在请求中发送"submit"。你可以在这里添加:
$(".messageForm").load("inculdes/signup.script.php", {
firstName: firstNameInput,
lastName: lastNameInput,
submit: 1
});
或检查isset($_POST['firstName'])
旁注:如果没有用load()
传递的对象,它将是一个GET请求。值得记住。。。
请求方法
如果数据是作为对象提供的,则使用POST方法;否则,假定为GET。
文档
根据jQuery.load((的jQuery文档(这是一种人手不足的jQuery.ajax
方法(,如果这是$_GET
而不是$_POST
,这听起来很像。。。最好将类似jQuery.ajax((的东西与method: 'POST'
结合使用,或者在PHP中检查$_GET
。
亲爱的,仔细检查您的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'
});
希望它能帮助