织梦商品购买验证码如何设置与使用?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 织梦建站 正文

织梦默认的验证码功能主要集中在会员登录、评论、留言等地方,并没有直接为“购买”这个动作开启验证码,我们需要手动修改代码来实现。

织梦商品购买验证码
(图片来源网络,侵删)

这里提供两种主流的实现方法:

  1. 使用织梦自带的safe_check()函数(推荐,最简单)
  2. 手动调用验证码类(更灵活,但代码稍多)

准备工作(两种方法都需要)

在修改代码之前,请确保你的织梦系统已经开启了验证码功能。

  1. 登录织梦后台。
  2. 进入 系统 -> 系统基本参数 -> 安全设置
  3. 找到并开启以下选项:
    • 开启验证码:设置为“是”。
    • 开启会员验证码:设置为“是”。
  4. 点击“保存”。

使用 safe_check() 函数(最简单)

这个方法是织梦预留的通用安全检查接口,只需在提交订单的页面调用即可。

操作步骤:

  1. 找到并打开文件 在你的织梦根目录下,找到并编辑文件: /plus/carbuyaction.php

    织梦商品购买验证码
    (图片来源网络,侵删)

    这个文件是处理用户提交购买信息(即创建订单)的核心文件。

  2. 添加验证码检查代码 在文件的开头部分,找到 require_once(dirname(__FILE__)."/../include/common.inc.php"); 这一行代码。 在它后面,添加以下代码:

    // 安全验证码检查
    if(preg_match('/PHPSESSID/i', $_SERVER['HTTP_REFERER']) || preg_match('/PHPSESSID/i', $_SERVER['QUERY_STRING']))
    {
        ShowMsg('提交的来路不正确!', '-1');
        exit();
    }
    if($safe_check > 0)
    {
        if(empty($dopost))
        {
            $dopost = '';
        }
        if($safe_check == 2 && $dopost == 'save')
        {
            $safecode = empty($safecode) ? '' : strtolower(trim($safecode));
            $seccode = empty($seccode) ? '' : strtolower(trim($seccode));
            if($safecode != $seccode)
            {
                ShowMsg('验证码错误!', '-1');
                exit();
            }
        }
        else
        {
            if(empty($vdcode))
            {
                ShowMsg('请输入验证码!', '-1');
                exit();
            }
            $vdcode = empty($vdcode) ? '' : strtolower(trim($vdcode));
            $svali = GetCkVdValue();
            if($vdcode != $svali)
            {
                ShowMsg('验证码错误!', '-1');
                exit();
            }
        }
    }

    代码解释:

    • if($safe_check > 0):这个判断会检查后台“安全设置”中的“开启验证码”选项,如果关闭了,这里就不会执行。
    • if($safe_check == 2 && ...):这是针对织梦“万能表单”的验证逻辑,我们普通购买流程用不到,可以忽略。
    • else:这是核心部分,处理我们常见的验证码。
      • if(empty($vdcode)):检查用户是否提交了验证码。
      • $vdcode = strtolower(trim($vdcode));:获取用户输入的验证码并转为小写。
      • $svali = GetCkVdValue();:获取服务器端生成的正确验证码。
      • if($vdcode != $svali):比对用户输入和服务器端的验证码,如果不一致,则提示错误并退出。
  3. 在前台页面添加验证码输入框 现在后台检查有了,但用户在前台看不到验证码输入框,你需要在你网站的商品详情页的购买按钮附近,添加验证码。

    织梦商品购买验证码
    (图片来源网络,侵删)

    你需要修改的模板文件通常是: /templets/default/shopcar.htm (购物车页面) 或者商品详情页的购买表单,文件可能是: /templets/default/article_article.htm (如果购买功能集成在文章页) 或者一个专门的购买模板 /templets/default/buy.htm

    在购买表单 <form> 标签内部,合适的位置(提交订单”按钮上方)添加以下HTML代码:

    <div class="form-group">
        <label for="vdcode">验证码:</label>
        <div class="input-group">
            <input type="text" name="vdcode" id="vdcode" class="form-control text" style="width:120px;" />
            <img id="vdimgck" align="absmiddle" style="cursor:pointer;margin-left:5px;" onclick="this.src=this.src+'?'" src="/include/vdimgck.php" alt="看不清?点击更换" />
        </div>
    </div>

    代码解释:

    • name="vdcode":这里的 vdcode 必须和 carbuyaction.php 中检查的变量名 $vdcode 一致。
    • src="/include/vdimgck.php":这是织梦生成验证码图片的固定路径。
    • onclick="this.src=this.src+'?'":点击图片刷新验证码的JS代码。
  4. 完成 当用户点击“提交订单”时,系统会检查验证码,如果验证码为空或错误,就会提示“验证码错误!”,无法成功提交订单。


手动调用验证码类(更灵活)

如果你觉得方法一不够灵活,或者想自定义验证码的样式和行为,可以手动调用验证码类。

操作步骤:

  1. 修改 carbuyaction.php 文件 同样,打开 /plus/carbuyaction.php 文件,在引入公共文件后,添加手动验证码检查逻辑:

    // 引入验证码类
    require_once(DEDEINC.'/vdimgcode.class.php');
    // 获取用户输入的验证码
    $vdcode = isset($_POST['vdcode']) ? trim($_POST['vdcode']) : '';
    // 实例化验证码类
    $vdcodeHandler = new vdcode();
    // 校验验证码
    if(!$vdcodeHandler->check($vdcode))
    {
        ShowMsg('验证码错误,请重新输入!', '-1');
        exit();
    }

    代码解释:

    • require_once(DEDEINC.'/vdimgcode.class.php');:引入织梦的验证码处理类。
    • new vdcode():创建一个验证码对象。
    • $vdcodeHandler->check($vdcode):使用这个对象的 check 方法来验证用户输入,这个方法内部会处理大小写、空格等问题,比手动比对更健壮。
  2. 在前台页面添加验证码输入框 这一步和方法一完全相同,在你的购买表单中添加HTML代码来显示验证码图片和输入框。

    <div class="form-group">
        <label for="vdcode">验证码:</label>
        <div class="input-group">
            <input type="text" name="vdcode" id="vdcode" class="form-control text" style="width:120px;" />
            <img id="vdimgck" align="absmiddle" style="cursor:pointer;margin-left:5px;" onclick="this.src=this.src+'?'" src="/include/vdimgck.php" alt="看不清?点击更换" />
        </div>
    </div>

总结与建议

特性 方法一 (safe_check()) 方法二 (手动调用类)
实现难度 非常简单,只需粘贴代码 稍微复杂,需要理解类和方法
代码侵入性 较低,直接调用现有函数 较高,需要引入新文件并实例化对象
灵活性 较低,功能固定 ,可以轻松扩展,如修改验证码位数、复杂度等
推荐度 强烈推荐,对于99%的需求都足够 适合有特殊定制需求的开发者

对于绝大多数用户,我强烈推荐使用【方法一】,它简单、可靠,且符合织梦的设计逻辑,不容易出错。

重要提示:在进行任何文件修改前,请务必备份原始文件!以防修改出错导致网站无法正常运行,修改后,清除浏览器缓存再进行测试。

-- 展开阅读全文 --
头像
Visual C语言如何高效入门与实战应用?
« 上一篇 04-21
织梦自适应用什么技术实现?
下一篇 » 04-21

相关文章

取消
微信二维码
支付宝二维码

目录[+]