2012-03-18 81 views
8

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

我对AJAX的几个问题 -

1)我想创建一个AJAX请求on_change功能,所以这样的事情 -

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

所以,据我了解,我必须在validation.php文件里面的所有验证都是正确的?是否有任何特殊的验证需要或可以只是简单的验证与SQL语句 - SELECT * FROM 'users' WHERE 'username' = '. $_POST['username'];

2)所以据我了解,我必须通过$ .ajax通过POST值也是正确的?如果是,我将如何通过validation.php文件访问它们?

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

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

编辑:另外,我用CodeIgniter框架创建我的网站,所以我怎样才能将ajax中的url属性传递给CodeIgniter模块?

+0

您是否阅读过$ .ajax方法的完整用法 – 2012-03-18 21:37:17

+0

是的,我已经阅读过,但我不知道上面描述的几个部分。 – 2012-03-18 21:38:42

+0

您可以使用$ .ajax的数据属性传递信息,并以normat post的形式获取该信息或获取在php页面中的读取print true false.this info可以回读usind done回调方法$ .ajax – 2012-03-18 21:44:39

回答

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完成请求时,您可以根据查询结果进行所需的操作。我希望这是一个彻底的解释,并引导你到你希望达到的目标。

-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方法 - 做这个任务,你必须我们 GET。

我希望我是有帮助的;)

+0

你好,好吧!要尝试做一些事情。顺便说一下,你有什么CodeIgniter的知识,我怎么会传递一个Ajax请求到模块? – 2012-03-18 21:42:07

+1

使用MYSQL_REAL_ESCAPE_STRING或使用准备好的语句来防止SQL注入 – fabspro 2013-02-16 10:54:46

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 
       } 
       } 
     }); 
}); 
+0

成功回调被折旧以备将来使用 – 2012-03-18 21:45:44

+0

好吧!谢谢,所以我会尝试做点什么;)!也许你对CodeIgniter有所了解,并且你知道,我将如何将URL传递给模块? – 2012-03-18 21:46:22

+0

@ Amritpal Singh:我不知道,对不起。我应该用什么来代替这个? – romainberger 2012-03-18 21:47:26

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注入攻击

相关问题