【发布时间】:2015-11-14 04:41:37
【问题描述】:
我有一个表单页面,其中许多元素保存到我的数据库中的不同表和不同行中。为了尽量减少数据库调用,我想比较表单提交前后的数据,然后我可以编写一个只更新已更改数据的函数。为此,我将用于构建表单的数组保存在会话文件中:
$this->session->set_tempdata('form_values_'.$item['id'],json_encode($item), 86400);
在提交表单时,我检索此数据并将其与 $_POST 进行比较:
$pre_post = json_decode($_SESSION['form_values_'.$_POST['id']], true);
除了少数有“。”的文本区域外,一切都很好。在我的测试数据中。出于某种原因,即使我没有更改数据,这些字段也会返回不相等。
这绝对是导致问题的时期,当我删除它时它工作正常。另一方面,还有其他文本区域的句点不会引起问题。
我认为这可能是 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;
}
}
有什么想法吗?
【问题讨论】:
-
您将数据与什么进行比较?你在会话中保存的 pre_post 和 $post 有什么区别?
-
对不起,我认为我的问题很清楚。 pre_post 是我用来使用数据库中的原始数据构建表单的数组。我将它与 $_POST 进行比较,即表单返回的内容。现在我只是在测试它并没有改变任何东西,所以一切都应该平等。然而,正如我所说,一些文本字段返回不相等。
-
好的,如果你不介意的话。您可以发布数据库中的数据和数据发布表单提交吗?这将有助于找出问题。
-
[note/154] => 650. 75, 38 -
很抱歉还没有添加该评论的意思,但这是给我带来问题的字段之一的示例。那是在表单提交之前从数组中复制的,下面是从 $_POST 复制的,[note/154] => 650. 75, 38
标签: php forms codeigniter serialization