我目前正在用PHP配置我的"用户注册"表单。
尝试创建一个简单的函数来检查数据库中是否已经存在用户名
经过研究,我发现有几种方法可以做到这一点。
(a) 最好的方法可能是使用PHP/AAJAX组合,立即检查用户名是否已经存在(换句话说,检查在用户单击"提交"按钮之前完成);
(b) 另一种方法是执行一个简单的SQL查询,如果数据库中已经存在特定的用户名,该查询将返回一条错误消息。(此方法的唯一缺点是:检查仅在用户单击"Submit"按钮后进行。
当然,我更喜欢方案A。但是,我在尝试创建一个可工作的AJAX/jQuery脚本时没有成功。
所以,我选择了选项B。
而且,我做到了。
这是我使用的简单查询:
if(isset($_POST['submit1'])||isset($_POST['submit1'])) {
$login = $_POST['login'];
$query_login = "SELECT login FROM registration WHERE login='$login';";
$result_login = mysqli_query($conn,$query_login);
$anything_found = mysqli_num_rows($result_login);
//check if the username already exists
if($anything_found>0)
{
echo "Sorry, that Username is already taken. Please choose another.";
return false; }
else { //proceed with registration
它运行良好。显示了错误。
唯一的问题是:登记表本身消失了。
我希望将错误显示在与注册表单相同的页面上,而无需重置或以某种方式返回。
我知道这是因为一些很小的事情(对我来说有点愚蠢:D:D)
可能与查询末尾的"return false"有关。
但是,我不确定。
(a) 如何在表单页面上显示错误消息?
(b) 或者,更好的是,有没有一个JavaScript函数我可以用来做这件事,这样我就可以简单地调用"提交"按钮中的函数。。。。。。。。。。。。。。。。类似于:onSubmit=return function()??
感谢
UPDATE:这是我的表单代码。
form action="myform.php" method="post">
<br>
Choose a username : <input type="text" name="login" value="<?=$login?>"
required>
更新
我能够找到以下jQuery代码:
$(document).ready(function() {
//the min chars for username
var min_chars = 3;
//result texts
var characters_error = 'Minimum amount of chars is 3';
var checking_html = 'Checking...';
//when button is clicked
$('#check_username_availability').click(function(){
//run the character number check
if($('#username').val().length < min_chars){
//if it's bellow the minimum show characters_error text '
$('#username_availability_result').html(characters_error);
}else{
//else show the cheking_text and run the function to check
$('#username_availability_result').html(checking_html);
check_availability();
}
});
});
//function to check username availability
function check_availability(){
//get the username
var username = $('#username').val();
//use ajax to run the check
$.post("check_username.php", { username: username },
function(result){
//if the result is 1
if(result == 1){
//show that the username is available
$('#username_availability_result').html(username + ' is
Available');
}else{
//show that the username is NOT available
$('#username_availability_result').html(username + ' is not
Available');
}
});
}
我假设,对于我的特定示例:
(a) jQuery文件无法插入到实际的PHP文件中(我的PHP文件名为:registration.PHP,其中包括html和PHP);
(b) 这个特殊的jQuery文件包括一个"按钮",需要单击它来检查用户名是否已经存在。这不是一个坏主意;但是,我宁愿这是自动完成的,而不需要点击按钮(让我们面对现实:有些用户确实太无知了,无法手动执行这个简单的检查)。我的目标是让用户尽可能地不需要做这样琐碎的任务:D
无论如何,我的观点是:为了消除对按钮的需要,我想包括一个自动功能,一旦用户输入用户名,就会进行检查。
根据谷歌的说法,我需要以下功能:
替换$('#check_username_availability')。用$[('#username').keyup(function(){…
(c) 难道没有任何方法可以将JQUERY插入"registration.php"中吗??或者,它应该完全是一个单独的文件吗?
更好的方法是绑定".blur"事件,在该事件上可以通过ajax检查用户名是否有效。不要忘记在表单提交后在表单提交前检查用户名。在您的输入框下方创建一个
<span class= "error">Username is already present. </span>
<span class= "success">Username can be assigned. </span>
并相应地显示消息。
您可以将脚本用作
$.ajax({
url : "check_username.php",// your username checker url
type : "POST",
data : {"username",$("input.username").val()},
success : function (data)
{
if(data == "success")
{$(".success").show();$(".error").hide();}
else
{$(".error").show();$(".success").hide();}
},
});
php代码应该是这样的:
$query = "SELECT username FROM tab_users WHERE username = '".$_POST['username']."'";
$result_login = mysqli_query($conn,$query_login);
$anything_found = mysqli_num_rows($result_login);
//check if the username already exists
if($anything_found>0)
{
echo "fail";
return false;
}
else
{
echo "success";
return false;
}
您可以禁用提交按钮并在输入字段附近添加一条span消息。
检查此代码:
function checkUsername()
{
var username = document.getElementById('username');
var message = document.getElementById('confirmUsername');
/*This is just to see how it works, remove this lines*/
message.innerHTML = username.value;
document.getElementById("send").disabled = true;
/*********************************************/
$.ajax({
url : "check_username.php",// your username checker url
type : "POST",
data : {username: username},
success: function (response) {
if (response==0)
{
message.innerHTML = "Valid Username";
document.getElementById("send").disabled = false;
}
if (response==1)
{
message.innerHTML = "Already Used";
document.getElementById("send").disabled = true;
}
}
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<label for="uername">Username:</label>
<input type="text" class="form-control" name="username" id="username" onkeyup="checkUsername(); return false;" required/>
<span id="confirmUsername" class="confirmUsername"></span>
<button type="submit" id="send" name="action" value="Send">Send</button>
放入此
include([your validating php file]);
并在您的表单操作中链接到您的登录表单文件。
注意:您的登录文件必须是php文件。