Joomla用户名可用性检查脚本

时间:2012-01-25 18:46:34

标签: joomla joomla1.5

Joomla新手,想要添加joomla用户名可用性检查。

检查Jsfiddle,它不适合我

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

我认为我在下面犯了错误

on Javascript

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
PHP文件中的

在这里我想

$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建议!!!

感谢!!!

1 个答案:

答案 0 :(得分:0)

您在这里遇到的一个问题是如何将$ user变量嵌入到sql查询中。如果不关注明显的SQL注入风险,那么您也会遇到语法错误:

$query = "Select a.username FROM #__users where username = '$user' ";

应该是

$query = 'Select a.username FROM #__users where username = "' **. $user .** '" ';

但是你应该做一些像this这样的事情,以防止SQL注入攻击。

另一个问题是如何调用后端验证功能。您需要使用Joomla的组件url结构来指向您在控制器中定义并在router.php中指向的函数。您的控制器功能看起来像:

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将如下所示:

'index.php?option=com_mycomponent&task=username_validate&username=' + user

其中 com_mycomponent 是组件的名称。

好的,接下来,这是一个非常简单的示例,说明如何动态验证您的用户名字段: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'});
                }
            }
        });

    });
});

当用户单击或标签出用户名文本字段时,您可以将.blur()事件绑定到验证函数,而不是使用.keyup()。这会减少您必须对后端进行的呼叫次数。如果您希望反馈作为用户类型,那么我强烈建议进行SQL调用以检索所有用户名并将它们临时存储在Joomla会话中,以便您可以对字符串数组进行验证检查,而不是进行新的SQL调用每次用户在文本字段中键入内容时。