Joomla新手,想要添加joomla用户名可用性检查。
检查Jsfiddle,它不适合我
我认为我在下面犯了错误
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建议!!!
感谢!!!
答案 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调用每次用户在文本字段中键入内容时。