我有一个使用jQuery系统验证输入的表单。使用默认的工作方式,如果没有错误,它将提交。我对JavaScript很不好,所以我的问题是:
我该如何将此提交到同一页面并将输入放在$_POST
变量中,以便它可以执行PHP代码来处理数据,同时使jQuery验证工作?
注意事项:
- 提交按钮的类型必须设置为
type="button"
,验证器才能工作 - 将类型设置为按钮,使
<form>
无法提交
验证输入的PHP代码段(查看它是否实际提交到$_POST
变量中):
if(isset($_POST)){
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
echo $username."<br>".$email."<br>".$password;
}
表单的脚本:
<form action="" method="post">
<table border=0 id="form" style="padding:10px;">
<tr>
<td>
Username
</td>
<td align=left>
<input name="username" type="text" size="20" jVal="{valid:function (val) { if (val.length < 3) return 'Invalid Name'; else return ''; }}">
</td>
</tr>
<tr>
<td>
Email address
</td>
<td align=left>
<input name="email" type="text" size="40" jVal="{valid:/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+'.[a-zA-Z]{2,4}$/, message:'Invalid Email Address'}" jValKey="{valid:/[a-zA-Z0-9._%+-@]/, cFunc:'alert', cArgs:['Email Address: '+$(this).val()]}">
</td>
</tr>
<tr>
<td>
Password
</td>
<td align=left>
<input name="password" id="password" type="password" jVal="{valid:function (val) { if (val.length < 4) return false; else return true; }, message:'Password of 4 or more characters required'}">
</td>
</tr>
<tr>
<td style="padding-right:20px;">
Verify password
</td>
<td align=left>
<input name="passwordconfirm" id="passwordVerify" type="password" jVal="{valid:function (val) { if ( val != eval('$(''#password'').val()') ) return false; else return true; }, message:'Password and Verify Password Must Match'}">
</td>
</tr>
<tr>
<td>
<input type="hidden" name="antispam" value="banana" />
<script>
var antiSpam = function() {
if (document.getElementById("antiSpam")) {
a = document.getElementById("antiSpam");
if (isNaN(a.value) == true) {
a.value = 0;
} else {
a.value = parseInt(a.value) + 1;
}
}
setTimeout("antiSpam()", 1000);
}
antiSpam();
</script>
</td>
</tr>
<tr>
<td></td>
<td>
<input id="submitButton" type="button" value="Click here to register!" onClick="if ( $('#form').jVal({style:'blank',padding:8,border:0,wrap:false}) ){ this.form.submit;}">
</td>
</tr>
</table>
</form>
如果需要,可以在这里找到与jVal系统(验证)相对应的文件,但它们很可能不需要。
谢谢提前
p。请不要去说"缩小问题范围",当我缩小范围并发布特定的代码片段时,我被告知要发布整个代码,所以这里是
-
使用HTML5验证和
<input>
类型。例如,您的浏览器可以比您更好地验证电子邮件地址。 -
取消垃圾邮件保护;它将阻止实际用户使用您的页面。使用reCAPTCHA。
-
不要使用表格进行布局。好吗?至少,使用CSS代替
align
属性。 -
不要假设每个人的名字至少有三个字符长
<form method="POST">
<table border="0" id="form" style="padding: 10px;">
<tr>
<td>
Username
</td>
<td align="left">
<input name="username" type="text" size="20" required />
</td>
</tr>
<tr>
<td>
Email address
</td>
<td align="left">
<input name="email" type="email" size="40" required />
</td>
</tr>
<tr>
<td>
Password
</td>
<td align="left">
<input name="password" id="password" type="password" required />
</td>
</tr>
<tr>
<td style="padding-right:20px;">
Verify password
</td>
<td align="left">
<input name="passwordconfirm" id="password-confirm" type="password" required />
</td>
</tr>
<tr>
<td></td>
<td>
<button>Click here to register!</button>
</td>
</tr>
</table>
</form>
我该如何把这个提交到同一个页面,并把输入在$_POST变量中,这样它就可以执行PHP代码来处理数据,而有jQuery验证工作?
您可以使用PHP_SELF发布到同一页面。从表中移出id并将其添加到表单中,并使用它在javascript代码
中提交表单。<form id='form' action="<?php print $_SERVER['PHP_SELF'] ?>" method="post">
$('#form').submit() //instead of this.form.submit();
另外,你应该用
代替isset($_POST)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
}