2015-08-19 48 views
0

我正在爲通訊訂閱者撰寫HTML表單。到目前爲止形式通過在MySQL表獨特的subscriber_email領域和使用忽略重複的條目:這是使用PHP更新/插入記錄的正確方法嗎?

"INSERT IGNORE INTO newsletter_subscriber_popup (subscriber_name, subscriber_email) VALUES ('$subscriber_name', '$subscriber_email')";

我試圖改進形式,以便它更新其他字段時,電子郵件中已經存在表,如果電子郵件不存在,則它插入一條新記錄。對於我這樣做(到目前爲止,它的工作原理,但我覺得這是不這樣做正確的方法):當subscriber_email存在

//HTML form variables----------------------------------------------------// 
    $subscriber_name = mysql_real_escape_string($_POST['subscriber_name']); 
    $subscriber_email = mysql_real_escape_string($_POST['subscriber_email']);  

    //Try update into DB---------------------------------------------------------// 
    $sqlUpdate = 
      "UPDATE newsletter_subscriber_popup 
      SET subscriber_name = '$subscriber_name' 
      WHERE subscriber_email = '$subscriber_email'"; 

    if(!mysql_query($sqlUpdate)){ 
     //Insert into DB--------------------------------------------------------// 
     $sqlInsert = 
       "INSERT IGNORE INTO newsletter_subscriber_popup (subscriber_name, subscriber_email) 
       VALUES ('$subscriber_name', '$subscriber_email')"; 

     if(!mysql_query($sqlInsert)){ 
      die('Error: ' .mysql_error()); 
     } 
    } 

腳本工作以及更新等領域,但它失敗何時應該插入新的記錄。

編輯----------------------------

ON DUPLICATED密鑰更新就是我一直在尋找對於。當subscriber_email已存在時,腳本現在更新其他字段,並在subscriber_email不存在時插入新記錄。

//HTML form variables----------------------------------------------------// 
    $subscriber_name = mysql_real_escape_string($_POST['subscriber_name']); 
    $subscriber_email = mysql_real_escape_string($_POST['subscriber_email']);  

    //Insert into DB--------------------------------------------------------// 
    $sqlName = 
      "INSERT IGNORE INTO newsletter_subscriber_popup (subscriber_name, subscriber_email) 
      VALUES ('$subscriber_name', '$subscriber_email') 
      ON DUPLICATE KEY UPDATE subscriber_name = '$subscriber_name'"; 

    if(!mysql_query($sqlName)){ 
     die('Error: ' .mysql_error()); 
    } 

注:感謝所有有關SQL注入的建議,但問題不是安全問題。

+0

*「這是用PHP更新/插入記錄的正確方法嗎?」 - - 你試過了嗎?得到的錯誤? –

+0

您的問題標題與問題相矛盾。你應該使用的是準備好的語句,並刪除舊的'mysql_'的東西。 –

+0

[您的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

回答

0

首先,至少使用sqli而不是sql。如果你不確定來自用戶的輸入(例如電子郵件地址),那麼你可以使用電子郵件解析器http://php.net/manual/en/ref.mailparse.php(服務器端) 。驗證客戶端和服務器端的值是一種很好的做法。

請記住,表單條目的更多規則意味着更多的安全性,從而減少sql注入漏洞。

相關問題