我有一个表单页面,其中许多元素保存到我的数据库中的不同表和不同的行。为了最小化db调用,我想比较表单提交之前和之后的数据,然后我可以编写一个只更新已更改数据的函数。为此,我将保存用于在会话文件中构建表单的数组:
$this->session->set_tempdata('form_values_'.$item['id'],json_encode($item), 86400);
在表单提交时,我检索此数据并将其与$ _POST:
进行比较$pre_post = json_decode($_SESSION['form_values_'.$_POST['id']], true);
除了少数几个有"。在我的测试数据中。由于某些原因,即使我没有改变数据,这些字段也会变回不相等。
这绝对是导致问题的时期,当我删除它时它工作正常。另一方面,还有其他textareas,其周期不会导致问题。
我认为这可能是codeigniter的XSS过滤,但我删除了它并没有区别。
最初我使用序列化对数组进行编码以进行存储,但我切换到json_encode并再次没有区别。
以下是我用来比较值的代码:
$pre_post = json_decode($_SESSION['form_values_'.$_POST['id']], true);
$post = $this->security->xss_clean($_POST);
foreach ($post as $key => $value) {
if( !isset($pre_post[$key]) || trim($value)!=trim($pre_post[$key]) ){
$post_post[$key] = $value;
}
}
有什么想法吗?