【问题标题】:Check if username exists in database with AJAX使用 AJAX 检查用户名是否存在于数据库中
【发布时间】:2012-03-18 21:32:13
【问题描述】:

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

我有几个关于 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 检查,如果它是真的 - 显示用户名已经存在的错误,否则,什么都不显示?

【问题讨论】:

  • 你读过$.ajax方法的完整用法
  • 是的,我已经读过了,但是我不明白上面描述的几个部分。
  • 您可以使用 $.ajax 的 data 属性传递信息,并将该信息作为 normat 发布或在 php 页面中读取 print true false.此信息可以使用 $.ajax 的回调方法读回
  • 我会尝试所有解决方案,明天再来接受答案!谢谢大家!

标签: jquery ajax json


【解决方案1】:

在继续之前,SELECT * FROM 'users' WHERE 'username' = '. $_POST['username']; 只是在请求 SQL 注入。我建议你使用PHP Data objects

所以据我了解,我也必须通过 $.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;charset=utf8mb4', 'DATABASE_USERNAME', 'DATABASE_PASSWORD');

//prepare our query.
$query = $db->prepare('SELECT COUNT(*) 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->fetchColumn() > 0));

现在回顾一下,我们的 jQuery 脚本将发布到validation.php,它会从数据库中选择一个用户名。它将返回一个JSON 对象,该对象的键为exists,它是一个布尔值,指示用户名是否已作为数据库中的一行存在。当通过jQuery完成请求后,您可以根据查询结果做您需要的事情。

【讨论】:

    【解决方案2】:

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

    您通过 post 将用户名发送到指定的 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注入攻击

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 成功回调为将来使用而折旧
      • 好的!谢谢,所以我会尝试做点什么;)!也许您对 CodeIgniter 有所了解,并且您知道如何将 url 传递给模块?
      • @Amritpal Singh:我不知道,抱歉。我应该用什么来代替这个?
      • @Vdas Dorls:我不知道 Codelgniter,对不起。
      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2013-08-31
      • 2016-10-27
      • 1970-01-01
      相关资源
      最近更新 更多