如何防止SQL表中出现重复项?

时间:2020-09-04 20:22:28

标签: php mysql input pdo duplicates

我有一个带有单个输入栏和一个按钮的电子邮件列表页面,用户可以使用该按钮加入我的新闻通讯。下面的php成功将用户的电子邮件添加到SQL数据库的表中。

用户输入电子邮件并单击按钮后,用户将被重定向到确认页面,该页面使他们知道电子邮件已发送到数据库。

提交输入后刷新页面时出现问题。我注意到刷新此确认页面会将相同的电子邮件项目发送到数据库,从而创建一个重复项(或者如果刷新页面7次,则重复7次)。

为了防止这种情况的发生,以及总体上防止重复的表项,可以在下面的php代码中添加什么?

旁注:我才刚刚开始学习php,pdo和mysql,因此,如果您建议我在代码中缺少任何建议(进一步保护sql注入,),请告诉我和/或附上我可以找到更多阅读材料的资源。谢谢。 :)

<?php 
$dbHost = "";
$dbUser = "";
$dbPassword = "";
$dbName = "";

try {
  $dsn = "mysql:host=" . $dbHost . ";dbname=" . $dbName;
  $pdo = new PDO($dsn, $dbUser, $dbPassword);
} catch(PDOException $e) {
  echo "DB Connection Failed: " . $e->getMessage();
}

$status = "";
if($_SERVER['REQUEST_METHOD'] == 'GET') {
  $email = $_GET['email'];

  if(!filter_var($email, FILTER_VALIDATE_EMAIL))  {
      $status = "Please enter a valid email<br/>(no space at the end)";
    } else {

      $sql = "INSERT IGNORE INTO contactinfo (email) VALUES (:email)";

      $stmt = $pdo->prepare($sql);
      
      $stmt->execute(['email' => $email]);

      $status = "Success! Please click the confirmation link in the email I've sent you. It will expire in 12 hours.";
      $email = "";
    }
  }
?>

0 个答案:

没有答案