分类目录归档:DEDECMS技巧

DEDECMS技巧

DEDECMS手机站如何AJAX提交数据到自定义表单

需求:手机站要点击某一个按钮后,弹出一个留言框,让用户留下姓名和电话号码

首先:后台自定义表单内添加表单,,多的不解释,字段添加好了后,下面是重点

根据: http://www.moke8.com/article-12258-1.html 这个教程修改你的自定义表单字段

比如我修改成了这样子.

《开始》

<div class=”phone_form”>
<form action=”javascript:;” 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″ />

<label>姓名:<input type=”text” id=”name” name=”name” value=”” /></label>
<label>手机:<input type=”text” id=”phone” name=”phone” value=”” /></label>

<input type=”hidden” name=”dede_fields” value=”name,textchar;phone,textchar;” />
<input type=”button” class=”submit fr” value=”提 交” onclick=”add_ajaxmessage()”/>
</form>
</div>
<script type=”text/javascript” src=”726/js/jquery-1.10.1.min.js”></script>
<script type=”text/javascript”>
function add_ajaxmessage(){
var name=document.getElementById(“name”);
var phone=document.getElementById(“phone”);

//定义变量接收上面表单每项的值和几个dede隐藏的input的值
var dataString = ‘name=’+ name.value + ‘&phone=’ + phone.value +’&action=post’+ ‘&diyid=1&do=2&dede_fields=name,textchar;phone,textchar’;
$.ajax({
type: “POST”,
url: “diy.php”, //提交到后台文件
data: dataString, //传值
success: function(data) {

alert(data);//成功打印PHP返回的值

}
});
return false;
}
</script>

 

《结束》

复制一份plus/diy.php到m(手机站根目录)下,然后修改

把这一行代码注释掉,,

alert显示提交成功后基本上就可以在后台看到提交的数据了

,至于后面的jquery加判断之类的..这些可以后期自己去加..

 

建材网站建设解决方案

如何定位和展现建材企业的网络形象?让消费者能有全面清晰的认知?

如何表现建材企业的特色和服务品质,以区别于同行,获得更多精准消费者的认可?

如何利用网站与线下销售相结合,将消费者带到网络上,享受更好的服务,并长期粘滞住消费者?

如何通过网络营销带来更多的消费者,形成大面积良好的口碑效应,让消费者安全放心地消费?

建材行业网站建设的服务范围

网站定位分析及建议,包含网站策划布局和结构,形成一整套解决方案;

建材行业网站的形象界面创意设计以及DIV前台结构布局;

系统性的架构策略、程序模块功能分析、运营维护策略、培训及知识转移计划等;

可延展性分析、可扩充性考虑以及系统稳定性分析报告;

网站运营维护方案。根据企业的管理模式,建议网站日常信息提供、审核、发布的一整套运转方案,协助企业高效管理网站;

网站的营销推广计划,网站运维策略及网站价值分析、盈利情况分析等等;

建材网站建设模块设置

