php - 如何防止 SQL 表中的重复项?
问题描述
我有一个电子邮件列表页面,其中包含一个输入栏和一个按钮,用户可以使用它来加入我的时事通讯。下面的 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 = "";
}
}
?>
解决方案
推荐阅读
- php - 如何修复错误 pg_query() [function.pg-query]: Query failed: ERROR: column "" does not exist LINE 1: ...oad(filename, detail, folder, dateupload)
- javascript - 用 CSS 遮罩框动画?
- r - “inner_product”未在此范围内声明
- sql-server - MSSQL 用户定义数据类型创建时间
- c++ - 从文本文件中检索字符串并使用 substr() 产生 \xxx 字符串值
- visual-studio - 共享点中 global.asax 中的 Application_BeginRequest 事件
- android - 安卓小部件。强制停止后如何恢复进程?
- java - Spring Batch 3.0:StepExecutionListener 用于分区 Step 并将执行上下文值级联到分区作业
- swift - 实现泛型协议方法,但对整个类使用泛型
- c - 在“bind -x”bash 回调中更改了 TTY 键码