整理云盤的時候發(fā)現(xiàn)了學(xué)習(xí)的時候總結(jié)的一些php筆記惋啃,現(xiàn)在貼出來希望可以幫助到有需要的人原献。
1:Ajax寫法:
????$.post('admin.php?route=information/information/getPersonalInfo&token=<?php?echo?$token;??>',{_1_num:_1_num,_name:_name},function(data){
????????if(data==1){
????????????alert("暫無該用戶信息揍堕,請確認(rèn)輸入信息是否正確");
????????}else{
????????????var?_data?=?JSON.parse(data);?//json串轉(zhuǎn)化成js對象
????????????$("#text_certificate_number").html(_data.certificate_number);?//輸出js對象
????????????openCon();
????????}
????})
2:sql語句:
(一)distinct與group?by:
????distinct:返回唯一數(shù)據(jù)(去重今阳,比如兩條記錄的name相同堪唐,那麼返回的數(shù)據(jù)只有一條.distinct必須放在開頭)
????????如:select?distinct?name?from?A;(有兩個name都是lisa缕探,但是id不同)
????????返回:$back=array('tony','lisa','jerry');
????????如:select?distinct?name,?id?from?A;(有兩個name都是lisa愉棱,id也相同)
????????返回:$back=array('1'=>'tony','2'=>'Lisa','3'=>'jerry','3'=>'joe')
????GROUP?BY:
????????如:select?類別,?sum(數(shù)量)?as?數(shù)量之和?from?A?group?by?類別
????distinct和Group?by?區(qū)別:?
????????distinct只是將重復(fù)的行從結(jié)果中出去唆铐;?
????????group?by是按指定的列分組,一般這時在select中會用到聚合函數(shù)奔滑。?
????????distinct是把不同的記錄顯示出來艾岂。?
????????group?by是在查詢時先把紀(jì)錄按照類別分出來再查詢。?
????????group?by?必須在查詢結(jié)果中包含一個聚集函數(shù)朋其,而distinct不用王浴。
????例子1:假如有這么一個表:tab_1脆炎,它有兩個字段:xm、gzlb氓辣、je(姓名秒裕、工資類別、金額)钞啸,具體數(shù)據(jù)如下:?
????????xm```````gzlb`````````je?
????????-----------------------------------------?
????????張三`````養(yǎng)老金`````1000?
????????張三`````護理費`````200?
????????張三`````其他```````50?
????????.............?
????????李四`````養(yǎng)老金`````800?
????????李四`````其他```````50?
????????.............?
????????王五`````養(yǎng)老金`````900?
????????王五`````其他```````35?
????????可以看出每個人的工資都是按類別存放的几蜻,如果要返回合計的數(shù)據(jù),如:?
????????張三``````1250?
????????李四``````850?
????????王五``````935?
????????該怎么寫SQL呢体斩?初學(xué)者往往會這么寫:select?xm,?sum(je)?from?tab_1;但結(jié)果會是什么樣呢梭稚?結(jié)果將是:?
????????張三``````1250?
????????張三``````850?
????????張三``````935?
????????李四``````1250?
????????李四``````850?
????????李四``````935?
????????王五``````1250?
????????王五``````850?
????????王五``````935?
????????這是將全部字段都進行了所有的排列組合,即:笛卡爾積絮吵!要防止這個情況的發(fā)生哨毁,我們就可以用到group?by(分組)了!?
????????select?xm,?sum(je)?from?tab_1?group?by?xm;?
????????上面的SQL指定了用xm字段分組源武,這樣一來就返回出正確的結(jié)果了:?
????????張三``````1250?
????????李四``````850?
????????王五``````935?
????????====================================================================?
????例子2:假設(shè)又有這么一個表:tab_2扼褪,有這些字段:bh,?xm,?dah,……(編號、姓名粱栖、檔案號话浇、……),?
????????比如有這樣的情況:向該表錄入數(shù)據(jù)的人員非常不認(rèn)真闹究,重復(fù)錄入了不少數(shù)據(jù)幔崖,如:?
????????bh``````xm```````dah?
????????------------------------?
????????1```````張三`````10001?
????????2```````李四`````10002?
????????3```````王五`````10003?
????????………………?
????????84``````張三`````10001?
????????85``````趙六`````10004?
????????………………?
????????126`````王五`````10003?
????????可以看出張三、王五各重復(fù)了一次渣淤,假設(shè)這個表有幾萬條數(shù)據(jù)赏寇,那么要查出究竟有多少重復(fù)的,該怎么查呢价认??
????????select?bh,?xm,?dah?from?tab_2?group?by?xm,?sfzh?having?count(*)?>=?2;?
????????返回值為:?
????????bh``````xm```````dah?
????????------------------------?
????????1```````張三`````10001?
????????84``````張三`````10001?
????????3```````王五`````10003?
????????126`````王五`````10003?
????????解釋一下剛才的SQL:是從tab_2表中檢索編號嗅定、姓名、檔案號用踩,怎么檢索呢渠退?是用姓名、檔案號做為分組脐彩,分組的條件是記錄數(shù)大于等于2的碎乃。?
????這個比喻很形象:having?count()語句相對于group?by語句,就相當(dāng)于where語句相對于select語句?
(二)where與having:?
????Where:是一個約束聲明惠奸,使用Where來約束來之?dāng)?shù)據(jù)庫的數(shù)據(jù)梅誓,Where是在結(jié)果返回之前起作用的,且Where中不能使用聚合函數(shù)。
????Having:是一個過濾聲明梗掰,是在查詢返回結(jié)果集以后對查詢結(jié)果進行的過濾操作(對查詢出來的數(shù)據(jù)作爲(wèi)查詢條件)嵌言,在Having中可以使用聚合函數(shù)(SUM,COUNT,MAX,AVG...)
????如:Store_Information數(shù)據(jù)表中銷售總額超過1500美圓的商店的信息:
????SELECT?store_name,?SUM(sales)?FROM?Store_Information?GROUP?BY?store_name?HAVING?SUM(sales)?>?1500?
3:?jq直接給(font)標(biāo)簽寫樣式:?$("font").css('font-size','15px');
4:?前臺js頁面跳轉(zhuǎn):
????url?=?'index.php?route=information/information/getPersonalInfo&information_id=<?php?echo?$information_id;?>&_num='+_num;??
????location=url;
5://截取第一個斜杠前面的內(nèi)容可以這樣來:
????//echo?substr($str,0,strpos($str,?'/'))
????//截取第一個斜杠后面的內(nèi)容可以這樣來:
????//echo?substr($str,strpos($str,'/')+1);
6:?php?轉(zhuǎn)義html標(biāo)簽?反轉(zhuǎn)html標(biāo)簽:
????$a?=?'<strong>123</strong>';?????????//假設(shè)這是html代碼
????$b?=??htmlspecialchars($a);??????????//將<?>這些符號轉(zhuǎn)為<等等
????echo?htmlspecialchars_decode($b);????//這個是htmlspecialchars函數(shù)的反函數(shù)
????echo?html_entity_decode($a);?????????//這個也是htmlspecialchars的反函數(shù)
7:報錯或者沒有效果,使用F12調(diào)試方法:
????1:請求ajax沒有效果:Network——》XHR——》點擊文件愧怜,右側(cè)即展示網(wǎng)絡(luò)請求各種參數(shù)及報錯呀页,點擊preview即可查看報錯。
8:?jq獲取未來某天的日期
????function?tab(dayNum){
????????var?oDate?=?new?Date();??//獲取當(dāng)前時間
????????var?dayArr?=?'';?????
????????var?dayArr?=?new?Date(oDate.getFullYear(),oDate.getMonth(),oDate.getDate()?+?14);
????????return?dayArr;?
????}
????tab(7);?//獲取未來一周的日期
9:彈框樣式大全https://craftpip.github.io/jquery-confirm/
10:?bing方法給video對象綁定return?false的匿名方法拥坛。
????這樣的效果是禁止鼠標(biāo)右鍵的另存為功能蓬蝶。
????$('#video1').bind('contextmenu',function()?{?return?false;?});
11://求兩個時間相差月份
????//$date1="2019-01-18"
????//$date2="2018-12-01"
????function?getMonthNum(?$date1,?$date2,?$tags='-'?){
?????$date1?=?explode($tags,$date1);
?????$date2?=?explode($tags,$date2);
?????return?abs($date1[0]?-?$date2[0])?*?12?-?$date2[1]?+?abs($date1[1]);
????}
12:header重定向,延時2秒跳轉(zhuǎn):header("Refresh:2;url=www.baidu.com");
13:get和post方式請求接口詳細(xì)説明:
????https://www.cnblogs.com/CHEUNGKAMING/p/5717429.html
14:?上傳圖片
????$file_size=$_FILES['image']['size'];??
????if($file_size>5*1024*1024)?{??
????????echo?"文件過大猜惋,不能上傳大于5M的文件";??
????????exit();??
????}??
????$file_type=$_FILES['image']['type'];??
????//判斷是否上傳成功(是否使用post方式上傳)??
????if(is_uploaded_file($_FILES['image']['tmp_name']))?{??
????????//把文件轉(zhuǎn)存到你希望的目錄(不要使用copy函數(shù))??
????????$uploaded_file=$_FILES['image']['tmp_name'];??
????????//我們給每個用戶動態(tài)的創(chuàng)建一個文件夾??
????????$user_path=$_SERVER['DOCUMENT_ROOT']."/admin/view/plupload/image/".$username;
????????//?$_POST['image']?=?$username.;?
????????//判斷該用戶文件夾是否已經(jīng)有這個文件夾??
????????if(!file_exists($user_path))?{??
????????????mkdir($user_path);??
????????}??
????????//$move_to_file=$user_path."/".$_FILES['image']['name'];??
????????$file_true_name=$_FILES['image']['name'];??
????????$move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,"."));??
????????//echo?"$uploaded_file???$move_to_file";
????????$this->request->post['image']?=?strstr($move_to_file,?"admin/");
????????if(move_uploaded_file($uploaded_file,iconv("utf-8","gb2312",$move_to_file)))?{??
????????????echo?$_FILES['image']['name']."上傳成功";??
????????}?else?{??
????????????echo?"上傳失敗";??
????????}??
????}?else?{??
????????echo?"上傳失敗";??
????}
15:php特殊符號轉(zhuǎn)化?urldecode()和urlencode()丸氛。如“=”轉(zhuǎn)化“%3D”
16:html文本轉(zhuǎn)化純文本:html_entity_decode()
17:支付寶支付操作流程:https://blog.csdn.net/liangyouzi/article/details/84401936
18:js?字符串所有雙引號去掉:
????var?list?=?[0,"2",0,"1",0,0,0,0,0,0,0,0];
????list?=?list.replace(/\"/g,?"");
19:js阻止a標(biāo)簽空鏈接跳轉(zhuǎn):
????$('.k').click(function(e){
????????if(warning){
????????????stopDefault(e);?
????????}
????})
????function?stopDefault(?e?){?
???????if?(?e?&&?e.preventDefault?)?
??????????e.preventDefault();?
?????????else?
????????????window.event.returnValue?=?false;??
????}?
20:php+html頁面亂碼:header("Content-type:?text/html;?charset=utf-8");?
21:mysql字段類型為datetime的字段只查詢年月日:
$sql?.=?"?AND?date_format(cv.visit_create_date,'%Y-%m-%d')?<=?'".$filter_user_create_end."'";
22:SELECT?COUNT(*)??FROM?`表名`?WHERE?(?unix_timestamp(addtime)?>?1538362994?and?unix_timestamp(addtime)?<?1541041394??)?
23:?php查詢兩個字符串相同的部分
function?longest($str1?=''?,?$str2?=''){
????$start=0;
????$end=2;
????$len?=?strlen(?$str1?);
????//?找到兩個字符串完全相同的部分,寫入數(shù)組?$array
????for?($i=0;?$i?<?$len;?)?{
????????$strPart?=?substr($str1,?$start,?$end);
????????if(is_int(strpos(?$str2,?$strPart))){
????????????$array?[]?=?$strPart;
????????????$end++;
????????}else{
????????????$i++;
????????????$start?=?$i?-?1;
????????????$end?=?2;
????????}
????}
????//?找到?$array?中最長的字符串
????$longest?=?'';
????foreach?($array?as?$val)?{
????????if(?strlen($val)?>?strlen($longest)){
????????????$longest?=?$val;
????????}?
????}
????return?$longest;
}
echo?longest("Mark?Chui","Mark");
24:?TP在HTML頁面直接輸出設(shè)置的session的值<input?type="text"?value="{$Think.session.code}"?name="originator">
25:防止重復(fù)提交表單:
????(1)控制器設(shè)置一個隨機數(shù)
????????$code?=?mt_rand(0,1000000);??
????????session('code',$code);??
????(2)視圖用一個hidden類型的input框輸出session值,表單提交,控制器判斷是否存在session,若存在則提交表單,銷毀session;若不存在session著摔,則輸出錯誤消息
????????<input?type="hidden"?value="{$Think.session.code}"?name="originator">
????????if($_POST['originator']?==?session("code")){
????????????unset($_SESSION["code"]);
????????????$data=array(
????????????);
????????????.....
????????}else{
????????????echo?'請不要刷新本頁面或重復(fù)提交表單!';
????????}
26:?自動回滾到頁面頂部document.body.scrollTop?=?document.documentElement.scrollTop?=?0;
27:?jq獲取單選框的值?$("input[name='opennew']:checked").val()
28:jq判斷單選框是否有作出選擇$("input[name='ifshow']:checked").val()==null
29:jq組裝checked復(fù)選框選中的值
????var?catId?=?'';
????$("input[type='checkbox']:checked").each(function(i,?n){?
????????catId?+=?$(this).val()+',';
????});?
30:$time=time();
????$times=date('Y-01-01',$time);
????$nowTime?=?strtotime($times);?//今年年初的時間戳
????$lastTimes=strtotime("+1?years",$nowTime);??//明年年初的時間戳
31:?數(shù)組的值相加的函數(shù)array_sum();
32:用JS獲取地址欄參數(shù)的方法(超級簡單)
方法一:采用正則表達式獲取地址欄參數(shù):(?強烈推薦缓窜,既實用又方便!)
function?GetQueryString(name)
{
?????var?reg?=?new?RegExp("(^|&)"+?name?+"=([^&]*)(&|$)");
?????var?r?=?window.location.search.substr(1).match(reg);
?????if(r!=null)return??unescape(r[2]);?return?null;
}
//?調(diào)用方法
alert(GetQueryString("參數(shù)名1"));
alert(GetQueryString("參數(shù)名2"));
alert(GetQueryString("參數(shù)名3"));
33:TP控制器返回上一頁:echo?"<script>?alert('修改失敗');?history.go(-2);?</script>";
????TP控制器返回并刷新上一頁:echo?"<script>?location.href='".$_SERVER["HTTP_REFERER"]."';?</script>";
34:?//點擊取消某個操作
????$(".FirmTotalTxt5").click(function(){
????????if(window.confirm('確定取消嗎?')){
????????????var?_ids="{$goods_info['id']}";
????????????var?url="{:U('Pc/Goods/goods_details')}?id="+_ids;
????????????window.location.href=url;
????????}else{
????????????return?false;
????????}
????})
35:?隔幾秒刷新頁面
????function?sure(){
????????$('.footmark-delete').hide();
????????$('.clear_sucess').show();
????????setTimeout(function(){
????????????location.href=location;
????????????$('.clear_sucess').show();
????????},300)
????}
36:?獲取TP框架的方法名:ACTION_NAME
37:?用PHP寫一段代碼谍咆,實現(xiàn)不使用第3個變量禾锤,交換$a、$b的值摹察,$a恩掷、$b的初始值自己定。
????方法1:使用list函數(shù)(把數(shù)組中的值賦給一些變量)
????list($a,$b)?=?array($b,$a);??
????echo?$a.'-'.$b,'<br?/>';?
????方法2:
????$a?=?$a?.?'-'?.?$b;??
????$a?=?explode('-',$a);??
????$b?=?$a[0];??
????$a?=?$a[1];??
????echo?$a.'-'.$b,'<br?/>';
????//?方法3:??
????//?當(dāng)兩個變量都是數(shù)字的時候??
????$a?=?$a?+?$b;??
????$b?=?$a-$b;??
????$a?=?$a-$b;??
????echo?$a?.?'-'?.?$b,'<br?/>';
38:在PHP算法中%的使用:%指的是取余供嚎,既是取小于除數(shù)的余數(shù)
????$a=87%7=3;
49:?$str?=?cd;
????$$str="longdog";
????$$str.="ok";
????echo?$cd;
????$$str=$cd="longdog";
????$$str.=longdog."ok"=longdogok;
????$$str=$cd=longdogok;
????echo?longdogok;
40:?1+2+3+....+n分別用遞歸算法和迭代算法計算出來:
????遞歸(反復(fù)調(diào)用函數(shù)):
???????function?add($n){
????????????if($n==1){
????????????????return?1;
????????????}else{
????????????????return?$n+add($n-1);
????????????}
???????}
????迭代(按照某種順序逐個訪問列表中的每一項黄娘。比如,for語句):
????????function?add($n){
????????????$result?=?0;
????????????for($i=1;$i<$n+1;$i++){
????????????$result?+=?$i;
????????????}
????????????return?$result;
????????}
????$n=100;
????add($n);
41:
????php?獲取今日克滴、昨日逼争、上周、本月的起始時間戳和結(jié)束時間戳的方法
????php?獲取今日劝赔、昨日誓焦、上周、本月的起始時間戳和結(jié)束時間戳的方法望忆,主要使用到了?php?的時間函數(shù)?mktime罩阵。下面首先還是直奔主題以示例說明如何使用?mktime?獲取今日、昨日启摄、上周、本月的起始時間戳和結(jié)束時間戳幽钢,然后在介紹一下?mktime?函數(shù)作用和用法歉备。
????01??//php獲取今日開始時間戳和結(jié)束時間戳
????02??$beginToday=mktime(0,0,0,date('m'),date('d'),date('Y'));
????03??$endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
????04??//php獲取昨日起始時間戳和結(jié)束時間戳
????05??$beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y'));
????06??$endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
????07??//php獲取上周起始時間戳和結(jié)束時間戳
????08??$beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
????09??$endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
????10??//php獲取本月起始時間戳和結(jié)束時間戳
????11??$beginThismonth=mktime(0,0,0,date('m'),1,date('Y'));
????12??$endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));
????PHP?mktime()?函數(shù)用于返回一個日期的?Unix?時間戳。
????語法mktime(hour,minute,second,month,day,year,is_dst)
42:?通過ajax加載出來內(nèi)容匪燕,有點擊事件蕾羊,寫法:(每個li下面的tehui_car有點擊事件喧笔,通過ajax加載出來的商品也有,teihui_ul2是ul的class)
????$(".tehui_ul2").on('click','li?.tehui_car',function(){
????????var?_this?=?$(this);
????})
43:?TP框架vendor和library的區(qū)別:
????http://www.php.cn/php-weizijiaocheng-381642.html
????1.?手動加載第三方類庫
????????如果要加載第三方類庫龟再,包括不符合命名規(guī)范和后綴的類庫书闸,以及沒有使用命名空間或者命名空間和路徑不一致的類庫,或者你就是想手動加載類庫文件利凑,我們都可以通過手動導(dǎo)入的方式加載浆劲。
?????????我們可以使用import方法導(dǎo)入任何類庫,用法如:
????????//?導(dǎo)入Org類庫包?Library/Org/Util/Date.class.php類庫
????????import("Org.Util.Date");
????????//?導(dǎo)入Home模塊下面的?Application/Home/Util/UserUtil.class.php類庫
????????import("Home.Util.UserUtil");
????????//?導(dǎo)入當(dāng)前模塊下面的類庫?
????????import("@.Util.Array");
????????//?導(dǎo)入Vendor類庫包?Library/Vendor/Zend/Server.class.php
????????import('Vendor.Zend.Server');
????????對于import方法哀澈,系統(tǒng)會自動識別導(dǎo)入類庫文件的位置牌借,ThinkPHP可以自動識別的類庫包包括Think、Org割按、Com膨报、Behavior和Vendor包,以及Library目錄下面的子目錄适荣,如果你在Library目錄下面創(chuàng)建了一個Test子目錄现柠,并且創(chuàng)建了一個UserTest.class.php類庫,那么可以這樣導(dǎo)入:
????????import('Test.UserTest');
????????注意弛矛,如果你的類庫沒有使用命名空間定義的話够吩,實例化的時候需要加上根命名空間,例如:
????????public?funcion?index(){
????????????????import('Test.UserTest');
????????????????$test?=?new?\UserTest();
????????}
????2.?手動加載第三方普通.php后綴的原生文件
????????如果你的第三方類庫都放在Vendor目錄下面汪诉,并且都以.php為類文件后綴废恋,也沒用采用命名空間的話,那么可以使用系統(tǒng)內(nèi)置的Vendor函數(shù)簡化導(dǎo)入扒寄。?例如鱼鼓,我們把?Zend?\?Filter\Dir.php?放到?Vendor?目錄下面,這個時候?Dir?文件的路徑就是?Vendor\Zend\Filter\Dir.php该编,我們使用vendor?方法導(dǎo)入只需要使用:
????????public?function?index(){
????????????Vendor('Zend.Filter.Dir');
????????????$obj?=?new?\Dir();
????????}
????????另外:如果你的文件是a.b.php(b不是class)的話迄本,也可以這樣導(dǎo)入:Vendor('目錄.a#b');
????????實例化對象時候,以class?ab?{...}示例:new?\ab();
????3.?手動加載.php后綴且面向過程的文件?(面向過程就是文件里面沒有class aaa{},不用實例化操作课竣,直接使用)
????我們可以使用原生的語法:
????在控制器的方法里面使用:include_once?‘./ThinkPHP/Library/Vendor/lib/aaa.bbb.php’
44:關(guān)于public嘉赎、protected、private
public:公有于樟,可以在任何地方訪問
protected:自身及子類可以訪問
private:自身可以訪問
45:static 靜態(tài)變量公条,可以用self::加方法名或者變量名常量名,不能用于訪問類自身的屬性迂曲;
常量不能被賦值修改靶橱;
子類調(diào)用父類的屬性或者方法用parent::加方法名或者變量名常量名,訪問類常量時不用在常量名稱前面加$符號
static關(guān)鍵字用于訪問類自身定義的靜態(tài)成員,訪問靜態(tài)屬性時需要在屬性名前面添加$符號
46:const? 常量关霸,定義的常量必須是大寫英文字母
47:interface 定義一個接口传黄,接口里面的方法不可以實現(xiàn),接口之間的繼承用extends
48:接口和類之間的實現(xiàn)用implements
49:類實現(xiàn)了接口队寇,那么類必須實現(xiàn)接口里面定義的方法
50:abstract定義一個抽象類膘掰,抽象類里面定義的方法可以實現(xiàn)也可以不實現(xiàn)
51:子類繼承父類,如果父類有構(gòu)造方法子類沒有佳遣,那么自動執(zhí)行父類的構(gòu)造方法识埋;如果父類沒有構(gòu)造方法子類有,那么自動執(zhí)行子類構(gòu)造方法苍日;如果父類子類都有構(gòu)造方面惭聂,那么自動執(zhí)行子類構(gòu)造方法,如果需要執(zhí)行父類構(gòu)造方法需要使用parent::constract();
52:parent關(guān)鍵字可以訪問父類被重寫的成員