项目 模块内容详情
个性化页面建设 建材网站的页面设计应符合产品及其客户的需求:建材的厚重,钢铁的银白,营销的热情等等。
建材网站可自由编辑物品上下架、装修、调价及促销广告。
检索 (1)产品搜索:能让顾客按关键字、类别、促销宝贝、品牌、价格区间来组合搜索宝贝。保证每个页面都有搜索条。
(2)热门搜索词管理:顾客在搜索条内输入信息时,自动弹出下拉菜单显示热门搜索词。可仿照淘宝。
相关商品 在某件商品描述底部或者侧栏展示相关产品推荐。
购物车 仿照淘宝购物车的方式。进入购物车后,可查看商品单价,可进行商品数量修改、删除。
商品上传 建材网站所有者可进行单件商品上传,也可进行批量上传,上传后的宝贝可进行管理。
商品分类 目前主营产品家居建材、日后产品类型会拓展。所以后台可进行商品大类的新增与管理,并能根据自己需要设置3级子分类。
支付方式 采用支付宝网银在线支付方式,网银在线自动转账支付业务。
流量统计 安装百度统计,cnzz等第三方平台统计代码方便查阅数据。
排行榜 前台首页显示“销售排行榜”和“点击排行版”,为顾客提供购买参考信息。
商品排序 在顾客浏览商品时,可根据价格、新品、销量、人气对商品进行排序。
在线客服 载入QQ做客服沟通工具(QQ必须具备管理员与店铺后台沟通,店铺与买方沟通,商城客服沟通)
订单管理 可浏览、修改、关闭订单的详细信息
库存提醒 可设置当某件商品库存低于多少件时,进行库存提醒。
缺货登记 缺货的商品系统能自动登记,也可人工手动添加。
促销模板 提供多种促销模板以保证建材网站各种促销活动,以下几个必须具备:送、券、礼、分、折、免
可拓展版块 可以随着业务的需求,拓展一些新的版块,如话费充值和买火车票、汽车票等。
友情链接 提供相关网站的友情链接。

dedecms(织梦)数据提交防csrf请求校验

前言
很多人喜欢直接在前端写ajax向后台指定地址提交数据,这样的做法过于草率,当时可能比较省事,后面付出的代价必定是惨痛的。笔者曾“有幸”经历过几次这样的跨域攻击,服务器遇到来自四面八方的海量请求,瞬间崩溃,日志显示请求来自不同国家和城市,这样一来常用的IP防火墙策略收效甚微。最终发现,服务器诸多接口安全性过低,省去了诸多校验,看似化繁为简,实则漏洞百出,攻击者在网上收集“肉鸡”,同时向指定服务器发送请求,致使服务器瘫痪。本文通过常用的dede(织梦)二次开发,
展示安全程度较高的前台数据提交策略,抛砖引玉,望读者日常开发过程勿避重就轻,忽视数据与信息安全。
环境与需求

  1. Centos 6.8
  2. LANMP
  3. DEDEV5.7
    4 .需求:使用dede创建自定义表单,前台向后台自定义表单提交数据。 代码实现
    切换到dede根目录 创建自定义标签解析文件 /include/taglib/csrftoken.lib.php

<?php
require_once(dirname(FILE).”/../helpers/cache.helper.php”);
if(!defined(‘DEDEINC’)){
exit(“Request Error!”);
}
/**

  • 自定义csrf_token生成标签
    *
  • @version $Id: csrftoken.lib.php 1 10:11 2018年1月9日
  • @package DedeCMS.Taglib
  • @copyright Copyright (c) 2007 – 2010, DesDev, Inc.
  • @author underclounds underclounds@gmail.com
  • @license http://help.dedecms.com/usersguide/license.html
  • @link http://www.dedecms.com
    */

/*>>dede>>
csrf签名标签
全局标记
V55,V56,V57
生成指定长度的随机加密字符串,每十分钟过期一次,用于前后台数据交互的验证 防止csrf攻击
{dede:csrftoken name=’token名 默认csrf’ len=’长度 默认12位’ exp=’过期时间 默认600秒’ /}

dede>>*/

function lib_csrftoken(&$ctag,&$refObj)
{
global $dsql,$envs;

//读取sessionId
@session_start();
$sessionId = session_id();

//属性处理
$attlist="name|csrf_token,len|12,exp|600";

//填充属性默认值
FillAttsDefault($ctag->CAttribute->Items,$attlist);

//读取标签属性
$name = $ctag -> GetAtt('name');
$len = (int) $ctag -> GetAtt('len');
$expires = (int) $ctag -> GetAtt('exp');

//读取缓存token
$cacheToken = GetCache($sessionId, $name);
if(empty($cacheToken)) {
    //生成token
    $token = randStr($len);

    //将token存入缓存
    $token = substr(sha1($token), 3, 32);
    SetCache($sessionId, $name, $token, $expires);
} else {
    $token = $cacheToken;
}
return $token;

}

