我有一个带有单个输入栏和一个按钮的电子邮件列表页面,用户可以使用该按钮加入我的新闻通讯。下面的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 = "";
}
}
?>