0

私は AJAX を使用してユーザー登録フォームを作成しようとしていますが、これにはかなり慣れていないため、自分が行っていることの経験があまりありません。私の問題は、php が機能しないか、AJAX がファイルを送信しないことです。responseText が戻ってきたときに値がありません。responseText が PHP のエコーになるようにします。私はおそらく何をすべきかの正しい線に沿っていると思いますか? 助けてください。また、質問のレイアウトが悪くて申し訳ありません。すぐに整理します。

HTML:

<div id="registration">
    <form method="post" action="" onsubmit="formValidate()">
        <!-- Apply Javascript for form validation and change password property -->
        <div id="title">First Name:</div>
        <input type="text" name="firstname" id="firstname" value="First Name"/>
        <div id="title">Surname:</div>
        <input type="text" name="surname" id="surname" value="Surname"/>
        <div id="title">Address:</div>
        <input type="text" name="address" id="address" value="Address Line 1"/>
        <input type="text" id="town_city" name="town_city" value="Town/City"/>
        <input type="text" name="postcode" id="postcode" value="Postcode" />
        <input type="text" name="country" id="country" value="Country" />
        <div id="title">Email:</div>
        <input type="text" name="email" id="email" value="Email" />
        <div id="title">Password:</div>
        <input  type="text" name="password" id="password" value="Password" />
        <div id="title">Verify Password:</div>
        <input type="text" name="vPassword" id="vPassword" value="Passwloord" />
        <div id="status"></div>
        <input type="submit" name="submit" value="Register" />
    </form>
</div>

JS:

function formValidate() {
    if (window.XMLHttpRequest) {
        xml = new XMLHttpRequest();
    } else {
        xml = new ActiveXObject('Microsoft.XMLHTTP');
    }

    var url = 'php/validateUser.inc.php';
    var fn = document.getElementById('firstname').value;
    var ln = document.getElementById('surname').value;
    var add = document.getElementById('address').value;
    var tc = document.getElementById('town_city').value;
    var pCode = document.getElementById('postcode').value;
    var country = document.getElementById('country').value;
    var email = document.getElementById('email').value;
    var pass = document.getElementById('password').value;
    var vPass = document.getElementById('vPassword').value;
    var userInput = "firstname=" + fn + "&surname=" + ln + "&address=" + add + "&town_city=" + tc + "&postcode=" + pCode + "&country" + country + "&email=" + email + "&password=" + pass + "&vPassword=" + vPass;

    xml.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xml.open('POST', url, true);

    xml.onreadystatechange = function() {
        if (xml.readyState == 4) {
            if (xml.status == 200) {
                var return_data = xml.responseText;
                document.getElementById("status").innerHTML = return_data;
            } else {
                alert("GNAH!");
            }
        }

        xml.send(userInput);
        document.getElementById("status").innerHTML = "Processing....";
    }

この部分を完了した後、PHP のエコーをステータス div に表示したいのですが、画面の左隅に表示されますが、「処理中....」は表示されません。何か提案があれば、これが間違っているファイルであることを知っています。

PHP:

<?php
if (isset($_POST['submit'])) {

    if (isset($_POST['firstname'], $_POST['surname'], $_POST['address'], $_POST['town_city'], $_POST['postcode'], $_POST['country'], $_POST['email'], $_POST['password'], $_POST['vPassword'])) {
        $fName = mysql_real_escape_string($_POST['firstname']);
        $lName = mysql_real_escape_string($_POST['surname']);
        $addr = mysql_real_escape_string($_POST['address']);
        $town_city = mysql_real_escape_string($_POST['town_city']);
        $pCode = mysql_real_escape_string($_POST['postcode']);
        $country = mysql_real_escape_string($_POST['country']);
        $email = mysql_real_escape_string($_POST['email']);
        $pass = mysql_real_escape_string($_POST['password']);
        $pass_hash = md5($pass);
        $vPass = mysql_real_escape_string($_POST['vPassword']);

        if (!empty($fName) && !empty($lName) && !empty($addr) && !empty($town_city) && !empty($pCode) && !empty($country) && !empty($email) && !empty($pass) && !empty($vPass) && $pass == $vPass) {
            $query = "INSERT INTO `usertable` (user_id, fName, lName, Address, town_city, pCode, Country, Email, Password) VALUES ('', '$fName', '$lName', '$addr', '$town_city', '$pCode', '$country', '$email', '$pass')";
            $query_run = mysql_query($query);
            if ($query_run) {
                header('Location: login.php');
            } else {
                echo mysql_error();
            }
        } else {
            echo 'Please fill in all fiels and make sure both passwords match.';
        }
    } else {
        echo mysql_error();
    }
}
?>
4

1 に答える 1

2

変数の「送信」フォーム フィールドに値を指定していないuserInputため、テストは次のようになります。

if ($_POST['submit'])

失敗します。割り当てを次のように変更します。

var userInput = "submit=Register&firstname="+fn+...
于 2012-09-28T02:49:09.553 に答える