zoukankan      html  css  js  c++  java
  • m_Orchestrate learning system---二十九、什么情况下用数据库做配置字段,什么情况下用配置文件做配置

    m_Orchestrate learning system---二十九、什么情况下用数据库做配置字段,什么情况下用配置文件做配置

    一、总结

    一句话总结:

    配置文件 开发人员 重置
    数据库 非开发人员 重启

    配置文件做配置的特点:方便开发人员修改配置,服务器重启的话配置重置。

    数据库做配置的特点:方便非开发人员修改配置,服务器重启的话配置不会受到影响。

    1、填写表单(比如增加修改)后的history.go(-1)会跳到跳转页面,使后台的代码再执行一遍,这样会给用户及其不好的用户体验,如何解决?

    分治

    统一解决是不行的,history的后退机制就是这样,比如删除某一项功能,后台的delete函数和跳转页面组成的页面是客观存在的html页面,也客观存在于history对象的url中,因为我们无法查看history对象的url(出于安全),而且修改引擎(或者说框架)也不可行,那就只有每个页面单独指定,因为页面不多,倒是也负担不大,也就多了小几行代码。

    因为页面有限,所以可以分而治之。

    后退逻辑其实和面包屑逻辑是一样的

    2、thinkphp文件的多图上传之后,修改操作的陷阱?

    特判

    单图上传修改时候传回来的内容,称为“内容1“”

    1 ["a_content_pic2"] => array(5) {
    2     ["name"] => string(0) ""
    3     ["type"] => string(0) ""
    4     ["tmp_name"] => string(0) ""
    5     ["error"] => int(4)
    6     ["size"] => int(0)
    7   }

    多图上传修改时候传回来的内容,称为“内容2”

    ["a_content_pic3"] => array(5) {
        ["name"] => array(1) {
          [0] => string(0) ""
        }
        ["type"] => array(1) {
          [0] => string(0) ""
        }
        ["tmp_name"] => array(1) {
          [0] => string(0) ""
        }
        ["error"] => array(1) {
          [0] => int(4)
        }
        ["size"] => array(1) {
          [0] => int(0)
        }
      }

    我的问题是因为我的内容2做了特判,所以导致修改的时候修改别的会让内容2的内容没有

     1 foreach ($_FILES as $key=>$val){
     2     if($_FILES[$key]['tmp_name']){
     3         // 获取表单上传文件 例如上传了001.jpg
     4         $file = request()->file($key);
     5         if($key=='a_content_pic3'){//多图上传的情况
     6             //不用拆,官方文档有怎么用
     7             //修改的時候a_content_pic3有更新
     8             if($_FILES[$key]['size'][0]!=0){
     9                 $files=$file;
    10                 $data[$key]=null;
    11                 foreach($files as $perFile){
    12                     // 移动到框架应用根目录/public/uploads/ 目录下
    13                     $info = $perFile->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
    14                     $data[$key].='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName().',,';
    15                 }
    16             }
    17 
    18         }else{
    19             // 移动到框架应用根目录/public/uploads/ 目录下
    20             $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
    21             // 已经上传成功,我们要把文件的路径写进数据库
    22             $data[$key]='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName();
    23         }
    24     }
    25 }

    加第8行代码就做判断那就好了,那么第10行代码就不会在没有更新的情况下起作用了

    3、title和select标签的option标签中不支持如下方式的js实现的语言切换功能,如何解决?

    php

    用php就轻松搞定了

    1 <select data-am-selected="{btnSize: 'sm'}" name="a_type" id="student_note_type_choose">
    2     <option value="1" note_type="student_note_type_article">
    3         <span class="fry_language_item fry_language_hk">文章類</span><span class="fry_language_item fry_language_en">Article</span>
    4     </option>
    5 </select>

    对应的语言选择的js:

     1 <!--语言选择的js-->
     2 <script>
     3     function chooseLanguage(){
     4         $('.fry_language_item').hide();
     5         $('.fry_language_hk').show();
     6         var fry_language_type="fry_language_en";
     7         //console.log(fry_language_type);
     8         if(fry_language_type=="fry_language_hk"){
     9             $('.fry_language_item').hide();
    10             $('.fry_language_hk').show();
    11         }else if(fry_language_type=="fry_language_cn"){
    12             $('.fry_language_item').hide();
    13             $('.fry_language_cn').show();
    14         }else if(fry_language_type=="fry_language_en"){
    15             $('.fry_language_item').hide();
    16             $('.fry_language_en').show();
    17         }
    18     }
    19     chooseLanguage();
    20 </script>
    21 <!--END 语言选择的js-->

    select标签的option标签不支持这样方式的原因:span被覆盖了,或者被重写了,或者是不知名的操作

    4、网页源码查看js代码可能出现的误导是什么?

    动 静

    动态代码会被误当成静态代码

    会看不到php,从而形成一定的误导

    看到fry_language_type="fry_language_en"的时候,我会犹豫哪fry_language_type="fry_language_hk"的情况跑哪去了,

    然后疑惑

    所以看代码逻辑最好是看源码,而不是看网页源码,不过看网页源码可以知道这个页面到底运行了哪些代码

    源码:

    var fry_language_type="{$Think.session.fry_language_type}";

    网页源代码:

    var fry_language_type="fry_language_en";

    5、百度echart图表的toolbox和legend重叠问题?

    设置 位置

    toolbox:工具箱,每个图表最多仅有一个工具箱。(也就是样例中几个工具图标)

    legend:图例,每个图表最多仅有一个图例。(也就是样例中的最顶端的第几组 第几组的那个)

    最后效果:

    对应代码:

     1     option = {
     2         toolbox: {
     3             x:'center',
     4             y:'bottom',
     5             feature: {
     6                 dataView: {show: true, readOnly: false},
     7                 magicType: {show: true, type: ['line', 'bar']},
     8                 restore: {show: true,title:'restore'},
     9                 saveAsImage: {show: true}
    10             }
    11         },
    12     }

    主要是第3行第4行代码的作用

    对应的参考手册的位置:ECharts · Doc
    http://echarts.baidu.com/echarts2/doc/doc.html

    因为这些部分都是可以设置位置的,所以设置一下位置就OK了。

     

    6、thinkphp中配置文件如何使用?

    config 助手函数

    加载配置文件:

    $fry_config=Config::load(APP_PATH.'fry_config.php');
    dump($fry_config);die;

    APP_PATH对应的路径为:define('APP_PATH', __DIR__ . '/../application/');

    完全不用这样麻烦,

    读取配置和修改配置如下:

    echo config('配置参数1');
    config('配置参数','配置值');

    我们自己写的配置文件也会被系统默认读取:

    $fry_config=Config::load(APP_PATH.'fry_config.php');

    这样读取的配置不仅包括fry_config.php里面的,还包括系统默认自带的config.php里面的

    7、什么情况下用数据库做配置字段,什么情况下用配置文件做配置?

    配置文件 开发人员 重置
    数据库 非开发人员 重启

    配置文件做配置的特点:方便开发人员修改配置,服务器重启的话配置重置。

    数据库做配置的特点:方便非开发人员修改配置,服务器重启的话配置不会受到影响。

    8、php数据类型装换?

    目标类型 转换函数

    PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:

    • (int)、(integer):转换成整形
    • (float)、(double)、(real):转换成浮点型
    • (string):转换成字符串
    • (bool)、(boolean):转换成布尔类型
    • (array):转换成数组
    • (object):转换成对象

    PHP数据类型有三种转换方式:

    • 在要转换的变量之前加上用括号括起来的目标类型
    • 使用3个具体类型的转换函数,intval()、floatval()、strval()   【记忆:想转换的目的类型+val()】
    • 使用通用类型转换函数settype(mixed var,string type)

     第一种转换方式: (int)  (bool)  (float)  (string)  (array) (object)

     
    1. <?php   
    2. $num1=3.14;   
    3. $num2=(int)$num1;   
    4. var_dump($num1); //输出float(3.14)   
    5. var_dump($num2); //输出int(3)   
    6. ?>  

    第二种转换方式:  intval()  floatval()  strval()

     
    1. <?php   
    2. $str="123.9abc";   
    3. $int=intval($str);     //转换后数值:123   
    4. $float=floatval($str); //转换后数值:123.9   
    5. $str=strval($float);   //转换后字符串:"123.9"    
    6. ?>  

    第三种转换方式:  settype();

     
    1. <?php   
    2. $num4=12.8;   
    3. $flg=settype($num4,"int");   
    4. var_dump($flg);  //输出bool(true)   
    5. var_dump($num4); //输出int(12)   
    6. ?>

    9、数据库做更新操作时:“缺少更新条件”是哪种类型的错误?

    主键
    整表
    update 那一行

    a、没指明更新的主键

    b、内容没有发生更新(这种情况不会报“缺少更新条件”的错误)

     1     //是否允許不同小組之間互相查看
     2     public function canDifGroupCheckAns(){
     3         if(request()->isAjax()){
     4             $state=input('state');
     5             $fry_database_config=db('1config')->select();
     6 
     7             if($state){
     8                 $fry_database_config[0]['config_val']=strval(1);
     9             }else{
    10                 $fry_database_config[0]['config_val']=strval(2);
    11             }
    12             //die;
    13             $ans=db('1config')->update($fry_database_config);
    14             if($ans===false) return false;
    15             return true;
    16         }
    17     }

    这是整表更新,也就是多维数据,不能直接用update

    如果用update的话,那就更新你修改了的那一行

    $ans=db('1config')->update($fry_database_config[0]);

    10、配置文件变量的特点是什么?

    全局变量

    配置文件应该要是全局变量,这点无论是从thinkphp的配置的特点和工作方面的需求都可以发现

    所以数据库做配置的那部分,要给它整成全局的,用父级控制器base即可

    二、内容在总结中

     
  • 相关阅读:
    关于开发BugRaid的想法(2)
    杭州.net俱乐部第一次见面会情况
    关于Bug管理的过程
    关于开发BugRaid的想法(1)
    变态的VS2005 SP1
    vs2003 sp1 download url
    proxy software
    敏捷开发
    Enterprise Library文档
    ETL
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9907109.html
Copyright © 2011-2022 走看看