我目前正在PHP中配置“用户注册”表单。
尝试创建一个简单的函数来检查数据库中是否已存在用户名
在做完我的研究之后,我发现有几种方法可以做到。
(a)最好的方法可能是使用PHP / AJAX组合,立即检查用户名是否已经存在(换句话说,检查完成 BEFORE 用户点击“提交“按钮;
(b)另一种方法是进行简单的SQL查询,如果数据库中已存在该特定用户名,则会返回错误消息。 (此方法的唯一缺点是:检查仅在 AFTER 用户点击“提交”按钮时完成。
当然,我会更喜欢选项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)
可能与查询结尾处的“返回错误”有关。
但是,我不确定。
(a)如何在表单页面上显示错误消息?
(b)或者,更好的是,我可以使用一个JavaScript函数,这样我就可以在“提交”按钮中调用该函数.............. .. like so: onSubmit = return function() ??
由于
更新:这是我的表单代码。
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')。点击(function(){ ...与 $('#username')。keyup(function(){... < / p>
(c)有没有办法真正插入那个JQUERY到“registration.php”?或者,它应该完全是一个单独的文件吗?
答案 0 :(得分:1)
更好的方法是绑定“.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;
}
答案 1 :(得分:1)
您可以禁用提交按钮并在输入字段附近添加范围消息。
检查此代码:
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;
}
}
});
}
&#13;
<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>
&#13;
答案 2 :(得分:0)
把这个
include([your validating php file]);
并在您的表单操作链接中指向您的登录表单文件。
注意:您的登录文件必须是php文件。