这是我的HTML和PHP存储电子邮件。我能做些什么来确保一个人实际上键入一个电子邮件而不是随机字符。也许代码看它是否有。“extension”或“@”符号。另外我如何防止重复的电子邮件条目。另外,我希望它在提交时提醒网站访问者成功,我该如何实现这一点?如何过滤在html上输入表单的电子邮件?
任何帮助,将不胜感激!谢谢!
HTML:
<div class="row">
<div class="col-md-12">
<div class="call-to-action text-center">
<form class="form-inline margin-clear">
<div class="form-group has-feedback">
<label class="sr-only" for="subscribe3">Email address</label>
<input type="email" class="form-control form-control-lg" id="subscribe3" placeholder="Enter email" name="subscribe3" required="">
<i class="fa fa-envelope form-control-feedback"></i>
</div>
<button type="submit" class="btn btn-lg btn-gray-transparent btn-animated margin-clear">Subscribe <i class="fa fa-send"></i></button>
</form>
</div>
</div>
</div>
PHP:
<?php
//checking if data has been entered
if(isset($_POST['subscribe3']) && !empty($_POST['subscribe3']))
{
$data = $_POST['subscribe3'];
} else {
header('location: index.html');
exit();
}
//setting up mysql details
$sql_server = 'localhost';
$sql_user = 'root';
$sql_pwd = '*PASSWORD*';
$sql_db = 'newsletter';
// USE A PREPARED STATEMENT LIKE SO FOR SAFETY
$mysqli = new mysqli($sql_server, $sql_user, $sql_pwd, $sql_db) or die($mysqli->error);
/* Make sure its an email */
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
$query = "INSERT IGNORE INTO email (emails)
VALUES (?)";
$stmt = $conn->prepare($query);
if($stmt){
$stmt->bind_param("s=",$data);
$stmt->execute();
$stmt->close();
$successmessage = "successfully inserted email";
}
//closing mysqli connection
$mysqli->close();
if(isset($_POST['submit'])){
echo $successmessage;
}
?>
**警告**:使用'mysqli'时,应该使用[参数化查询](http://php.net/manual/en/mysqli.quickstart.prepared -statements.php)和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)将用户数据添加到您的查询中。 **不要**使用字符串插值或连接来完成此操作,因为您创建了严重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**将'$ _POST','$ _GET'或**任何**用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 – tadman
@tadman我对此很新,我会说你说的一半是有道理的。无论如何,你可以告诉我如何实施/解决这个问题吗? – Binary111
这就是为什么我在该评论中放置了一堆链接,每一个都在更详细的解释。 – tadman