【问题标题】:Prevent multiple data entries in MySQL防止 MySQL 中的多个数据条目
【发布时间】:2011-07-04 00:20:00
【问题描述】:

所以这就是交易。我环顾四周,所有其他技术都与刷新浏览器有关,以及防止 php 页面重新提交发布数据的方法。我对此很陌生(显然:p)但无论如何,我相信我的问题很简单。我只想要一个方法,可能是一个 if else 语句来检查发布数据条目,如果我的表中已经存在匹配项,则不要执行查询。我并不担心查询该表的所有结果,因为我只怀疑该表将有 50-60 个条目。

这是处理表单提交的php页面:

$firstName = $_POST['firstName'];
$lastName = $_POST['lastName'];
$email = $_POST['email'];
$city = $_POST['city'];
$state = $_POST['state'];

$submitDate = date("Y-m-d");

mysql_connect ("localhost", "abc", "123") 或 die ('Error: ' .mysql_error());
mysql_select_db(“成员”);

$query = "插入人员(ID、名字、姓氏、电子邮件、城市、州、提交日期)VALUES (
'空值',
'".$firstName."',
'".$lastName."',
'".$email."',
'".$city."',
'".$state."',
'".$submitDate."'
)";

mysql_query($query) 或 die ('错误更新数据库');

echo "数据库更新为:" .$firstName ." " .$lastName ." " .$email ." " .$city ." " .$state;

mysql_close($con);

抱歉,似乎无法让我的 php 使用这些代码大括号正确格式化。无论如何。只是为了重新迭代,寻找一种可能基于名字和姓氏的方法。如果这些已经存在,则不允许提交数据。我尝试了一些 if then 语句,但我认为我没有理解将结果与查询进行比较的概念。我希望这一切都有意义!!!

【问题讨论】:

标签: php mysql forms


【解决方案1】:

您的问题只是刷新页面重新发送 POST 数据吗?防止这种情况发生的标准方法是在处理完表单数据后重定向浏览器,如下所示:

header('Location: ' . $_SERVER['PHP_SELF']);

请记住,更改标题必须在任何输出发送到浏览器之前完成,因此这应该在您的文档类型之上,并确保之前没有空格。

【讨论】:

  • 我宁愿有一种方法来防止所有重复条目。我将在多个地方提交表单。
  • 所以我只是想要一种方法,即使用户返回表单,并决定从头开始再次提交,使用相同的名字和姓氏,它也不会允许这样做。
  • 很酷,但出于可用性原因,我仍然建议使用它。
  • 当然还有一些针对那些特殊情况的重复检查代码。
  • 肯定会这样做。谢谢!
【解决方案2】:

我建议在您想要唯一的列上添加一个 UNIQUE 索引。

【讨论】:

    【解决方案3】:

    这样做的一种方法是确保您的表设置了适当的主键(至少firstnamelastname),然后尝试插入并查看它是否在重复时失败。为此,您可以使用mysql_error() 函数检查错误消息。

    【讨论】:

      【解决方案4】:

      您可以只使用INSERT IGNORE INTO ... 并让 MySQL 处理它。

      $query = "INSERT IGNORE INTO persons (ID, firstName, lastName, email, city, state, submitDate) VALUES (
      'NULL',
      '".$firstName."',
      '".$lastName."',
      '".$email."',
      '".$city."',
      '".$state."',
      '".$submitDate."'
      )";
      

      【讨论】:

        【解决方案5】:

        您可以使用这两个字段在数据库上进行选择以检查是否已经存在一行,但如果这需要唯一,则 MySQL 表中的这两列也应该有唯一索引。

        【讨论】:

          【解决方案6】:

          我也有这个问题。基本上我所做的是在插入之前,对符合重复条件的条件进行选择并检查它是否返回;如果没有,我们可以进入。

          $query = "SELECT COUNT(id) AS mycount FROM persons WHERE firstName = '".$firstnName."' AND lastName = '".$lastName."'";
          $result = mysql_query($query);
          $row = mysql_fetch_array($result);
          if($row['mycount'] == 0) {
              //Do insert
          }
          

          【讨论】:

          • 我要试试这个!这看起来很结实。我会让你知道结果!
          • 我无法让它工作。我基本上只是将我的查询放在这个 if 语句中。再次声明$query是否有错误?
          • 已修复。谢谢!愚蠢的我不知何故两次声明了一个变量。我什至不知道。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-27
          • 2019-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多