Php 检查重复数据的ajax调用
下面是让ajax检查用户是否存在的表单Php 检查重复数据的ajax调用,php,ajax,jquery,Php,Ajax,Jquery,下面是让ajax检查用户是否存在的表单 <!DOCTYPE html> <html> <head><title>Register new user!</title> <script src="jquery-1.7.1.min.js"></script> </head> <body> Username: <input t
<!DOCTYPE html>
<html>
<head><title>Register new user!</title>
<script src="jquery-1.7.1.min.js"></script>
</head>
<body>
Username:
<input type="text" name="username" id="username"/><span id="user"></span><br/>
Password:
<input type="password" name="password" id="password"/><br/>
<input type="button" value="Register" name="submit" id="submit" onclick="register_user();"/>
</body>
<script>
function register_user()
{
$.ajax(
{
type:"POST",
data:username,
url:"userexists.php"
})
.fail(function()
{
$('#user').html("This user already exists");
}
);
}
</script>
</html>
注册新用户!
用户名:
密码:
函数寄存器\用户()
{
$.ajax(
{
类型:“POST”,
数据:用户名,
url:“userexists.php”
})
.fail(函数()
{
$('#user').html(“此用户已存在”);
}
);
}
下面是userexists.php模块
<?php
// connection to the db
define(IPHOST,"localhost");
define(DBPASSWORD,"");
define(DBUSER,"root");
define(DATABASE,"ajaxtest");
define(TABLENAME,"at");
$conn=mysql_connect(IPHOST,DBUSER,DBPASSWORD) or die(mysql_error());
mysql_select_db(DATABASE) or die(mysql_error());
$username=$_POST('username');
$sql="SELECT username FROM ".TABLENAME." WHERE username=".$username;
$query=mysql_query($sql);
if(0!=mysql_numrows($query))
{
//
}
else
{
}
?>
<>但是我真的想知道Ajax函数是如何工作的,在知道输入的用户名已经被使用之后,我应该进入空白字段?我一点也不懂ajax
[更新]
谢谢,我现在明白了,我有几个答案,不知道选择哪一个作为最好的回答。没有选择全部的选项。技术上由您决定。(例如)您可以为“用户存在”返回“1”,为“用户不存在”返回“0”,或者返回更详细的XML。客户端应用程序(Javascript)将读取返回的结果,并向用户输出适当的消息 .fail方法应该在函数实际失败的情况下使用(服务器端错误等)。所以这似乎不适合你想做的事情。我会在“.done()”代码中输入上述返回值的测试,并打印出正确的消息 Javascript:
.done(function ( data ) {
if(data == "0")
alert("Your username is OK");
else
alert("Your username is already used");
});
PHP:
当服务器返回意外数据时,使用ajax中的fail。但是您的php代码不会返回任何内容。使用类似以下内容:
function register_user()
{
$.ajax(
{
type:"POST",
data:username,
url:"userexists.php"
})
.done(function(_return)
{
if(_return)
{
if(_return['status']=='yes')
{
$('#user').html(_return['msg']);
}
}
})
.fail(function());
}
$("#submit").click(function()
{
$.ajax({
type: "POST",
data: "username="+$("#username").val(),
url: "userexists.php"
})
.done(function(response){
$('#user').html(response);
});
});
在php中:
if(0!=mysql_numrows($query))
{
$return = array('status'=>'yes',
'msg'=>"User alredy exist");
echo json_encode($return);
return true;
}
现在,您可以添加更多具有多种状态的条件,并用javascript对其进行解析。如果代码中有很多错误,请尝试以下代码:
<!DOCTYPE html>
<html>
<head><title>Register new user!</title>
<script src="jquery-1.7.1.min.js"></script>
</head>
<body>
Username:
<input type="text" name="username" id="username"/><span id="user"></span><br/>
Password:
<input type="password" name="password" id="password"/><br/>
<input type="button" value="Register" name="submit" id="submit" onclick="register_user();"/>
</body>
<script>
function register_user()
{
$.ajax({
type: "POST",
data: {
username: $('#username').val(),
},
url: "userexists.php",
success: function(data)
{
if(data === 'USER_EXISTS')
{
$('#user')
.css('color', 'red')
.html("This user already exists!");
}
else if(data === 'USER_AVAILABLE')
{
$('#user')
.css('color', 'green')
.html("User available.");
}
}
})
}
</script>
</html>
注册新用户!
用户名:
密码:
函数寄存器\用户()
{
$.ajax({
类型:“POST”,
数据:{
用户名:$('#用户名').val(),
},
url:“userexists.php”,
成功:功能(数据)
{
如果(数据==='USER\u EXISTS')
{
$(“#用户”)
.css('颜色','红色')
.html(“此用户已存在!”);
}
else if(数据===‘用户可用’)
{
$(“#用户”)
.css('颜色','绿色')
.html(“用户可用”);
}
}
})
}
对于您的php代码:
<?php
// connection to the db
define(IPHOST,"localhost");
define(DBPASSWORD,"");
define(DBUSER,"root");
define(DATABASE,"ajaxtest");
define(TABLENAME,"at");
$conn=mysql_connect(IPHOST,DBUSER,DBPASSWORD) or die(mysql_error());
mysql_select_db(DATABASE) or die(mysql_error());
$username = mysql_real_escape_string($_POST['username']); // $_POST is an array (not a function)
// mysql_real_escape_string is to prevent sql injection
$sql = "SELECT username FROM ".TABLENAME." WHERE username='".$username."'"; // Username must enclosed in two quotations
$query = mysql_query($sql);
if(mysql_num_rows($query) == 0)
{
echo('USER_AVAILABLE');
}
else
{
echo('USER_EXISTS');
}
?>
既然您是AJAX新手,让我试着帮您更好地解释一下
AJAX代表异步Javascript和XML。使用它,您可以向另一个页面发出请求,并根据另一个页面返回的结果使原始页面的行为有所不同
那么这有什么用处呢?好;您甚至可以在“用户名”字段上设置onblur来检查远程脚本,以查看用户名是否已在使用中。(您已在当前设置中执行此操作。干得好!)
首先;.fail()告诉当前页面“如果ajax请求失败,让我们执行此代码”。这称为回调。回调是javascript代码的函数,在异步请求完成时执行
因此,您实际要做的是使用.done()方法。这会告诉您的jQuery请求“嘿,当您完成此请求时,请执行这段代码。当您执行此操作时,我将坐在这里处理发生的任何其他事情”
因此,您可以看到使用.done()和.fail()之间有一些细微的区别,但是我可以看出您很容易将.fail()与ajax新手混淆
让我们回到你目前的问题上来。让我们将ajax修改为类似以下内容:
function register_user()
{
$.ajax(
{
type:"POST",
data:username,
url:"userexists.php"
})
.done(function(_return)
{
if(_return)
{
if(_return['status']=='yes')
{
$('#user').html(_return['msg']);
}
}
})
.fail(function());
}
$("#submit").click(function()
{
$.ajax({
type: "POST",
data: "username="+$("#username").val(),
url: "userexists.php"
})
.done(function(response){
$('#user').html(response);
});
});
这将为您的提交按钮绑定一个onclick处理程序,id为“submit”。现在您可以删除onclick=“register\u user”。其次,它说,“嘿,webpage,go send userexists.php用户名文本框值和参数名username。完成该请求后,将#user的html设置为响应
所以,它去做它
现在,您可以使用PHP文件执行以下操作:
<?php
// connection to the db
define(IPHOST,"localhost");
define(DBPASSWORD,"");
define(DBUSER,"root");
define(DATABASE,"ajaxtest");
define(TABLENAME,"at");
$conn = mysql_connect(IPHOST,DBUSER,DBPASSWORD) or die(mysql_error());
mysql_select_db(DATABASE) or die(mysql_error());
$username = mysql_real_escape_string($_POST['username']); // Stop some MySQL injections
$sql="SELECT username FROM ".TABLENAME." WHERE username='$username'";
$query=mysql_query($sql);
if(mysql_numrows($query) == 0)
{
echo 'Username is available!'
}
else
{
echo 'Sorry, username is in use.';
}
?>
因此,一旦脚本执行查询,如果找到结果,它将在HTML div中显示“Username is available!”!“。否则,如果找到匹配项,则会显示“对不起,用户名不可用”
希望这能帮助你更好的理解Ajax!这个代码有很多问题。也就是说,PHP代码甚至不会运行。打开错误报告,修正语法错误,然后查看SQL注入。而且,当你查看错误时,你会得到很多通知。你应该考虑谷歌搜索和学习什么。嘿,我的意思是,以及如何修复它们。有相当多的回复,但我添加了一点关于它是如何工作的解释。希望它对您有所帮助:)