当前位置: 首页 >> 常见问题 >> phpcms v9表单向导如何加验证码 防止恶意提交 >> 正文

phpcms v9表单向导如何加验证码 防止恶意提交

2015年05月06日 20:28:46    作者:zoulinss    分类:常见问题     评论(0)

    phpcms表单想到比较简单,所以没有加入验证码的功能。网上的类似教程又大多数不准确。所以嘉绵之恋亲自测试了一下,发现下面的方法是可用的。希望对有需求的朋友们有所帮助。

1、首先是调用表单的页面加入验证码。表单js调用模版默认的是 \phpcms\templates\default\formguide\show_js.html.

在该文件里面找到这行代码,大概在23行


<tr>
      <th width="80">{if $info['star']} <font color="red">*</font>{/if} {$info['name']}
      </th>
      <td>{$info['form']}  {$info['tips']}</td>
    </tr>
{/loop}

在下面加入一行代码。

<tr>
    <td style="text-align:right;">验证码</td>
    <td colspan="2"><span title="点击更换验证码" style=" cursor:pointer;"><input type="text" id="code" name="code" size="8" class="input-text">{form::checkcode('code_img', '4', '14', 84, 24)}</span>请输入图片中的验证码</td>
</tr>


2、找到这个文件 \phpcms\modules\formguide\index.php


这个需要修改两处


1)在第三行找到这行代码。

defined('IN_PHPCMS') or exit('No permission resources.');
define('CACHE_MODEL_PATH',PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_model'.DIRECTORY_SEPARATOR.'caches_data'.DIRECTORY_SEPARATOR);

然后在后面加入下面两行代码

$session_storage = 'session_'.pc_base::load_config('system','session_storage');
pc_base::load_sys_class($session_storage);


2)找到下面这行代码

if (isset($_POST['dosubmit'])) {
$tablename = 'form_'.$r['tablename'];
$this->m_db->change_table($tablename);

然后在下面加入下面这段代码

if(!empty($_SESSION['code'])) {
   //判断验证码
   $code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER);
   if ($_SESSION['code'] != strtolower($code)) {
    showmessage(L('code_error'), HTTP_REFERER);
   }
  }

到此,phpcms表单验证码就添加好了。

不过这里有一个问题:当验证码输入错误时,表单虽然不能提交到后台,但也不会弹出任何提示。哪位大牛知道解决办法吗?求解!


2015.05.13日补充纠正:

上面说的不弹出任何提示不是代码有误,而是之前我把“message.html”文件改错了,重新还原后就能够正常弹出错误提示了。

转载请注明出处为“本文转载于『嘉绵之恋』原地址http://www.zl266.com/post/136.html

0分/0个投票

评论

发表评论   
*昵称邮箱网址