我在网站上构建了一个表单,该表单捕获了一些字段,包括“电子邮件”,并将其发布到我拥有的名为“数据”的数据库中。我正在使用jQuery Validate插件来确保所有字段都已完成,但我在db中没有重复的电子邮件地址。
该插件带有一个名为emails.php的脚本,在验证字段数据时会调用该脚本,这里是代码:
<?php
$request = trim(strtolower($_REQUEST['email']));
$emails = array('steam@valve.com', 'bill@gates.com', 'blocked@email.com');
$valid = 'true';
foreach($emails as $email) {
if( strtolower($email) == $request )
$valid = '"Thats already taken."';
}
echo $valid;
?>
此代码段仅检查列出的电子邮件。有没有办法查询数据库搜索表'数据'并检查'电子邮件',看看是否有重复,并希望发布错误消息,如果是?
此外,当我使用任何示例电子邮件时,脚本似乎确实有效,因此它实际上是“正常工作”我只需要调整它来检查数据库。
答案 0 :(得分:2)
在电子邮件列上添加唯一性约束。
答案 1 :(得分:2)
不要使用有缺陷的“INSERT之前的SELECT”方法。除非您处于全局交易中,否则“SELECT”和后续“INSERT”之间始终存在竞争条件,我怀疑这种情况。
您应该在电子邮件列上放置UNIQUE约束,然后只是尝试插入新记录并捕获唯一性SQL错误。您可以通过检查错误代码来捕获错误,对于MySQL,例如它是1062或23000,具体取决于驱动程序。
答案 2 :(得分:1)
首先,在电子邮件列上添加UNIQUE
约束。然后,在注册时,运行以下查询:
SELECT COUNT(*) as 'count' FROM `data` WHERE email = 'requested@email.com';
答案 3 :(得分:0)
您只需编写一个查询来检查电子邮件是否在表格中:
$query = SELECT count(*) AS `total` FROM `data` WHERE `email` = '{$request}'
$row = mysql_fetch_assoc(mysql_query($query));
if($row['total']) echo false; //exists
else echo true; //doesn't exist
编辑意味着'回音'而不是'回报'
答案 4 :(得分:0)
你可能会使用mysql_num_rows命令检查数据库中的现有值。
这样的事情:
$result = mysql_query("SELECT email from accounts where email = $email_to_check");
$found = mysql_num_rows($result);
if ($found > 0) { echo "Email already exists"; }
else .....