2014-09-02 17 views
0

我有一个表'用户'。用户可以修改其数据,例如。姓名,电子邮件。我想发送电子邮件给管理员,其中将包含有关修改数据的详细信息。如果用户只更改姓名和电子邮件地址,我只想抓取更改后的数据 - 在这种情况下只能输入姓名和电子邮件。显示在SQL查询中修改的数据

我的形式:

<form action="" method="post"> 
<input type="text" name="name"> 
<input type="text" name="surname"> 
<input type="text" name="email"> 
<input type="submit" value="Send"> 
</form> 

这可能是我能抢到这是在SQL查询修改的数据,不包括它们是相同的表,并在表格数据? 我有一个想法,我必须检查每个POST字段是相同的数据库,但我有更多的领域,这个解决方案是不那么好:

if($row['email'] !== $_POST['email']) { $changed_email = $_POST['email']; } 

if($row['name'] !== $_POST['name']) { $changed_name = $_POST['name']; } 

有任何其他的解决方案,我可以抢只修改数据? 我正在使用Zend框架和所有表字段被称为POST数据相同。

+0

表单由数据库填充,还是空白以允许用户输入信息?如果它已填充,则可以将信息存储在数组中,并对$ _POST与数据库信息进行foreach比较。如果表单留空以便用户填写更改的信息,只需检查$ _POST是否留空或者提供了更改。不幸的是,没有更多的信息,答案很难提供。 – nwolybug 2014-09-02 14:32:04

+0

表单由数据库中的数据填充。我存储用户发送的数组中的所有数据,并且我可以将oryginal数据存储在其他数组中,但是如何通过这种方式进行foreach?我必须对来自数据库的数据和来自用户的数据的foreach进行双重foreach?如何比较这两个数组?所有字段总是以表单形式发送,所以我必须识别哪些POST数据与数据库中的数据不同。 – dtx 2014-09-02 14:38:47

回答

0

您可以遍历您$_POST阵列,并使用该密钥来从数据库中的相应值:

foreach($_POST as $key => $value){ 
    if($value !== $row[$key]){ 
     $changed[$key] = $value; 
    } 
} 

然而,你可能想要排除在循环的某些字段(例如提交按钮):

$excluded_keys = array('submit', 'some_other_key'); 
foreach($_POST as $key => $value){ 
    if(in_array($key, $excluded_keys)) continue; 

    if($value !== $row[$key]){ 
     $changed[$key] = $value; 
    } 
}