A-A+
dedecms会员中心文章有自定义字段不能编辑的错误修复
今日一个客户遇到如题的问题,于是下载了最新版的dedecms进行测试,结果很是令人遗憾哦。这里也算是织梦内容管理系统的一个bug了。
模拟问题先,在普通文章模型新增了一个字段,然后注册了测试账号进行发布文章和修改文章的测试,发布正常,但是测试就提示"数据校验不对,程序返回"的错误。
查看编辑页面源码,发现没有dede_fieldshash的input信息,导致$dede_fieldshash为空,如下的检测代码就被执行给出一个提示。
1 2 3 4 5 | if (empty($dede_fieldshash) || $dede_fieldshash != md5($dede_addonfields.$cfg_cookie_encode)) { showMsg('数据校验不对,程序返回', '-1'); exit(); } |
解决办法,修改member\inc\inc_archives_functions.php文件,将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /** * 载入自定义表单(用于编辑) * * @param string $fieldset * @param string $fieldValues * @param string $loadtype * @return string */ function PrintAutoFieldsEdit(&$fieldset, &$fieldValues, $loadtype='all') { $dtp = new DedeTagParse(); $dtp->SetNameSpace("field","<",">"); $dtp->LoadSource($fieldset); $dede_addonfields = ""; if(is_array($dtp->CTags)) { foreach($dtp->CTags as $tid=>$ctag) { if($loadtype!='autofield' || ($loadtype=='autofield' && $ctag->GetAtt('autofield')==1) ) { $dede_addonfields .= ( $dede_addonfields=='' ? $ctag->GetName().",".$ctag->GetAtt('type') : ";".$ctag->GetName().",".$ctag->GetAtt('type') ); echo GetFormItemValueA($ctag,$fieldValues[$ctag->GetName()]); } } } echo "<input type='hidden' name='dede_addonfields' value=\"".$dede_addonfields."\">\r\n"; } |
改为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /** * 载入自定义表单(用于编辑) * @bug 修正编辑时候没有输出dede_fieldshash输入框 by uu6c.com * @param string $fieldset * @param string $fieldValues * @param string $loadtype * @return string */ function PrintAutoFieldsEdit(&$fieldset, &$fieldValues, $loadtype='all') { global $cfg_cookie_encode; $dtp = new DedeTagParse(); $dtp->SetNameSpace("field","<",">"); $dtp->LoadSource($fieldset); $dede_addonfields = ""; if(is_array($dtp->CTags)) { foreach($dtp->CTags as $tid=>$ctag) { if($loadtype!='autofield' || ($loadtype=='autofield' && $ctag->GetAtt('autofield')==1) ) { $dede_addonfields .= ( $dede_addonfields=='' ? $ctag->GetName().",".$ctag->GetAtt('type') : ";".$ctag->GetName().",".$ctag->GetAtt('type') ); echo GetFormItemValueA($ctag,$fieldValues[$ctag->GetName()]); } } } echo "<input type='hidden' name='dede_addonfields' value=\"".$dede_addonfields."\">\r\n"; echo "<input type=\"hidden\" name=\"dede_fieldshash\" value=\"".md5($dede_addonfields.$cfg_cookie_encode)."\" />"; } |
本以为到此为止,奈何编辑提交还是提示错误"提交表单同系统配置不相符,请重新提交",打开文件member\article_edit.php,找到
1 2 3 4 5 6 7 8 | // 这里对前台提交的附加数据进行一次校验 $fontiterm = PrintAutoFieldsAdd($cInfos['fieldset'],'autofield', FALSE); if ($fontiterm != $inadd_f) { ShowMsg("提交表单同系统配置不相符,请重新提交!", "-1"); exit(); } |
将上面的代码删除就可以了,我打印了$fontiterm和$inadd_f,$inadd_f是带有用户输入值的,这两个变量不能直接去判断相等的,很显然这是一个比较低级的bug。
文章来源:http://www.uu6c.com/document/33.html
布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