ここでは、SQLユーザー変数をSQLクエリに埋め込む方法を説明します。あなたがこのアプローチを自分で入れている明白なSQLインジェクションのリスクに焦点を当てなくても構文エラーがあります。
$query = "Select a.username FROM #__users where username = '$user' ";
は
$query = 'Select a.username FROM #__users where username = "' **. $user .** '" ';
でなければなりません。しかし、あなたが防止する代わりにthisような何かを行う必要がありますSQLインジェクション攻撃
また、バックエンド検証機能を呼び出す方法もあります。あなたはあなたのコントローラに定義し、あなたのrouter.phpを指し示している関数を指すように、ユーザーJoomlaのコンポーネントのurl構造体にアクセスしてください。 com_mycomponentは、コンポーネントの名前です
'index.php?option=com_mycomponent&task=username_validate&username=' + user
:それはこのようになります呼び出すために
function username_validate() {
$app = JFactory::getApplication(); // this allows you to
$requestedUsername = JRequest::getVar("username", null);
$query = "Select COUNT(username) FROM #__users where username = ' . $requestedUsername . ' ";
$db =& JFactory::getDBO();
$result = $db->setQuery($query);
$available = mysql_num_rows($result);
echo = $available > = ? "true" : "false";
$app->close();
}
とURL:あなたのコントローラ機能は次のようなsomethinになります。
さて、続けて、あなたのユーザー名フィールドを確認する簡単な例を以下に示します:Username Validationこの例がうまくいくには、すべてのユーザー名のリストを返すAJAX呼び出しを静的配列に置き換える必要がありますが、これはあまり巧妙でも安全でもありません。より良い方法は、ユーザーの入力をオフにしてチェックし、応答を返すことです。あなたのアプローチを使用して
あなたはJSは、次のようなものになります。
$(document).ready(function() {
$("#username").keyup(function() {
var user = $(this).val();
$.ajax({
url: 'index.php?option=com_mycomponent&task=username_validate&username=' + user,
dataType: 'text',
success:function(responseText, statusText) {
if($(this).val().length == 0) {
$("#validationTxt").css("display", "none");
return false;
}
if(responseText == "false"){
$("#validationTxt").text("Username Already Taken");
$("#validationTxt").css({'color' : 'red', 'display' : 'block'});
} else {
$("#validationTxt").text("Username OK");
$("#validationTxt").css({'color' : 'green', 'display' : 'block'});
}
}
});
});
});
代わりの.keyup使用を()あなたはAJAXの時にバリデーション機能をオフに呼び出し発射.blur()イベントを結合することができユーザー名のテキストフィールドからユーザーのクリックまたはタブを削除します。これにより、バックエンドに対して行う必要のあるコール数を減らすことができます。ユーザーの入力時にフィードバックをしたい場合は、すべてのユーザー名を取得してJoomlaのセッションに一時的に保存するSQL呼び出しを強くお勧めします。新しいSQL呼び出しを作成するのではなく、ユーザーがテキストフィールドに何かを入力する度に
あなたは素晴らしいです – user1169852
上記のスクリプトはMootoolを使用していますか?またはJS?私のjoomlaはmootoolを持ち、JQueryを持っていないからです。 Plzがお勧めします。 – user1169852
私はJoomlaを使用して実装する方法の例を見つけましたか? http://davidwalsh.name/ajax-username-availability-checker-mootools – user1169852