【问题标题】:When using form validate alongside isset $_POST, page refreshes but will not submit与isset $_POST一起使用表单验证时,页面刷新但不会提交
【发布时间】:2017-09-20 21:24:15
【问题描述】:

首先谢谢你。 我正在用 PHP 编写一个注册页面并使用 Jquery Validate 来检查表单。当表单填写不正确时,它会返回错误,但是当它正确填写时,它只是刷新并且没有完成我在 isset $_POST 函数中委托的操作。这是我正在处理的:

PHP 如果表单不为空

    //Escape high risk symbols

    $pw= mysqli_real_escape_string($con, $_POST['pass']);
    $username= mysqli_real_escape_string($con, $_POST['pass']);
    $email = mysqli_real_escape_string($con, $_POST['email']);
    $sex = mysqli_real_escape_string($con, $_POST['sex']);
    $signedUp = date("Y-m-d H:i:s");
    $hash = password_hash($pw, PASSWORD_DEFAULT);

    echo 'Email: '.$email;
    echo 'Username: '.$username;
    echo 'Sex: '.$sex;
    echo 'Signed Up: '.$signedUp;
}
?>

这是表格

    <form method="post" class="form-signin" id="signup" name="signup">
                ...   
    </form>

这是我的验证 javascript,它似乎没有发布

<script src="js/formValidate.js"></script>
<script>
     // When the document is ready
     $(document).ready(function () {
         //validation rules
         $("#signup").validate({
             onkeyup: false,
             onfocusout: false,
             errorElement: "div",
             errorPlacement: function(error, element) {
                 error.appendTo("div#errors");
         },
         rules: {
             email: {
                 required : true,
                 email: true
                 //equalTo: "#example3-field2"
             },
             username: {
                 required: true,
                 minlength: 5
             },
             pass: {
                 required : true,
                 minlength: 5
             },
             cPass: {
                 required : true,
                 equalTo : "#pass"
             },
             sex: {
                 required : true
             },
         },
         messages: {
             email: {
                 required: "You must enter an email address",
                 email: "Enter a valid email address"
                 //equalTo: "Field 1 must be equal to Field 2"
             }, 
             username: {
                 required: "You must choose a username",
                 minlength: "Username must be a minimum of 5 characters"
             }, 
             pass: {
                 required : "You are required to enter a password!",
                 minlength : "Password must be at least 5 characters!"                                          
             },
             cPass : {
                 required : "You are required confirm your password!",
                 equalTo : "Passwords do not match"
             },
             sex : {
                 required : "You are required to choose a sex"
             },
         }, 
        submitHandler: function(form) {
            form.submit();
        }
    });             
});
</script>

【问题讨论】:

  • 那里有很多,您可以尝试缩小范围以找出问题所在吗?您看到了什么错误?
  • 没有任何错误显示。表单验证功能正在工作。在提交不正确的信息时,它会显示错误消息,但是当所有内容都正确填写时,它只是在刷新而不是回显字符串。
  • 你的表单确实应该有一个 action 属性来告诉它提交到哪里,否则行为取决于浏览器并且什么都不做。
  • 不,它在同一个php页面中。不需要外部参考。我想通了,我正在使用 isset,我所要做的就是将其更改为如果 post 不为空。谢谢大家的帮助
  • 我从标题中删除了 SOLVED:。接受答案将其标记为已解决。 @粗俗

标签: php jquery forms post


【解决方案1】:

我认为问题在于您正在尝试查看 FORM 是否存在(注册),您需要验证其中一个字段,例如:

if(isset($_POST['email'])){

因为您似乎正在尝试验证表单,并且该索引将永远不会出现在 $_POST 中。

【讨论】:

  • 您在上一条评论中遗漏了一些文字。我看到你改变了问题,现在我不明白发生了什么。
【解决方案2】:

您应该使用类似的方法来检查您的请求是否为 POST。

if($_SERVER['REQUEST_METHOD'] === 'POST') {
   // do your stuff.
}

相关问题, Check whether a request is GET or POST

【讨论】:

  • 问题不在于它是一个什么样的请求,问题在于请求是否被设置,是否包含任何数据。
猜你喜欢
  • 2016-10-16
  • 2015-10-13
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
相关资源
最近更新 更多