0

jquery を使用してフォームを検証しています。フォームにエラーが発生しなかった後、データベースにデータを挿入したいのですが、何らかの理由で正しく機能していません。私の間違いを見つけるのを手伝ってくれませんか。ありがとう、

Jクエリは

$.post('register_user.php',
                    {
                    'name' : name,
                    'email' : email,
                    'password': password
                    }, 
                    function(data) {
                            if(data == "success"){
                                alert("success");
                            } else if(data == "fail"){
                                alert("fail");
                            }
                    });

PHP

            $name = $_POST['name']; //else assign it a variabl
         $email = $_POST['email'];
        $password = $_POST['password'];

    $sql = "SELECT email FROM users WHERE LOWER(email) = '" . $email . "'";
    $result = mysql_query($sql) or die("Could not get email: " . mysql_error());

    if(mysql_num_rows($result) > 0) {
        //email is already taken
    }
    else {
        $query = mysql_query("INSERT INTO `users` ( `name`, `email`, `password`) VALUES ( '$name', '$email', '$password')") or die(mysql_error());
        $result2 = mysql_result($query);
        if((mysql_affected_rows($result2) ==1){
            echo 'success';
        } else {
            echo 'fail';
            }
    }
4

1 に答える 1

1

コメントするのに十分な担当者がまだいないので、これを答えにする必要があります。

ステップ 1: できることをエコー (または印刷) します。次のように、ロジック内にエコーを追加します。 //email is already taken また、POST 変数をエコーアウトします。

それらがすべて問題ないように見える場合は、クエリをエコーアウトしてみてください。例えば。次のようなクエリ行をコピーします。

$query = mysql_query("INSERT INTO `users` ( `name`, `email`, `password`) VALUES ( '$name', '$email', '$password')")

次に、貼り付けて次のように変更します。

echo "INSERT INTO `users` ( `name`, `email`, `password`) VALUES ( '$name', '$email', '$password')";

次に、これが悪いように見える場合は、クエリです.もちろん、phpmyadminまたはsshを介してサーバーに直接mysqlの出力をテストし、コンソールからコマンドを実行できます(シェルアクセスが許可されている場合)

他の何人かがコメントしたように、これを機能させることができた場合: mysqli または pdo が次のステップになるはずです。また、mysql インジェクションを処理しますが、いくつかの基本的なことを行う必要があります。

あなたはまだ XSS に脆弱であり、単にメールの末尾にある空白のようなものでもあります (ユーザーが何かをコピーしてフォームに挿入するときに、これを取得することがよくあります)。

PHP で作成した次のようなヘルパー関数によって、その一部を解決できます。

function cleanData($data) {
    return strip_tags(trim($data));
}

これは私にとって非常に単純なサンプルでした。ケーシングなど、他のパラメーターを関数に追加することもできます。次に、大文字と小文字を切り替えて、strtolower、strtoupper、ucwords(strtolower( など) を実行できます。その後、関数内で変数をラップするだけです :-)

ところで。メール 正規表現で確認します。また、DOM を操作したり、代替ソースから投稿したりするのは非常に簡単であるため、JS / クライアント側コードに入力検証を行わせないでください。簡単に改ざんできるため、このデータは「ダーティ」であると考える必要があります。

于 2014-02-19T17:27:16.173 に答える