微信扫一扫打赏支持

legend---六、php脚本变量的生命周期是怎样的

legend---六、php脚本变量的生命周期是怎样的

一、总结

一句话总结:应该是脚本结束变量的生命周期就完了

 

1、外部js找不到元素是怎么回事?

1 function myDailyTaskFinish() {
2     //alert('11');
3     $(document).ready(function () {
4         alert($('#my_dayly_task_unfinished_content').length);
5     });
6 
7 }
8 myDailyTaskFinish();

a、方法未执行 myDailyTaskFinish();

8 myDailyTaskFinish();

b、给循环中的元素加了id   比如完成任务的button

 

c、在开头引入的js,但是没有声明文档加载完再执行   $(document).ready(function () {

 

 

2、页面的部分循环的时候,外部调js不是很方便,传递的参数获取不到怎么办?

 1 /*每日任务完成*/
 2 function myDailyTaskFinish() {
 3     //alert('11');
 4     $(document).ready(function () {
 5         //alert($('#my_dayly_task_unfinished_content > ul > li > section > dl > dt > span > button').length);
 6         $('#my_dayly_task_unfinished_content > ul > li > section > dl > dt > span > button').click(function () {
 7             $.post("task/finishDailyTask", { tdr_id: "John", td_id: "2pm", dailyTaskDate: "2pm" },
 8                 function(data){
 9                     alert("Data Loaded: " + data);
10                 });
11             alert('111');
12         });
13     });
14 
15 }
16 //myDailyTaskFinish();

 

 1                             <h2>每日任务(未完成)</h2>
 2                             <span class="am-list-news-more am-fr">更多 &raquo;</span>
 3                         </a>
 4                     </div>
 5 
 6                     <div class="am-list-news-bd" id="my_dayly_task_unfinished_content">
 7                         <ul class="am-list">
 8                             {volist name="dailyTaskData" id="vo"}
 9                             <?php if($vo['t_d_r_isfinish']=='1') continue; ?>
10                             <li class="am-g am-list-item-dated">
11                                 <section data-am-widget="accordion" style="background: #fff;margin: 0px;box-shadow: none;" class="am-accordion am-accordion-default" data-am-accordion='{ "multiple": true }' >
12                                     <dl class="am-accordion-item" >
13                                         <dt class="am-accordion-title my_ellipsis"  style="padding-left:2px ;">
14                                             <a  class="am-list-item-hd " style="display:inline;"><span class="task_title">{$vo.t_day_name}</span></a>
15                                             <span class="am-list-date" style="float: right;margin-right: 0px;"><button class="task_finish" onclick="document.location='{:url(\'task/finishDailyTask\',array(\'tdr_id\'=>$vo.t_d_r_id,\'td_id\'=>$vo.t_d_r__id))}';event.stopPropagation();">完成任务</button></span>
16                                             <div class="am-cf"></div>
17                                         </dt>

 

 

3、为什么ajax可以传送数据给php(因为{})?

因为thinkphp的模板当中也是用{}来表示变量或者函数的

1 $.post("test.php", { name: "John", time: "2pm" },
2           function(data){
3           alert("Data Loaded: " + data);
4           });

 

4、thinkphp区间查询如何实现?

区间查询是一种同一字段多个查询条件的简化写法,例如:

Db::table('think_user')
    ->where('name',['like','thinkphp%'],['like','%thinkphp'])
    ->where('id',['>',0],['<>',10],'or')
    ->find();

生成的SQL语句为:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp' ) AND ( `id` > 0 OR `id` <> 10 ) LIMIT 1

区间查询的查询条件必须使用数组定义方式,支持所有的查询表达式。

 

 1     //1、获取n等级到m等级的什么类型的随机物品(多少数量的话我在外面多调用几次这个函数就好了)
 2     public function getRandomGoods($n,$m,$type){
 3         //在这个函数里面找到等级,找到类型
 4         //先连表,再选,就好了
 5         $shopGoodss=db('shop_goods')->alias('sg')->
 6         order('sg_classifyid,sg_gradeid desc,sg_id asc')->
 7         join('shop_classify sc','sg.sg_classifyid=sc.sc_id','LEFT')->
 8         join('shop_grade sgr','sg.sg_gradeid=sgr.sgr_id','LEFT')->
 9         where('sgr_num',['>',$n-1],['<',$m+1])->select();
10         dump($shopGoodss);die;
11     }

 

5、一组代码中的两个foreach循环变量重名会有莫名其妙的错误的(因为是指针)原因是什么?

 1     //3、根据数据库里面的一条博客记录生成题目
 2     public function createPerBlogQuestion($perBlogData){
 3         //dump($perBlogData);die;
 4         $question=[];
 5         $content=htmlspecialchars_decode($perBlogData['b_content']);
 6         $pattern='/<\/h2>(.*?)<h2>/us';
 7         preg_match_all($pattern, $content, $out);
 8         $summary=$out[1][0];
 9         //去掉总结总多余的<p>&nbsp;</p>
10         $pattern='/<p>&nbsp;<\/p>|\n+|\s+/us';
11         $summary=preg_replace($pattern,'', $summary);
12         //以<h3>和</h3>做分割,就能把这个拆成我们想要的那些段
13         $pattern='/<h3>|<\/h3>/us';
14         $summaryArr=preg_split($pattern, $summary);
15 
16         array_unshift($summaryArr,$perBlogData['b_title'].'?');
17         foreach ($summaryArr as $key => &$val){
18             if(!strlen($val)){
19                 $val=null;
20             }
21         }
22 
23         $summaryArr = array_diff($summaryArr, [null]);
24 
25         $summaryArr = array_values($summaryArr);
26 
27         $question_stem=[];
28         $question_ans=[];
29         $first=true;
30         foreach ($summaryArr as $key1=>$val1){
31             if($first){
32                 $question_stem[]=$val1;
33                 $first=false;
34             }else{
35                 $a=$val1[0];
36                 if(is_numeric($a)){
37                     $question_stem[]=$val1;
38                 }else{
39                     $question_ans[]=$val1;
40                 }
41             }
42         }
43 
44         dump($summaryArr);die;
45 
46     }

 

 

6、get方式用?链接参数的错误是什么?

get方式连接的话前面是?接参数,后面参数之间是&符号,不是全是?号

写成全是问号就错了

在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。如果网页中的<form>表单元素的method属性被设置为“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。
使用GET请求方式给WEB服务器传递参数的格式:
http://www.it315.org/counter.jsp?name=zhangsan&password=123
使用GET方式传送的数据量一般限制在1KB以下。

 

7、在写模型方法的时候循环里面可能有错怎么处理?

循环里面可以忽略中间某个数据的问题,不然后面的就不执行了

比如第9行的return false不要就比较好,但是,小逻辑里面,要及时return false,避免语法错误。

前面对后面有影响,前面出错,return false;

前面对后面没有影响,每个都是独立的一条, 那就没必要 return false;

 1     //2、做根据数据库里面的博客生成题目的操作,一段时间
 2     public function createQuestion_interval($str_begin,$str_end){
 3         $commonFunctionModel=new CommonFunction();
 4         $beginDateTS=$commonFunctionModel->getDateTimeStamp_date($str_begin);
 5         $endDateTS=$commonFunctionModel->getDateTimeStamp_date($str_end);
 6         $perdayTS=24*60*60;
 7         for($i=$beginDateTS;$i<=$endDateTS;$i+=$perdayTS){
 8             $ans=$this->createQuestion($i);
 9             //if($ans===false) return false;
10         }
11         return true;
12 
13     }

 

8、thinkphp的field排除字段如何实现?

字段排除

如果我希望获取排除数据表中的content字段(文本字段的值非常耗内存)之外的所有字段值,我们就可以使用field方法的排除功能,例如下面的方式就可以实现所说的功能:

Db::table('think_user')->field('content',true)->select();

则表示获取除了content之外的所有字段,要排除更多的字段也可以:

Db::table('think_user')->field('user_id,content',true)->select();
//或者用
Db::table('think_user')->field(['user_id','content'],true)->select();

 

 

9、从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)?

 1     //3、一个完完全全随机的从题库中获取题目的函数
 2     public function battle_entirely_random_question(){
 3         //可以先拼接数据,也可以后拼接数据,完全都ok的
 4         $data=Db::query("SELECT * FROM lg_blog_question  WHERE bq_id >= (((SELECT MAX(bq_id) FROM lg_blog_question)-(SELECT MIN(bq_id) FROM lg_blog_question)) * RAND() + (SELECT MIN(bq_id) FROM lg_blog_question))  LIMIT ?",[5]);
 5         //dump($data);die;
 6         if($data){
 7             shuffle($data);
 8             if(isset($data[0])){
 9                 $blogModle=new Blog();
10                 $blogData=$blogModle->getBlogDateById($data[0]['bq_b_id']);
11                 if(!$blogData) return false;
12                 $result=array_merge($data[0],$blogData);
13                 dump($result);die;
14                 //拼接
15                 return $data[0];
16             }
17             return false;
18         }else{
19             return false;
20         }
21     }

 

 

10、如何实现答题正确和答题错误的post方式提交?

用隐藏域传答题正确或者答题错误的参数,如果正确的话,就把错误隐藏域设置为disabled,那么错误隐藏域就传递不过去数据,只有正确隐藏域能够传递过去数据

1 <!--隐藏域-->
2 <input type="hidden" name="questionNum" value="{$questionNum}">
3 <input type="hidden" name="type" value="{$type}">
4 <input id="answer_right" type="hidden" name="answer" value="right">
5 <input id="answer_wrong" type="hidden" name="answer" value="wrong">
6 <!--END 隐藏域-->

 

 1 <script>
 2     /************1、提交表单:正确或者错误方式*************/
 3     function submitForm(){
 4         $('#battle_submit_wrong').click(function () {
 5             $('#answer_right').attr('disabled',true);
 6             $('form').submit();
 7         });
 8         $('#battle_submit_right').click(function () {
 9             $('#answer_wrong').attr('disabled',true);
10             $('form').submit();
11         });
12     }
13     submitForm();
14 
15 </script>

 

 

11、复杂控制器的业务逻辑是怎样的?

控制器再复杂的业务 逻辑,也就两块,申请业务逻辑和持续业务逻辑

这里是试题挑战:分为请求试题挑战  和  试题挑战页面下的下一题

  1 //1、战斗主页
  2     public function index(){
  3         /**************************1、向页面传递数据**************************/
  4         /**1、像页面分配任务分类数据**************************/
  5         $blogModel=new Blog();
  6         $blogCategorys=$blogModel->getBlogCategory();
  7         if($blogCategorys!==false) $this->assign('blogCategorys',$blogCategorys);
  8 
  9         return view();
 10     }
 11 
 12     //2、战斗的战斗页面,一题一题的来就好,根据传过来的参数选择题目
 13     public function battle(){
 14         $modelBattle=new ModelBattle();
 15 
 16         /**************************1、处理战斗请求页面的逻辑**************************/
 17         $question=null;
 18         $type=input('type');
 19         $questionNum=input('questionNum');
 20         if(!$questionNum) $questionNum=1;
 21         else $questionNum++;
 22 
 23         //dump($questionNum);die;
 24         //1、随机战斗--完全随机战斗
 25         if($type=='battle2_random'){
 26             //dump($type);die;
 27             $question=$modelBattle->battle_entirely_random_question();
 28 
 29         }else if($type=='battle2_right'){ //2、随机战斗--根据对的次数随机战斗
 30             $question=$modelBattle->battle_random_question();
 31 
 32         }else if($type=='today'){
 33             //取昨天的数据
 34             dump($type);die;
 35         }
 36         else if($type=='yesterday'){
 37             dump($type);die;
 38         }
 39         else if($type=='2daybefore'){
 40             dump($type);die;
 41         }
 42         else if($type=='3daybefore'){
 43             dump($type);die;
 44         }
 45         else if($type=='date'){
 46             $date=input('date');
 47             dump($date);die;
 48         }
 49         //5、向页面分配数据
 50         //dump($question);die;
 51         if($question){
 52             $question['bq_answer']=htmlspecialchars_decode($question['bq_answer']);
 53             $this->assign([
 54                 'question'=>$question,
 55                 'questionNum'=>$questionNum,
 56                 'type'=>$type
 57             ]);
 58         }else{
 59             $this->error('没有试题数据!!!');
 60         }
 61 
 62 
 63 
 64         /**************************2、处理具体战斗中的的逻辑**************************/
 65         if (request()->isPost()){
 66             //1、处理输入的数据
 67             $dataIn=input('post.');
 68             $question=null;
 69             $type=$dataIn['type'];
 70             $questionNum=$dataIn['questionNum']+1;
 71 
 72             //2、根据答题情况获取奖励
 73             $muid=base64_decode(session('muid'));
 74             $questionRewardModel=new QuestionReward();
 75             switch ($dataIn['answer']){
 76                 case 'right':
 77                     if (intval($dataIn['bq_diff'])>99){
 78                         $questionRewardModel->giveQuestionReward($muid,'right','blog',$dataIn['questionNum']);
 79                     }else{
 80                         $questionRewardModel->giveQuestionReward($muid,'right','blog_question',$dataIn['questionNum']);
 81                     }
 82                     break;
 83                 case 'wrong':
 84                     if (intval($dataIn['bq_diff'])>99){
 85                         $questionRewardModel->giveQuestionReward($muid,'wrong','blog',$dataIn['questionNum']);
 86                     }else{
 87                         $questionRewardModel->giveQuestionReward($muid,'wrong','blog_question',$dataIn['questionNum']);
 88                     }
 89                     break;
 90             }
 91             //dump($dataIn);die;
 92 
 93             //4、修改题目的作对做错情况,也就是做的次数情况
 94             $mapID['bq_id']=['=',$dataIn['bq_id']];
 95             $ans_bq_times=db('blog_question')->where($mapID)->setInc('bq_times');
 96             if(!$ans_bq_times) $this->error('更新做题次数失败!!');
 97             switch ($dataIn['answer']){
 98                 case 'right':
 99                     $ans_bq_right=db('blog_question')->where($mapID)->setInc('bq_right');
100                     if(!$ans_bq_right) $this->error('更新做题作对次数失败!!');
101                     break;
102                 case 'wrong':
103                     $ans_bq_wrong=db('blog_question')->where($mapID)->setInc('bq_wrong');
104                     if(!$ans_bq_wrong) $this->error('更新做题作错次数失败!!');
105                     break;
106             }
107 
108 
109             //3、处理提交上来的题目难度和博客分类
110             //3.1、处理提交上来的题目难度
111             $ans_bq_diff=db('blog_question')->where($mapID)->update(['bq_diff'=>$dataIn['bq_diff']]);
112             if($ans_bq_diff===false) $this->error('更新题目难度失败!!');
113             //dump($question);die;
114             //3.2、处理提交上来的博客分类
115             $mapBlogID['b_id']=['=',$dataIn['b_id']];
116             if(is_numeric($dataIn['b_c_id'])){
117                 $ans_b_c_id=db('blog')->where($mapBlogID)->update(['b_c_id'=>$dataIn['b_c_id']]);
118                 if($ans_b_c_id===false) $this->error('更新博客分类失败!!');
119             }
120 
121 
122 
123             /****-----------------------------------------------------------------------****/
124             //4、选择类型,根据类型向页面中返回题目
125             switch ($type){
126                 //可以判断是否已经做过,没做过的话就直接从数据库中取,做过的话就根据id取出做过的题目
127                 case 'battle2_random':
128                     $question=$modelBattle->battle_entirely_random_question();
129                     break;
130                 case 'battle2_right':
131                     $question=$modelBattle->battle_random_question();
132                     break;
133             }
134 
135             //5、向页面分配数据
136             $this->assign([
137                 'question'=>$question,
138                 'questionNum'=>$questionNum,
139                 'type'=>$type
140             ]);
141 
142 
143         }
144         //dump($_POST);die;
145 
146 
147         /**************************3、向战斗页面分配数据**************************/
148         //1、把博客分类数据传递到页面
149         $blogModel=new Blog();
150         $blogCategorys=$blogModel->getBlogCategory();
151         $this->assign('blogCategorys',$blogCategorys);
152 
153         return view();
154     }

 

12、如何知道当前做了多少个题?

用session肯定是可以的

用类的属性说不定也可以,

我采取的是把数据带到页面去,再从页面带回来,再带过去,以此重复,从而实现数据的持久

 

13、做题奖励数据怎么呈现到页面?

实现很简单,直接是把数据分配到页面就可以了

 

14、如何判断数组里面有没有值?

是用count(array)或者array.length来判断,而不是判断if(array)

就是要判断数组的长度

 

15、如何实现回到上一题?

把所有的访问过的题目都记忆在历史记录数组里面,所以就能够点击回到上一题

 

16、php脚本变量的注意事项是什么?

php中的脚本变量真的不好用,因为php一旦执行完全,里面的变量就被销毁了

 

17、抽奖界面如何将获奖物品的物品id传到后台?

用自定义属性获取物品id,用ajax将物品id传到后台

<div class="personal_goods_item" style="border-color:{$lottery_type1_low[$itemNum]['sgr_color']}; " goodsid="{$lottery_type1_low[$itemNum]['sg_id']}">
lottery.prezeGoodsId=$lottery.find(".lottery-unit-"+index).find(".personal_goods_item").attr('goodsid');

 

 

二、内容在总结中

 

posted @ 2018-09-11 00:45  范仁义  阅读(510)  评论(0)    收藏  举报