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

时间:2012-03-18 21:32:14

标签: jquery ajax json

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

我有一些关于AJAX的问题 -

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

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:10)

在继续之前,SELECT * FROM 'users' WHERE 'username' = '. $_POST['username'];只是要求SQL注入。我建议你使用PHP数据对象 - 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()的用户名发布到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完成请求后,您可以根据查询结果执行所需操作。我希望这是一个彻底的解释,并引导您达到您希望实现的目标。

答案 1 :(得分:4)

通过在互联网上阅读教程,您可以学到很多东西。我建议您按照以下页面上的说明操作: 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注入攻击

答案 2 :(得分:0)

以下是我在我的一个网站上所做的:在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
                 }
               }
      });
});

答案 3 :(得分:-2)

  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. 正如我刚才所说,你不能通过邮寄或获取方法来传递变量 - 要完成这项任务,你必须我们GET。

  4. 我希望我有所帮助;)