一个好主意是在发布表单之前运行 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" />
然后制作一个单独的 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。