2014-01-23 28 views
1

這是來自配置文件更新頁面;因此,如果一個人改變了他們的email2[email protected][email protected]我想email2_verified被重置爲unverified有沒有辦法在SQL更新聲明中添加PHP IF語句

我的代碼..

$updateSQL = sprintf("UPDATE user SET uname=%s,email=%s, email2=%s WHERE `uid`=%s && `pass_code`=%s", 
      GetSQLValueString($_POST['uname'], "text"), 
      GetSQLValueString($_POST['email'], "text"), 
      GetSQLValueString($_POST['email2'], "text"), 
      GetSQLValueString($_POST['uid'], "int"), 
      GetSQLValueString($password, "text")); 

我也有一個場email2_verified ;目標是..如果email2已經改變我想要它unverified; 有沒有辦法在sql語句中添加一條if語句,它可以像下面的代碼一樣工作..?

$updateSQL = sprintf("UPDATE user SET uname=%s,email=%s, email2=%s 
    WHERE `uid`=%s && `pass_code`=%s,email2_verified=%s", 


    if($_POST['email2']){ // **has not changed** 
    GetSQLValueString($_POST['uname'], "text"), 
    GetSQLValueString($_POST['email'], "text"), 
    }   

    if($_POST['email2']){ //**has changed**     
    GetSQLValueString("unverified","text"), 
    } 

    GetSQLValueString($_POST['email2'], "text"), 
    GetSQLValueString($_POST['uid'], "int"), 
    GetSQLValueString($password, "text")); 

我猜(最外行的方法是)我可能會創建一個更新語句之前運行和

if htmlentities($post['email2']) <> $row['email2'] 
      use update statement 1 
    else 
      use update statement 2 

select語句是最好的辦法還是有一個PHP函數我不知道可以在飛行中做到這一點?

+2

你的代碼格式非常糟糕:D –

+0

這個大膽的「改變」是什麼意思? –

+0

它的標準格式從dreamweaver ..我不是像大多數這裏贊成:) – user3229526

回答

1

你可以在MySQL中創建一個觸發器。

DELIMITER // 

CREATE TRIGGER detect_email_change BEFORE UPDATE ON user FOR EACH ROW 
    BEGIN 
    IF NEW.email2 != OLD.email2 THEN 
     SET NEW.email2_verified = "unverified"; 
    END IF; 
    END;// 

DELIMITER ; 

然後,您只需更新email2字段,觸發器將負責其餘部分。

2

您可以通過使用預處理語句來達到此目的。

意味着:你將創建一個帶有佔位符的查詢。然後,你可以寫這樣的事:大約聲明

$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)"); 

if(condition) { 
    $stmt->bind_param('sssd', $code, $language, $official, $percent); 
} else { 
    $stmt->bind_param('abc', dbc, $language2, $officia2l, $percent2); 
} 
$stmt->execute; 

檢查此鏈接更多的信息:

https://php.net/manual/de/mysqli-stmt.bind-param.php

0

只是做(我用你的代碼):

<?php 

    if ($_POST['email2']) { 
    // has changed 

    $sql = "UPDATE user SET uname=%s,email=%s, email2=%s " . 
      ",email2_verified=%s " . 
      "WHERE `uid`=%s && `pass_code`=%s"; 

    $updateSQL = sprintf(
     $sql, 
     GetSQLValueString($_POST['uname'], "text"), 
     GetSQLValueString($_POST['email'], "text"), 
     GetSQLValueString("unverified","text") 
     GetSQLValueString($_POST['email2'], "text"), 
     GetSQLValueString($_POST['uid'], "int"), 
     GetSQLValueString($password, "text") 
    ); 



    } else { 

    $sql = "UPDATE user SET uname=%s,email=%s, email2=%s " . 
      "WHERE `uid`=%s && `pass_code`=%s"; 

    $updateSQL = sprintf(
     $sql, 
     GetSQLValueString($_POST['uname'], "text"), 
     GetSQLValueString($_POST['email'], "text"), 
     GetSQLValueString($_POST['email2'], "text"), 
     GetSQLValueString($_POST['uid'], "int"), 
     GetSQLValueString($password, "text") 
    ); 

    } 

如果您需要SQL解決方案,請使用Kouber Saparev answer

相關問題