/**

  • 生成随机字符串
  • @param $len int 长度
  • @return string
    */
    function randStr($len)
    {
    $str = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’;
    $token = ”;
    for($i=0; $i<$len; $i++)
    {
    $token .= $str[rand(0,strlen($str)-1)];
    }
    return $token;
    }
    创建处理ajax请求文件 /plus/ajaxOrder.php

<?php
//header(“Access-Control-Allow-Origin:*”);//释放跨域
require_once(dirname(FILE).”/../include/common.inc.php”);
require_once(dirname(FILE).”/../include/helpers/cache.helper.php”);
global $dsql;

/**

  • ———————————————
  • Class ajaxOrder
  • 处理ajax提交的用户预约信息
  • @name ajax
  • @package ajax
  • @author underclounds underclounds@gmail.com
  • / class ajaxOrder { /*
    • @var string 客户姓名
      */
      public $username;
    /**
    • @var string 预留手机
      */
      public $tel;
    /**
    • @var string 预约分类
      */
      public $sorts;
    /**
    • @var string 预留地址
      */
      public $address;
    /**
    • @var int 面积
      */
      public $area;
    /**
    • @var string 预约时间
      */
      public $ordertime;
    /**
    • @var object $dsql 全局数据库操作对象(dede)
      */
      private $dsql;
    /**
    • @var int 错误码
      */
      protected $errcode = 1000;
    /**
    • @var string 提示信息
      */
      protected $errmsg = ‘ok’;
    /**
    • 构造方法
    • ajax constructor.
      */
      public function __construct($dsql)
      {
      $this -> dsql = $dsql;
      if(!empty($_POST[‘username’])) {
      $this -> username = self::filter($_POST[‘username’]);
      }
      if(!empty($_POST[‘tel’])) {
      $this -> tel = self::filter($_POST[‘tel’]);
      }
      if(!empty($_POST[‘sorts’])) {
      $this -> sorts = self::filter($_POST[‘sorts’]);
      }
      if(!empty($_POST[‘address’])) {
      $this -> address = self::filter($_POST[‘address’]);
      }
      if(!empty($_POST[‘area’])) {
      $this -> area = self::filter($_POST[‘area’]);
      }
      if(!empty($_POST[‘ordertime’])) {
      $this -> ordertime = self::filter($_POST[‘ordertime’]);
      }
      }
    /**
    • 检查所有参数
    • @return bool
      */
      public function check()
      {
      if(!$this->checkToken()) return false;
      if(!$this->verifyName($this->username)) return false;
      if(!$this->verifyTel($this->tel)) return false;
      $this -> add();
      return true;
      }
    /**
    • 检查csrf_token是否正确
    • @return bool
      */
      private function checkToken()
      {
      @session_start();
      $sessionId = session_id();
      $token = $_SERVER[‘HTTP_X_CSRF_TOKEN’];
      $cacheToken = GetCache($sessionId,’csrf_token’);
      if(!empty($token) && !empty($cacheToken) && $token === $cacheToken) {
      return true;
      }
      $this -> errcode = 1005;
      $this -> errmsg = ‘非法请求’;
      return false;
      }
    /**
    • 写入预约数据
      */
      private function add()
      {
      $sql = “INSERT INTO #@__diyform1 (id, ifcheck, username, tel, sorts, address, area, ordertime) “;
      $sql .= “VALUES (NULL, 0, ‘$this->username’, ‘$this->tel’, ‘$this->sorts’, ‘$this->address’, ‘$this->area’, ‘$this->ordertime’); “;
      $this -> dsql->ExecuteNoneQuery($sql);
      }
    /**
    • 检验用户名
    • @param $username string 用户名
    • @return bool
      */
      public function verifyName($username)
      {
      if(!empty($username)) {
      return true;
      }
      $this -> errcode = 1001;
      $this -> errmsg = ‘用户名不能为空’;
      return false;
    } /**
    • 检验手机号码
    • @param $tel
    • @return bool
      */
      public function verifyTel($tel)
      {
      if(!empty($tel)) {
      if(!preg_match(‘/^1[345678]\d{9}$/’, $tel)) {
      $this -> errcode = 1003;
      $this -> errmsg = ‘手机号码格式不正确’;
      return false;
      }
      if($this->telExist($tel)) {
      $this -> errcode = 1004;
      $this -> errmsg = ‘手机号码已预约’;
      return false;
      }
      return true;
      }
      $this -> errcode = 1002;
      $this -> errmsg = ‘手机号码不能为空’;
      return false;
      }
    /**
    • 检验手机是否存在
    • @param $tel string 手机号
    • @return bool
      */
      public function telExist($tel)
      {
      $row = $this -> dsql ->GetOne(” SELECT id FROM #@__diyform1 WHERE tel = ‘{$tel}’ “);
      return !empty($row[‘id’]);
      }
    //以下可实现类似方法…….. /**
    • 一般过滤函数 防止注入
    • @param $str string 字符串
    • @return mixed
      */
      public static function filter($str)
      {
      return preg_replace(‘/(delete|insert|select|update|drop|truncate|where)/i’,””, $str);
      }
    public function returnMsg(){
    $errInfo = array(
    ‘errcode’ => $this -> errcode,
    ‘errmsg’ => $this -> errmsg
    );
    return json_encode($errInfo);
    }
    //魔术方法set
    public function __set($name, $value)
    {
    $this -> $name = $value;
    } //魔术方法get
    public function __get($name)
    {
    return $this -> $name;
    }
    }

