0

メールを検証するためのphpファイルがあります。

<?php
// include pdo config
include_once ('config.php');

// store the values submitted by form in variable
session_start();
$email=$_POST['i_email'];

// query
foreach($pdo->query("SELECT * FROM Users WHERE email='$email'") as $row); {
    if ($email == $row['Email']) {
          $valid = "<script>
        $('#input_email').addClass('invalid');
        $('#input_email').removeClass('valid');
        $('#a_loader_i').hide();
          </script>";
    } else {
          $valid = "<script>
        $('#input_email').addClass('valid');
        $('#input_email').removeClass('invalid');
        $('#a_loader_i').hide();
          </script>";
      $_SESSION['valid'] = true;
    }
    echo $valid;
}

$pdo = null;
?>

次に、ajax コードを使用して div に読み込みます。

function i_check_email(id) {

    var val_i_email = $("#input_email").val();
    var i_session = <? $_SESSION['valid'] ?>
    $('#a_loader_i').show();

    $.ajax({
    type: "GET",
    url: '/script/validate_email.php',
    data: {i_emial:val_i_email},
    cache: false,
    success: function() {
    if (i_session) {
        $('#input_email').addClass('valid');
        $('#input_email').removeClass('invalid');
        $('#a_loader_i').hide();
        }
        else {
            $('#input_email').addClass('invalid');
        $('#input_email').removeClass('valid');
        $('#a_loader_i').hide();
    }
    }
    });
}

ajax コードは問題なく動作します。ただし、phpには多少の問題があります。if/else には作用しません。これを回避して電子メールを検証する方法はありますか? そして、それを検証するためにjsonを使用する方法は?

4

2 に答える 2

1

私がよく理解している場合は、データベース内の電子メールの一意性を確認したい. true の場合は、行数を確認し、有効な場合は 1 を、そうでない場合は 0 を返し、js コードでそれらの値を使用するだけで十分です。

バリデータ:

<?php
// include pdo config
include_once ('config.php');

// store the values submitted by form in variable
session_start();
$email=$_POST['i_email'];

// query
$rs = $pdo->query("SELECT COUNT(*) FROM Users WHERE email='$email'");
echo ($rs->fetchColumn(0) > 0 ? '0':'1');

$pdo = null;
?>

そしてjsで:

function i_check_email(id) {
var val_i_email = $("#input_email").val();
$('#a_loader_i').show();

$.ajax({
type: "GET",
url: '/script/validate_email.php',
data: {i_emial:val_i_email},
cache: false,
success: function( answer ) {
    if (answer == '1') {
        $('#input_email').addClass('valid');
        $('#input_email').removeClass('invalid');
        $('#a_loader_i').hide();
    }
    else {
        $('#input_email').addClass('invalid');
        $('#input_email').removeClass('valid');
        $('#a_loader_i').hide();
    }
}
});
}

ps: コードの最もトリッキーな部分は、foreach の閉じ括弧の直後のセミコロンでした ;)

于 2013-05-02T05:52:40.150 に答える
0

AJAXコードでは送信しますi_emialが、PHPではi_email. したがって、データベース内で一致する電子メールを見つけることはおそらくないでしょう。

于 2013-05-02T05:27:11.950 に答える