【发布时间】:2012-05-08 20:53:48
【问题描述】:
我正在构建一个 CMS,我正在尝试制作一个版本控制系统。
每次用户发布对现有网页的更新时,我都希望“版本控制”表保留已编辑字段的事件日志...
为此,我运行了一堆循环来检查用户刚刚填写的表单内容是否与点击提交之前网站上的内容不同...
因此,在我进行任何更新之前,我有以下代码(如果格式不正确,请道歉):
$sql = "select * from pages where ID =" .$_POST[id];
$rs = odbc_exec ($db, $sql);
$contents_original = odbc_result($rs,"content");
$title_original = odbc_result($rs,"title");
$pageorder_original = odbc_result($rs,"pageorder");
$parent_original = odbc_result($rs,"parent");
$footer_original = odbc_result($rs,"footer");
$updated_content = trim(stripslashes(strtolower(htmlentities($_POST['content']))));
$original = trim(strtolower($contents_original));
if ($updated_content == $original) {
$a = 'n';
} else {
$a = '<p>Contents changed.';
}
// 以此类推,从变量 $b - $e ... then:
$update = "$a $b $c $d $e";
然后是更新例程(所有这些都可以正常工作),并且在版本更新结束时,我将 $update 的内容插入到“事件”列中的 SQL 中(这也有效没问题)
但是!假设用户使用原始页面内容加载表单并单击提交...如果表单没有任何更改,则 $a 将 = ' ',因此,不应在“事件”列中输入任何内容。除了它不断输入“内容已更改”,事实上,它对每个字符串都这样做(例如标题字段、页脚字段等)!奇怪的是有 2 个整数输入,它们被事件菜单记录得很好。
如果我打印出 strlen(stripslashes(strtolower(htmlentities($_POST['content'])))) 和 strlen(strtolower($contents_original)) 它表明长度不同...
代码或数据库长度中没有任何内容会导致这种抑制。
输出来自: stripslashes(strtolower(stripcslashes($thenewcontent)))
章鱼你好!
欢迎来到乔纳森米。爱德华兹的平面设计页面。
无论您需要设计什么 - 商业网站、乐队徽标,应有尽有 - 我有能力为您提供创意和专业的产品。
点击下面的缩略图快速浏览:
要安排报价,或者如果您只是想谈谈想法,请给我发电子邮件至:contact[at]angry-octopus.co.uk 或致电 (0789)694-3379
输出自 stripslashes(strtolower(html_entity_decode($contents_original)))
章鱼你好!
欢迎来到乔纳森米。爱德华兹的平面设计页面。
无论您需要设计什么 - 商业网站、乐队徽标,应有尽有 - 我有能力为您提供创意和专业的产品。
点击下面的缩略图快速浏览:
要安排报价,或者如果您只是想谈谈想法,请给我发电子邮件至:contact[at]angry-octopus.co.uk 或致电 (0789)694-3379
^^^^^^^^^^^^^^ 以上所有内容均从记事本 .TXT 中复制/粘贴。
【问题讨论】:
-
您的代码极易受到 sql 注入攻击
-
为什么不使用 firebug 来查看来回传递的实际消息?
-
它应该被隐藏和编码。它不在默认域页面上。