$ajax = new ajaxOrder($dsql);
$ajax -> check();
echo $ajax -> returnMsg();

前端测试代码

    var token = "{dede:csrftoken exp='10'/}";
    $.ajax({
        url: 'http://localhost/plus/ajaxOrder.php',
        type: 'post',
        headers: {"X-CSRF-TOKEN" : token},
        data: data,
        dataType: 'json',
        success:function (e) {
            console.log(e);
        }
    });

失败返回示例如下:

成功返回示例如下:

注意:笔者使用缓存方式储存csrf_token 以SESSIONID作为识别用户标识,默认十分钟过期。
本文意在使用signature方式校验,故服务端除csrf_token外的校验写法较为简略,读者可自行扩展。

必看!必看!必看!解决登录阿里云官网显示:您的登录IP不在管理员配置的登录掩码范围内相关问题

有的朋友在租了阿里云的服务器ESC,在进行一系列的操作以后再次登录阿里云官网会显示如下界面:

在网上搜索了很多文章,发现最后还是不能成功登录,就在脑袋昏昏沉沉、苦于无奈的时候,突然看到这篇文章,您放心,解决问题的步骤我都帮您树梳理好了,跟着步骤来操作,问题迎刃而解。
原因分析:
无法登录是因为你在之前的操作中不小心输入了登录掩码,所以是登录掩码在作怪。
解决方案:
1.下载阿里云客户端APP(在阿里云官方网站底部)

我给大家把二维码粘出来了,可直接扫码下载,也可以在手机上的应用商店里面下载(如应用宝等)

2.app下载完成,输入账号+密码,登录成功(app中登录不需要掩码登录)

3.在阿里云APP首页中搜索:登录掩码

4.点击搜索出来的第一个相关文档:为云账号设置登录掩码

5.点击操作步骤中的第一项:云账号登录阿里云控制台

6.点击app右上角头像处(头像有点小,但可以点击)

7.点击倒数第二项,登录掩码中的修改(全部删除,保留为空白,点击保存)

8.这个时候我们再次来到PC端登录阿里云官网,输入账号和密码,显示如下界面,登录成功

————————————————

宝塔官方的教程使用的是阿里云的主账号 AccessKeyId。本文所讲述的是通过 RAM 访问管理新建子帐号 AccessKey,对官方教程进行一定的补充。

