2017-04-26 19 views
2

我正在嘗試查看此場景的最佳方法 - 我想在用戶更新特定列時發送電子郵件警報。列名是代表。如果rep列未更新,請勿發送電子郵件。PHP MySQL - 檢查是否更新了特定列

這裏是我的嘗試:

<?php 

    include_once("connection.php"); 

    if(isset($_POST['update'])) { 
     $id = mysqli_real_escape_string($mysqli, $_POST['record_update']); 
     $record_update = mysqli_real_escape_string($mysqli, $_POST['record_update']); 
     $comment = mysqli_real_escape_string($mysqli, $_POST['comment']); 
     $status = mysqli_real_escape_string($mysqli, $_POST['status']); 
     $rt = mysqli_real_escape_string($mysqli, $_POST['rt']); 
     $reason = mysqli_real_escape_string($mysqli, $_POST['reason']); 
     $username = mysqli_real_escape_string($mysqli, $_POST['username']); 
     $rep = mysqli_real_escape_string($mysqli, $_POST['rep']); 


     if(empty($record_update) ) { 

     if(empty($record_update)) { 
      echo "<script type='text/javascript'>alert('Date/Time field is blank.');window.location.href='dashboard.php';</script>"; 
     } 


} else { 

     $result = mysqli_query($mysqli, "UPDATE employee SET record_update='$record_update', comment='$comment', status='$status', rt='$rt', reason='$reason', username='$username', rep='$rep' WHERE id='$id'"); 

     if($rep->(success() == true)) { 

     //do email 
     } 




    } 
?> 

所以會是這個樣子?

<?php 

    include_once("connection.php"); 

    if(isset($_POST['update'])) { 
     $id = mysqli_real_escape_string($mysqli, $_POST['record_update']); 
     $record_update = mysqli_real_escape_string($mysqli, $_POST['record_update']); 
     $comment = mysqli_real_escape_string($mysqli, $_POST['comment']); 
     $status = mysqli_real_escape_string($mysqli, $_POST['status']); 
     $rt = mysqli_real_escape_string($mysqli, $_POST['rt']); 
     $reason = mysqli_real_escape_string($mysqli, $_POST['reason']); 
     $username = mysqli_real_escape_string($mysqli, $_POST['username']); 
     $rep = mysqli_real_escape_string($mysqli, $_POST['rep']); 


     if(empty($record_update) ) { 

     if(empty($record_update)) { 
      echo "<script type='text/javascript'>alert('Date/Time field is blank.');window.location.href='dashboard.php';</script>"; 
     } 


} else { 


    $query = mysqli_query($mysqli, "SELECT rep FROM employee WHERE id='$id'"); 
    $row = $query->fetch_assoc()[0]; 
    if($row['rep'] != $_POST['rep']) { 
     //do nothing 
    } else { 
     //do email 
    } 



     $result = mysqli_query($mysqli, "UPDATE employee SET record_update='$record_update', comment='$comment', status='$status', rt='$rt', reason='$reason', username='$username', rep='$rep' WHERE id='$id'"); 






    } 

?>

+0

如果我沒記錯的話,MySQL裏面有所謂的「觸發器」。你可以設置一個觸發器來自動執行某些操作(比如更新記錄/列,甚至發送警報),現在我已經退休了,所以我對當前的趨勢有些過時,但我認爲你只需要一個名爲「updated 「設置爲true/false,將其設置爲false,然後讓觸發器將其設置爲true,您只需掃描真正的標誌,但我確定有其他人可能有更好的方法來做到這一點。:-) –

回答

2

選擇當前值,並將其與插入的值,如果它是不同的,它需要更新?

$query = mysqli_query($mysqli, "SELECT rep FROM employee WHERE id='$id'"); 
$row = $query->fetch_assoc()[0]; 
if($row['rep'] != $_POST['rep']) 
    $record_update = true; 
0

這可能不是最好的答案,但我想建議你拍攝第一插入表中的列的日期和時間,然後更新記錄他們和比較的時間或兩個時更新發生在相同的數據行上。

$query = mysqli_query($mysqli, "SELECT time, date FROM employee WHERE id='$id'"); 
$row = $query->fetch_assoc()[0]; 
if($row['time'] > $_POST['time'] || $row['date'] > $_POST['date']) 
    $record_update = true; 
+0

這不會工作,因爲讓他們說他們更新另一個領域,這將觸發電子郵件。有多個表單域,我只關心代表域是否更新。 –

+0

我認爲這可能會幫助你[鏈接](http://stackoverflow.com/questions/16723380/mysql-how-to-get-changes-of-last-update) – Sand