为什么我的注册表没有提交?

时间:2015-02-21 04:08:51

标签: php jquery jquery-validate

我的表单的问题是,当我正确填写所有内容并且提交按钮没有做任何事情。我的jQuery验证代码是100%工作,我认为问题是在我的PHP代码。我只是想知道是否有人可以告诉我问题然后我可以解决它。 如果您想在here

看到我的jquery验证脚本

:/

html核心

<div id="registerForm">
<h1>Register</h1>
<form action="core/register.php" method="POST" class="registerForm form-horizontal">
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="username">Username:</label>
<div class="col-sm-10">
<span></span>
<input type="text" name="username" class="form-control" id="username" placeholder="Enter a username">
</div>
</div>
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="email">Email:</label>
<div class="col-sm-10">
<span></span>
<input id="email" type="email" name="email" class="form-control" placeholder="Enter your email - IMPORTANT">
</div>
</div>
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="password">Password:</label>
<div class="col-sm-10">
<span></span>
<input id="password" type="password" name="password" class="form-control" placeholder="Enter a password">
</div>
</div>
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="confirmpassword">Confirm:</label>
<div class="col-sm-10">
<span></span>
<input id="confirmpassword" type="password" name="confirmpassword" class="form-control" placeholder="Confirm password">
</div>
</div>
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="code">Code:</label>
<div class="col-sm-10">
<span></span>
<input type="text" id="code" name="code" class="form-control" placeholder="Enter Register Code">
</div>
</div>
<div class="buttonspecial">
<input class="btn btn-primary" type="submit" id="submit" value="Register!">
</div>
</form>
</div>

我的php代码:

//FUNCTION
function register($register_data, $mysqli) {
$username       = $register_data['username'];
$password       = crypt($register_data['password'], PASSWORDSTRING);
$email          = $register_data['email'];
$email_code     = $register_data['email_code'];

if ($insert_stmt = $mysqli->prepare("INSERT INTO users (username, password, email, email_code, created) VALUES (?, ?, ?, ?, NOW())")){
    $insert_stmt->bind_param('ssss', $username, $password, $email, $email_code);

    if ($insert_stmt->execute()) {
        return true;
    }
    return false;
    }
}

//WHERE FORM WILL BE SUBMITTED TO

 <?php
include_once("../core/init.php");

if (isset($_POST['username'], $_POST['email'], $_POST['password'])){
    $register_data = array(
    'username'          => $_POST['username'],
    'password'          => $_POST['password'],
    'email'             => $_POST['email'], 
    'email_code'        => md5($_POST['username'] + microtime() + $_POST['email']),
    );
    if (register($register_data, $mysqli) == true){
        header('Location: ../register_success.php');
    } else {
        header('Location: ../error.php?err=Registration failure: INSERT');
    }
}
?>

jquery验证码:

    $(document).ready(function () {
    $('.registerForm').validate({
        // errorPlacement: function(error,element) {
        //     return true;
        // },
        rules: {
            username: {
                required: true,
                rangelength: [5, 20],
                remote: {
                    url: 'core/check/check.php',
                    type: "post",
                    data: {
                        username: function () {
                            return $("#username").val();
                        }
                    }
                }
            },
            password: {
                required: true,
                rangelength: [5, 50]
            },
            confirmpassword: {
                required: true,
                rangelength: [5, 50],
                equalTo: password
            },
            email: {
                required: true,
                remote: {
                    url: 'core/check/check.php',
                    type: "post",
                    data: {
                        email: function () {
                            return $("#email").val();
                        }
                    }
                }
            },
            code: {
                required: true,
                remote: {
                    url: 'core/check/check.php',
                    type: "post",
                    data: {
                        code: function () {
                            return $("#code").val();
                        }
                    }
                }
            },
        },
        messages: {
            username: {
                required: "Enter a username.",
                rangelength: "Username must be 5 to 20 character",
                remote: "Username have been taken"
            },
            password: {
                required: "Enter a password.",
                rangelength: "Password must be 5 to 50 character",
                remote: "Email have been taken"
            },
            confirmpassword: {
                required: "Confirm your password.",
                rangelength: "Password must be 5 to 50 character",
                equalTo: "Your password does not match"
            },
            email: {
                required: "Enter your email(NOT SPAM EMAIL).",
                remote: "This Email have been taken"
            },
            code: {
                required: "Enter your Register Code",
                remote: "Invalid code or used code"
            },
            recaptcha_response_field: {
                required: "Do the reCaptcha",
                remote: 'Bad reCaptcha'
            }
        },
        highlight: function (element) {
            $(element).closest('.form-group').removeClass('has-success').addClass('has-error').find('.col-sm-10 span').removeClass('glyphicon glyphicon-ok form-control-feedback').addClass('glyphicon glyphicon-remove form-control-feedback');
        },
        unhighlight: function (element) {
            $(element).closest('.form-group').removeClass('has-error').addClass('has-success').find('.col-sm-10 span').removeClass('glyphicon glyphicon-remove form-control-feedback').addClass('glyphicon glyphicon-ok form-control-feedback');
        },
        submitHandler: function () {
            form.submit();
        }
    });
});

