麻烦提交我的表单(与jQuery验证)到同一页面与$_POST


Trouble submitting my form (with jQuery validation) to the same page with $_POST

我有一个使用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。请不要去说"缩小问题范围",当我缩小范围并发布特定的代码片段时,我被告知要发布整个代码,所以这里是

  1. 使用HTML5验证和<input>类型。例如,您的浏览器可以比您更好地验证电子邮件地址。

  2. 取消垃圾邮件保护;它将阻止实际用户使用您的页面。使用reCAPTCHA。

  3. 不要使用表格进行布局。好吗?至少,使用CSS代替align属性。

  4. 不要假设每个人的名字至少有三个字符长

<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') {
}