2

ゲストリストと出席という2つのデータベーステーブルがあります

1 つの HTML ページに、AJAX 経由でゲスト リストをチェックする window.onload スクリプトがあります。URL クエリの名と姓がゲストリスト テーブルに表示される場合は、ページを読み込みます。そうでない場合は、エラー メッセージを読み込みます。

ページが適切に読み込まれると、名と姓が 2 つの入力フィールドに事前入力されます。ユーザーはフォームの残りの部分に入力し、[送信] をクリックして、姓と名を出席表に挿入します。

名と姓が出席テーブルに既に表示されている場合は、エラー メッセージを読み込みます。名と姓が出席テーブルに表示されない場合は、フォーム情報を出席テーブルに送信します。

Ajax に関して言えば、私は明るい電球ではありません。これは私が現在持っているコードです:

HTML

<body>
<div id="formDiv">
<form id="partyForm" name="party" action="party_insert" method="post">
<h1>Welcome to The Party</h1>
    <input name="first_name" id="firstname" class="input" type="text" maxlength="99" placeholder="First Name"><br/>
    <input name="last_name" id="lastname" class="input" type="text" maxlength="99" placeholder="Last Name"><br/>
    <input name="costume" id="costume" class="input" type="text" maxlength="999" placeholder="What are you supposed to be?"><br/>
    <div id="buttonDiv">
        <a class="button" id="submit" style="cursor:pointer;">SUBMIT</a>
    </div>
</form>
</div>

<script>
window.onload = function () {
    var fname_init = decodeURIComponent(getUrlVars()["fname"]);
    var lname_init = decodeURIComponent(getUrlVars()["lname"]);

    if(fname_init !== "undefined" && lname_init !== "undefined"){
        var newString = 'fname='+encodeURIComponent(fname_init)+'&lname='+encodeURIComponent(lname_init);
        $.ajax({
            type: "GET",
            url: "guestList.php",
            data: newString,
            success: function(){
                alert("ON THE LIST");
                $('#firstname').val(fname_init);
                $('#lastname').val(lname_init);
            },
            error: function(){
                alert("NOT ON THE LIST");
                window.location = 'error1.html?fname='+encodeURIComponent(fname_init)+'lname='+encodeURIComponent(lname_init);
            }
        })
    }
}

$("#submit").click(function() {
    validate();
});

function submit(){
    var fname = $("#firstname").val();
    var lname = $("#lastname").val();
    var cost = $("#costume").val();
    var dataString = 'fname='+encodeURIComponent(fname)+'&lname='+encodeURIComponent(lname)+'&cost='+encodeURIComponent(cost);
    $.ajax({  
        type: "POST",  
        url: "partyEntry.php",  
        data: dataString,  
        success: function() {  
            alert("ENJOY THE PARTY");
            clearForms();
        }
    });
}

function validate(){
    if ($("#firstname").val() == ""){
        alert("Please Enter your First Name");
    } else {
        if ($("#lastname").val() == ""){
            alert("Please Enter your Last Name");
        }else{
            if ($("#costume").val() == ""){
                alert("You have to have a costume to be eligible for this raffle");
            }else{
                submit();
            }
        }
    }
}

function clearForms() {
    $('#partyForm')[0].reset();

}

function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

</script>
</body>

ゲストリスト.php

<?php

    $host = "localhost";
    $user = "root";
    $password = "";
    $database = "party";

    $link = mysql_connect($host, $user, $password);
    mysql_select_db($database);

    //SURVEY INFORMATION
    $fname = mysql_real_escape_string($_REQUEST['fname']);
    $lname = mysql_real_escape_string($_REQUEST['lname']);

    $checkClient  = "SELECT * FROM guestlist WHERE first_name = ".$fname." AND last_name = ".$lname;
    mysql_query($checkClient) or die(mysql_error());

    mysql_close($link);

?>

パーティーエントリー.php

<?php

    $host = "localhost";
    $user = "root";
    $password = "";
    $database = "party";

    $link = mysql_connect($host, $user, $password);
    mysql_select_db($database);

    //SURVEY INFORMATION
    $fname = mysql_real_escape_string($_REQUEST['fname']);
    $lname = mysql_real_escape_string($_REQUEST['lname']);
    $cost = mysql_real_escape_string($_REQUEST['cost']);

    $addClient  = "INSERT INTO attendance (first_name, last_name, costume) VALUES ('$fname','$lname', '$cost')";
    mysql_query($addClient) or die(mysql_error());

    mysql_close($link);

?>

私が得ているエラーは、名前がゲストリストにない場合でも、それらがリストにあることを示しているということです. したがって、guestlist.php への Ajax 呼び出しで何か間違ったことをしているに違いありませんが、何が原因かわかりません。また、ゲストが出席テーブルに既に配置されているかどうかを確認するための ajax 呼び出しのスクリプト作成にも問題があります。

4

3 に答える 3

1

コメントで言ったように、から値を返す必要があります。次のguestList.phpようなものが機能するはずです。

$checkClient  = "SELECT * FROM guestlist 
                 WHERE first_name = ".$fname." AND 
                       last_name = ".$lname;
$result = mysql_query($checkClient);
$count = mysql_num_rows($result);
mysql_close($link);
// output 1 or 0 stating if the user is on the list or not
echo ($count ? 1 : 0);
exit();

次に、ajaxコールバックで、次のようなチェックを行います。

success:function(e) {
   alert((e == 1 ? "User is on list" : "User isn't on list"));
于 2012-09-05T20:00:59.617 に答える
1

REST の原則によると、HTTP 200 で POST 要求に応答することは、リソースが正常に作成されたことを意味します。HTTP 400 で応答し、エラーに関する詳細情報を text/html/json/xml 形式で提供することもできます。

これをやってみて、

次のコードを追加します。

$query = mysql_query($addClient) or die(mysql_error());

if(mysql_num_rows($query) > 0)
{
     header('HTTP/1.1 500 Internal Server Error');
     echo 'this is an error message';
}
于 2012-09-05T19:54:02.103 に答える
0

php スクリプトは、少なくとも無効なクエリを実行しようとしてもエラーをスローしません。クエリは適切にフォーマットされているためエラーなしで実行され、データベースから行を取得していないためエラーはスローされません。

于 2012-09-05T20:02:36.813 に答える