正在读取数据,页面载入中,请稍后...

织梦自定义表单提示数据校验不对的解决办法

织梦CMS建站教程,专业织梦仿站教程,织梦CMS高级篇教程,织梦建站基础入门到精通教程。织梦开发教程,写个不安套路出牌的教程,提交出现数据校验不对时,别人都教你对比数据校验,那些都是非常低级的织梦玩法。下面,教你写个一劳永逸的高端玩法。熟悉织梦的,用起来很简单,不太熟悉织梦的,或者是不会代码的,就能把小白整蒙圈。

教程开始

①、打开 /plus/diy.php 搜索

$diy = new diyform($diyid);

在它后面敲个回车,然后在它下面加入

$dede_fields = $diy->getForm2(true);

②、继续往下看到下面这段代码,把它注释或者删掉

if(!empty($dede_fields))
{
    if($dede_fieldshash != md5($dede_fields.$cfg_cookie_encode))
    {
        showMsg('数据校验不对,程序返回', '-1');
        exit();
    }
}

改为

/*
if(!empty($dede_fields))
{
    if($dede_fieldshash != md5($dede_fields.$cfg_cookie_encode))
    {
        showMsg('数据校验不对,程序返回', '-1');
        exit();
    }
}
*/

就是这段代码在作妖,删除或者注释后就不会提示数据校验不对了。

添加方法

之前,加了 getForm2() 方法,还没写代码呢。打开 /include/diyform.cls.php 搜索

getForm(

往下看,看到这个方法末尾的这段代码

    $formstring .= "<input type=\"hidden\" name=\"dede_fields\" value=\"".$formfields."\" />\n";
    $formstring .= "<input type=\"hidden\" name=\"dede_fieldshash\" value=\"".md5($formfields.$cfg_cookie_encode)."\" />";
    return $formstring;
}

改为

        //$formstring .= "<input type=\"hidden\" name=\"dede_fields\" value=\"".$formfields."\" />\n";
        //$formstring .= "<input type=\"hidden\" name=\"dede_fieldshash\" value=\"".md5($formfields.$cfg_cookie_encode)."\" />";
        return $formstring;
    }
function getForm2($type = 'post', $value = '', $admintype = 'diy') {
	$dtp = new DedeTagParse();
	$dtp->SetNameSpace("field", "<", ">");
	$dtp->LoadSource($this->info);
	$formstring = '';
	$formfields = '';
	$func = $type == 'post' ? 'GetFormItem' : 'GetFormItemValue';
	if (is_array($dtp->CTags)) {
		foreach ($dtp->CTags as $tagid => $tag) {
			if ($tag->GetAtt('autofield')) {
				if ($type == 'post') {
					$formstring .= $func($tag, $admintype);
				} else {
					$formstring .= $func($tag, dede_htmlspecialchars($value[$tag->GetName()], ENT_QUOTES), $admintype);
				}
				$formfields .= $formfields == '' ? $tag->GetName().','.$tag->GetAtt('type') : ';'.$tag->GetName().','.$tag->GetAtt('type');
			}
		}
	}
	$aformfields .= $formfields;
	return $aformfields;
}

完成了,修改非常简单,不需要啥技术,我就不放懒人包了。

调用标签

在织梦模板的调用标签中,像这种明显标注织梦特征的,专业人士一看就知道是织梦表单。
<input type="hidden" name="dede_fields" value="chenhu,text;dianhua,text" />
<input type="hidden" name="dede_fieldshash" value="9debc802be688e5794b8032ce4b5fe38" />

看下面是正确的调用标签方法。什么带字段列表,还带数据校验的,改完以后就根本不需要了。

<form action="/plus/diy.php" enctype="multipart/form-data" method="post">
  <input type="hidden" name="action" value="post" />
  <input type="hidden" name="diyid" value="1" />
  <input type="hidden" name="do" value="2" />
  
  <td align="right" valign="top">称呼:</td>
  <td><input type='text' name='chenhu' id='chenhu' style='width:250px'  class='intxt' value='' />
      
  <td align="right" valign="top">电话:</td>
  <td><input type='text' name='dianhua' id='dianhua' style='width:250px'  class='intxt' value='' />
      
  <input type="submit" name="submit" value="提 交" class='coolbg' />
  <input type="reset" name="reset" value="重 置" class='coolbg' />

</form>

改改名称,用AJAX的形式提交,完全看不出来是织梦了吧。啥?版权?织梦程序?织梦特征?织梦网站?不存在的。

本文结束

评论专区

发表评论

评论列表(无评论)