定时备份到 OSS 的好处:异地容灾备份,一旦机器出现毁灭性故障,网站数据不会丢失。
阿里云 OSS:提供高可用的数据储存服务。

宝塔官方的教程(https://www.bt.cn/bbs/thread-1061-1-1.html)使用的是阿里的主账号 Ac­cessKeyId。而主账号的 Ac­cessKeyId 具有账户的完全控制权限,如果泄露了有很大的安全问题。本文所讲述的是通过 RAM 访问管理新建子帐号 Ac­cessKey,对官方教程进行一定的补充。

一、阿里云的配置

登陆主账号,前往 OSS 资源管理平台。

1.1 新建一个Bucket

名称随便写,地域最好选择离你服务器最近的节点
Tips: 阿里 OSS 储存的费用:
1, 中国大陆无免费额度,按量计费,可以买储存包抵扣。
2, 中国大陆以外地区总共有 5GB 免费储存额度,超出部分按量计费,可以买储存包抵扣。
3, 只是用于备份的话不会产生公网流量的计费。
注意 OSS 的访问权限为私有,落地加密最好开启一下,聊胜于无也不收费。其他功能都不需要开启。

新建储存桶
新建储存桶
私有设置
私有设置

1.2 新建用户组

鼠标移动到头像处,在展开菜单中打开 RAM 访问管理页面:

访问管理的位置
访问管理的位置

新建一个用户组:

新建用户组
新建用户组

创建成功后点击新增用户组后面的“添加权限”,并在系统策略中搜索OSS,添加AliyunOSSFullAccessAliyunOSSReadOnlyAccess权限,并保存。

添加用户组权限
添加用户组权限

1.3 创建用户

创建一个用户,记得勾选编程访问!!!!

创建一个用户,记得勾选编程访问!!!!

创建一个用户,记得勾选编程访问!!!!

创建用户
创建用户

创建成功后保存展示的子用户AsscessKey IDAccessKey Secret到安全的地方,然后将这个用户添加到我们上一步新建的用户组中。如果您有多台服务器需要开启OSS备份功能,请为每一台机器建立一个子用户,并加入到我们建立的用户组中。

至此,阿里云的子用户和用户权限已经配置完成。

二、宝塔面板设置

1. 登陆宝塔面板,在软件管理中安装阿里云 OSS(免费)
2. 点击程序末尾的 “设置”,在如下页面填写您的 OSS 信息。
OSS 信息的填写可以参考宝塔官方教程,这里的 AccessKey ID 和 AccessKey Secret 我们填写刚才所记录的子用户密钥。
如果你有多台服务器需要备份,保存路径建议重命名一下,让每台路径不相同,方便后续的文件查找与管理。

3.最后在每台服务器的计划任务中配置定时备份网站到阿里云OSS即可。
建议的网站备份时间: 每三天一次,深夜进行。保留2份及以上。
建议的数据库备份时间:每天一次,深夜进行。保留5份及以上。

以后每当某台服务器不再计划使用时,您应该前往阿里云控制台停用相关的 Ac­cessKey 或者删除相关的子账户。这样做既能保证安全,也不会影响其他机器自动备份的进行。

通过宝塔面板计划任务自动逻辑备份 RDS MySQL 数据库到 OSS 对象存储

前言

今年双十一我在阿里云买了 ECS 云主机 2H4G3M(三年664.2大洋)和 RDS MySQL 5.7 数据库 1H1G(一年19.9大洋),当然这个活动价格是针对新用户的老用户与狗不得参与。

步骤

如何安装系统和宝塔面板我这里就不多说了,只简单介绍一下我 ECS 主机部署的系统环境:
主机系统:Centos 8.2
管理系统:宝塔面板 7.4.5
网站环境:Nginx 1.19.4 、PHP 7.4 、Redis 6.0.9 、本机无需安装 MySQL 数据库(因为有 RDS MySQL 5.7 数据库站库分离)

部署好主机环境以后把网站迁移到 ECS 新主机跑起来看看,速度还可以。因为主机带宽只有 3M 所以建议套一层 CDN 做个动静分离,把静态资源都缓存到 CDN 边缘节点就近访问。

再来说说如何定时自动备份网站数据,宝塔面板后台软件商店找到阿里云 OSS 插件安装,然后去阿里云官网开通 OSS 对象存储服务,用阿里云 OSS 的内网地域节点添加到宝塔面板刚刚安装到阿里云 OSS 插件中。

阿里云 OSS 插件设置截图

此时我们就可以通过宝塔面板计划任务创建自动备份任务了,但是由于我们的数据库是用的阿里云 RDS MySQL ,所以在宝塔计划任务中只能添加网站文件的备份无法添加 RDS 数据库的备份计划。这时我们需要一个脚本通过 ECS 主机内网把 RDS 数据库备份到 ECS 主机上,然后再通过阿里云 OSS 插件把备份好的 RDS 数据库存储到阿里云 OSSS。

dnf install git -y
cd /www/wwwroot/www.shuohi.com
git clone https://github.com/daniloaz/myphp-backup.git
cd /myphp-backupvi /myphp-backup.php //填写RDS数据库中的连接信息

我把脚本下载到了网站根目录中,编辑 /www/wwwroot/www.shuohi.com/myphp-backup/myphp-backup.php 文件,填写 RDS 数据库的相关信息。
注意:网站根目录下的 /myphp-backup 文件夹此时前台是可以访问的,我们需要设置网站配置文件添加 Nginx 规则禁止前台访问。

#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md|myphp-backup)
{
    return 404;
}

最后添加两条宝塔计划任务,时间相隔1分钟目的是为了先把 RDS 数据库备份到网站根目录 /myphp-backup 文件夹内,然后再打包备份网站整体数据并通过 ECS 内网上传到 OSS 存储。

宝塔面板计划任务截图
//第一条宝塔面板计划任务
//任务类型:Shell脚本,
//任务名称:备份数据库[www_shuohi_com]
//执行周期:每天 3时 59分
//脚本内容:
rm -rf /www/wwwroot/www.shuohi.com/myphp-backup/myphp-backup-files && cd /www/wwwroot/www.shuohi.com/myphp-backup; php myphp-backup.php
//第二条宝塔面板计划任务
//任务类型:备份网站
//任务名称:备份网站[www.shuohi.com]
//执行周期:每天 4时 00分
//备份网站:www.shuohi.com 备份到:阿里云OSS 保留最新:30份
//排除规则:可以不填写

最后

不要忘记修改站点配置文件禁止前台访问 /myphp-backup 文件夹,否则你打包的数据库是有可能被前台访客下载的,当然你也可以把 /myphp-backup 文件夹放在站点根目录之外的其他地方这样更安全。

Github项目地址:https://github.com/daniloaz/myphp-backup

织梦DedeCms防护XSS,sql注射,代码实行,文件包含等多种高危漏

由于织梦DEDE系统起因存在不少漏洞,造成大量织梦DEDE网站都攻击或者黑掉,所以DEDE模板之家给大伙共享一个本站正在采用的代码,这个代码可以有效防护XSS,sql注射,代码实行,文件包含等多种高危漏洞。
怎么使用:
1.将waf.php传到要包含的文件的目录(注:织梦DEDE放在data里面)
2.在页面中加入防护,有两种做法,依据状况二选一即可:

第一种:在所需要防护的页面加入代码就可以做到页面防注入、跨站require_once(‘waf.php’);假如想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php,来调用本代码。
常用php系统添加文件
PHPCMS V9 \phpcms\base.php
PHPWIND8.7 \data\sql_config.php
织梦CMS5.7 \data\common.inc.php
DiscuzX2 \config\config_global.php
WordPress \wp-config.php
Metinfo \include\head.php

第二种:在每一个文件最前加上代码具体做法是:
在php.ini中找到 auto_prepent_file并修改为:Automatically add files before or after any PHP document; auto_prepend_file = waf.php路径;

织梦网站避免XSS的方法之一

织梦网站避免XSS的方法之一主要是将用户所提供的内容输入输出进行过滤 ,可以利用下面这些

  1. 1.将waf.php传到要包含的文件的目录2.在页面中加入防护,有两种做法,根据情况二选一即可:
  2. a).在所需要防护的页面加入代码require_once(‘waf.php’);就可以做到页面防注入、跨站如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php中!添加require_once(‘waf.php’);来调用本代码常用php系统添加文件PHPCMS V9 \phpcms\base.phpPHPWIND8.7 \data\sql_config.phpDEDECMS5.7 \data\common.inc.phpDiscuzX2   \config\config_global.phpWordpress   \wp-config.phpMetinfo   \include\head.php
  3. b).在每个文件最前加上代码在php.ini中找到:Automatically add files before or after any PHP document.auto_prepend_file = waf.php路径;
  4. 织梦网站避免XSS的方法之一
  5. 织梦网站避免XSS的方法之一
  6. 4方案二:       避免XSS的方法之一主要是将用户所提供的内容输入输出进行过滤 ,可以利用下面这些函数对出现xss漏洞的参数进行过滤    PHP的htmlentities()或是htmlspecialchars()。    Python的cgi.escape()。    ASP的Server.HTMLEncode()。    ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library    Java的xssprotect(Open Source Library)。    Node.js的node-validator。

