簡體   English   中英

jQuery驗證插件多個遠程問題。 是我還是蟲子?

[英]jQuery validation plugin multiple remote issue. Is it me or bug?

我在兩步注冊表單中使用jQuery Validation插件。

在“第一步”中,我正在使用遠程功能檢查用戶名和電子郵件的可用性。

這是錯誤(或我!):

  • 如果用戶名存在於數據庫中,而電子郵件不存在,則當我單擊“下一步”按鈕時,腳本將使我轉到第二步。 (這不應該是因為用戶名存在!)

但;

  • 如果用戶名不存在,並且數據庫中存在電子郵件,則會在那里停止我並警告我電子郵件已經存在。 這樣就可以了。

  • 如果數據庫中同時存在用戶名和電子郵件,也將阻止我。 因此,再次工作。

這是我正在使用的代碼;

HTML:

<div class="tab-content">
    <p>Page.</p>
    <form class="form-horizontal" onsubmit="return false;" action="" method="post" id="myform">

    <div id="stepusername">

            <p>This is step 1</p>

            <input type="text" class="form-control" id="username" name="username" placeholder="Username" autocomplete="off"><br>

            <input type="email" class="form-control" id="email" name="email" placeholder="email" autocomplete="off"><br>            

            <p><a class="btn btn-primary next">Go to step 2</a></p>  

    </div><!-- signup_one ends -->

    <div id="stepemail">

            <p>This is step 2</p>

            <input type="password" class="form-control" id="password" name="password" placeholder="password" autocomplete="off"><br>

            <input type="password" class="form-control" id="conf_password" name="conf_password" placeholder="password" autocomplete="off"><br>              

            <input class="btn btn-success next" type="submit" value="Finish">

    </div><!-- step2 ends -->

    </form>

    <div id="stepsuccess">

    <p>Show result here.</p>

    </div><!-- success ends -->


</div><!-- tab-content ends -->

Java腳本:

<script type="text/javascript">
    // jQuery.validate script, does client-side validation
    $(document).ready(function(){
        $(".next").click(function(){
            var form = $("#myform");
            form.validate({
                errorElement: 'div',
                errorClass: 'formerror',
                highlight: function(element, errorClass, validClass) {
                    $(element).closest('.form-group').addClass("has-error");
                },
                unhighlight: function(element, errorClass, validClass) {
                    $(element).closest('.form-group').removeClass("has-error");
                },
                rules: {
                    username: {
                        required: true,
                        remote: { 
                        url: "check-username.php",
                        async: false,
                        type: "post", }
                    },                                                          
                    password : {
                        required: true,
                    },
                    conf_password : {
                        required: true,
                        equalTo: '#password',
                    },
                    email: {
                        required: true,
                        remote: { 
                        url: "check-email.php",
                        async: false,
                        type: "post", }
                    },

                },

                messages: {
                    username: {
                        required: "Username required",
                        remote: "Taken username.",
                    },                                          
                    password : {
                        required: "Password required",
                    },
                    conf_password : {
                        required: "Password required",
                        equalTo: "Password don't match",
                    },
                    email: {
                        required: "Email required",
                        remote: "Taken email.",
                    },                          

                }

            });

            if (form.valid() === true){
                if ($('#stepusername').is(":visible")){
                    current_fs = $('#stepusername');
                    next_fs = $('#stepemail');
                }else if($('#stepemail').is(":visible")){
                    current_fs = $('#stepemail');
                    next_fs = $('#stepsuccess');
                }

                next_fs.show(); 
                current_fs.hide();
            }

        });

    });
</script>

更新:

入住username.php

<?php
error_reporting(E_ERROR | E_PARSE);
try {
    $handler = new PDO('mysql:host=localhost;dbname=users', 'root', '');
    $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {  
     echo $e->getMessage(); 
     die(); 
}

$request = $_REQUEST['username'];
$query = $handler->query("SELECT * from usertable WHERE username='$request'");
$results = $query->fetch(PDO::FETCH_ASSOC);

if(empty($request)) {
    echo 'false' ;
}else {

if ($results == 0) {
$valid = 'true';
}
else {
$valid = 'false';
 }

echo $valid ;
}
?>

入住email.php

<?php
error_reporting(E_ERROR | E_PARSE);
try {
    $handler = new PDO('mysql:host=localhost;dbname=users', 'root', '');
    $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {  
     echo $e->getMessage(); 
     die(); 
}

$request = $_REQUEST['email'];
$query = $handler->query("SELECT * from usertable WHERE email='$request'");
$results = $query->fetch(PDO::FETCH_ASSOC);

if(empty($request)) {
    echo 'false' ;
}else {

if ($results == 0) {
$valid = 'true';
}
else {
$valid = 'false';
 }

echo $valid ;
}
?>

如果您願意,還可以使用jsFiddle: http : //jsfiddle.net/noptpece/

$query = $handler->query("SELECT * from usertable WHERE username='$request'");

如果用戶存在,則此行不顯示,其名稱等於$request的內容,如果名稱為 “ $ request”的用戶存在,則查找該行,與電子郵件相同。

PHP中的字符串編寫工作方式不同,您應該編寫

$query = $handler->query("SELECT * from usertable WHERE username=".$request);

另外,您永遠不要使用這樣的MySQL查詢,因為這是注入SQL代碼並銷毀整個數據庫的最簡單方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM