0

私はjqueryを初めて使用し、電子メール入力に検証ルールを追加しようとしています。メールがデータベースにあるかどうかをチェックします。検証ルールを追加しようとしているHTML入力。

<input id="email" name="email"  type="text" class="easyui-validatebox" validType="email" required="true" >

MY JS

$("#regform").validate();//block below was nested in validate in OP 
$('input[name="email"]').rules("add",
{
    remote : 
    {
        url: 'checkMaila.php',
        async: false,
        type: "POST",
        data:
        {
            email: function()
            {
                return $('input[name="email"]').val()
            }
        }       
    }

});

私のPHP

<?php

/*メールがすでに登録されているかどうかを確認します*/

//mysqliを使用してdbに接続します

include 'conn.php';

if(isset($_POST['email']))
{
    //op had this line instead of the line below:$maila= $_POST['email']
    $maila = $mysqli->real_escape_string($_POST['email']);
    //op line changed to one below $result = mysql_query("select * from user where email= '"+$maila+"';");
$sql = "SELECT * FROM user WHERE email = '".$maila."'";
$result = $mysqli->query($sql); 
if($result->num_rows == 0){
    echo "true";
}
else
{
    echo "false";
}

}
else
{
echo "false"; //invalid post var
}

?>

詳細:私のインライン検証ルールは正常に機能します。私のjsコードは、jqueryを使用する他のjs関数を含む外部jsファイルにあり、それらは機能します。

4

3 に答える 3

0

$mailaブール値に設定しています(設定されているかどうか$_POST['email'])。次のようにする必要があります。

$maila = $_POST['email'];

また、投稿の電子メール データは、SQL で実行される前に検証およびエスケープする必要があります。これは、SQL インジェクションが原因です。入力すると10'; DROP TABLE user /*、実行されるクエリは次のようSELECT * FROM user WHERE email = '10'; DROP TABLE user /*'になります。ユーザー テーブルはデータベースから削除されます。

検証するには、正規表現を使用して、メール アドレス形式であることを確認します。文字列をエスケープするにはreal_escape_string()( http://php.net/manual/en/mysqli.real-escape-string.php ) を使用します。

もう 1 つのエラーは、 を使用して文字列を結合しようとしているということ+です。PHP では、 を使用する必要があります.

$sql = "SELECT * FROM user WHERE email = '"+$maila+"'";

次のようにする必要があります。

$sql = "SELECT * FROM user WHERE email = '".$maila."'";

ここで使用されている mysql :mysql_queryは推奨されていないため、代わりにPDOまたはMysqliを使用する必要があります。

jQuery にも問題があります。ルールは validate 内にネストするべきではなく、代わりに次のようにする必要があります。

$("#regform").validate();

$('input[name="email"]').rules("add", {
    ...
于 2012-11-14T14:20:06.367 に答える
0

次の回答は、OPのこのはるかに古いリビジョンに対するものです。

https://stackoverflow.com/revisions/13380448/2


.rules()の中に入れ子にするべきではありません.validate()ドキュメントに従って、が呼び出された.rules()のどこかに表示される必要があります。 .validate()

http://docs.jquery.com/Plugins/Validation/rules

$(document).ready(function() {

    $("#regform").validate();  

    // .validate(); must appear above .rules()

    $('input[name="email"]').rules("add", {
        remote : {
            url: 'checkMaila.php',
            async: false,
            type: "POST",
            data: {
                email: function() {
                    return $('input[name="email"]').val()
                }
            }       
        }
    });

});
于 2012-11-14T14:20:24.860 に答える
0

ヒント: ajax を始める前に、php ソースが機能していることを確認してください。これにより、指定されたコンテンツ (php|html|js|css) のエラーを簡単に見つけることができます。

PHPコードで最初に見た大きなエラー:

 $maila = isset($_POST['email']);

$maila をブール値の true または false に設定する必要があります。必要なのは

 $maila = isset($_POST['email'])?$_POST['email']:'';

2つ目のエラー

$sql = "SELECT * FROM user WHERE email = '"+$maila+"'";

これは有効なphpではありません(エラーレポートを見てください)文字列はドットで接続されています。

$sql = "SELECT * FROM user WHERE email = '".$maila."'";

最後に、sql-injections を検索してください。

于 2012-11-14T14:23:13.917 に答える