ユーザーをmysqlデータベースに送信して追加するフォームを正常に作成しました。 'jQuery Validator'プラグイン を使用したフォーム検証は、ユーザー名がデータベースに既に存在するかどうかを確認する以外のすべてに適しています。 ..
'jQueryValidator'プラグインを使用して新しいメソッドを定義する方法を読んで理解しようと約8時間を費やしました。入力したユーザー名または電子メールについてデータベースをチェックし、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('[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]');
$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');
}
}
WordPress&PHP
最も重要なことは、代わりにtrueまたはfalseを返すか、「true」または「false」をエコーする必要がある
jQueryまたはJS
email: {
required: true,
minlength: 6,
email: true,
remote:{
url : 'your ajax url',
data: {
'action': 'is_user_exist',
},
},
},
WordPressまたはPHPバックエンドコード
バックエンドでは、GETメソッドを介してフィールドの値を自動的に取得します。
/*
*@ Check user exists or not
*/
if( !function_exists('is_user_exists_ajax_function') ):
function is_user_exists_ajax_function() {
$email = $_GET['email'];
if( empty($email) && is_email($email) ):
wp_send_json_error( new \WP_Error( 'Bad Request' ) );
endif;
$is_email = email_exists( $email );
if($is_email):
echo 'false';
else:
echo 'true';
endif;
wp_die();
}
add_action( 'wp_ajax_is_user_exist', 'is_user_exists_ajax_function' );
add_action( 'wp_ajax_nopriv_is_user_exist', 'is_user_exists_ajax_function' );
endif;