0

我有脚本,检查用户是否可以注册:

PHP:

<?php  

if(isset($_POST['username']))//If a username has been submitted
{
    $username = mysql_real_escape_string($_POST['username']);//Some clean up :)

    $check_for_username = mysql_query("SELECT * FROM users WHERE username='$username'");
    //Query to check if username is available or not

    if(mysql_num_rows($check_for_username))
    {
       echo '1';//If there is a  record match in the Database - Not Available
    }
    else
    {
        echo '0';//No Record Found - Username is available
    }
}
?>

JAVASCRIPT

<script>
$(document).ready(function()//When the dom is ready
{
    $("#username").change(function()
    { //if theres a change in the username textbox

        var username = $("#username").val();//Get the value in the username textbox
        if(username.length > 3)//if the lenght greater than 3 characters
        {
            $("#availability_status").html('Checking availability...');
            //Add a loading image in the span id="availability_status"

            $.ajax({  //Make the Ajax Request
                type: "POST",
                url: "http://mywebsite.com/auth/sign_up",
                data: "username="+ username,  //data
                success: function(server_response){

                    $("#availability_status").ajaxComplete(function(event, request){

                        if(server_response == '0')//if ajax_check_username.php return value "0"
                        {
                            $("#availability_status").html('<font color="Green"> Available </font>  ');
                           //add this image to the span with id "availability_status"
                        }
                        else  if(server_response == '1')//if it returns "1"
                        {
                            $("#availability_status").html('<font color="red">Not Available </font>');
                        }

                    });
                }

            });

        }
        else
        {

            $("#availability_status").html('Username too short');
           //if in case the username is less than or equal 3 characters only
        }
        return false;
    });
});
</script>

但是后来我在用户名字段中写入了萤火虫错误:不允许您请求的操作。[14:32:30.980] POST http://mywebsite.com/auth/sign_up [HTTP/1.1 500 内部服务器错误 63ms]

有什么建议吗?

对不起,我的英语不好 :)

4

1 回答 1

1

这绝对不是这样做的方法,原因有很多,比如

  1. 不推荐使用 mysql_ 扩展名使用 PDO
  2. 如果您使用的是 codeigniter,则使用 Active Record 类进行 db 调用,使用 Input 类获取 POST 变量

但是我想展示一个可能的流程

php

$响应 = 数组();

if(isset($_POST['username'])) //如果用户名已经提交
{
    //假设用户名不可用
    $状态=假;
    $statusText = "不可用";
    $username = mysql_real_escape_string($_POST['username']); //一些清理:)

    //查询用户名是否可用
    $isAvailable = mysql_query("SELECT * FROM users WHERE username='$username'");

    如果(mysql_num_rows($isAvailable)){
        $状态=真;
        $statusText = "可用";
    }

    $响应 = 数组(
        “状态” => $状态,
        "状态文本" => $状态文本
    );
}

返回 json_encode($response);

js

//alex >> 评论通常在您评论的行的顶部加上
//只有当“大”或“奇怪”事情发生时,你才需要评论每一行

//当dom准备好时
$(文档).ready(函数()
{
    //如果用户名文本框有变化
    $("#username").change(function()
    {
        //获取用户名文本框中的值
        var username = $("#username").val();
        //alex >> 缓存 div 所以我不会每次都调用它来提高性能
        var statusDiv = $("#availability_status");

        //如果长度大于3个字符
        如果(用户名.长度> 3)
        {
            //TODO 在span id="availability_status" 中添加加载图片
            statusDiv.html('检查可用性...');

            $.ajax({
                类型:“POST”,
                网址:“http://mywebsite.com/auth/sign_up”,
                数据:“用户名=”+用户名,
                成功:函数(server_response)
                {
                    变种颜色=“红色”;
                    var statusText = "发生错误!";

                    server_response = JSON.parse(server_response);

                    如果(服务器响应)
                    {
                        statusText = server_response.statusText;

                        如果(server_response.status)
                            颜色=“绿色”;
                    }
                    statusDiv.html("span class='" + color + "'" + statusText + "span");
                }
            });
        }
        别的
        {
            //如果用户名小于或等于3个字符
            statusDiv.html('用户名太短');
        }

        返回假;
    });
});

只需记住使 span 成为适当的标签,因为“智能”编辑器正在杀死整个标签

statusDiv.html("<span class='" + color + "'>" + statusText + "</span>");

这使我想起 !

总是检查空:P

于 2013-11-14T14:22:37.427 回答