Я успешно создал форму, которая отправляет и добавляет пользователей в базу данных mysql, а форма проверки с помощью плагина «jQuery Validator» отлично подходит для всего, кроме проверки того, существует ли имя пользователя в базе данных …
Я просто потратил около 8 часов на чтение и попытался выяснить способ определения нового метода с помощью плагина jQuery Validator. Я просто не могу понять, как я буду проверять базу данных для введенного имени пользователя или электронной почты и возвращать, существует ли она уже или нет, используя jQuery.
Мой код:
<script src="../assets/js/main.js"></script> <script src="../assets/js/ajax.js"></script> <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/jquery.validate.min.js"></script> <!-- FORM VALIDATION --> <script type="text/javascript"> jQuery.validator.addMethod("checkExists", function(value, element) { //No idea what to call here }, "Username already exists." ); //<![CDATA[ $(window).load(function(){ $("form").validate({ rules: { username: {minlength: 3, required: true, checkExists: true}, email: {email: true, required: true}, pass1: {minlength: 3, required: true}, pass2: {minlength: 3, required: true, equalTo: "#pass1"}, country: {required: true}, tandc: {required: true}, }, messages: { username: {required: "You need to enter a Username."}, email: {required: "You need to enter an Email Address."}, pass1: {required: "You need to enter a Password."}, pass2: {required: "You need to enter your password again.", equalTo: "Your passwords don't match."}, country: {required: "You need to tell us where you live."}, tandc: {required: "You need to read and agree to the Terms and Conditions to use CGE."} }, showErrors: function(errorMap, errorList) { $.each(this.successList, function(index, value) { return $(value).popover("hide"); }); return $.each(errorList, function(index, value) { var _popover; console.log(value.message); _popover = $(value.element).popover({ trigger: "manual", placement: "right", content: value.message, template: "<div class=\"popover\"><div class=\"arrow\"></div><div class=\"popover-inner\"><div class=\"popover-content\"><p></p></div></div></div>" }); _popover.data("popover").options.content = value.message; return $(value.element).popover("show"); }); } }); });//]]> </script>
Если кто-нибудь умный, возможно, изменит мой код, чтобы показать мне, как я должен был это сделать, это было бы большой помощью – я чувствую, что я собираюсь сходить с ума!
Спасибо заранее, не могу дождаться, чтобы увидеть решение 🙂
Кажется, ничего не происходит, мне кажется, что я ближе, хотя:
ТЕКУЩИЙ КОД:
signup.php
$(window).load(function(){ $("form").validate({ rules: { username: {minlength: 3, required: true}, email: {email: true, required: true, remote: {url: "./validation/checkUnameEmail.php", type : "post"}}, pass1: {minlength: 3, required: true}, pass2: {minlength: 3, required: true, equalTo: "#pass1"}, country: {required: true}, tandc: {required: true} },
checkUnameEmail.php
<?php include_once(".../php_includes/db_conx.php"); $email = urldecode($_POST['email']); $result = mysqli_query($db_conx, "SELECT * FROM users WHERE email = '$email' LIMIT 1;"); $num = mysqli_num_rows($result); if($num == 0){ echo "true"; } else { echo "E-Mail-Adresse schon registriert."; } mysqli_close($db_conx); ?>
* Db_conx.php *
<?php $db_conx = mysqli_connect("localhost", "root", "root", "membership"); //Evlauate the connection if (mysqli_connect_errno()){ echo mysqli_connect_error(); exit(); } ?>
$.validator.addMethod("checkExists", function(value, element) { var inputElem = $('#register-form :input[name="email"]'), data = { "emails" : inputElem.val() }, eReport = ''; //error report $.ajax( { type: "POST", url: validateEmail.php, dataType: "json", data: data, success: function(returnData) { if (returnData!== 'true') { return '<p>This email address is already registered.</p>'; } else { return true; } }, error: function(xhr, textStatus, errorThrown) { alert('ajax loading error... ... '+url + query); return false; } }); }, '');
ИЛИ
Вместо этого вы можете использовать удаленный метод, который позволяет выполнять удаленные проверки: http://docs.jquery.com/Plugins/Validation/Methods/remote
Например.
$("#yourFormId").validate({ rules: { email: { required: true, email: true, remote: { url: "checkUnameEmail.php", type: "post" } } }, messages: { email: { required: "Please Enter Email!", email: "This is not a valid email!", remote: "Email already in use!" } } });
checkUnameEmail.php // Например.
<?php $registeredEmail = array('jenson1@jenson.in', 'jenson2@jenson.in', 'jenson3@jenson.in', 'jenson4@jenson.in', 'jenson5@jenson.in'); $requestedEmail = $_REQUEST['email']; if( in_array($requestedEmail, $registeredEmail) ){ echo 'false'; } else{ echo 'true'; } ?>
Код js
username: { required: true, minlength: 5, remote: '/userExists' },
Php-код для проверки наличия и возврата сообщений
public function userExists() { $user = User::all()->lists('username'); if (in_array(Input::get('username'), $user)) { return Response::json(Input::get('username').' is already taken'); } else { return Response::json(Input::get('username').' Username is available'); } }