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
    }
}
?>

ジャバスクリプト

<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>

しかし、ユーザー名フィールドに書き込むと、firebug でエラーが発生しました: 要求したアクションは許可されていません。[14:32:30.980] POST http://mywebsite.com/auth/sign_up [HTTP/1.1 500 内部サーバー エラー 63 ミリ秒]

なにか提案を?

私の悪い英語でごめんなさい:)

4

1 に答える 1

1

それは間違いなく、次のような多くの理由でそれを行う方法ではありません

  1. mysql_ 拡張子は非推奨です PDO を使用してください
  2. codeigniter を使用している場合は、Active Record クラスを使用して db 呼び出しを行い、Input クラスを使用して POST 変数を取得します。

ただし、考えられるフローを示したいと思います

php

$response = 配列();

if(isset($_POST['username'])) //ユーザー名が送信された場合
{
    // ユーザー名が利用できないと仮定します
    $ステータス=偽;
    $statusText = "利用できません";
    $username = mysql_real_escape_string($_POST['username']); //いくつかのクリーンアップ:)

    //ユーザー名が使用可能かどうかを確認するクエリ
    $isAvailable = mysql_query("SELECT * FROM users WHERE username='$username'");

    if(mysql_num_rows($isAvailable)) {
        $ステータス = 真;
        $statusText = "利用可能";
    }

    $応答 = 配列(
        "ステータス" => $ステータス、
        "statusText" => $statusText
    );
}

return json_encode($response);

js

//alex >> コメントは通常、コメントしている行の先頭に追加します。
//何か「大きな」または「奇妙な」ことが起こったときだけ、すべての行にコメントする必要はありません

//dom の準備ができたら
$(document).ready(function()
{
    //ユーザー名テキストボックスに変更がある場合
    $("#ユーザー名").change(関数()
    {
        // ユーザー名テキストボックスの値を取得します
        var ユーザー名 = $("#ユーザー名").val();
        //alex >> div をキャッシュするので、毎回呼び出す必要がないため、パフォーマンスが向上します
        var statusDiv = $("#availability_status");

        // 長さが 3 文字を超える場合
        場合 (ユーザー名.長さ > 3)
        {
            //TODO スパン id="availability_status" に読み込み中の画像を追加します
            statusDiv.html('空き状況を確認中...');

            $.ajax({
                タイプ:「ポスト」、
                url : "http://mywebsite.com/auth/sign_up",
                データ:「ユーザー名=」+ユーザー名、
                成功: 関数 (server_response)
                {
                    var color = "赤";
                    var statusText = "エラーが発生しました!";

                    server_response = JSON.parse(server_response);

                    if(サーバー応答)
                    {
                        statusText = server_response.statusText;

                        if(server_response.status)
                            色 = "緑";
                    }
                    statusDiv.html("span class='" + color + "'" + statusText + "span");
                }
            });
        }
        そうしないと
        {
            //ユーザー名が 3 文字以下の場合のみ
            statusDiv.html('ユーザー名が短すぎます');
        }

        false を返します。
    });
});

「スマート」エディターはタグ全体を強制終了するため、スパンを適切なタグにすることを忘れないでください

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

思い出します!

常に空をチェックします:P

于 2013-11-14T14:22:37.427 に答える