2012-01-25 16 views
0

joomlaにユーザ名利用可能確認を追加してみませんか?Joomla username利用可能性チェックスクリプト

はちょうど私が私がPHPファイルに

site_root = ''; 
and 
obj.open("GET",site_root+"username_validate.php?username="+user,true); 

// I am using a component and it has the files so I do not know what would be the file root 

Javascriptを

の下にミスをしたと思うのは私

http://jsfiddle.net/exGpH/2/

のために働いていないJsfiddleとを確認し

とここに私は考えます

$query = "Select a.username FROM #__users where username = '$user' "; 
// Execute the above query using your own script and if it return you the 
// result (row) we should return negative, else a success message. 

$db =& JFactory::getDBO(); 

$result = $db->setQuery($query); 

$available = mysql_num_rows($result); 

Plz suggest !!!

ありがとうございました!

答えて

0

ここでは、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呼び出しを作成するのではなく、ユーザーがテキストフィールドに何かを入力する度に

+0

あなたは素晴らしいです – user1169852

+0

上記のスクリプトはMootoolを使用していますか?またはJS?私のjoomlaはmootoolを持ち、JQueryを持っていないからです。 Plzがお勧めします。 – user1169852

+0

私はJoomlaを使用して実装する方法の例を見つけましたか? http://davidwalsh.name/ajax-username-availability-checker-mootools – user1169852

関連する問題