check.php

 <?php
include_once("../core/connect/db_connect.php");

// EMAIL
if (isset($_POST['email'])){
     $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
     $email = filter_var($email, FILTER_VALIDATE_EMAIL);

     $pre_stmt = "SELECT email FROM users WHERE email = ? LIMIT 1";
     $stmt = $mysqli->prepare($pre_stmt);

     if ($stmt) {
        $stmt->bind_param('s', $email);
        $stmt->execute();
        $stmt->store_result();
            // CHECK IF EMAIL EXIST
            if ($stmt->num_rows == 0){
                echo "true";
                $stmt->close();
            } else {
                echo "false";
                $stmt->close();
            }

     }
}

// CODE
if (isset($_POST['code'])){
     $ccode = filter_input(INPUT_POST, 'code', FILTER_SANITIZE_STRING);
     $code = md5(trim(strtolower($ccode)));

     $pre_stmt = "SELECT code FROM code WHERE code = ? AND used = 0";
     $stmt = $mysqli->prepare($pre_stmt);

     if ($stmt) {
        $stmt->bind_param('s', $code);
        $stmt->execute();
        $stmt->store_result();
            // CHECK IF CODE EXIST
            if ($stmt->num_rows == 1){
                echo 'true'; //OKAY
                $stmt->close();
            } else {
                echo 'false'; //NOTOK
                $stmt->close();
            }

     }
}

// USERNAME
if (isset($_POST['username'])){
     $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

     $pre_stmt = "SELECT username FROM users WHERE username = ?";
     $stmt = $mysqli->prepare($pre_stmt);

     if ($stmt) {
        $stmt->bind_param('s', $username);
        $stmt->execute();
        $stmt->store_result();
            // CHECK IF CODE EXIST
            if ($stmt->num_rows == 0){
                echo 'true';
                $stmt->close();
            } else {
                echo 'false';
                $stmt->close();
            }
     }
}


?>

1 个答案:

答案 0 :(得分:1)

这是你的问题......

submitHandler: function () {
    form.submit();
}
  1. 您忘记将form参数传递给函数。 submitHandler接管并阻止原生表单提交;并且它无法对form.submit()执行任何操作,因为此处不存在form。看起来应该更像......

    submitHandler: function (form) { // <- need to pass the 'form' argument here
        $(form).submit();
    }
    
  2. 但是,由于原始.submit()操作的form正是默认情况下插件已经执行的操作,因此您根本不需要submitHandler。整件事情是多余的。去掉它。 删除整个submitHandler选项。

  3. (仅当您想要执行其他操作时才需要submitHandler,例如通过ajax()提交整个表单。)


    备注

    您的remote方法正在使用data选项...

    rules: {
        username: {
            // other rules,
            remote: {
                url: 'core/check/check.php',
                type: "post",
                data: {
                    username: function () {
                        return $("#username").val();
                    }
                }
            }
        }, ....
    

    data字段不需要username选项,因为 字段的值已经默认情况下使用remote发送。

    rules: {
        username: {
            // other rules,
            remote: {
                url: 'core/check/check.php',
                type: "post"
            }
        }, ....
    

    (仅当您想要发送一些其他数据以及此data请求时,才需要remote选项。) < / p>


    你在这里有更多的多余......

    password: {
        required: true,
        rangelength: [5, 50]
    },
    confirmpassword: {
        required: true,
        rangelength: [5, 50],
        equalTo: password
    },
    

    使用equalTo规则时,它要求confirmpassword字段与password字段完全匹配。这意味着您无法将confirmpassword留空或输入错误的字符数,因为它已经 必须 password字段匹配。

    这几乎可以起作用......

    password: {
        required: true,
        rangelength: [5, 50]
    },
    confirmpassword: {
        required: true,  // <- I left this one for an initial empty form
        equalTo: password
    },
    

    顺便说一句:您只需在错误消息中使用占位符即可。正确的值将动态插入。

    rangelength: "Username must be {0} to {1} characters",
    

    您的演示:http://jsfiddle.net/2jwja5uy/1/

    已移除remote个方法的相同DEMO,因此您可以看到它触发提交:http://jsfiddle.net/2jwja5uy/2/