1

サーバー側をデバッグで個別にチェックしましたが、クライアント側に送り返す必要があるゼロと1の文字列を作成しているため、正常に動作します。

サーバー側では次のようになります。

    if (validateInput($_POST["user"],
                  $_POST["password1"],
                  $_POST["password2"],
                  $_POST["email1"],
                  $_POST["email2"]))
{
    $_subscriber =  new subscriber($_POST["user"],$_POST["password1"],$_POST["email1"],CURRENT_TIME);
    subscriberInsertion($_subscriber);
}
/** function subscriberInsertion($_subscriber) insert a subscriber to DB*/
function subscriberInsertion($_subscriber)
{

    $query = "INSERT INTO users (user,value,email,date) VALUES('{$_subscriber->getUser()}',
                                                              '{$_subscriber->getPassword()}',
                                                              '{$_subscriber->getEmail()}',
                                                              '{$_subscriber->getDate()}')";

    $dbObj = new DB_MySQL(DB_users_HOST,DB_users_USER,DB_users_PASS,DB_users_NAME);
    if ($dbObj ->execute($query))
    {
        header('Location:' . URL_HTML_PATH . "index.html");
        exit;
    }
}


/**validateInput main function for validation of good credntails and emails */
function validateInput($user,$pass1,$pass2,$email1,$email2)
{
    $regexUser = "/^(?=.{1,20}$)[a-zA-Z0-9]+$/";      //all letters ad number and size between 1-20
    $regexPwd = "/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,10}$/"; //Password must contain 6-10 characters and
                                                             // at least one number, one letter and one
    //Regex mail
    $regexMail = "/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/";

    $response = "";

    //check user name//

    $response = $response . checkRegex($regexUser,$user); //at location 0 in string

    //check password//

    $response = $response . checkRegex($regexPwd,$pass1); //at location 1 in string
    $response = $response . textCompare($pass1,$pass2); //at location 2 in string

    //check mail//

    $response = $response . checkRegex($regexMail,$email1); //at location 3 in string
    $response = $response . textCompare($email1,$email2); //at location 4 in string

    //check user name existence


    $response = $response . checkExistaneceOfUser($user); //at location 5 in string

    echo $response;

}

echo $response最後に が 0 と 1 の文字列を返していることがわかります。

クライアント側では、パラメータを指定してリクエストを送信し、レスポンスを待っているのは Java スクリプトです。

/**function checkUserExistance(str) to check if user exist*/
function sendToValidation(data)
{
    var xmlhttp;

    xmlhttp=new XMLHttpRequest();



    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            var response = xmlhttp.responseText;
            alert(response);


         }
    }


     xmlhttp.open("POST",url + page,true);
     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     xmlhttp.send(data);
}

サーバー側からの応答は良好です。問題は、大きな奇妙な xml で受信することです。

<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'> <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: email2 in D:\wamp\www\MyHome2\php\databasebuilder.php on line <i>25</i></th></tr> <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0010</td><td bgcolor='#eeeeec' align='right'>163616</td><td bgcolor='#eeeeec'>{main}( )</td><td title='D:\wamp\www\MyHome2\php\databasebuilder.php' bgcolor='#eeeeec'>..\databasebuilder.php<b>:</b>0</td></tr> </table></font> 001011"

xml が大きすぎるため、xml のごく一部のみをここに示します。xml の最後にあるように、期待している応答である 001011 が返されます。結果でこの xml を取得するのはなぜですか? どうすればそれを取り除くことができますか?

4

1 に答える 1

3

表示されているのは からの出力ですxDebug

これは、php エラーが発生した場合に表示されます。

エラーは、コード サンプルの 5 行目から発生しています

コード: $_POST["email2"]

エラー: Notice: Undefined index: email2

フォームが送信されるとき、email2POST 経由で値を送信していません。

これは、検証関数を呼び出す前にisset( http://php.net/manual/en/function.isset.php )を使用して修正できます。

于 2013-07-09T13:12:11.733 に答える