使用AJAX检查数据库中是否存在用户名

基本上,我想在我的注册表单中添加一个function,我将检查该用户名是否已存在于数据库中。

我有几个关于AJAX的问题 –

1)我想创建一个AJAX请求on_change函数,所以像这样 –

$('#username').change(function() { $.ajax({ url: "validation.php" }); }); 

所以,据我所知,我必须在validation.php文件中使用PHP进行所有validation,对吗? 是否需要进行任何特殊validation,或者只是使用sql语句进行简单validation – SELECT * FROM 'users' WHERE 'username' = '. $_POST['username']; SELECT * FROM 'users' WHERE 'username' = '. $_POST['username'];

2)据我所知,我必须通过$ .ajax传递POST值,对吗? 如果是,我将如何通过validation.php文件访问它们?

3)我在validation.php文件中得到结果后,如何将它们传回(真或假 – 存在或不存在)? 我需要将它们传回去,然后进行if检查,如果是真的 – 显示用户名已存在的错误,否则,不显示任何内容?

希望,你了解我即将创造的东西。 我知道互联网上有很多教程,但我不喜欢通过教程创建一些东西,因为如果我自己创建它,下次会更容易理解;)!

编辑:此外,我正在使用CodeIgniter框架创建我的网站,那么我如何将ajax中的url属性传递给CodeIgniter模块?

在继续之前, SELECT * FROM 'users' WHERE 'username' = '. $_POST['username']; SELECT * FROM 'users' WHERE 'username' = '. $_POST['username']; 只是要求SQL注入。 我建议你使用PHP Data对象 – http://php.net/manual/en/book.pdo.php

据我所知,我必须通过$ .ajax传递POST值,对吗? 如果是,我将如何通过validation.php文件访问它们?

因为这是一个简单的请求,我建议你使用JQuery的方法$.post() 。 这是一个基于你想要做的事情的样本。

 $.post('validation.php',{username: $('#username').val()}, function(data){ if(data.exists){ //tell user that the username already exists }else{ //username doesn't exist, do what you need to do } }, 'JSON'); 

jQuery的post方法需要4个参数$.post(url, data, callback, datatype) 。 在上面的示例中,我们将使用$('#username').val()$('#username').val()发布到validation.php并期望获得JSON响应。 请求完成后,将执行回调函数, data是来自请求的响应。 因为我们指定该响应将是JSON ,所以我们可以像javascript中的本机对象一样访问它。 现在让我们转到validation.php

就像我上面所说的,我建议你使用PDO作为数据库驱动程序。 所以在这个例子中,我将向您展示它的基本用法。

 //set the headers to be a json string header('content-type: text/json'); //no need to continue if there is no value in the POST username if(!isset($_POST['username'])) exit; //initialize our PDO class. You will need to replace your database credentials respectively $db = new PDO('mysql:host=DATABASE_HOST;dbname=DATABASE_NAME','DATABASE_USERNAME','DATABASE_PASSWORD',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //prepare our query. $query = $db->prepare('SELECT * FROM users WHERE username = :name'); //let PDO bind the username into the query, and prevent any SQL injection attempts. $query->bindParam(':name', $_POST['username']); //execute the query $query->execute(); //return the json object containing the result of if the username exists or not. The $.post in our jquery will access it. echo json_encode(array('exists' => $query->rowCount() > 0)); 

现在回顾一下,我们的jQuery脚本将发布到validation.php ,它从数据库中选择一个用户名。 它将返回一个JSON对象,该对象具有exists的键,该键是一个布尔值,指示用户名是否已作为数据库中的行存在。 通过jQuery完成请求后,您可以根据查询结果执行所需操作。 我希望这是一个彻底的解释,并引导您达到您希望实现的目标。

通过在互联网上阅读教程,您可以学到很多东西。 我建议您按照以下页面上的说明操作: http : //blog.webwizo.com/2011/05/04/simple-login-with-php-and-jquery-ajax/

您通过邮件将用户名发送到指定的php文件,该文件将搜索您提供的用户名。

请在输入字符串上使用mysql_real_escape_string函数,这样黑客就无法在您的网站上使用sql注入攻击。 它的工作原理如下:

 $query = "SELECT * FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."'"; if (mysql_num_rows(mysql_query($query)) > 1) { print "inuse"; } 

然后,您可以检查ajax jquery函数中的响应值。 如果网站返回值“inuse”,则显示用户名已被使用的错误消息。 如果没有,则用户名可用。

但正如我所说,请检查教程和最重要的事情: 使用mysql_real_escape_string来防止sql注入攻击

这是我在我的一个网站上做的:在validation.php上我用用户名计算成员数,然后这里是jquery脚本:

 var username = $('#username').val(); $('#username').change(function() { $.ajax({ url: "validation.php", type: 'POST', data: 'username=' + username, success: function(result){ if(result > 0){ // do something if username already exist } else{ // do something if username doesn't exist } } }); }); 
  1.  if (mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$_POST['username']."'")) < 1) { true; } else { false; } 
  2. 你可以通过get或post方法传递它。 在validation.php中你只需写$somevar=$_POST['somevar'];

  3. 正如我刚才所说,你不能通过post或get方法传递变量 - 要完成这项任务,你必须得到我们的GET。

我希望我有所帮助;)