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');

 

 

二、内容在总结中

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值