這是我的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