<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 常見技巧目錄 [TOC=2,3] * * * * * - ### SQL技巧 * * * * * >[info]#### 解決方案 ~~~ 1)查找pnum字段中包含3或者9的記錄 使用函數find_in_set:SELECT * FROM test WHERE find_in_set('3',pnum) OR find_in_set('9',pnum); 使用正則REGEXP:SELECT * FROM test WHERE pnum REGEXP '(3|9)'; SELECT GROUP_CONCAT(send_no SEPARATOR \"','\") send_no_str FROM stock_receive_extend where FIND_IN_SET('{$params['express_track_no']}',express_track_no) LIMIT 1 ~~~ - ### AJAX跨域 * * * * * >[info]#### 解決方案 ~~~ //如果需要設置允許所有域名發起的跨域請求,可以使用通配符 * header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Methods: PUT,POST,GET,DELETE,OPTIONS"); header("Access-Control-Allow-Headers:Content-Type,Content-Length, Authorization, Accept,X-Requested-With"); if($_SERVER['REQUEST_METHOD']=='OPTIONS'){ header("HTTP/1.1 200 OK"); exit(); } ~~~ - ### 前面補0三位顯 * * * * * >[info]#### 解決方案1 ~~~ echo substr(strval(1+1000),2,2); ~~~ >[info]#### 測試結果 ~~~ 001 ~~~ >[info]#### 解決方案2 ~~~ echo str_pad(1,3,"0",STR_PAD_LEFT); ~~~ >[info]#### 測試結果 ~~~ 001 ~~~ - ### Thinkphp中在開啟緩存情況下解決局部不緩存 * * * * * >[info]#### 解決方案 ~~~ 1)采用ajax方法可實現局部不緩存問題 ~~~ - ### 多條件查詢頁面刷新或者返回查詢條件 * * * * * >[info]#### 解決方案1 ~~~ 1)將查詢條件URL保存到cookie中(推薦) setcookie("backurl",$_SERVER['REQUEST_URI']); $_COOKIE['backurl'] = $_SERVER['REQUEST_URI'];(也可以) 2)在前端獲取到cookie中的URL地址,當返回/刷新時用重定向到此URL地址 <?php if(isset($_COOKIE['backurl'])){ $backurl=$_COOKIE['backurl']; }else{ $backurl='/stocks/index'; } ?> 3)前段查詢條件,通過模板取參數值。 注:URL中的參數,是上一次使用的查詢條件 ~~~ >[info]#### 解決方案2 ~~~ 1)將查詢條件URL保存到session中(不建議,消耗服務器資源) setcookie("backurl",$_SERVER['REQUEST_URI']); $_COOKIE['backurl'] = $_SERVER['REQUEST_URI'];(也可以) 其余步驟同上。 ~~~ - ### 數據庫字段type為0和1時,0和空字符串混淆的處理方法 * * * * * >[info]#### 解決方案 ~~~ 1)控制器正常接收數據包括0,空,1 $params['type'] = addslashes($_REQUEST['type']); 2)在模型哪里判斷并拼接查詢條件(排除空字符串這種) if( $params['type']==='0'||$params['type']==='1'){ $where .= " AND `type`=".$params['type']; } ~~~ - ### 將數組轉換成字符串,并用單引號隔開(適用于where in 查詢條件) * * * * * >[info]#### 解決方案 ~~~ $serial_no 數組 $serial_no_str = "'".str_replace(",","','",implode(',', $serial_no))."'";//內部單號字符串 $serial_no_str = "'". implode("', '", $serial_no) ."'";;//內部單號字符串 ~~~ - ### 分批量的從數據庫循環讀取數據 * * * * * >[info]#### 解決方案 ~~~ <?php $read = ture; $limit = 0; $size = 10; while($read) { $sql = "select id,name from table limit {$limit},{$size}"; $data = $db->select($sql); //todo 你的業務邏輯 if(!data) { $read = false; break;數據為空,直接停止了循環 } $limit += $size ;每次獲取后面5條,直至數據查詢為空. } ~~~ - ### 判斷是否是AJAX * * * * * >[info]#### 解決方案 ~~~ <?php if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"){ // ajax 請求的處理方式 }else{ // 正常請求的處理方式 }; ~~~ - ### 判斷多個空格的變量是否為空 * * * * * >[info]#### 解決方案 ~~~ $a=' '; if(!empty($a)&&!ctype_space($a)){ echo "變量不為空"; }else echo "變量為空"; ~~~ - ### 判斷多維數組是否為空 * * * * * >[info]#### 解決方案 ~~~ $a=array(array(),array()); if(count(array_filter($a))>0){ echo "不為空"; }else echo "為空"; $sheetDatas = array_filter($sheetData, function ($value){ return array_filter($value); }); ~~~ - ### PHP執行是否限制 * * * * * >[info]#### 解決方案 ~~~ header("Content-type: text/html; charset=utf-8"); ignore_user_abort(true); set_time_limit(0); ini_set('memory_limit', '1024M'); ~~~ - ### PHP去除換行、空行、行首行尾空格逗號、中間中英文空格 * * * * * >[info]#### 解決方案 ~~~ str_replace(array(" "," ","\n","\r","\t"), array("","","","",""), rtrim(trim($str),',')); ~~~ - ### CI獲取某個表所有字段名 * * * * * >[info]#### 解決方案 ~~~ /** * @desc 獲取某個表所有字段名 * @author ityangs 2017-11-23 * @param $table string 表名 */ function get_table_all_column($table) { $sql = " select COLUMN_NAME as `tcolumn` from information_schema.COLUMNS where ". " table_name = '{$table}' and table_schema = '{$this->db->database}' "; $query = $this->db->query($sql); return array_column($query->result_array(),'tcolumn'); } ~~~ - ### SOAP遠程調用接口 * * * * * >[info]#### 解決方案 ~~~ 1)生成SOAP客戶端對象 $this->wsdl=''; /** * 生成SOAP對象 SoapClient * @date: 2017年12月14日 下午7:53:42 * @author: ityangs<ityangs@163.com> */ protected function getSoap(){ $mode = array( 'soap_version' => 'SOAP_1_1', // use soap 1.1 client 'trace' => 1, 'encoding'=>'UTF-8', 'connection_timeout'=>120 ); if(empty($this->soap)){ $this->soap = new SoapClient ($this->wsdl, $mode); } return $this->soap; } 2)訪問接口 $this->soap->__getFunctions()//獲取服務端方法名稱 $this->soap->__getTypes()//獲取服務端方法參數名 調用 try{ 方法一: $params = array('in0'=>json_encode($postData)); $responseData = $this->soap->__soapCall('queryTrackingData',array($params)); 方法二: $params = array('in0'=>json_encode($postData)); $responseData = $this->soap->__soapCall('queryTrackingData',array($params)); 方法三: $params = array('in0'=>json_encode($postData)); $responseData = $this->soap->queryTrackingData($params); }catch(soapFault $e){ throw new Exception($e->getMessage(),400); } ~~~ - ### 循環A-Z當超過26個字母時輸出AA,AB,AC * * * * * >[info]#### 解決方案 ~~~ for ($i = 0; $i < $templateTitleTotal; $i ++) { $y = ($i / 26); if ($y >= 1) { $y = intval($y); $column = chr($y + 64) . chr($i - $y * 26 + 65); } else { $column = chr($i + 65); } echo $column; } ~~~ - ### AJAX 導入文件 * * * * * >[info]#### 解決方案 ~~~ //導入按鈕 $('.import_btn').click(function(){ var formData = new FormData(); formData.append("logistics", document.getElementById("logistics").files[0]); var load=layer.load(1); $.ajax({ url: "/order/index/import-change-logistics", type: "POST", data: formData, dataType:"JSON", contentType: false, processData: false, success: function (data) { layer.close(load); layer.msg(data.msg,{icon:data.status}); if(data.status == '1'){ window.location.reload(); } } }); }) }); //對于flash不兼容情況 $("#upload_picture_btn").click(function () { var fileObj = document.getElementById("upload_picture").files[0]; // js 獲取文件對象 if (typeof (fileObj) == "undefined" || fileObj.size <= 0) { alert("請選擇圖片"); return; } var formFile = new FormData(); formFile.append("download", fileObj); //加入文件對象 $.ajax({ url: "{:U('File/uploadPicture',array('session_id'=>session_id()))}", data: formFile, type: "Post", dataType: "json", cache: false,//上傳文件無需緩存 processData: false,//用于對data參數進行序列化處理 這里必須false contentType: false, //必須 success: function (data) { console.log(data); if(data.status){ $("#upload_picture_name").val(data.name); $("#upload_picture_rel_name").val(data.savename); $("#upload_picture_url").val(data.path); src = data.url || '__ROOT__' + data.path $("#upload_picture_name").parent().find('.upload-img-box').html( '<div class="upload-pre-item"><img src="' + src + '"/></div>' ); } }, }); }); </script> 導入的文件信息: <pre>Array ( [logistics] => Array ( [name] => s.xlsx [type] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet [tmp_name] => C:\Windows\Temp\php6EBB.tmp [error] => 0 [size] => 8829 ) ) </pre> 驗證上傳文件: if (empty($_FILES['logistics']['name'])){ echo json_encode(array('status'=>0,'msg'=>'請選擇要導入的文件!')); exit; } $tmp_file = $_FILES['logistics'] ['tmp_name']; $file_types = explode ( ".", $_FILES['logistics']['name'] ); $file_type = $file_types [count( $file_types ) - 1]; /*判別是不是.xls文件,判別是不是excel文件*/ if (strtolower($file_type) != "xls"){ echo json_encode(array('status'=>0,'msg'=>'導入失敗!文件格式不正確!(請使用xls格式文件)')); exit; } /*設置上傳路徑*/ $savePath = '../public/upload/xlsx/'.date('Y').'/'.date('m').'/'.date('d').'/'; if ( !file_exists( $savePath ) ){ mkdir($savePath,0755,true); } /*以時間來命名上傳的文件*/ $str = date ( 'Ymdhis' ); $file_name = $str . "." . $file_type; if(!move_uploaded_file($tmp_file, $savePath . $file_name)){ echo json_encode(array('status'=>0,'msg'=>'上傳失敗!')); exit; } ~~~ - ### 保留搜索框查詢條件 * * * * * >[info]#### 解決方案 Cookie實現:(后端) ~~~ 1)將參數封裝成連接 $path = "/index.php?c=package&m=shipping_fee_abnormal_index"; $path = $this->get_page_path($path,$params); /** * 分頁設置(獲取地址) */ function get_page_path($path,$params){ if(!is_array($params) || empty($params)) return $path; foreach($params as $k=>$v){ if($v != '' && !is_array($v) ){ $path .= "&".$k."=".$v; }else if( $v != '' && is_array($v) ){ foreach( $v as $key=>$val ){ $path .= "&".$k."[]=".$val; } } } return $path; } 2)保存到cookie中 setcookie('shipping_fee_abnormal_index_url',$path, time()+3600, strtolower('/'.__CLASS__));//保存返回URL 3)獲取cookie鏈接地址 $backURL='/change_stock_express/change_stock'; if($_COOKIE['shipping_fee_abnormal_index_url']){ $backURL=$_COOKIE['shipping_fee_abnormal_index_url']; } ~~~ - ### PHP多維數組根據某個字段排序 * * * * * >[info]#### 解決方案 ~~~ $down_barcode_log_arr= Array ( [0] => Array ( [operator] => yj [operator_time] => 2018-01-18 18:13:21 [filepath] => uploads/ed_213505103_124barcode.zip ) [1] => Array ( [operator] => yj [operator_time] => 2018-01-18 18:13:18 [filepath] => uploads/ed_213505103_124barcode.zip ) ) //跟據操作時間降序排序 array_multisort(array_column($down_barcode_log_arr, 'operator_time'),SORT_DESC,$down_barcode_log_arr); ~~~ - ### 保留小數位并進位round/sprintf/number_format * * * * * >[info]#### 解決方案 ~~~ $num = 1012336644448.4567646846; //第一種:利用round()對浮點數進行四舍五入 echo round(448.4567646846,2); //448.46 echo "<br>"; echo round($num,2); //1012336644448.5 echo "<br>"; //第二種:利用sprintf格式化字符串 echo sprintf("%.3f",$num);//1,012,336,644,448.457 echo "<br>"; //第三種:利用千位分組來格式化數字的函數number_format() echo number_format($num, 3); //1,012,336,644,448.457 echo "<br>"; //或者如下 echo number_format($num, 3, '.', '|'); //1|012|336|644|448.457 echo "<br>"; echo number_format($num, 3, '.', ''); //1012336644448.457 echo "<br>"; echo number_format("2040",4); //2,040.0000 echo number_format("2040",4,".","");//2040.0000 ~~~ - ### JQuery遍歷json數組對象并彈出框顯示 * * * * * >[info]#### 解決方案 ~~~ $(function () { var tbody = ""; var obj = [{ "name": "項海軍", "password": "123456"}]; //下面使用each進行遍歷 $.each(obj, function (n, value) { var trs = ""; trs += "<tr><td>" + value.name + "</td> <td>" + value.password + "</td></tr>"; tbody += trs; }); $("#project").append(tbody); }); EG: <script type="text/javascript"> $(document).ready(function(){ //查看 $('.detail').click(function() { var id = $('#id').val(); $.ajax({ type: "POST", async:false, dataType:'json', url: "/update_compare_log/getDetailLog", data: "id="+id, success: function(data){ if(data.status==400){ alert(data.message); }else{ var obj=data.data; var table = '<table class="owners_table">'; table+='<tr><th>序號</th><th>更新字段</th><th>更新前</th><th>更新后</th></tr>'; $.each(obj, function (n, value) { table+="<tr><td>"+(++n)+"</td><td>"+value.field+"</td><td>"+value.before_val+"</td><td>"+value.after_val+"</td></tr>"; }); table+='</table>'; showStr(table); } } }); }) }); function showStr(str){ layer.open({ type: 1, skin: 'layui-layer-rim', //加上邊框 area: ['800px', '600px'], //寬高 content: str }); } </script> EG2: <style type="text/css"> .none { display: none; } </style> <td class="none id-js"><?php echo $val['id'];?></td> <script src="<?php echo base_url().'www/'.config_item('template');?>/js/layer-v1.7.0/jquery-1.7.2.js"></script> <script type="text/javascript" src="<?php echo base_url().'www/'.config_item('template');?>/js/layer/layer.js"></script> <script type="text/javascript"> //查看 $('.detail').mouseover(function() { var id = $(this).closest('tr').find('.id-js').text(); var remain_box_num = $(this).closest('tr').find('.detail').text(); if(remain_box_num==0){ return false; } $.ajax({ type: "POST", async:false, dataType:'json', url: "/loading_tasks/getDetailRemainBox", data: "id="+id, success: function(data){ if(data.status==400){ alert(data.message); }else{ var obj=data.data; var table = '<table class="owners_table">'; table+='<tr><th>序號</th><th>箱號</th>'; $.each(obj, function (n, value) { table+="<tr><td>"+(++n)+"</td><td>"+value.case_number+"</td></tr>"; }); table+='</table>'; showStr(table); } } }); }) function showStr(str){ layer.open({ type: 1, skin: '', //加上邊框 area: ['200px', '300px'], //寬高 content: str }); } </script> ~~~ - ### JS判斷是否是NULL * * * * * >[info]#### 解決方案 ~~~ var exp = null; if (!exp && typeof exp != "undefined" && exp != 0) { alert("is null"); } typeof exp != "undefined" 排除了 undefined; exp != 0 排除了數字零和 false。 更簡單的正確的方法: var exp = null; if (exp === null) { alert("is null"); } ~~~ - ### JS 過濾數組中的空值 * * * * * >[info]#### 解決方案 ~~~ /** * es6語法 * 過濾JS數組中的空值,假值等(es6語法) * @param array 需要過濾的數組 * @returns {Array} [] */ function filter_array(array) { return array.filter(item=>item); } ~~~ - ### CSS3垂直居中 * * * * * >[info]#### 解決方案 ~~~ 在CSS3垂直居中方法如下: display: -webkit-flex; display: flex; -webkit-align-items: center; align-items: center; -webkit-justify-content: center; justify-content: center; ~~~ - ### 先解碼后轉碼(utf-8) * * * * * >[info]#### 解決方案 ~~~ iconv("gb2312","utf-8",urldecode($val['name'])) ~~~ - ### JS: json對象與json字符串互轉 * * * * * >[info]#### 解決方案 ~~~ 例如: JSON字符串: var str1 = '{ "name": "xx", "sex": "man" }'; JSON對象: var obj = { "name": "xx", "sex": "man" }; 字符串轉對象: var obj = JSON.parse(str); //由JSON字符串轉換為JSON對象 對象轉字符串: var str = JSON.stringify(obj); //由JSON字符串轉換為JSON對象 ~~~ - ### 判斷當前瀏覽器是否是IE * * * * * >[info]#### 解決方案 ~~~ <!--[if IE 6]>僅IE6可識別<![endif]-->   <!--[if lte IE 6]> IE6及其以下版本可識別<![endif]-->   <!--[if lt IE 6]> IE6以下版本可識別<![endif]-->   <!--[if gte IE 6]> IE6及其以上版本可識別<![endif]-->   <!--[if gt IE 6]> IE6以上版本可識別<![endif]-->   <!--[if IE]> 所有的IE可識別<![endif]-->      <!--[if !IE]><!--> 除IE外都可識別<!--<![endif]--> ~~~ - ### preg_match正則匹配HTTP/HTTPS * * * * * >[info]#### 解決方案 ~~~ preg_match("/^(http:\/\/|https:\/\/).*$/",$url,$match); ~~~ - ### preg_replace去除所有空格 * * * * * >[info]#### 解決方案 ~~~ preg_replace('# #', '', $zipCode);//去除所有空格 ~~~ - ### mysql 數據庫中時間,取前后幾秒 幾分鐘 幾小時 幾天 * * * * * >[info]#### 解決方案 ~~~ 取當前時間: select current_timestamp; 輸出:2016-06-16 16:12:52 select now(); 輸出:2016-06-16 16:12:52 取當前時間的前一分鐘: select SUBDATE(now(),interval 60 second); 輸出:2016-06-16 16:11:52 取當前時間的下一分鐘: select ADDDATE(now(),interval 60 second); 輸出:2016-06-16 16:13:52 通過變化上面的單位。可以取前后 分鐘,小時,天的時間 取前一分鐘的時間: select SUBDATE(now(),interval 1 minute); 輸出:2016-06-16 16:16:38 取前一小時的時間: select SUBDATE(now(),interval 1 hour); 輸出:2016-06-16 15:17:38 取前一天的時間: select SUBDATE(now(),interval 1 day); 輸出:2016-06-15 16:17:38 ########################### 取后一分鐘的時間: select ADDDATE(now(),interval 1 minute); 輸出:2016-06-16 16:17:38 取后一小時的時間: select ADDDATE(now(),interval 1 hour); 輸出:2016-06-16 17:17:38 取后一天的時間: select ADDDATE(now(),interval 1 day); 輸出:2016-06-17 16:17:38 ~~~ - ### JS屏蔽右鍵保存下載 * * * * * >[info]#### 解決方案 ~~~ document.onkeydown=function(){ var e = window.event||arguments[0]; if(e.keyCode==123){ alert('請尊重勞動成果!www.xx.com'); return false; }else if((e.ctrlKey)&&(e.shiftKey)&&(e.keyCode==73)){ alert('請尊重勞動成果!www.xx.com'); return false; }else if((e.ctrlKey)&&(e.keyCode==85)){ alert('請尊重勞動成果!www.xx.com'); return false; }else if((e.ctrlKey)&&(e.keyCode==83)){ alert('請尊重勞動成果!www.xx.com'); return false; } } document.oncontextmenu=function(){ alert('請尊重勞動成果!www.xx.com'); return false; } ~~~ - ### 常見的js數組對象操作 * * * * * >[info]#### 解決方案 ~~~ 1)將數組對象中某一列轉化成數組 const tempTableArr=tempTableDatasArrObj.map(item=>item['goodId']); 2)forEach() 方法用于調用數組的每個元素,并將元素傳遞給回調函數。 let tableData=[]; searchTableDatas.forEach(data => { if(!tempTableArr.include(data['goodId'])){ tableData.push(data) } }); 3)驗證數組中是否存在該值 tempTableArr.include(data['goodId'])) 4) ES6中數組去重 const array = ['??', 1, 2, '??','??', 3]; Array.from(new Set(array)); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看