phpcms实现验证码以及异步提交表单数据

在phpcms网站中使用验证码我们要考虑前端模板页面中如何调用验证码后台程序中如何验证两个方面:

一、在模板中,调用验证码的代码如下:

1 <label for="code">验证码</label>
2 <input type="text" id="code" name="code" size="10">
3 {form::checkcode('code_img', '4', '14', 100, 30)}

注意,从标签中可知是使用了form类中的checkcode方法,那么就要确保此模板所在的控制器文件中已经调用了该类,调用方法如下:

1 pc_base::load_sys_class('form', '', 0);

此类文件位置/phpcms/libs/classes/form.class.php,你可以通过查看此文件中的checkcode方法参数注释来了解各参数所代表的意义。

二、在后端控制器文件php程序中,演示代码如下:

 1 defined('IN_PHPCMS') or exit('No permission resources.');
 2 pc_base::load_sys_class('form','', 0);
 3  
 4 class index {
 5     public function init(){
 6     if(isset($_POST['dosubmit'])){ //提交数据
 7         //启动session
 8         $session_storage = 'session_'.pc_base::load_config('system','session_storage');
 9         pc_base::load_sys_class($session_storage);
10         //验证码
11         if (($_SESSION['code'] != strtolower($_POST['code'])) || empty($_SESSION['code'])) {
12         showmessage("验证码错误");
13         } else {
14         $_SESSION['code'] = '';
15         }           
16             

这里我们注意三点:

  1. 第二行,不要忘记引入form类;

  2. 第7、8、9行,在读取session数据前先引入session存储配置与启动对应类(一般是mysql);

  3. 判断session的if条件即将表单填入的code值与session中的code值进行对比;

/**********************************上面纯属拷贝***********************************************/

下面拿方瞳科技官网作为例子:

在搜索表单的控制器,也就是搜索表单的action是这样写的:

 1 public function init() {
 2         if(isset($_GET['dosubmit'])){//提交数据
 3                 //启动session
 4                 $session_storage = 'session_'.pc_base::load_config('system','session_storage');
 5                 pc_base::load_sys_class($session_storage);
 6                 //验证码
 7                 if (($_SESSION['code'] != strtolower($_GET['code'])) || empty($_SESSION['code'])) {
 8                 // showmessage("验证码错误");
 9                     $back=array();
10                             $back[0]['jieguo']=0;
11                             $back[0]['back']='验证码错误';
12                             echo json_encode($back);die;
13                 } else {
14                 $_SESSION['code'] = '';
15             }
16         } 

/*****这个控制器一直走下去,全部验证通过,查询获取到的数据就是酱紫的(下面)*******

1 // include    template('search','list');
2             if($data){
3                 echo json_encode($data);die;
4                 }else{
5                     $back=array();
6                     $back[0]['jieguo']=0;
7                     $back[0]['back']='没找到您搜索的产品';
8                     echo json_encode($back);die;
9                 }

好像这儿呢不是ajaxreturn啊、、、、

前台页面是酱紫的,搜索表单:

 1 <form action="{APP_PATH}index.php" method="get" >
 2 
 3                     <title class="textshow">您可以通过序列号查询到产品的出产信息等说明</title>
 4 
 5                     <input type="hidden" name="m" value="search"/>
 6 
 7                     <input type="hidden" name="c" value="index"/>
 8 
 9                     <input type="hidden" name="a" value="init"/>
10 
11                     <input type="hidden" name="dosubmit" value="1"/>
12 
13                     <input type="hidden" name="typeid" value="56" id="typeid"/>
14 
15                     <input type="hidden" name="siteid" value="1" id="siteid"/>
16 
17                     <input type="text" name="q" id="q" class="xlh" placeholder="请输入商品序列号">
18 
19                     <span class="yzmbox">
20 
21                         <input type="text" class="yzma" name='code' placeholder="请输入验证码">
{form::checkcode('code_img', '4', '14', 100, 30)}</span> 22 23 <input type="button" class="cxun" value="查询"></form>

下面是javascript代码:

 1 <script>
 2 function closea(){
 3         $('#back').html('');
 4     }
 5 $('.cxun').click(function(){   
 6             var yzm=$('.yzma').val();
 7             var sear=$('#q').val();
 8                 $.ajax({
 9                         url:'{APP_PATH}index.php',
10                         data:{'m':'search','c':'index','a':'init','typeid':56,'siteid':1,'dosubmit':1,'q':sear,'code':yzm},
11                         type:'get', 
12                         dataType:'json',                    
13                         success:function(back){
14                             $('#code_img').click();
15                             if(back[0]['jieguo']==0){   
16                                 $('#back').html('');                    
17                                 alert(back[0]['back']);
18                             }else{
19                                 var back_html="<table><tbody><tr><th class='ccsj'>产品名称</th>
<th class='ccsj'>出产时间</th><th class='cpsm'>产品说明</th></tr>"; 20 $(back).each(function(k,v){ 21 var title=v.title; 22 var content=v.description; 23 var time=v.chanpinshengchanriqi; 24 back_html += ("<tr><td>"+title+"</td><td>"+time+"</td><td>"+content+"</td></tr>"); 25 }); 26 back_html +="<tr><td colspan='3'><a href='#back'>
<span class='closea' onclick="+"closea('.jgbox')>关闭</span></a></td></tr></tbody></table>"; 27 $('#back').html(back_html); 28 } 29 } 30 }); 31 }); 32 </script>

似乎在控制器之中返回json数据使用echo??

原文地址:https://www.cnblogs.com/xuweiqiang/p/5998720.html