概要: これは基本的なスタンドアロンの Web フォームです。関数用に JQuery が含まれている、単なる html 形式です。
電子メールとユーザー名を (電子メールの) 一意性と有効性についてチェックするフォームがあります。JQuery onChange イベントを使用して各関数を呼び出しています。これは、php ファイルへの Ajax 呼び出しです。
ユーザー名チェックの JQuery は次のとおりです。
$("#username").change(function() {
var username = $("#username").val();
var msgbox_username = $("#username_status");
var dataString = "username="+ username;
$("#username_status").html('<img src="images/loader.gif">Checking Availability.');
if (username != "" && username.length >= 6){
$.ajax({
Type: "POST",
url: "functions/check_username.php",
data: dataString,
success: function(msg_username) {
$("#username_status").ajaxComplete(function (event, request) {
if (msg_username == 'Username Ok') {
$("#username").removeClass("red").addClass("green");
msgbox_username.html('<font color="Green">Available</font>');
} else {
$("#username").removeClass("green").addClass("red");
msgbox_username.html(msg_username);
}
});
}
});
return false;
} else {
$("#username").removeClass("green").addClass("red");
msgbox_username.html('<font color="Red">Username of 6 or more characters is required</font>');
}
});
check_username.php ファイルは次のとおりです。
<?php
$username = $_GET["username"];
include_once("../includes/connect.php");
$query = "SELECT username
FROM sss_users
WHERE username = '$username'";
$result = mssql_query($query);
if(mssql_num_rows($result) > 0 && strlen($username) >= 6) {
echo '<font color="#cc0000"><strong>' . $username . '</strong> is already in use. </font>';
} else {
echo 'Username Ok';
}
?>
パターンを続けると、電子メールの JQuery は次のようになります。
$("#email").change(function() {
var email = $("#email").val();
var msgbox_email = $("#email_status");
var dataString = "email="+ email;
$("#email_status").html('<img src="images/loader.gif">Checking Availability.');
var atpos = email.indexOf("@");
var dotpos = email.lastIndexOf(".");
if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= email.length){
$("#email").removeClass("green").addClass("red");
msgbox_email.html('<font color="Red">Valid Email Required</font>');
} else {
$.ajax({
Type: "POST",
url: "functions/check_email.php",
data: dataString,
success: function(msg_email) {
$("#email_status").ajaxComplete(function (event, request) {
if (msg_email == 'Email Ok') {
$("#email").removeClass("red").addClass("green");
msgbox_email.html('<font color="Green">Available</font>');
} else {
$("#email").removeClass("green").addClass("red");
msgbox_email.html(msg_email);
}
});
}
});
return false;
}
});
そしてメールPHP:
<?php
$email = $_GET["email"];
include_once("../includes/connect.php");
$query = "SELECT email
FROM sss_users
WHERE email = '$email'";
$result = mssql_query($query);
if(mssql_num_rows($result) > 0) {
echo '<font color="#cc0000"><strong>' . $email . '</strong> is already in use. </font>';
} else {
echo 'Email Ok';
}
?>
それらはそれぞれ別々に機能しますが、ボックスに無効なユーザー名を入力してから有効なメールを入力すると、どういうわけか check_username.php ファイルが呼び出され、ボックスに何が入っていても (有効かどうかに関係なく)、有効なユーザー名と見なされます。
例は次のとおりです。
すべての関数は OnChange イベントで呼び出されます
1) ユーザー名 asdfasdf (利用可能) を入力します。
2) テキスト ボックスからユーザー名 asdfasdf を削除します (これは正しく機能し、ユーザー名には少なくとも 6 文字が必要です)。
3) 有効なメールアドレスを入力してください
結果: 有効な電子メールは正しく機能しますが、ユーザー名フィールド (空白) は以前にあったもの (asdfasdf) を思い出し、有効なユーザー名であると表示されます (フィールドはまだ空白ですが)。
これが理にかなっていることを願っています。助言がありますか?
解決
以下に示すように、.ajaxComplete() はそのタグですべての関数を呼び出していました。したがって、次の変更を加えたときに機能しました。
$("#username_status").ajaxComplete(function (event, request) { ... code here ... });
に変更:
$("#username_status").ajaxComplete(function (event, request, settings) { ... code and new if statement ... });
そして、私は巻きました
if(settings.url == 'functions/check_username.php') {}
検証コードの周り。このプロセスは、ユーザー名と電子メールの両方の検証に対して行われました。