1

我有下面的代码来检查(网络注册表单)电子邮件地址是否已经存在于数据库中

它工作得很好,一旦我加载页面,它就会显示电子邮件已经存在。但它一直处理表单并将相同的电子邮件输入到mysql数据库中?

如果电子邮件地址已经存在,我如何阻止表单提交?

我的代码如下:

$email = $_POST["email"];

$query = mysql_query("SELECT * FROM users WHERE email='$email'");

if(mysql_num_rows($query) != 0)
{
echo "email already exists";
}
4

4 回答 4

1

一个好主意是在发布表单之前运行 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。

于 2012-09-06T06:32:23.373 回答
0
if(mysql_num_rows($query) != 0)
{
echo "email already exists";
}
else
{
  mysql_query($ur_query);
}

只需将数据库的“INSERT INTO ...”查询放在其他部分。

于 2012-09-06T06:34:32.290 回答
0

您可能不想停止提交表单,而是提交表单,运行检查(就像您的代码一样),如果匹配,将用户重定向回表单页面并出现错误消息告诉他们电子邮件地址已经存在。

这样表单将被提交 - 但在电子邮件地址唯一之前不会处理到数据库中。

从您的代码中借用:

$email = $_POST["email"];
$query = mysql_query("SELECT * FROM users WHERE email='$email'");
if(mysql_num_rows($query) != 0)
{
    echo "email already exists";
    // redirect back to form and populate with 
    // data that has already been entered by the user
}
else
{
    // insert form contents into the database.
}

请注意,您的代码很容易受到注入攻击。在处理这样的表单数据时,您应该切换到 PDO 或 mysqli 准备好的语句。

于 2012-09-06T06:31:05.217 回答
0

你需要像这样给予,

if(isset($_POST["email"])
{
$email = $_POST["email"];

$query = mysql_query("SELECT * FROM users WHERE email='$email'");

if(mysql_num_rows($query) != 0)
{
echo "email already exists";
}
}

它将在您提交表单后执行。

于 2012-09-06T06:44:02.360 回答