2017-04-26 52 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