2015-09-01 2 views
1

Я использую плагин проверки jQuery в моей двухэтапной регистрационной форме.jQuery проверка плагин несколько дистанционный выпуск. Это я или ошибка?

На «первом шаге» Я проверяю имя пользователя и доступность электронной почты с помощью удаленной функции.

Вот ошибка (или меня!):

  • Если имя пользователя существует в базе данных и электронной почты нет, когда я нажимаю кнопку «Далее» Сценарий позволил мне перейти ко второму шагу. (Не должно быть, потому что имя пользователя существует!)

но;

  • Если в базе данных не существует имени пользователя и электронной почты, оно меня останавливает и предупреждает, что письмо существует. Так что это работает.

  • Если в базе данных есть как имя пользователя, так и адрес электронной почты, также меня останавливает. Так что снова работаем.

Вот код, который я использую;

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:

<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> 

Update:

регистрация 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/

+0

Вы когда-нибудь считали, что ваша работа 'check-username.php' doenst работает? –

+0

@TomDoodler It фактически действительно работа. Когда я помещаю имя пользователя и доступную электронную почту, я нажимаю «Далее». Он показывает сообщение «Взял имя пользователя», но в любом случае приведет меня к следующему шагу. Но другие условия, которые я написал в своем сообщении, не позволяют мне перейти к следующему шагу. – Lukasz

+1

Который, опять же, подразумевает, что сказал @TomDoodler, ваш алгоритм 'php' может не соответствовать этой * конкретной * проверке.Пожалуйста, подумайте о том, чтобы опубликовать его с вашим вопросом. –

ответ

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

Эта линия не смотрит, если пользователь существует, имя Whos равняется содержимое $request, оно смотрит вверх, если пользователь с именем «$ request» существует, то же самое с электронной почтой.

Строка сочинял в PHP работает по-другому, вы должны написать

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

Кроме того, вы никогда не должны когда-либо использовать запрос MySQL, как это, потому что его проще всего мира, чтобы внедрить код SQL и уничтожить всю базу данных ,

+0

Я предлагаю вам также включить * правильный путь *, где OP должен привязывать параметры к строке запроса, а не звонить в него. Это было бы конструктивно. –

+0

Я googled несколько минут, но я не мог найти его, и у меня нет возможности поиска в моем собственном кодовом atm, поэтому я предлагаю вам попробовать найти его по-своему, ключевые слова: «PDO» и «injection», I надеюсь, что смогу вам помочь. Он работает так, как вы это делаете, я бы просто не опубликовал его таким образом, чтобы отлаживать и развивать его более комфортно. –

+0

Pls сообщите мне, исправили ли вы вашу проблему –

Смежные вопросы