dedecms自定义表单加验证码

一,在后台左侧点击核心-》自定义表单-》增加新的自定义表单,按照提示填写信息,保存出来再点击编辑进去添加字段

二,自定义表单的调用,网上有调用方法,可是测试没成功,我就用自己的方法吧,点击表单的预览-》发布信息,会看到表单的模板,然后鼠标右键查看源代码,找到表单的代码,把关键的代码复制出来,就可以变成前端想要的表单了。

三,一般表单都需要验证字段和防止恶意提交

1)验证字段:

找到项目根目录下的plus/diy.php,在59行有个if(!empty($dede_fields))这个判断里面就可以添加我们验证字段的代码了,示例:

/验证表单字段/

             if ($nickname == '') {  //昵称不能为空

                ShowMsg('昵称不能为空','-1',0,1000);  

           exit;               

             } elseif (!preg_match("/^1[34578]\d{9}$/", $clientele_tell) ){
                ShowMsg('请输入正确的手机号','-1',0,1000);  

           exit;

             } elseif (!is_numeric($clientele_qq) ) {
                ShowMsg('请输入正确的QQ','-1',0,1000);  

           exit;

             } elseif ( empty($message) ) {
                ShowMsg('留言不能为空','-1',0,1000);  

           exit;

             }

2)验证码:

在前端验证码的地方添加代码:

再找到项目根目录下的plus/diy.php,在59行有个if(!empty($dede_fields))这个判断里面添加如下代码:

/添加验证码/

             $validate = empty($validate) ?'' : strtolower(trim($validate));           

             $svali =strtolower(GetCkVdValue());           

             if(($validate=='' || $validate!= $svali) && preg_match("/6/",$safe_gdopen)){                

             ResetVdValue();               

             ShowMsg('验证码不正确!','-1',0,1000);               

             exit;

             }

发现一个问题,在dedecms中自定义表单中字段英文名和系统中新添加的变量的英文名如果是一样的话,就会影响到表单中字段的提交,提交的表单中该字段的值是系统中新添加变量的值。

织梦系统安装好后,进入后台,出现Fatal error: Call to undefined function make_hash() in /dede/sys_info.php on line 201

织梦系统安装好后,进入后台,出现Fatal error: Call to undefined function make_hash() in /dede/sys_info.php on line 201

QQ截图20180621151609

一般出现这个问题是因为升级网站引起的。我们可以直接把错误提示这段代码删除或者屏蔽就行了。

打开/dede/sys_info.php,找到201行

QQ截图20180621151410

这里我们的make_hash前页加上//进行屏蔽。