0

ユーザーが入力しようとしているセル番号が既に存在するかどうかを確認したい。ただし、以下のコードは常にこの「使用中のセル番号」を呼び出します。

私は何を間違っていますか?まだphpから始めています。

<?php
mysql_connect("localhost", "root", "password", "users");
mysql_select_db("users");
$cell = (isset($_POST["cell"])?
$_POST["cell"] : null);
$query=mysql_query("SELECT * from users where cell='$cell' ");
$find=mysql_num_rows($query);
echo $find;
?>

<script>
 $(document).ready(function(){
        $("#Cell").blur(function(){
            $("#Status_Cell").show();
             $("#Status_Cell").html("checking...");
        var cell = $("#Cell").val();
          $.ajax({
                type:"post",
                url:"formpost",
                data:"cell="+cell,
                    success:function(data){
                    if(data==0){
                        $("#Status_Cell").html("Cell Number available");
                    }
                    else{
                        $("#Status_Cell").html("Cell Number in use");
                    }
                }
             });

        });

     });
</script>
4

4 に答える 4

1

これはうまくいくはずです:

<?php
if(isset($_POST['cell'])) {
    mysql_connect("localhost", "root", "password", "users");
    mysql_select_db("users");
    $cell = (isset($_POST["cell"])?
    $_POST["cell"] : null);
    $query=mysql_query("SELECT * from users where cell='$cell' LIMIT 1");
    $find=mysql_num_rows($query);
    die($find);
}
?>

<script>
 $(document).ready(function(){
        $("#Cell").blur(function(){
            $("#Status_Cell").show();
             $("#Status_Cell").html("checking...");
        var cell = $("#Cell").val();
          $.ajax({
                type:"post",
                url:"formpost",
                data:"cell="+cell,
                    success:function(data){
                    if(data==0){
                        $("#Status_Cell").html("Cell Number available");
                    }
                    else{
                        $("#Status_Cell").html("Cell Number in use");
                    }
                }
             });

        });

     });
</script>

したがって、「データ」をスクリプトに送信すると、スクリプトは結果を探し、カウントを出力して終了します。

そうでない場合は、ページの残りの部分が表示されます。

また、LIMIT 1 をそこに配置する方法にも注意してください。データがそこにあるかどうかだけを知りたいので、パフォーマンスを少し最適化します。

編集:これは、パフォーマンスとセキュリティの点でより良いアプローチです:

<?php
if(isset($_POST['cell'])) {
    mysql_connect("localhost", "root", "password", "users");
    mysql_select_db("users");
    $cell = $_POST["cell"];
    $query = mysql_query("SELECT COUNT(*) AS number from users where cell='".mysql_real_escape_string($cell)."' LIMIT 1");
    $find = mysql_result($query, 0);
    die($find);
}
?>
于 2013-08-07T16:53:10.367 に答える
0

最初に行うことは、data返される値が何であるかを確認することです。これにより、どこに問題があるかがわかります。また、count()できるようにすべての行を取得するよりも、使用する方が適切ですmysql_num_rows()

SELECT COUNT(*) from users where cell='$cell'

に等しいセルを含む行の数を返し$cellます。その結果を解釈し、必要なものをエコーし​​ます。また、クエリが成功したかどうかを確認します (エラーを処理します)。が設定されていない場合、$_POST['cell']セル番号である をデータベースに照会する理由はありませんnull。目的の値をすぐに返すだけです。また、SQL インジェクションに対して脆弱であるというコメントも得たので、それも修正することを検討する必要があります。

于 2013-08-07T16:49:03.453 に答える
0

ajax呼び出しで同じページから結果を受け取っている場合、そのページを閲覧したかのように、返されるコンテンツにはJavaScriptを含むページ上のすべてが含まれます。別のページを ajax ターゲットとして使用するか、次のようにしてみてください。

<?php

if(isset($_POST["cell"]))
{
    mysql_connect("localhost", "root", "password", "users");
    mysql_select_db("users");
    $cell = $_POST["cell"];
    $query=mysql_query("SELECT * from users where cell='$cell' ");
    $find=mysql_num_rows($query);
    echo $find;
}
else 
{
?>

    <script>
     $(document).ready(function(){
            $("#Cell").blur(function(){
                $("#Status_Cell").show();
                 $("#Status_Cell").html("checking...");
            var cell = $("#Cell").val();
              $.ajax({
                    type:"post",
                    url:"formpost",
                    data:"cell="+cell,
                        success:function(data){
                        if(data==0){
                            $("#Status_Cell").html("Cell Number available");
                        }
                        else{
                            $("#Status_Cell").html("Cell Number in use");
                        }
                    }
                 });

            });

         });
    </script>

<?php } ?>

これは、post 値がない場合にのみ JavaScript が書き出されることを意味するはずです。

于 2013-08-07T16:54:20.437 に答える