2017-06-14 75 views
1

我被迫使用PHP違反我的意願,所以我需要一些幫助。插入數據庫,然後發送電子郵件

谷歌搜索後,我有以下的基本代碼,我想知道是否正常。

這是一個前期推出「即將推出」頁面,輸入用戶的電子郵件地址,該地址被插入到一個MySQL數據庫,得到的回覆消息。這一切都發生在託管服務器上。

理想情況下,我想生成一些HTML與圖像等,併發送HTML電子郵件正文。有人有任何想法如何在PHP中做到這一點?

<?php 
    $servername = "localhost:3306"; 
    $username = "userblah"; 
    $password = "passblah"; 
    $dbname = "blah"; 

    // Create connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 

    $sql = "INSERT INTO prelaunch_users (email) 
    VALUES ($_GET['email'];)"; 

    if ($conn->query($sql) === TRUE) { 
     echo "New record created successfully"; 
    } else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

    $conn->close(); 

    $to  = $_GET['email']; 
    $subject = 'Welcome'; 
    $message = 'hello'; 
    $headers = 'From: [email protected]' . "\r\n" . 
     'Reply-To: [email protected]' . "\r\n" . 
     'X-Mailer: PHP/' . phpversion(); 

    mail($to, $subject, $message, $headers); 
?> 

我想我可能還需要託管郵件服務器的用戶名和密碼。

謝謝

保羅

+4

你很容易受到SQL注入,就需要解決這個問題。 – Enstage

+1

爲MySQL查詢使用預準備語句。這樣你就可以安全地應對大多數常見的SQL注入攻擊。 – CodeMonkey

+0

那麼你的問題是什麼?數據沒有插入或郵件不走? –

回答

0

您可以使用prpared statment象下面這樣: -

<?php 
    if(!empty(trim($_GET['email']))){ 
     $conn = new mysqli("localhost:3306", "userblah", "passblah", "blah"); 

     if ($conn->connect_error) { 
      die("Connection failed: " . $conn->connect_error); 
     } 

     if ($stmt = $conn->prepare("INSERT INTO prelaunch_users (email) VALUES (?)")) { 

      $stmt->bind_param("s",$_GET['email']); 

      if($stmt->execute()){ 
       // Add you mail code here 
      }else{ 
       echo "Error: ". $conn->error; 
      } 

      $stmt->close(); 
     } 
     $conn->close(); 
    }else{ 
     die('email is required'); 
    } 
?> 

以及發送HTML郵件與形象。請檢查下面的線程

Sending HTML Email With Images - PHP Tutorial

+0

user460114很高興爲您效勞 –

相關問題