フォームを送信する前に、つまりクライアント フォームの検証状態で AJAX チェックを実行することをお勧めします。したがって、ユーザーはフォームを投稿する前に、メールが既に追加されていることを知ることができます...
AJAX ソリューションは次のようになります。
FORM ページに、次のような jQuery 関数があります。
バリデータ プラグインを使用して jQuery を追加します。
<script type="text/javascript" src="/js/jquery.1.7.2.min.js"></script>
<script type="text/javascript" src="/js/jquery.validate.min.js"></script>
<script type="text/javascript">
jQuery.validator.addMethod("emailunique",function(value){
return eval($.ajax({
url: 'phptocheckunique.php',
data: "email="+value,
type: 'post',
async: false
}).responseText);
}, 'Email address already exists, must be unique!');
$(function() {
$('#yourform').validate();
});
</script>
次に、フォームのメール入力フィールドにクラスを追加します。
<input type="text" name="email" value="" size="30" class="required email emailunique" />
次に、DBをチェックするためだけに別のPHPスクリプトを作成します($ _POST ['email']で投稿されたメールアドレス、上記の関数(しかし安全です!)と同様に、電子メールが既にある場合はTRUEを返します。
phptocheckunique.php:
<?php
$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$sth = $dbh->prepare("SELECT FROM users WHERE email = ?");
$sth->execute(mysql_real_escape_string($_POST['email']));
if ($sth->rowCount() > 0):
return true;
else:
return false;
endif;
ただし、この方法を引き続き使用する場合は、最後の if ルーチンに ELSE ステートメントを追加すると、電子メールが一意である場合にのみ人を追加します... また、コードは非常に安全ではないため、PDO の使用を検討する必要があります。