Chp5. 陣列 
             
            
                練習範例 
                範例5-1三種一維陣列 範例5-2陣列編號可以是中英文(foreach的二種格式) 範例5-3二維陣列 範例5-4陣列的各種函數(1)  
            
              範例5-5陣列的各種函數(2) 範例5-6陣列的排序 範例5-7陣列的各種函數(3) 範例5-8將一維陣列的定給另外一個二維陣列     
            
                範例5-9二維陣列的排序   
                  
                  
           
                    
          
              
            php把陣列轉成json,如何顯示中文,沒有亂碼 
            
              php把陣列轉成json,如何顯示中文,沒有亂碼
          
          
            1 
            範例5-1:三種一維陣列的使用
              隨機取得陣列的編號:array_rand() 
              範例5-1:三種一維陣列<?php$a[0] =..." ;$a[0]  = "Did you lose weight intentionally?妳有故意在減肥嗎?";
              echo "顯示第1句英文:<br/>";
              echo "顯示所有英文:<br/>";$a = array(,,,)" ; array(" Did you lose weight intentionally?妳有故意在減肥嗎?",
              echo "顯示第2句英文:<br/>";
              echo "顯示所有英文:<br/>"; $a = array(索引=>值,,,)" ;0=> "Did you lose weight intentionally?妳有故意在減肥嗎?",
              echo "顯示所有英文:<br/>";
              echo "<br/><br/>";array_rand()< br/>";array_rand($c); 結果範例 
                ☎成果範例2:結果範例 
                ☎程式碼:1.p5-1.php的程式碼 
                2.exp5-1.php的程式碼 
    
           
          
            2 
            範例5-2:陣列編號可以是中英文 $a['李大同'] =..."
               foreach的二種格式$v ){
              foreach($tel as $i=>$v ){
              範例5-2:三種一維陣列的文字索引index=>value值<?php
              echo "顯示第張花花同學電話:<br/>";
              echo "顯示所有同學電話:<br/>";
              echo "<br/><br/>";foreach第二種格式,foreach(陣列 as 索引編號 =>值){...} ";
              echo "顯示所有資料:<br/>";foreach($tel as $i=>$v ){
              ?>
                               
            
              結果範例 
              ☎成果範例2:結果範例 
              ☎程式碼:1.p5-2.php的程式碼 
              2.exp5-2.php的程式碼 
    
            
           
          
            3 
            範例5-3:二維陣列array( array("..",90), ) ); 
               範例5-3:顯示二維陣列foreach($stu as $v1){ 
              範例5-3:二維陣列<?php
              echo "顯示第1位同學的所有資料<br/>";
              ////////////////////////////////////////////////////////////
              //////////////////////////////////////////////////////
              ?>
              
              結果範例 
              ☎成果範例2:結果範例 
              ☎程式碼:1.p5-3.php的程式碼 
              2.exp5-3.php的程式碼 
    
           
          
            4 
            範例5-4:陣列的各種函數(1)count($s) 
              計算陣列的各元素總和 array_sum($s) 
              反轉後的陣列內容array_reverse($s) 
              把二維陣列拆解為一維陣列list($a1,$a2,$a3,$a4,$a5) = $stu 
              範例5-4:陣列的各種函數(1)<?php
              echo "//計算陣列內容數 count(陣列)<br/>";count($stu) ."人";
              echo "<br/><br/>"; array_sum($score) ."分";
              echo "<br/><br/>";array_reverse($score)  as $v) echo $v.", ";
              echo "<br/><br/>";list($a1,$a2,$a3,$a4,$a5) = $stu ;
              ?>
              
              
              結果範例 
              ☎成果範例2:結果範例 
              ☎程式碼:1.p5-4.php的程式碼 
              2.exp5-4.php的程式碼 
    
           
          
            5 
            範例5-5:陣列的各種函數(2)count($s) 
              計算陣列的各元素總和 array_sum($s) 
              反轉後的陣列內容array_reverse($s) 
              把二維陣列拆解為一維陣列list($a1,$a2,$a3,$a4,$a5) = $stu 
陣列的各種函數(2)<?php
              echo "//計算陣列內容數 count(陣列)<br/>";count($stu) ."人";
              echo "<br/><br/>"; array_sum($score) ."分";
              echo "<br/><br/>";array_reverse($score)  as $v) echo $v.", ";
              echo "<br/><br/>";list($a1,$a2,$a3,$a4,$a5) = $stu ;
              ?>
              
              
	結果範例 
              ☎程式碼:程式碼 
  
           
          
            6 
            範例5-6:陣列的排序
              數字編號陣列的排序sort(陣列) 
              大到小排序陣列,新的次序:rsort(陣列) 
               
              非數字編號陣列,而是文字編號陣列的排序
              數值排序:小到大排序陣列次序(文字編號陣列):asort(陣列) 
              數值排序:大到小排序陣列次序(文字編號陣列):arsort(陣列) 
              文字key編號排序:小到大排序陣列次序:ksort(陣列) 
              文字key編號排序:大到小排序陣列次序:krsort(陣列) 
範例5-6:陣列的排序<?php
              echo "<br/>//數字編號陣列的排序:<br/>";print_r($stu); 
              //////////////////////////////////////////////////sort($stu); 
              //////////////////////////////////////////////////rsort($stu); 
              echo "<br/><br/>";
              ///////////////////////////////////////////////////數值排序:小到大排序陣列次序(文字編號陣列):asort(陣列) <br/>";asort($score); 
              //////////////////////////////////////////////////arsort($score); 
              //////////////////////////////////////////////////ksort($score); 
              //////////////////////////////////////////////////krsort($score); 
              ?>
              
		結果範例 
              ☎程式碼:程式碼 
  
           
          
            6 
            範例5-7:陣列的各種函數(3)
              印出陣列的所有內容:print_r(陣列) ,或是var_dump(陣列 
              搜尋字串:用函數:$key = array_search('字串',陣列 )
              新增一個元素到陣列最後:array_push(陣列,元素1,元素2...) 
              刪除陣列最後的一個元素:array_pop(陣列) 
              新增陣列元素(從陣列前面):array_unshift(陣列,元素1,元素2...) 
              給定每個陣列元素相同起始值:array_fill(index,number,value) 
              亂數取出陣列元素的數目:array_rand(陣列,亂數數目 
              取出陣列的前面幾個,變成一個新陣列:array_slice(陣列,數目) 
              印出游標位置的元素內容方法一:pos(陣列) 
              方法二:current(陣列)
              移動游標到陣列最後:end(陣列) 
              目前陣列的游標到位置(index編號):key(陣列) 
              往上移動一筆):pre(陣列 
              目前陣列游標位置編號為:key($fruit) 
              current($fruit) 
               範例5-7:陣列的各種函數(3)<?php印出陣列的所有內容:print_r(陣列),或是var_dump(陣列 ) <br/>";
              echo "<br/><br/>";搜尋字串:用函數:\$key = array_search('字串',陣列)。\$key是找到的位置,找不到傳回false <br/>";
              echo "<br/><br/>";新增一個元素到陣列最後:array_push(陣列,元素1,元素2...) <br/>";
              echo "<br/><br/>";刪除陣列最後的一個元素:array_pop(陣列) <br/>";
               echo "<br/><br/>";新增陣列元素(從陣列前面):array_unshift(陣列,元素1,元素2...) <br/>";
              echo "<br/><br/>";給定每個陣列元素相同起始值:array_fill(index,number,value) <br/>";
              echo "<br/><br/>";亂數取出陣列元素的數目:array_rand(陣列,亂數數目 )<br/>";
              echo "<br/><br/>";
              echo $key[1]."<br/>";
              echo $key[2]."<br/>";
              echo "<br/><br/>";取出陣列的前面幾個,變成一個新陣列:array_slice(陣列,數目) <br/>";
              echo "<br/><br/>";印出游標位置的元素內容,方法一:pos(陣列) <br/>";印出游標位置的元素內容,方法二:current(陣列 )<br/>";
              echo "<br/><br/>";移動游標到陣列最後:end(陣列) <br/>";
              echo "<br/><br/>";目前陣列的游標到位置(index編號):key(陣列) <br/>";
              echo "<br/><br/>";往上移動一筆):pre(陣列 )<br/>";目前陣列游標位置編號為:".key($fruit) ."<br/>";目前陣列游標位置的內容為:".current($fruit) ."<br/>";
              
              ☎成果範例:結果範例 
              ☎程式碼:程式碼 
  
           
          
            8 
            範例5-8:將一維陣列的定給另外一個二維陣列
              一維陣列的定給另外一個一維陣列:$a2 = $fruit 
              二維陣列的定給另外一個二維陣列:$a2 = $stu 
              將一維陣列的定給另外一個二維陣列:$a3[] = $fruit 
            
              範例5-8:將一維陣列的定給另外一個二維陣列<?php一維陣列的定給另外一個一維陣列 ";$a2 = $fruit ;
               
              echo "<br/><br/>";二維陣列的定給另外一個二維陣列 ";$a2 = $stu ;
               
              echo "<br/><br/>";將一維陣列的定給另外一個二維陣列 ";$a3[] = $fruit ;
              ☎成果範例:結果範例 
              ☎程式碼:程式碼 
  
           
          
            8 
            範例5-9:二維陣列的排序
              (1)二維陣列的排序(文字編號)$product $arrtemp = array(); array_multisort($arrtemp, SORT_ASC, $product);  
               
            (2)二維陣列的排序(數字編號)
            陣列$product $arrtemp = array(); array_multisort($arrtemp, SORT_ASC, $product);  
              
           
              範例5-9:二維陣列的排序<?php
              $arrtemp = array(); array_multisort($arrtemp, SORT_ASC, $product);  
              echo "<br/><br/>"; 
              $product[1][0]='bb';
              $product[2][0]='cc';
              $arrtemp = array(); array_multisort($arrtemp, SORT_ASC, $product);  
              echo "<br/><br/>"; 
              $product[1][0]='bb';
              $product[2][0]='cc';
              foreach ($product as $i => $value) { 
              echo "<br/><br/>"; 
              ?>
              ☎成果範例:結果範例 
              ☎程式碼:程式碼 
  
                      
          
              
            如何在資料表欄位新增{"types":{"1":"蘋果","2":"柳丁","3":"葡萄"}} 
            
              如何在資料表欄位新增{"types":{"1":"蘋果","2":"柳丁","3":"葡萄"}}
           
          
              
            好像從js傳遞二維陣列到php,似乎有問題,可以先轉成json再傳給php,再轉成陣列 
            
              好像從js傳遞二維陣列到php,似乎有問題,可以先轉成json再傳給php,再轉成陣列
           
          
              
            陣列數量,陣列數目,陣列長度 
            
              陣列數量,陣列數目,陣列長度:count(陣列)
              $Test = Array('a'=>1,'b'=>2,'c'=>3);
              echo count($Test); 
              輸出 3
            
 
          
              
            在php,把二維陣列A裡面所有在二維陣列B的部分刪除的標準寫法 
            
                在php,把二維陣列A裡面所有在二維陣列B的部分刪除的標準寫法:
 
          
              
            如何查詢資料表的陣列,轉換成字串 
            
              如何查詢資料表的陣列,轉換成字串:
 
          
              
            一筆資料的一維陣列,與二維陣列寫法 
            
              一筆資料的一維陣列,與二維陣列寫法
 
          
              
            如何加入到陣列中的push函數,可用在一維與二維陣列 
            
              如何加入到陣列中的push函數,可用在一維與二維陣列
 
          
              
            將資料表的json格式轉成陣列後是個二維陣列,如何新增一筆新的陣列 
            
              將資料表的json格式轉成陣列後是個二維陣列,如何新增一筆新的陣列
 
          
              
            如何將mySql讀取資料表的資料,轉成陣列 
            
              如何將mySql讀取資料表的資料,轉成陣列:
 
          
              
            如何印出sql資料表變數二維陣列的指定某個tid的subject 
            
              如何印出sql資料表變數二維陣列的指定某個tid的subject
           
          
              
            如何刪除mysql資料庫所有具有uuid欄位的資料表: 
            
              如何把查詢後的資料表陣列,轉換成字串:
 
          
              
            合併多個陣列成一個陣列 
            
              一,合併多個陣列成一個陣列
 
          
              
            陣列轉成json,json轉成陣列 
            
              一,陣列轉成json
           
          
                
              比較jQuery,js VS. PHP的處理陣列函數 
              
                比較jQuery,js VS. PHP的處理陣列函數:
           
          
              
            jQuery針對陣列(數組)的過濾篩選(過濾>9,!=9..) 
            
              一,jQuery清除陣列(数组)中的空值,空陣列
 
          
              
            jQuery針對陣列(數組)的過濾篩選(過濾>9,!=9..) 
            
              一,jQuery針對陣列(數組)的過濾篩選:(過濾>9,!=9..)
 
          
              
            jQuery,js查詢是否有存在陣列內的四種方法 
            
              jQuery,js查詢是否有存在陣列內的四種方法:
 
          
              
            檢查某個字串是否在陣列裡面,若存在則傳回1,否則傳回0 
            
              檢查某個字串是否在陣列裡面,若存在則傳回1,否則傳回0:
              
          
              
            如何避免update和舊值一樣會報錯 
            
              如何避免update和舊值一樣會報錯:if(!($db->exec($sql_member) !== false))
              
          
            1 
            判別某個字串是否在某個陣列裡面:in_array(字串,陣列)
              隨機取得陣列的編號:array_rand() 
              判別某個字串是否在某個陣列裡面:in_array(字串,陣列)
 
          
            1 
            刪除陣列中的特定元素:兩種方法
              隨機取得陣列的編號:array_rand() 
                68.PHP實現刪除陣列中的特定元素:兩種方法:unset,array_splice(但是兩個有差別)
 
            
                
             
     
	
                
	             
            
              Chp6. 各種迴圈 
             
            
                練習範例                 
                迴圈有三種:for,while,$.each() PHP的雙層迴圈,如何break 範例6-1:各種計數迴圈(for,while) 範例6-2:不用計數器的迴圈(while)     
            
                範例6-3:搜尋字串:用函數\$key=array_search() 範例6-4:搜尋字串,不用計數器的while迴圈 範例6-5:搜尋字串,用計數器的while迴圈(2) 範例6-6:搜尋字串,用函數array_search(陣列)>0找到,=false沒找到  
            
                範例6-7:複選購物總金額(php讀取checkbox的多個name陣列phone[] 範例6-8:計算各科全班平均成績(前端網頁用陣列stuname[],數學math[]) 範例6-9:計算各科全班平均成績(前端網頁用一個陣列stu[][]) 範例6-10:計算各科全班平均成績(同一網頁傳給自己,用stu[][])            
          
              
            迴圈有三種:for,while,$.each() 
                   
              39.迴圈有三種:for,while,$.each()   
          
          
              
            PHP的雙層迴圈,如何break(break 2) 
                   
              43.PHP的雙層迴圈,如何break    
            
              1 
              範例6-1:各種計數迴圈
                for($i=1;$i<=4;$i++){ 
                $i=1; while($i<=4){ $i++; 
                $i=1; do{ $i++ ;}while($i<=4); 
                foreach($stu as $v){ 
                foreach($stu as $key=>$v){ 
                迴圈印到第3個,跳過不印,其它繼續:continue 
                迴圈印到第3個,就中斷印出陣列:break 
                範例6-1:各種計數迴圈<?php
                $stu = array(1=>"Orange","Banana","Grape","Apple","Flower");
                ////////////////////////////////////////////////for($i=1;$i<=4;$i++){ 
                ////////////////////////////////////////////////$i=1; while($i<=4){ $i++; 
                ////////////////////////////////////////////////$i=1; do{ $i++ ;}while($i<=4); 
                //////////////////////////////////////////////// continue; 
                ////////////////////////////////////////////////break; 
                ////////////////////////////////////////////////foreach($stu as $v){ 
                ////////////////////////////////////////////////foreach($stu as $key=>$v){ 
              ☎成果範例:結果範例 
              ☎程式碼:程式碼 
  
             
            
              2 
              範例6-2:不用計數器的迴圈(while)
                不用計數器的while迴圈,印出陣列:while(($v=current($陣列)) != NULL){..next(陣列). ..
                不用計數器的while迴圈,印出陣列:while(($v=next($陣列)) != NULL){... 
                不用計數器的while迴圈,印出陣列:while((list($key,$v) =each($fruit) )){..
                這個方法最適合非數字key編號陣列,而是文字編號陣列
                
                範例6-2:不用計數器的迴圈(while)<?php
                $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");
                ////////////////////////////////////////////////while(($v=current($fruit)) != NULL){ 
                reset($fruit);while(($v=next($fruit)) != NULL){ 
                reset($fruit);while((list($key,$v) =each($fruit))){ 
                echo "<br/><br/>";while(list($key,$v)=each($tel)){ 
              ☎成果範例:結果範例 
              ☎程式碼:程式碼 
  
             
            
              3 
              範例6-3:搜尋字串,不用計數器的while迴圈,印出陣列
                while(list($key,$v) = each($fruit)){ 
                搜尋字串:用函數:$key = array_search('字串',陣列) $key是找到的位置 
                範例6-3:搜尋字串,不用計數器的while迴圈,印出陣列<?php
                $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");
                ////////////////////////////////////////////////while(list($key,$v) = each($fruit)){ 
                echo "<br/><br/>";搜尋字串:用函數:\$key = array_search('字串',陣列)。找不到傳回false <br/>";$key = array_search($txt,$fruit); $key==false )  echo "找不到".$txt;
              ☎成果範例:結果範例 
              ☎程式碼:程式碼 
  
             
            
              4 
              範例6-4:搜尋字串,不用計數器的while迴圈
                while(($v=current($fruit)) != NULL){ 
                範例6-4:搜尋字串,不用計數器的while迴圈,印出陣列<?php
                $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");
                ////////////////////////////////////////////////while(($v=current($fruit)) != NULL){ 
              ☎成果範例:結果範例 
              ☎程式碼:程式碼 
  
             
            
              5 
              範例6-5:搜尋字串,用計數器的while迴圈(2)
                $i=1;while($i<=count($fruit)){  
                範例6-5:搜尋字串,用計數器的while迴圈(2)<?php
                $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");
                ////////////////////////////////////////////////while($i<=count($fruit)){  
              ☎成果範例:結果範例 
              ☎程式碼:程式碼 
  
             
            
              6 
              範例6-6:搜尋字串,不用迴圈,用函數:array_search(陣列) >0找到,=0沒找到 
                if(array_search($txt,$fruit) ==0 ){
                if( ($key =array_search($txt,$fruit)) !=0){ 
                範例6-6:搜尋字串,用函數array_search(陣列)>0找到,=false沒找到<?php
                $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");
                ////////////////////////////////////////////////
                echo "<br/><br/>";if( ($key =array_search($txt,$fruit)) !=0){ 
              ☎成果範例:結果範例 
              ☎程式碼:程式碼 
  
             
            
              7 
              範例6-7:複選購物總金額
                phone[] ,並把value值儲存到該變數$_POST["phone"] 
                 但php讀取checkbox時要先判斷是否有值,isset($_POST["a1"]),若有值才進行計算,若沒判斷會有錯誤
                (從html傳遞參數給php)
                範例6-7:複選購物總金額(php讀取checkbox的多個name陣列phone[]1.下載表單的html語法  ,建立exp06-7.html
                2.填入參數: method="post"  name="phone[]"  value="iphoneX手機">iphoneX手機:NT$35,000元
                3.撰寫 exp06-7.php<?php if(isset($_POST["phone"])){ foreach($_POST["phone"] as $v){                         ?> 結果範例 
              ☎程式碼:程式碼 
  
             
            
              8 
              範例6-8:計算各科全班平均成績
                前端網頁用多個陣列stuname[],數學math[],英文english[] 
                                label不是form元素,只能用<input type='hidden' name='stu[0][]' value='宋妮妮'>
                範例6-8:計算各科全班平均成績(前端網頁用陣列stuname[],數學math[])1.下載表單的html語法  ,建立exp06-8.html
                2.填入參數: method="post" "stuname[] " value="李大同">"math[]" >english[] ">
                3.撰寫 exp06-8.php<?php 
                /////////////////////////////////
                /////////////////////////////////
                /////////////////////////////////  ?> 結果範例 
              ☎程式碼:程式碼 
  
             
            
              9 
              範例6-9:計算各科全班平均成績
                前端網頁用一個陣列stu[][],但是同一類,例如姓名stu[0][],數學stu[1][] 
                                label不是form元素,只能用<input type='hidden' name='stu[0][]' value='宋妮妮'>
                範例6-9:計算各科全班平均成績(前端網頁用一個陣列stu[][])1.下載表單的html語法  ,建立exp06-9.html
                2.填入參數: method="post" stu[0][]"  value="李大同">"stu[1][]" >stu[2][]" >
                3.撰寫 exp06-9.php$txt=""; 
                echo "<br/><br/>";
                //////////////////////////
                }
                /////////////////////////////////
                ///////////////////////////////// 
                
                結果範例 
              ☎程式碼:程式碼 
  
             
            
                
             
     
	
                
	             
            
              Chp7. 日期時間 
             
                練習範例 
                7-1兩種日期時間宣告法 7-2設定某個虛擬日期時間 mktime(時,分,秒,月,日,年)(while)                 
            
                
              最簡單顯示日期的方法 
              
                (1).最簡單顯示日期的方法:2018-09-15
 
            
                
              unix 時間戳 
              
                (1).unix時間戳
 
            
              1 
              兩種日期時間
                (1)傳統:date('Y-m-d') date_default_timezone_set('Asia/Taipei')                 date('Y年n月j日 G時i分s秒time()+7*24*60*60)                 
              (2)新的物件變數DateTime 類別date_default_timezone_set('Asia/Taipei'); $date = new DateTime('now',new DateTimeZone('Asia/Taipei')); 
              $date = new DateTime('+2 day') $date = new DateTime('2017-05-11') $date -> format('Y-m-d H:i:s PM') $date->getTimestamp()  
              日期時間的比較 diff() $interval = $date1->diff($date2) $interval->format('%r%a 天 %h 時 %i 分 %s 秒')  
              時區設定:DateTimeZone class //////////////////////台灣時區:$timezone = new DateTimeZone('Asia/Taipei'); $date = new DateTime('now', $timezone);                 date = new DateTime();Asia/Taipei '); 
               
              時間間隔修改DateTime內容$interval = new DateInterval('P2WT5H'); $interval = DateInterval::createFromDateString('2 weeks + 5 hours') 
<?php
                echo "//日期時間要先設定時區,方法一: date_default_timezone_set('Asia/Taipei'),日本是Asia/Tokyo";date_default_timezone_set('Asia/Taipei'); 
                                  ///////////////////////////////////////////////////date('西元Y年n月j日 G時i分s秒') ;
                                  ///////////////////////////////////////////////////
                                  ///////////////////////////////////////////////////
                                  ///////////////////////////////////////////////////
                                  ///////////////////////////////////////////////////date("Y年n月j日 G時i分s秒",time()) ;
                                  ///52////////////////////////////////////////////////date('Y年n月j日 G時i分s秒',time()+7*24*60*60) ;
                                  ///////////////////////////////////////////////////
                                  /////////////////////////////////////////////////
                                  /////////////////////////////////////////////////
                $d=strtotime("next Saturday");
                $d=strtotime("+3 Months");
                echo "<br/><br/>";
                // %a 输出总天数
                                  echo "/////////////////////////////////////////////////<br>";新的物件變數DateTime 類別 :封裝了老式日期函數所有功能,甚至更多,並且使得時區轉換更加容易<br>";
                                  echo "/////輸出 format()////////////////////////////////////////////<br>";
                                  echo "/////日期時間的比較 diff() ////////////////////////////////////////////<br>";
                echo "//方法二:date = new DateTime();<br>";
                                  echo "///////時間間隔修改DateTime內容////////////////////////////////////////////<br>";
                                  /////////////////////////////////////////////////////////////////////////////////date_default_timezone_set('Asia/Taipei'); 
                echo "//物件時間,方法二:<br/>";$date = new DateTime('now',new DateTimeZone('Asia/Taipei')); 
                $date = new DateTime('yesterday'); 
                $date = new DateTime('2017-05-17 18:00:00'); 
                $date = new DateTime('2017/05/17 09:15 PM'); ".$date->format('Y-m-d H:i:s')."< br>";
                // +- day, week, month, year$date = new DateTime('+2 day'); 
                // 1495088399
                //日期時間的比較 diff():$interval = $date1->diff($date2) ;$interval->format('%r%a 天 %h 時 %i 分 %s 秒'). "<br>";
                //日期時間的比較 diff():
                //////////////////////////////////////////////////////////////////////
                // 建立 2週 5小時
                // 建立 2週 5小時
                $date = new DateTime();
                /////////////////////////////////////////////
                                  ?>
                 4.結果範例 
 
            
              1 
              (1)傳統日期時間
                設定某個虛擬日期時間:mktime(時,分,秒,月,日,年) ,
                例如 mktime(15,25,50,5,5,2018) ,
                查詢虛擬日期的資訊(星期幾,前天,上個月):
                例如昨天日期:date('Y-n-j',mktime(15,25,50,5,4,2018) 
                 
                
<?php
                //echo "//日期時間要先設定時區,方法一: date_default_timezone_set('Asia/Taipei'),日本是Asia/Tokyo";
                ///////////////////////////////////////////////////
                                  ///////////////////////////////////////////////////
                                  ///////////////////////////////////////////////////
                $day2= mktime(0,0,0,date('n')-1,date('j'),date('Y'));
                $day2= mktime(0,0,0,date('n'),date('j')-10,date('Y'));
                $day2= mktime(0,0,0,date('n'),date('j'),date('Y')+1);
                 ?>
                 4.結果範例 
 
            
            
                
             
  
  
     
	
                
	             
            
              Chp9. 字串相關函數 
             
            
                練習範例 
                9-1字串相關與字串搜尋 9-2子字串相關函數(取出子字串,計算出現次數,取代,反轉,分割成陣列) 9-3比較兩個字串 9-4網頁字串相關函數(刪除網頁標籤,加上反斜線,刪除字串的反斜線)     
            
                練習範例 
                9-5設定輸出文字與數字的格式: sprintf(字串%u...%s....,變數1,變數2)(字串%s,科學計數%e,浮點數%f) 9-6輸出html特殊字元(<(&lt;,>(&gt;) 9-7比對輸入的格式是否正確(以 preg_match() 結合規則運算式(Regular Expression) 9-8表單驗證(檢查最少4個英文,驗證密碼,電子信箱格式,住家電話格式,身份證格式)     
          
            
                9-9把一些預定義的字符轉換為 HTML 實體(htmlentities,htmlspecialchars   
                  
                                
              
        
            
          注意:在搜尋比對字串時,若是bbcode的搜尋比對,會出現錯誤,無法比對
           
          
            注意:在搜尋比對字串時,若是bbcode的搜尋比對,會出現錯誤,無法比對
             
          
              
            比較兩種PHP vs js 取代字串的方法
             
            
                比較兩種PHP vs js 取代字串的方法:
             
          
                
              nl2br() 函數
               
              
                nl2br() 函數在字符串中的每個新行(\n) 之前插入HTML 換行符(<br>)。
                
              
          
                
              php取代函數:str_replace() 
              
                php取代函數:str_replace()
              
          
                
              將aaa,bbb,ccc分割成陣列(javascript寫法) 
              
                //將tags字串,分割成arr陣列:arr = tags.split(",")
              
          
              
            將aaa,bbb,ccc分割成陣列(PHP寫法):explode 
            
              (1).字串轉成陣列:explode()
 
          
                
              如何將陣列串聯成字串:join 
              
                  如何將$arr_tags陣列串聯成字串
       
          
                
              把字串最後一個','刪除的兩種方法 
              
                  把字串最後一個','刪除的兩種方法
       
          
                
              取得字串的長度 
              
                  取得字串的長度
       
          
                
              取得第一個字元:substr($str,strlen($str)-1,1) 
              
                一,字串存取目標:
                                     
          
              
            Heredoc 定界符 的用法 
                   
              21.Heredoc 定界符 的用法(連續三個小於符號 "<<<" )  
          
              
            heredoc的好處:可以在javascript裡面可以直接讀取php的變數 
                   
              (1).heredoc的好處  
          
              
            heredoc缺點:無法使用陣列變數 
                   
              heredoc缺點:無法使用陣列變數:  
          
              
            heredoc中間要加上php變數的寫法 
                   
              heredoc中間要加上php變數的寫法:
                <div class="modal-dialog">   
          
              
            heredoc應用:彈出modal視窗,互動操作後讀取資料表再傳回,顯示在modal畫面上 
                   
              heredoc應用:彈出modal:  
          
              
            heredoc中間要加上php迴圈的寫法 
                   
              heredoc中間要加上php迴圈的寫法:  
          
                
              密碼強度-在heredoc裡面顯示(修改密碼) 
              
              5-密碼強度-在heredoc裡面顯示(修改密碼):
    
          
                
              彈出的modal視窗,下方按鈕(儲存,刪除,送出)的程式碼寫法 
              
                彈出的modal視窗,下方按鈕(儲存,刪除,送出)的程式碼寫法:
    
          
                
              為什麼志豪版本在modal的點選js函數,可以寫在外面的js函數 
              
                  為什麼志豪版本在modal的點選js函數,可以寫在外面的js函數
    
          
                
              heredoc單引號,雙引號的規則:第一層’,第二層",第三層\' 
              
                  heredoc單引號,雙引號的規則:第一層’,第二層",第三層\'
    
           
            
              1 
              **php的字串,前後用雙引號""或是單引號''
                **輸出字元,可以用Escape逸出字元,來顯示某些無法正常顯示的字元:例如雙引號,$,tab跳格 \ " ):"台南" \$ ):金額共美金$ 3000 元 \\ ):\台灣\ 
                **搜尋字串 strpos(被查字串,要查字串) if($pos===false) ,或是if ($pos !== false) ,就是除了值一樣外,形態也要一樣
                                  注意:搜尋字,第一個字由0開始
                 注意:搜尋中文字,一個字有三個字元
                stripos() :查找字串在另一字串中第一次出現的位置(不區分大小寫) strripos() :查找字串在另一字串中最後一次出現的位置(不區分大小寫) strrpos() :查找字串在另一字串中最後一次出現的位置(區分大小寫) 
                **搜尋所在字之後的字串:strstr(被查字串,要查字串) 
                **搜尋特殊字元(”,\)之後的字串:strchr(被查字串,要查字元)  
                **反向搜尋特殊字元(”,\),從後面開始找的第一個字,的之後字串:strrchr(被查字串,要查字元)  
                 
                
                  範例結果 
              
              
               
<?php
                                  ///////////////////////////////////////////////////\" 台南\"  <br/>";\$  3000 元 <br/>";\\ 台灣\\  <br/>";
                                  ///////////////////////////////////////////////////
                $str = "abcdefghijk";$pos = stripos($str,$find1) ;if($pos===false) {echo "找不到: $find1 <br/>";}$pos = stripos($str,$find1) ;if($pos===false) {echo "找不到: $find1 <br/>";}
                $pos = strpos($str,$find1 );if($pos===false) {echo "找不到: $find1 <br/>";}
                //////////////////////////////////////////$pos = strpos($str,$find1); if($pos===false) {echo "找不到: $find1 <br/>";}
                //////////////////////////////////////////$pos = strpos($str,$find1) ;
                //////////////////////////////////////////$pos = strpos($str,$find1) ;
                                  //////////////////////////////////////////$txt = strstr($str,$find1) ;
                $find1="5";$txt = strstr($str,$find1); 
                $txt = strchr($str,$find1) ;
                $find1='/';$txt = strchr($str,$find1); 
                                  //////////////////////////////////////////$txt = strrchr($str,$find1); 
              ?>
 
            
              2 
              *取出子字串 方法1:substr(字串,位置3,共4個字)  
                *取出子字串 方法2:取出@之後的文字 strchr(字串,'@')  
                *計算某個字元出現的次數 substr_count(字串,"o")  
                *取代某個字串 substr_replace(字串,"新字串",開始位置4,長度5)  
                *反轉某個字串 strrev(字串) 
                *將某字串分割成陣列 explode(',',字串)  
                *將某陣列組成字串 implode(' , ',字串) 
               
              範例結果 
<?phpsubstr($str,3,4); 
                                  ///////////////////////////////////////////////////strchr($str,'@'); 
                                  /////////////////////////////////////////////////// substr_count($str,"o"); 
                                  /////////////////////////////////////////////////// substr_replace($str,"gmail",4,5); 
                                  /////////////////////////////////////////////////// strrev($str); 
                                  ///////////////////////////////////////////////////$a = explode(";",$str); 
                                  ///////////////////////////////////////////////////$str2 = implode(" , ",$a); 
              ?>
 
            
              3 
              比較兩個字串 :if(strcmp(字串1,字串2)==0) {...},傳回0為相等,>0會前者大 
                *注意傳回0,就是false,所以有人寫成 if(!strcmp(字串1,字串2))  
                *不區分英文大小寫的比較兩個字串 :if(strcasecmp(字串1,字串2) ==0){...},傳回0為相等,>0會前者大 
                *只比較前面幾個字元 :if(strncmp(字串1,字串2,10)==0) {...},傳回0為相等,>0會前者大 
                
               
              範例結果 
<?phpif(strcmp($str1,$str2)==0) echo "兩者相等";
                                  ///////////////////////////////////////////////////if(!strcmp($str1,$str2)) echo "兩者相等";
                                  ///////////////////////////////////////////////////if(!strcasecmp(字串1,字串2))  <br/>';if(!strcasecmp($str1,$str2 ))echo "兩者相等";
                                  ///////////////////////////////////////////////////if(!strncmp($str1,$str2,10) )echo "兩者相等";
              ?>
 
            
              4 
              網頁字串相關函數 
                *把網頁標籤刪除: strip_tags(\$str) 
                *把某個字串有雙引號",單引號',反斜線\的前面都加上反斜線\: addslashes($str)  
                *刪除字串的反斜線\: stripslashes($str) 
                * 把\ n轉成 <br/>:nl2br($str)  
               
              範例結果 
<?php strip_tags($str) ;
                                  ///////////////////////////////////////////////////addslashes($str) ;
                                  ///////////////////////////////////////////////////stripslashes($str); 
                                  ///////////////////////////////////////////////////nl2br($str); 
              ?>
 
            
              5 
              格式化輸出字串相關函數 
                *設定輸出文字與數字的格式: sprintf(字串%u...%s....,變數1,變數2)  
                *字串:%s 
                 *科學計數法:%e 我的名字是李大同,要二手賣i4蘋果手機價錢3.000000e+4,費用剩下5.600000e+3
                *控制小數點的格式: sprintf(字串%f,變數1)  %1\$.2f %1\$u 
                 
                範例結果 
<?phpsprintf("我的名字是%s,要二手賣i4蘋果手機價錢%e,費用剩下%e",$a,$b,$c). "<br/>";
                 /////////////////////////////////////////////////// sprintf("<br/>我的身高是(2個小數點) %1\$.2f",$h); sprintf("<br/>我的身高是(0個小數點)%1\$u",$h); 
                /*
                */
                ?>
 
            
              6 
              輸出html特殊字元 
                <(&lt;) 
               
              範例結果 
<?php<(&lt;)  <br/>";>(&gt;)  <br/>";&(&amp;)  <br/>";
                                  echo "< " 大家好"> ;<br/>";
              ?>
 
            
              7 
              比對輸入的格式是否正確:
                以 preg_match() 結合規則運算式(Regular Expression), 進行複雜字串比對 
                驗證是否字串有中文字 好 存在:preg_match('/好/',$a) 
                驗證是否字串有間隔的兩字,e..g 存在:
                驗證是否有任一數字,有兩個方法:[0-9] ,或是/\d/ :preg_match('/\d/',$a)
                驗證是否有任一數字,有兩個方法:[0-9],或是/\d/:preg_match('/\d/',$a) 
                驗證是否有英文字母:[a-zA-A]:preg_match('/[a-zA-A]/',$a) 
                驗證是否有任一數字,有兩個方法:[a-zA-A0-9] ,或是/\w/:preg_match('/\w/',$a) 
                從URL取得主機名稱:@^(?:http://)?([^/]+)@i:preg_match('/\w/',$a) 
                密碼長度6,包含英數字://^.*(?=.{6,})(?=.*\d)(?=.*[a-zA-Z]).*$/ 
                檢查最少6個英文數字,最多15個字元:/(?=.[a-zA-A0-9])(?=.{6,15}) /
                驗證密碼 長度6,英數字再加上包含大小寫 ::^.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$  
                驗證密碼 至少各一位英文字母、數字,共8~12位,沒特殊字元 ::/^(?!.*[^a-zA-Z0-9])(?=.*\d)(?=.*[a-zA-Z]).{8,12}$/ 
                檢查是不是電子信箱格式,兩種格式:/^[\w]*@[\w-]+(\.[\w-]+)+$/ 
                檢查住家電話格式是否正確:02-12345678:/^[0-9]{2}-[0-9]{8}$/  
                檢查身份證格式是否正確:G123456789:/^[A-Za-z][1-2]\d{8}$/  
                
                 
                範例結果 
<?php
                                  ///////////////////////////////////////////////////if(preg_match($b,$a)= =true){
                                  ///////////////////////////////////////////////////if(preg_match($b,$a)==true) {
                                  ///////////////////////////////////////////////////if(preg_match("/\d/",$a)==true) {
                                  ///////////////////////////////////////////////////"/[0-9]/"; if(preg_match($b,$a)==true) {
                                  ///////////////////////////////////////////////////"/[a-zA-A]/"; if(preg_match($b,$a)==true){ 
                                  ///////////////////////////////////////////////////$a = "@##$%%^&&"; if(preg_match($b,$a)==true){ 
                                  ///////////////////////////////////////////////////preg_match('@^(?:http://)?([^/]+)@i',$a , $matches); 
                                  ///////////////////////////////////////////////////$b = "/^.*(?=.{6,})(?=.*\d)(?=.*[a-zA-Z]).*$/"; 
                                  ///////////////////////////////////////////////////$b = "/(?=.[a-zA-A0-9])(?=.{6,15})/"; 
                                  ///////////////////////////////////////////////////$b = "/^.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/"; 
                                  ///////////////////////////////////////////////////$b = "/^(?!.*[^a-zA-Z0-9])(?=.*\d)(?=.*[a-zA-Z]).{8,12}$/"; 
                                  ///////////////////////////////////////////////////$b = "/^[\w]*@[\w-]+(\.[\w-]+)+$/"; 
                                  ///////////////////////////////////////////////////
                                  ///////////////////////////////////////////////////$b = "/^[A-Za-z][1-2]\d{8}$/"; 
                 
                /*
                                關於密碼驗證的Regular Expression,我自己在網路上找到的是以下這個:
                ^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
                上述的Regular Expression可達到以下幾個驗證密碼的項目:
                (?=.{10,}):密碼長度10個以上 
                (?=.{10,}):檢查輸入的字元長度是否有超過10。如果資料庫裡的密碼欄位長度是20,那就改成(?=.{10,20})。
                            ?>
 
            
              8 
              表單欄位驗證
                檢查最少4個英文數字,最多15個字元
                驗證密碼 至少各一位英文字母、數字,共8~12位,沒特殊字元
                檢查是不是電子信箱格式,兩種格式
                檢查住家電話格式是否正確
                檢查身份證格式是否正確
                
                 
              範例結果 
1.下載表單的html語法  ,建立exp09-8.html
                2.填入參數: method="post" name="a1"  placeholder="最少4個英文數字,最多15個字元" ></div>
                3.撰寫 exp06-7.php<?php 
                                  ///////////////////////////////////////////////////檢查最少4個英文數字,最多15個字元: /(?=.[a-zA-A0-9])(?=.{4,15})/<br/>";$b = "/(?=.[a-zA-A0-9])(?=.{4,15})/"; {
                ///////////////////////////////////////////////////驗證密碼 至少各一位英文字母、數字,共8~12位,沒特殊字元 :: /^(?!.*[^a-zA-Z0-9])(?=.*\d)(?=.*[a-zA-Z]).{8,12}$/<br/>";$b = "/^(?!.*[^a-zA-Z0-9])(?=.*\d)(?=.*[a-zA-Z]).{8,12}$/"; {
                ///////////////////////////////////////////////////檢查是不是電子信箱格式,兩種格式: /^[\w]*@[\w-]+(\.[\w-]+)+$/<br/>";$b = "/^[\w]*@[\w-]+(\.[\w-]+)+$/"; 
                ///////////////////////////////////////////////////檢查住家電話格式是否正確:02-12345678: /^[0-9]{2}-[0-9]{8}$/ <br/>";$b = "/^[0-9]{2}-[0-9]{8}$/"; 
                ///////////////////////////////////////////////////檢查身份證格式是否正確:G123456789:/ ^[A-Za-z][1-2]\d{8}$/ <br/>";$b = "/^[A-Za-z][1-2]\d{8}$/"; 
                 ?> 
 
            
              9 
              如何把一些預定義的字符轉換為 HTML 實體(兩種方法:htmlentities,htmlspecialchars)
                1.htmlentities: 函數把字元轉換為 HTML 實體 
                2.htmlspecialchars函數把一些預定義的字元轉換為 HTML 實體 (5個html代碼(&,"",'',>,<)轉換成amp......
                差異1:這兩個函數在格式化帶有英文字符的html代碼的時候基本沒甚麼區別,但若內容有中文字符,使用 htmlentities則會連同中文字一併轉換,導致最後變為一堆亂碼 
                差異2:htmlspecialchars只會轉化5個html代碼(&,"",'',>,<),但是 htmlentities卻會轉化所有的html代碼,連同裡面的它無法識別的中文字符也轉換掉 
                原則:一般處理UTF-8,或是內容有中文的html字詞轉換,就使用htmlspecialchars。 
                 
              範例結果 
<?php
                                  ///////////////////////////////////////////////////htmlentities($a); .htmlspecialchars($a); 
                                  ///////////////////////////////////////////////////htmlentities($a); .htmlspecialchars($a); 
                                  ///////////////////////////////////////////////////htmlentities($a,ENT_QUOTES); htmlspecialchars($a,ENT_QUOTES); 
                ?>
 
            
                
             
  
      
   
  
    Chp11. 在網頁之間傳遞參數的cookie與session  
   
  
    練習範例 
    11-1建立背景顏色的cookie 11-2建立背景顏色的cookie陣列 11-3下拉選單設定cookie後,關閉瀏覽器再開啟,文字顏色設定還在 11-4session設定已登入網頁時間  
  
      
    js傳遞url特殊符號的處理方法 
           
    從js傳遞url變數,若含有+號碼,在php驗證會出現錯誤:   
  
      
    若是傳遞動作原因reason有特殊符號(+,',^...),如何傳遞特殊符號 
           
      若是傳遞動作原因reason有特殊符號(+,',^...),如何傳遞特殊符號    
  
      
    session無法被清除 
           
      37.觀念:   
  
    1 
    cookie 儲存在客戶端瀏覽器的文字記錄 
      用途;記錄購物車、會員登入,網頁style喜好設定,或瀏覽紀錄 
      缺點1:如果用戶端的瀏覽器關閉 cookie 的使用,那就沒辦法記錄這些相關資訊((改善法:PHP4以後有 session 來替代))
      缺點2:cookie 由於是儲存在用戶端電腦,所以被竊取的風險比較高(改善法:重要的資料應該盡量採用 session 來儲存)
      限制1:目前每個瀏覽器最多只能儲存 300 個 cookie。
      限制2:每個瀏覽器對單一網站只能儲存 20 的 cookie。
      限制3:用戶端電腦的 cookie 只要關閉就沒辦法使用。
      cookie指令:setcookie("變數名稱","內容","保存期限","路徑","網域","安全")  
      注意:cookie指令前面不能有任何網頁輸出,所以若在網頁使用,第一行必須有 ob_start()才不會有錯誤 cookie: 
      建立背景顏色的cookie:  
      讀取cookie指令:$_COOKIE["變數"]  
       
      讓cookie失效,方法一:讓bgcolor值,過期 :$_COOKIE["變數","內容",time()-1800秒]  $_COOKIE["變數","內容",mktime(0,0,0,10,15,2010)  
       
      讓cookie失效,方法二:將bgcolor值,清空 $_COOKIE["變數",""]  
       
       範例結果 
      
       
<?php ob_start(); cookie:setcookie('bgcolor','pink',time()+1800秒)  <br/>";setcookie('bgcolor','pink',mktime(0,0,0,10,15,2050)  <br/>";setcookie("bgcolor","pink",time()+1800); ;
      ///////////////////////////////////////////////////
      ?>
      exp11-1a.php
      <?php  ob_start(); f(isset($_COOKIE["bgcolor"]))  echo "cookie變數bgcolor的內容為:".$_COOKIE["bgcolor"]; 
      ?>
      exp11-1b.php
      <style>background-color :<?php  
      }
      exp11-1c.php 
      <?php  ob_start(); 
       if(isset($_COOKIE["bgcolor"])) { setcookie("bgcolor","pink",time()-7600); setcookie("bgcolor","pink",mktime(0,0,0,10,15,2010)); 
      ?>
      exp11-1d.php 
      <?php  ob_start();setcookie("bgcolor",""); 
      ?>
 
  
    2 
    cookie陣列 
      cookie指令:setcookie("\array["變數"]","內容","保存期限","路徑","網域","安全")  注意,這裡陣列,前面不需要$  
      建立文字顏色的cookie:setcookie('mycolor[1]','pink',mktime(0,0,0,10,15,2020)  
      讀取cookie指令:$_COOKIE["變數"]  
      接收cookie變數:$_COOKIE['bgcolor'] 
      讓cookie失效,方法一:讓bgcolor值,過期 $_COOKIE["變數","內容",time()-1800秒]  $_COOKIE["變數","內容",mktime(0,0,0,10,15,2010)  
      讓cookie失效,方法二:將bgcolor值,清空 $_COOKIE["mycolor[bg]",""]  
      
      範例結果 
<?php ob_start();setcookie('mycolor[0]','pink',time()+1800秒)  <br/>";setcookie('mycolor[1]','pink',mktime(0,0,0,10,15,2020)  <br/>";setcookie("mycolor[bg]","pink",mktime(0,0,0,10,15,2050)); 
      ///////////////////////////////////////////////////
      ?>
      exp11-2a.php
      <?php  ob_start();$_COOKIE['mycolor']['bg']; $_COOKIE['mycolor']['txt']; 
      ?>
      exp11-2b.php 
      <style>background-color :<?php  echo $_COOKIE["mycolor"]["bg"]; color: <?php echo $_COOKIE["mycolor"]["txt"];  
      }
      exp11-2c.php 
      <?php  ob_start(); setcookie("mycolor[bg]","pink",time()-7600); setcookie("mycolor[bg]","pink",mktime(0,0,0,10,15,2010)); }
      ?>
      exp11-2d.php 
      <?php  ob_start();setcookie("mycolor[bg]",""); 
      ?>
 
  
    3 
    設定cookie後,關閉瀏覽器再開啟,文字顏色設定還在
      if(isset(\$_POST["selcolor"])){ 
      三個if判別,(2)第一次開啟網頁,但已經有cookie設定:if(isset(\$_COOKIE["cookiecolor"])){ 
      三個if判別,(3)第一次開啟網頁,也沒有cookie設定,則文字顏色為黑色:else{}
      
       
      範例結果 
<?php ob_start();  if(isset($_POST["selcolor"])){ /不是第一開啟網頁,根據下拉式選單的顏色顯示,並設定cookie $mycolor = $_POST["selcolor"]; //設定cookie $mycolor = $_COOKIE["cookiecolor"]; }else{ 為黑色$mycolor = "black"; 
      //設定cookie:setcookie("cookiecolor",$mycolor,time()+36000); 
      <style>color:<?php echo $mycolor; ?>; color:<?php echo $mycolor; ?>; color:<?php echo $mycolor; ?>; 
 
  
    4 
    session:儲存於伺服器端,不用擔心用戶禁用session的問題,但計錄檔案的負荷由伺服器承擔 
      缺點1:如果關閉瀏覽器過久(超過24分鐘),session的生命週期就結束
      限制1:同一瀏覽器的前後網頁之間,才能彼此傳遞參數
       
      一、啟用 Session : session_start()  $_SESSION['UserName']='Jordan';  $_SESSION['UserName']; session:unset($_SESSION['變數名稱']) ;session_destroy();  $_SESSION['comeintime']=time ()  注意:$_SESSION["comeintime2"] 是字串,不是時間  注意:但是不能直接印出$date1,因為它的形態是時間,不是字串  
      注意:要將時間轉成造成是:$date1->format('Y年n月j日 G時i分s秒')  
      注意:結論:session是字串 不可寫成	$_SESSION['comeintime2'] = $date1; 
       
      讀取session變數指令:$_SESSION["變數"]  ?if(isset($_SESSION["變數"]))..else...  $date1->format('Y年n月j日 G時i分s秒')  
      new DateTime(); $timediff = $date1->diff($date2); $timediff->format('%h 時 %i 分 %s 秒');       
       
      讓session失效,方法一:刪除全部:session_unset()  
              讓session失效,方法二:刪除某個:unset($_SESSION['x'])  
              讓session失效,方法一:刪除全部:session_destroy()        
      
      範例結果 
<?php session_start(); 
      echo "<br/><br/>";
      //date_default_timezone_set('Asia/Taipei');
       
      echo "//注意:\$_SESSION[\"comeintime2\"] 是字串,不是時間   <br/>";
      if(!isset($_SESSION['comeintime2'])){
      /////////////////////////////////////////////////
      ?>
      exp11-4a.php 
      <?php  session_start(); $date1 = new DateTime($_SESSION["comeintime2"]); $date1->format('Y年n月j日 G時i分s秒'); 
      ?>
      exp11-4b.php 
      <?php  session_start(); new DateTime($_SESSION['comeintime2']); new DateTime(); $timediff = $date1->diff($date2); $timediff->format('%h 時 %i 分 %s 秒'); 
      ?>
      exp11-4c.php 
      <?php  session_start();unset($_SESSION['comeintime2']); 
      }
      ?>
      exp11-4d.php 
      <?php  session_start();session_unset(); 
      }
      ?>
 
  
      
   
     
	
                
	             
            
              Chp12. 物件變數,物件變數陣列 
             
            
                練習範例 
                12-1物件變數(建構子函數,解構子函數) 12-2物件變數的簡易宣告(設定網頁背景顏色,文字顏色) 12-3物件變數的static function,物件常數的引用 12-4兩種物件陣列:班上同學資料(姓名,電話,LineID)     
            
                12-5雲端主機,判別下拉選單是第幾個(阿Q桶麵查詢價錢庫存) 12-6雲端主機計算物件陣列,計算各科全班平均成績 12-7物件陣列(把陣列當作物件來操作):ArrayObject(陣列)  
               
                                        
            
              1 
              class 名稱{....}  public $a1;  公有成員var $a1 ; 公有成員(就是public)private $a1 ;私有成員(只能被其定義的類別存取)public function show() {....}public可以省略 {
                method: 給定起始值:建構子函數:function __construct($a1='',$a2=0,$a3=0) {...』
                method: 解構子函數,釋放物件變數:function __destruct(){$this->name = NULL;}  
                宣告物件變數:$my = new phone() $my->show() $my = NULL; 
                 
                
                  範例結果 
              
              
               
範例12-1:物件變數(建構子函數,解構子函數)<?php class phone{ var  $name;public  $price;public function __construc t($a1="",$a2=0,$a3=0){$this->name  = $a1;$this->price  = $a2;public function __destruct() {$this->name = NULL; 
                //////////////////////////////////////////////////$myp1 = new phone(); $myp1->name  = "iphoneX手機";$myp1->show(); 
                echo "<br/><br/>";$myp2 = new phone('Samsung Galaxy Note 8手機',30000,5); 
                echo "<br/><br/>";$myp1 = NULL; 
                                  echo "//物件變數的比較 ==, === <br/>";
                $myp5 = new phone('Samsung Galaxy Note 8手機',30000,5);
                $myp6 = $myp5;if($myp4==$myp5) echo "$myp4 == $myp5 <br/>";if($myp4===$myp5)e cho "$myp4 === $myp5 <br/>";
                                  //5-6///////////////////////////////////if($myp6==$myp5) echo "$myp6 == $myp5 <br/>";if($myp6===$myp5) echo "$myp6 === $myp5 <br/> <br/>";
                ☎成果範例1:結果範例 
                ☎程式碼1:程式碼 
              
☎成果範例2:結果範例 
             ☎程式碼2:程式碼 
              
 
             
            
              2 
              物件變數的簡易宣告 
                 
              範例結果 
範例12-2物件變數的簡易宣告(設定網頁背景顏色,文字顏色)<?php var  $title;var  $bgcolor;function __construct($a1="標題",$a2="white",$a3="black",$a4="測試"){ $this->title = $a1; function __destruct(){ $this->title = NULL; 
                //////////////////////////////////////////////////$myweb = new webpage("生日祝福","pink","darkgreen","福如東海,壽比南山"); 
              ?>
              ☎成果範例:結果範例 
             ☎程式碼:程式碼 
              
 
             
            
              3 
              
範例12-3物件變數的static function,物件常數的引用物件變數的static function 不需要宣告,直接用類似呼叫普通function的方式使用 static function cubic(){...}  
                呼叫法: class變數名稱::cubic();  
                範例: mymath::cubic();  
                 
                const pi=3.14 ;  class變數名稱::pi  mymath::pi  
                物件常數在class內部的引用法:self::pi  
               
              ☎成果範例:結果範例 
 
              
範例12-3物件變數的static function
<?php class mymath{ const pi=3.14; static  function cubic($a1){ static  function circlearea($a1){  self::pi *$a1*$a1;mymath::cubic($num); 
                echo "<br/><br/>";mymath::circlearea($num) ;
              ?>
              ☎成果範例:結果範例 
             ☎程式碼:程式碼 
              
 
             
            
              4 
              範例12-4兩種物件陣列:班上同學資料(姓名,電話,LineID) 第一種物件陣列 : $stu[1]= new student(..)  第二種物件陣列  $member = array (new student(...) ,new student(...),new student(...)) foreach($member as $i=>$v){...}  
               
              範例結果 
範例12-4兩種物件陣列:班上同學資料(姓名,電話,LineID) <?php $stu[0]= new student("李大同","0936-456741","tom234"); 
                //印出全班姓名$stu[$i]->name .", ";
                                  echo "/////第二種物件陣列/////////////////////////////////////////////// <br/>";array(new student("李大同","0936-456741","tom234"), 
                //印出全班姓名,電話foreach($member as $i=>$v){ $member[$i]->name .", ".$member[$i]->tel."<br/>"; 
              ?>
              ☎成果範例1:結果範例 
             ☎程式碼1:程式碼 
             ☎成果範例2:結果範例 
            ☎程式碼2:程式碼 
              
 
             
            
              5 
              範例12-5:傳回雲端主機,判別下拉選單是第幾個 
                1.觀念:php沒有onchange()事件,都必須由form-action-submit傳送 
                                2.觀念:php不能夠寫到javascript程式碼區內,彼此不相容 
                3.觀念:若表單元件要直接呼叫php,只能用ajax事件 
                 
                4.如何得到selectedIndex(I) :將option 的value設定 為0,1,2,3..,那麼由\$_POST得到的就是selectedIndex
                                 
                5.如何得到selectedIndex(II) :不然就要while(list(..) = each(..){ 比對選到的intm名稱與物件資料名稱一樣時的\$key,就是selectedIndex
                6.php讀取select的name名稱,數值為value
                 
                6.如何在php設定表單select的選項 顯示selected <option value="阿Q桶麵"  <?php if($key==0){echo 'selected';}?> 阿Q桶麵</option> 
                 
                7.如何在php設定input-text的內容 :在input內的value='...'<?php echo $mynum;?> ">
               
              範例結果 
範例12-5:雲端主機,判別下拉選單是第幾個(阿Q桶麵查詢價錢庫存)<?php$myp = array(new product("阿Q桶麵",30,560), 
                $selname="";
                //讀取selection的數值//////////////////////////////////////////////while(list($i,$v) = each($myp)){ if($myp[$i]->name==$selname) {$myprice = $myp[$i]->price; 
              ?>
              <select class="col-sm-10" name="list01name" class="form-control" ><option value="阿Q桶麵" <?php if($key==0){echo 'selected';}?>>阿Q桶麵</option> 
               
              <div class="col-sm-10"><input type="text" class="form-control" name="price" value="<?php echo $myprice;?> "></div>
              ☎成果範例:結果範例 
             ☎程式碼:程式碼 
              
 
             
            
              6 
               
                範例12-6:雲端主機計算陣列,計算各科全班平均成績
                1.前端網頁用多個陣列stuname[],數學math[],英文english[]
                2.如何把前端陣列,變成後端的物件陣列:用迴圈foreach(){$stu[$i]  = new student($_POST['陣列'][$i],$_POST['陣列'][$i],$_POST['陣列'][$i]); 
                 
                3.如何更新畫面上最新的input text 數學,英文的輸入數值:在value="<?php if(isset($_POST['stuname'])){echo  $_POST['math'][0] ;}else echo 85;?>" >
                                 
              範例結果 
                範例12-6:雲端主機計算陣列,計算各科全班平均成績
<?php
                if(isset($_POST['stuname'])){$stu[$i] = new student($_POST['stuname'][$i],$_POST['math'][$i],$_POST['english'][$i]); 
                //////計算全班數學,英文平均//////////////////////////////////$avgmath =$temp1/count($stu); 
                //////更新最新的input text 數學,英文輸入數值////////////////////////////////
                }// end if(isset())
              ?>
              <input type="text" size="6"  maxlength="3 class="form-control" name="math[]" value="<?php if(isset($_POST['stuname'])){echo $_POST['math'][0] ;}else echo 85;?>">
               
              <div class='row'><?php echo $avgmath; ?> </label><?php echo $avgenglish; ?> </label></div>
              ☎成果範例:結果範例 
             ☎程式碼:程式碼 
              
 
             
            
              7 
              
範例12-7物件陣列(把陣列當作物件來操作):ArrayObject(陣列)
範例結果 
                物件陣列(把陣列當作物件來操作):ArrayObject(陣列) 
                取出值:->offsetGet:$objay->offsetGet(2) 
                非編號指標物件陣列取出值,offsetGet:$objay->offsetGet('李大同') 
                計算物件陣列ArrayObject的數目:$a->count() 
                foreach迴圈印出物件陣列ArrayObject: foreach($arrayObj as $i=>$v){) 
                新增一個元素到ArrayObject陣列最後:->append(元素1 )
                新增二個元素以上到ArrayObject陣列最後:->append(陣列),或是->append(array(元素1,元素2)) 
                檢查某個指標(文字或編號)是否存在:->offsetExists(編號)  
                修改某個指標(文字或編號)的內容:->offsetSet(編號,數值)  
                前往某個指標(編號):$iterator->seek(編號)  
                到下一筆:$iterator->next() 
                 
                範例結果 
                 
                ArrayObject物件陣列若要用->取出值,則宣告時必須:                = new ArrayObject($data, ArrayObject::ARRAY_AS_PROPS) 
                若是宣告成$arrayObj = new ArrayObject($data);,不能用->,必須用->offsetGET()  
                ArrayObject物件陣列= new ArrayObject($data, ArrayObject::ARRAY_AS_PROPS)
                計算物件陣列ArrayObject的數目:count(陣列) 
                var_dump(陣列) 
                印出全部物件陣列1foreach($arrayObj as $i=>$v){) 
                ArrayObject物件陣列,不能使用二維陣列 
 
              
範例12-7物件陣列(把陣列當作物件來操作):ArrayObject(陣列)
<?php
                $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");
                                  echo "////////////////////////////////////////////////////////////////////<br/>";$objay->offsetGet(2); \$objay->2 出現錯誤"; 
                                  echo "////////////////////////////////////////////////////////////////////<br/>";.$objary2->offsetGet('李大同') ;
                                  echo "////////////////////////////////////////////////////////////////////<br/>";$objay->count() ;
                                  echo "////////////////////////////////////////////////////////////////////<br/>";foreach($objay as $i=>$v){ 
                                  echo "////////////////////////////////////////////////////////////////////<br/>";$objay->append("mango"); 
                                  echo "////////////////////////////////////////////////////////////////////<br/>";$objay->append(array("lemon","papaya")); 
                                  echo "////////////////////////////////////////////////////////////////////<br/>";$objay->offsetExists('score') ."<br/>";
                                  echo "////////////////////////////////////////////////////////////////////<br/>";$objay->offsetSet('李大同','0'); 
                                  echo "////////////////////////////////////////////////////////////////////<br/>";$iterator = $objay->getIterator(); 
                                  echo "////////////////////////////////////////////////////////////////////<br/>";$iterator->next(); .$iterator->key() ."<br/>";;$iterator->current() ."<br/>";;$iterator->rewind(); 
                  
                echo "////////////////////////////////////////////////////////////////////<br/>";$data = array('name'=>'張花花','email'=>'huahua@domain.com','score'=>70); 
                                echo "//計算物件陣列ArrayObject的數目:count(陣列)<br/>";count($arrayObj); 
                echo "印出全部物件陣列".var_dump($arrayObj) ;.print_r($arrayObj) ;
                                  echo "////////////////////////////////////////////////////////////////////<br/>";foreach($arrayObj as $i=>$v){ echo $i.':'.$v."<br/>"; 
                                  echo "////////////////////////////////////////////////////////////////////<br/>";ArrayObject物件陣列,不能使用二維陣列 <br/>";                 
              ☎成果範例:結果範例 
             ☎程式碼:程式碼 
              
 
             
            
                
             
     
	
                
	             
            
              Chp13. PHP讀取資料庫方法一:程序導向的介面:mysqli_connect(),mysqli_query(), mysqli_fetch_array()  
             
            
                練習範例 
                13-1讀取第1,2筆記錄,計算筆數 13-2讀取資料庫全部記錄 13-3讀取記錄分頁顯示 13-4印出所有資料,分頁顯示(首頁,上頁,下頁,尾頁)     
            
                  
                13-5點按標題,自動排序 13-6SQL 語法:函數計算筆數,計算最大值,計算最低值,計算總和,計算平均值 13-7新增一筆記錄到資料表 13-8刪除一筆記錄  
            
                  
                13-9修改一筆記錄 13-10新增一筆記錄(避免SQL Injection,輸入一些特殊字元而逃過檢查,而造成正常登入)) 13-11留言板card  
            
              關鍵程式碼(頭尾連線物件) 
              mysql.inc.php mysqlclose.inc.php   
                
             
            
              關鍵程式碼(一般) 
              查詢所有記錄 查詢關鍵字  查詢根據某欄位排序   
            
                
              新增一筆記錄 刪除一筆記錄 修改一筆記錄   
             
            
                
              總共幾筆記錄 總共幾個欄位 查詢結果一次 給定陣列 查詢結果迴圈 給定陣列  
            
              關鍵程式碼(SQL Injection ) 
              查詢所有記錄 新增一筆記錄 刪除一筆記錄 修改一筆記錄  
            
              關鍵程式碼(表格呈現) 
              查詢顯示全部(1)不分頁,bootstrap,沒排序 查詢顯示顯示分頁-沒排序-沒刪除修改 查詢顯示顯示分頁-有排序-沒刪除修改   
             
            
                
              查詢顯示顯示分頁-有排序-有刪除修改   
                
                
             
            
              關鍵程式碼(輸入文字按鈕) 
              一組輸入文字方塊+按鈕(1)按鈕後,文字會不見 一組輸入文字方塊+按鈕(2)按鈕後,文字保留 兩組輸入文字方塊,一個按鈕(在同一行)   
             
            
              關鍵程式碼(留言板card) 
              留言板card顯示全部(1) 留言板card顯示全部(2) 留言板card顯示分頁   
             
            
              關鍵程式碼(其它) 
              查詢資料表,顯示全部(不分頁,bootstrap) 查詢資料表,顯示全部(分頁,排序,bootstrap)   
                
             
            
                
              新增刪除修改一筆(分頁,bootstrap)   
                
                
             
            
              下載練習mySQL資料庫 
              下載資料庫   
                
                
             
            
                
              關鍵程式碼(mysql.inc.php)
              //引入資料庫設定檔案require_once("mysql.inc.php"); 
<?php
                //連線資料庫伺服器
                if (mysqli_connect_errno($conn))
                //設定連線的字元集為 UTF8 編碼
 
            
                
              關鍵程式碼(mysql.inc.php)
                ////釋放記憶體////////////////////////////require_once("mysqlclose.inc.php"); 
<?phpmysqli_free_result($result);  // 釋放result物件佔用的記憶體 
              ?>
 
            
                
              關鍵程式碼
                //引入資料庫設定檔案require_once("mysql.inc.php"); 
               
              ////釋放記憶體////////////////////////////require_once("mysqlclose.inc.php"); 
<?phpheader('Content-Type: text/html; charset=utf-8'); 
                //引入資料庫設定檔案require_once("mysql.inc.php"); 
                                  // 【書籍】欄位$result = mysqli_query($conn, $sql); 
                //使用表格顯示資料
                //使用迴圈逐筆讀取記錄while ($row = mysqli_fetch_array($result)) { 
                echo '</table>';
                ////釋放記憶體////////////////////////////require_once("mysqlclose.inc.php"); 
 
            
                
              總共幾筆記錄
                $num = mysqli_num_rows($result);
<?php$num = mysqli_num_rows($result); 
              ?>
 
            
                
              總共幾個欄位
                $num = mysqli_num_fields($result); 
<?php $num = mysqli_num_fields($result); 
              ?>
 
            
                
              查詢結果一次 給定陣列
                 $rowall  
<?php一次 給定陣列$rowall = mysqli_fetch_all($result,MYSQLI_ASSOC); 
              ?>
                            MYSQLI_ASSOC:文字欄位
 
            
                
              查詢結果迴圈 給定陣列
              $row[]= 
<?php迴圈 給定陣列                  while($row[]=mysqli_fetch_array($result,MYSQLI_ASSOC)){ }
              ?>
              $row=mysqli_fetch_array($result,MYSQLI_ASSOC);MYSQLI_ASSOC:文字欄位               
                                    
            
              1 
               
                PHP讀取資料庫三種方法:  
                                方法一:程序導向的介面() :mysqli_connect(),mysqli_query(), mysqli_fetch_array() 方法二:物件導向的介面() 方法三:物件導向的介面() 
                
                方法一:程序導向的介面( 
                                  將查詢回傳的陣列設定為 $row 陣列:                  $row = mysqli_fetch_array($result);  $row['姓名']  $row[0]  
                 
                //第2筆記錄                  $row = mysqli_fetch_array($result);  $row['姓名']  
                 
                //最後一筆記錄
                最後一筆記錄,上述這個執行會傳回false (沒有資料庫記錄值) 
                應用:所以把所有資料迴圈一次,可以用while($row = mysqli_fetch_array($result)){.....};  
                因為一旦false就不會再執行迴圈while了
                 
                總共幾筆記錄                 $num = mysqli_num_rows($result);  
                判別是否查到資料 if(mysqli_num_rows(\$result)>0 ){...}
                兩種查詢的指令,都可以 mysqli_fetch_row()  讀取一筆記錄, mysqli_fetch_array()  讀取一筆記錄, 
                將查詢回傳的陣列設定為 $row 陣列:                $row = mysqli_fetch_row($result);  
                 
                
                  範例結果 
              
              
               
<?php
                                  //資料庫設定資料庫名稱";  "密碼"; 
                //連線資料庫伺服器
                if (mysqli_connect_errno($conn))
                //設定連線的字元集為 UTF8 編碼
                //查詢【員工】資料表的的資料SELECT * FROM 員工") ;
                //--------- 讀取第 1 筆記錄 ---------------$row = mysqli_fetch_array($result); $row[0]"; $row[1]"; $row[2]"; 
                //以欄位名稱字串為索引取得資料. $row['姓名']; .$row['地址'] ."</p>";
                                  echo "//////第2筆記錄//////////////////////////////////////////////// <br/>";$row = mysqli_fetch_array($result,MYSQLI_ASSOC); $row['姓名']; .$row['地址'] ."</p>";
                $num = mysqli_num_rows($result); 
                                  echo "/////判別是否查到資料//////////////////////////////////// <br/>";if(mysqli_num_rows(\$result)>0 ){...}; <br/>";
              ////釋放記憶體////////////////////////////mysqli_free_result($result);  // 釋放result物件佔用的記憶體 
 
            
              2 
              印出所有查詢的資料
                讀取第全部記錄                 while($row = mysqli_fetch_array($result)){.....};  
                因為一旦false就不會再執行迴圈while了
                注意:SQL語法:其中的分隔必須是, 不能說中文, 
               
              範例結果 
<?php
                                  //資料庫設定資料庫名稱";  "密碼"; 
                //連線資料庫伺服器
                if (mysqli_connect_errno($conn))
                //設定連線的字元集為 UTF8 編碼
                //查詢【員工】資料表的的資料
                echo "<table border=1><tr><th>姓名</th><th>職稱</th><th>出生日期</th><th>地址</th><th>電話號碼</th></tr>";while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){ $row['姓名 ']."</td><td>".$row['職稱 ']."</td><td>".$row['出生日期 ']."</td><td>".$row['地址 ']."</td><td>".$row['電話號碼 ']."</td></tr>";mysqli_free_result($result);  // 釋放result物件佔用的記憶體 
 
            
              3 
               
              印出所有資料,分頁顯示(數字頁數超連結)
                              1.關鍵一:設定一個二維陣列,在迴圈內儲存所有資料表記錄$rowpage[]=mysqli_fetch_array($result  
              第二位同學的三個欄位:、$rowpage[1][0],$rowpage[1][1],$rowpage[1][2]  
              2.關鍵二:分頁顯示要設定幾個參數://每頁顯示筆數:$numperpage  
              3.關鍵三:點按頁數的超連結,用$_GET['pagenum'] 來讀取
               
              範例結果 
<?php
                ///////////////////////////////////////////////////資料庫名稱";  "密碼"; 
                //連線資料庫伺服器
                if (mysqli_connect_errno($conn))
                //設定連線的字元集為 UTF8 編碼
                //查詢【員工】資料表的的資料$result=mysqli_query($conn, "SELECT * FROM books"); 
                //給定$rowpage[][]二維陣列/ /////////////////////////////////////////////////////while( $rowpage[] =mysqli_fetch_array($result,MYSQLI_ASSOC) ){$numperpage=8; //每頁顯示筆數 $nowpage $nowpage =$_GET['pangenum'];  $nowpage =1; /每頁顯示編號的min,max $min=($nowpage-1)*$numperpage; $max = $totalnum; 
                //顯示表格/////////////////////////////////////////////二維陣列無法用字串連接,要用sprint才行 sprintf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']); 
                }
                f($i==$nowpage)echo $i."  ";echo "<a href='exp13-3.php?pangenum=".$i."'>".$i."</a>  ";mysqli_free_result($result);  // 釋放result物件佔用的記憶體 
 
            
              4 
              印出所有資料,分頁顯示(首頁,上頁,下頁,尾頁)
                1.關鍵一:判斷$nowpage=1 不顯示上一頁,$nowpage=最後頁 ,不顯示下一頁 
                2.關鍵二:下一頁 :"<a href='exp13-4.php?pagenum=".($nowpage+1)  
                3.關鍵三:若要用按鈕button跳網頁,onclick="javascript:location.href =
                3.關鍵四:但是若button連結網頁要傳遞其它input-text的數值,就要到javascript function內,才能取值ocation.href = "exp13-4.php?pagenum= " + mynum.value; } 
                4.關鍵五:超連結的單引號內不可再有單引號(必須用雙引號,且前面必須加上\ : \" exp13-4.php?pagenum=".($mynum.value).\" "' 
               
              範例結果 
<script type="text/javascript">function gopage(){ 
                <style>table {border:1px solid black; width:450px; 
                </head>
                <body>
                /////////////////////////////////////////////////////////資料庫名稱";  "密碼"; 
                
                //連線資料庫伺服器
                if (mysqli_connect_errno($conn))
                //設定連線的字元集為 UTF8 編碼
                //查詢【員工】資料表的的資料
                //給定$rowpage[][]二維陣列//////////////////////////////////////////////////////$rowpage[]=mysqli_fetch_array($result,MYSQLI_ASSOC )){
                //顯示表格///////////////////////////////////////////
                }
                ///顯示頁數//////////////////////////////////////////////
                echo "<a href='exp13-4.php?pagenum=1'>首頁</a>  ";
                if($nowpage>1)echo "<a href='exp13-4.php?pagenum=".($nowpage-1) ."'>上一頁 </a> ";
                if($nowpage<$totalpage)echo "<a href='exp13-4.php?pagenum=".($nowpage+1) ."'>下一頁  </a> ";
                echo "<a href='exp13-4.php?pagenum=".$totalpage. "'>尾頁 </a> ";
                echo " 跳到:<input type='text' id='mynum' size=3 value='".$nowpage." ' />";
                echo "<input type='button' onclick='gopage() ' value='前往' />";
                          ////釋放記憶體////////////////////////////mysqli_free_result($result);  // 釋放result物件佔用的記憶體 
 
            
              5 
               
              點按標題,自動排序select * from 資料表 order by 欄位 asc  
              2.由大到小:select * from 資料表 order by 欄位 desc  
              3.點按標題排序:在表格標題,加上超連結:<th><a href='exp13-5.php?sortcolumn=書籍編號 '>書籍編號                 if(isset($_GET['sortcolumn'])){...} 
               
              範例結果 
//資料庫設定資料庫名稱";  "密碼"; 
                //連線資料庫伺服器
                if (mysqli_connect_errno($conn))
                //設定連線的字元集為 UTF8 編碼
                ///讀取要排序的欄位 //////////////////if(isset($_GET['sortcolumn'])){ $sortcolumn = $_GET['sortcolumn']; $sortcolumn = "書籍編號"; 
                //查詢【員工】資料表的的資料
                //給定$rowpage[][]二維陣列//////////////////////////////////////////////////////,MYSQLI_ASSOC )){
                //顯示表格///////////////////////////////////////////<th><a href=' exp13-5.php?sortcolumn=書籍編號 '>書籍編號</a></th><th><a href=' exp13-5.php?sortcolumn=書籍名稱 '>書籍名稱</a></th> <th><a href='exp13-5.php?sortcolumn=價格'>價格</a></th></tr>";
                }
                ......................mysqli_free_result($result);  // 釋放result物件佔用的記憶體 
 
            
              6 
               
                SQL 語法:函數
                                  1.計算筆數: count(欄位)  as 書籍數量 
                2.計算最大值: max(欄位) a s 最高價 
                3.計算最低值: min(價格) a s 最低價 
                4.計算總和: sum(價格)  as 總和價 
                5.計算平均值: avg(價格) a s 平均價 
                  
              範例結果 
//查詢【員工】資料表的的資料count(書籍編號) as 書籍數量 , max(價格) as 最高價 , min(價格) as 最低價,  sum(價格) as 總和價 , avg(價格) as 平均價  FROM books"); 
             
            
              7 
               
                新增一筆記錄到資料表 
                1.$sql="INSERT 資料表  (書籍名稱, 數量) VALUES ('{$_POST['name']} ','{$_POST['qty']} ')";
                2.SQL 語法字串內若要加入:$_POST['bookname'],只要前後用大括弧即可{$_POST['bookname']}  
                 
                範例結果 
//引入資料庫設定檔案require_once("mysql.inc.php"); 
                if(isset($_POST['bookname']) ){$sql="INSERT books (書籍名稱, 價格) VALUES ('{$_POST['bookname']}','{$_POST['bookprice']}')"; 
              ////釋放記憶體////////////////////////////require_once("mysqlclose.inc.php"); 
 
            
              8 
               
                1.刪除一筆記錄:$sql="delete from 資料表 where 欄位=10" ;
                2.判別是否刪除一筆記錄: if(mysqli_affected_rows($conn)>0) {....} 
                3.SQL 語法字串內若要加入:$_POST['bookname'],只要前後用大括弧即可{$_POST['bookname']} 
                 
                範例結果 
//引入資料庫設定檔案require_once("mysql.inc.php"); 
                //刪除欄位/////////$sql="delete from books where 書籍編號=".$_GET['delnum'];  
                if(mysqli_affected_rows($conn)>0) mysqli_affected_rows($conn) ."筆記錄";else 
              ////釋放記憶體////////////////////////////require_once("mysqlclose.inc.php"); 
 
            
              9 
               
                1.修改一筆記錄:"update資料表 set 文字欄位='..',數字欄位=5 where 欄位=10 “ 
                2.判別是否修改一筆記錄: if(mysqli_affected_rows($conn)>0){. ...} 
                 
                exp13-9.php
                 
                範例結果 
//引入資料庫設定檔案require_once("mysql.inc.php"); 
                //修改欄位///////////$sql="update books set 書籍名稱='".$_POST['editname']."',價格=".$_POST['editprice']." where 書籍編號=".$_POST['editnum'];  
                if(mysqli_affected_rows($conn)>0) mysqli_affected_rows($conn) ."筆記錄";else 
              ////釋放記憶體////////////////////////////require_once("mysqlclose.inc.php"); 
 
            
              10 
               
                避免SQL Injection
                                  1.讀取$_POST['..'],$_GET['..']前要先過濾特殊字元: $sql="INSERT books (書籍名稱, 價格) VALUES (?,?)";  mysqli_prepare ($conn,$sql);  mysqli_stmt_bind_param ($stmt, 'sd',$_POST['bookname'], $_POST['bookprice']);  mysqli_stmt_execute($stmt);  
                if (mysqli_affected_rows($conn) > 0 ){echo '已成功新增一筆記錄';} 
                 
                範例結果 
//引入資料庫設定檔案require_once("mysql.inc.php"); 
                //新增欄位////////////////////
                if(isset($_POST['bookname'])){$sql="INSERT books (書籍名稱, 價格) VALUES (?,?)"; 
                $stmt = mysqli_prepare($conn,$sql); 
                                  // 繫結參數mysqli_stmt_bind_param($stmt, 'sd',$_POST['bookname'], $_POST['bookprice']); 
                // 寫入資料庫mysqli_stmt_execute($stmt); 
                if (mysqli_affected_rows($conn) > 0 ){
              ////釋放記憶體////////////////////////////require_once("mysqlclose.inc.php"); 
 
            
              11 
               
                留言板card
                exp13-11.php
                 
                留言板新增留言注意:但是無法顯示換行,除非htmlspecialchars,nl2br,str_replace轉換 htmlspecialchars ($_POST['message'],ENT_QUOTES ); str_replace ('  ', '  ',  nl2br ($message));   
                 
              範例結果 
//引入資料庫設定檔案require_once("mysql.inc.php"); 
                //查詢【員工】資料表的的資料--過濾特殊字元
                //給定$rowpage[][]二維陣列//////////////////////////////////////////////////////,MYSQLI_ASSOC )){
                ///計算顯示的編號~幾號/////////////////////////////////////////////////////
                $max=($nowpage-1)*$numperpage+$numperpage;
                //顯示表格///////////////////////////////////////////
                for($i=$min;$i<$max;$i++){ 
                echo "<br/>";
                ///顯示頁數//////////////////////////////////////////////
                for($i=1;$i<=$totalpage;$i++){
                if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp13-11.php?pagenum=".($nowpage+1)."'>下一頁</a></li>";
                echo "<li class='page-item'>  跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
                ////釋放記憶體////////////////////////////require_once("mysqlclose.inc.php"); 
                 
                exp13-11b.php 
                $date = new DateTime('now',new DateTimeZone('Asia/Taipei')); 
                ////////////////////////但是無法顯示換行,除非htmlspecialchars,nl2br,str_replace轉換 /////htmlspecialchars ($_POST['name'],ENT_QUOTES );htmlspecialchars ($_POST['message'],ENT_QUOTES ); $message= str_replace ('  ', '  ',  nl2br ($message));  $sql="INSERT guestbook (姓名,留言,日期時間) VALUES (?,?,?)"; 
                /////前往留言板瀏覽全部留言/////////////////////////
               
 
            
              12 
               
                查詢資料表,顯示全部
                (不分頁,bootstrap)
                範例結果 
//查詢【員工】資料表的的資料,MYSQLI_ASSOC )){
 
            
              12 
               
                查詢資料表,顯示全部
                (分頁,標題排序,bootstrap)
                範例結果 
//顯示表格///////////////////////////////////////////
 
            
              12 
               
                分頁區
                (沒有數字頁,只有頁首,上頁,跳頁)
                範例結果 
///顯示頁數//////////////////////////////////////////////
               
 
            
              12 
               
                分頁+bootstrap
                (有數字頁,只有頁首,上頁,跳頁)
                範例結果 
///顯示頁數//////////////////////////////////////////////
                if($nowpage>1)echo "<li class='page-item'><a class='page-link' href='exp13-9.php?pagenum=".($nowpage-1)."&sortcolumn=".$sortcolumn."'>上一頁</a></li> ";
                for($i=1;$i<=$totalpage;$i++){
                if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp13-9.php?pagenum=".($nowpage+1)."&sortcolumn=".$sortcolumn."'>下一頁</a></li> ";
                echo "<li class='page-item'>跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
 
            
              12 
               
                輸入:書名,價格,兩個欄位+一個按鈕
                (在同一行)
                範例結果 
<form class="form-inline" method="post" action="exp13-9.php">
 
            
              13 
               
                顯示表格+bootstrap+可刪除+可修改+可排序
                範例結果 
//顯示表格///////////////////////////////////////////
 
            
              14 
               
                留言板card顯示面板
                範例結果 
for($i=$min;$i<$max;$i++){
 
            
                
             
  
      
   
  
    Chp14. PHP讀取資料庫方法二:物件導向的介面:$mysqli->query($sql), $result->fetch_array() 
   
  
    上課範例 
    14-1使用w3cschool的PHP連線mySQL模板測試連線 14-2使用w3cschool的PHP連線mySQL模板讀取資料表 14-3單筆方式讀取資料庫 14-4迴圈輸出全部資料(while)  
  
    14-5迴圈輸出全部資料(foreach) 14-6以表格方式顯示資料庫(while) 14-7以表格方式顯示資料庫(foreach) 14-8關鍵字查詢(foreach)  
  
    14-9新增資料(insert into) 14-10刪除資料(delete from) 14-11查詢單筆資料 14-12修改單筆資料    
  
    觀摩範例 
    14-1讀取第1,2筆記錄,計算筆數 14-2讀取資料庫全部記錄 14-3讀取記錄分頁顯示 14-4印出所有資料,分頁顯示(首頁,上頁,下頁,尾頁)  
  
    14-5點按標題,自動排序 14-6SQL 語法:函數計算筆數,計算最大值,計算最低值,計算總和,計算平均值 14-7新增一筆記錄到資料表 14-8刪除一筆記錄  
  
    14-9修改一筆記錄 14-10新增一筆記錄(避免SQL Injection,輸入一些特殊字元而逃過檢查,而造成正常登入)) 14-11留言板card  
  
    關鍵程式碼(頭尾連線物件) 
    mysqlobj.inc .phpmysqlobjclose.inc.php   
      
   
  
    下載練習mySQL資料庫 
    下載資料庫   
      
      
   
  
    關鍵程式碼(一般) 
    查詢所有記錄 查詢關鍵字  查詢根據某欄位排序  新增一筆記錄  
  
      
    刪除一筆記錄 修改一筆記錄   
      
   
  
      
    總共幾筆記錄 總共幾個欄位 查詢結果一次 給定陣列 
    查詢結果迴圈 給定陣列  
  
    關鍵程式碼(SQL Injection ) 
    查詢所有記錄 新增一筆記錄 刪除一筆記錄 修改一筆記錄  
  
    關鍵程式碼(表格呈現) 
    查詢顯示全部(1)不分頁,bootstrap,沒排序 查詢顯示顯示分頁-沒排序-沒刪除修改 查詢顯示顯示分頁-有排序-沒刪除修改   
   
  
      
    查詢顯示顯示分頁-有排序-有刪除修改   
      
      
   
  
    關鍵程式碼(輸入文字按鈕) 
    一組輸入文字方塊+按鈕(1)按鈕後,文字會不見 一組輸入文字方塊+按鈕(2)按鈕後,文字保留 兩組輸入文字方塊,一個按鈕(在同一行)   
   
  
    關鍵程式碼(留言板card) 
    留言板card顯示全部(1) 留言板card顯示分頁   
   
  
    下載練習mySQL資料庫 
    下載資料庫   
      
      
   
  
    1 
    14-1使用w3cschool的PHP連線mySQL模板測試連線
      
      範例14-1使用w3cschool的PHP連線mySQL模板測試連線1.下載資料庫 
      2.安裝資料庫到mySQL
3.複製w3cschool的PHP連線mySQL模板
1.w3cschool的PHP連線mySQL模板(英文) 
2.w3cschool的PHP連線mySQL模板(中文) 
      4.注意:若是資料庫有中文,要加上編碼charset設定:$conn->set_charset("utf8");
5.測試連線結果範例 程式碼 
        
 
     
  
    1 
    14-2使用w3cschool的PHP連線mySQL模板讀取資料表
      
      14-2使用w3cschool的PHP連線mySQL模板讀取資料表1.下載資料庫 
      2.安裝資料庫到mySQL
3.複製w3cschool的PHP連線mySQL模板
1.w3cschool的PHP連線mySQL模板(英文) 
        2.w3cschool的PHP連線mySQL模板(中文) 
        4.注意:若是資料庫有中文,要加上編碼charset設定:$conn->set_charset("utf8");
5.測試連線結果範例 程式碼 
                
 
      
  
    1 
    14-3單筆方式讀取資料庫
      
      14-3單筆方式讀取資料庫1.下載資料庫 
      2.安裝資料庫到mySQL
3.讀取資料庫的四個步驟:
        //步驟1.連線資料庫(ch09)注意:若是資料庫有中文,要加上編碼charset設定:$conn->set_charset("utf8");
5.取得資料的方法(函數)有 4 種:
    
    (1).fetch_row():取得一列資料fetch_assoc():將讀出的資料Key值設定為該欄位的欄位名稱。
    fetch_array():將讀出的資料同時以數字與欄位名稱各自存一次在陣列之中,相當於同一個值會出現兩次。
    https://richarlin.tw/blog/php-mysql-fetch/
    https://richarlin.tw/blog/php-mysql-fetch/
    https://www.php.net/manual/en/mysqli-result.fetch-all.php
    6.讀取全部資料的方法:fetch_all()
    
    範例:$rows = $result->fetch_all(參數);7.輸出json文字格式的方法:json_encode()
    ☎輸出全部資料(用json格式):echo json_encode($rows);結果範例 程式碼 
                結果範例 程式碼 
                
               
     
  
    1 
    14-4迴圈輸出全部資料(while)
      
      14-4迴圈輸出全部資料(while)1.下載資料庫 
      2.安裝資料庫到mySQL
      3.迴圈,全部輸出,有二種方法:
      (1)while():while($row = $result->fetch_assoc())
      (2)foreach():fetch_all(MYSQLI_ASSOC);再結合 foreach($rowall as $item)
   
      結果範例 程式碼 
                 
     
  
    1 
    14-5迴圈輸出全部資料(foreach)
      
      14-5迴圈輸出全部資料(foreach)1.下載資料庫 
      2.安裝資料庫到mySQL
3.迴圈,全部輸出,有二種方法:
      (1)while():while($row = $result->fetch_assoc())
      (2)foreach():fetch_all(MYSQLI_ASSOC);再結合 foreach($rowall as $item)
    
      4.第二種方法:foreach():fetch_all(MYSQLI_ASSOC);再結合 foreach($rowall as $item)
      $rowall = $result->fetch_all(MYSQLI_ASSOC);結果範例 程式碼 
                 
     
  
    1 
    14-6以表格方式顯示資料庫(while)
      
      14-6以表格方式顯示資料庫(while)1.下載資料庫 
      2.安裝資料庫到mySQL
3.迴圈,全部輸出,有二種方法:
      (1)while():while($row = $result->fetch_assoc())
      (2)foreach():fetch_all(MYSQLI_ASSOC);再結合 foreach($rowall as $item)
    
      結果範例 程式碼 
                 
      
  
    1 
    14-7以表格方式顯示資料庫(foreach)
      
      14-7以表格方式顯示資料庫(foreach)1.下載資料庫 
      2.安裝資料庫到mySQL
3.迴圈,全部輸出,有二種方法:
      (1)while():while($row = $result->fetch_assoc())
      (2)foreach():fetch_all(MYSQLI_ASSOC);再結合 foreach($rowall as $item)
      foreach($rowall as $item)結果範例 程式碼 
                 
       
  
    1 
    14-8關鍵字查詢(foreach)
      
      14-8關鍵字查詢(foreach)1.下載資料庫 
      2.安裝資料庫到mySQL
3.迴圈,全部輸出,有二種方法:
      (1)while():while($row = $result->fetch_assoc())
      (2)foreach():fetch_all(MYSQLI_ASSOC);再結合 foreach($rowall as $item)
      foreach($rowall as $item)結果範例 程式碼 
                 
      
  
    1 
    14-9新增資料(insert into)
      
      14-9新增資料(insert into)1.下載資料庫 
      2.安裝資料庫到mySQL
3.迴圈,全部輸出,有二種方法:
      (1)while():while($row = $result->fetch_assoc())
      (2)foreach():fetch_all(MYSQLI_ASSOC);再結合 foreach($rowall as $item)
      foreach($rowall as $item)結果範例 程式碼 
                 
        
  
    1 
    14-10刪除資料(delete from)
      
      14-10刪除資料(delete from)1.下載資料庫 
      2.刪除記錄
      $str = "";結果範例 程式碼 
                 
     
  
    1 
    範例14-11查詢單筆資料
      
      範例14-11查詢單筆資料1.下載資料庫 
      2.查詢單筆資料
      $id = 0;結果範例 程式碼 
                 
    
  
    1 
    範例14-12修改單筆資料
      
      範例14-12修改單筆資料1.下載資料庫 
      2.修改單筆資料
      //2.修改資料結果範例 程式碼 
                 
              
  
      
    關鍵程式碼(mysqlobj.inc.php)
      //引入資料庫設定檔案mysqlobj .inc.php");require_once("mysqlobj.inc.php"); 
<?php
      //建構物件: 連線資料庫伺服器
      if ($mysqli->connect_errno)  // 存取成員
      //設定連線的字元集為 UTF8 編碼
      ?>
 
  
      
    釋放記憶體
      require_once("mysqlobjclose.inc.php"); 
<?php$mysqli->close();    // 關閉資料庫連接 
      ?>
 
  
      
    總共幾筆記錄
      $num = $result->num_rows;
<?php$num = $result->num_rows; 
      ?>
 
  
      
    總共幾個欄位
      $num = $result->field_count; 
<?php$num = $result->field_count; 
      ?>
 
  
      
    查詢結果一次 給定陣列
      mysqli_fetch_all($result,MYSQLI_BOTH)
      這個指令,在現在版本的php不能用了
<?php$sql="SELECT * FROM books"; 
      ?>
 
  
      
    查詢結果迴圈 給定陣列
      $row[]=$result->fetch_array() 
<?php迴圈 給定陣列while($row[]=$result->fetch_array(MYSQLI_ASSOC )){ $str =$row['書籍名稱']; }
      ?>
      $row = $result->fetch_array(MYSQLI_NUM);
 
  
      
    查詢所有資料表記錄 
<?phpmysqlobj .inc.php");    
      //查詢【員工】資料表的的資料$sql="SELECT * FROM 資料表"; $result = $mysqli->query($sql); 
      //給定$rowpage[][]二維陣列////////////////////////////////////////////////////// while($rowpage[]=$result->fetch_array(MYSQLI_ASSOC )){ 
      ....
      ////釋放記憶體////////////////////////////
      ?>
 
  
      
    關鍵字查詢資料表記錄 
<?phpmysqlobj .inc.php"); 
      //關鍵字查詢資料表的的資料if(isset($_POST['輸入查詢欄位name'])) $result = $mysqli->query($sql); 
       //給定$rowpage[][]二維陣列//////////////////////////////////////////////////////while($rowpage[]=$result->fetch_array(MYSQLI_ASSOC )){ 
      ....
      ////釋放記憶體////////////////////////////$result->close(); 
      
      ?>
 
  
      
    根據某欄位排序 
<?phpmysqlobj .inc.php");
      ///讀取要排序的欄位//////////////////////////if(isset($_GET['sortcolumn'])){ 
      //查詢資料表的的資料 $sql="SELECT * FROM 資料表 order by ".$sortcolumn." desc"; $result = $mysqli->query($sql); 
       //給定$rowpage[][]二維陣列//////////////////////////////////////////////////////while($rowpage[]=$result->fetch_array(MYSQLI_ASSOC )){ 
      ....
      ////釋放記憶體////////////////////////////$result->close(); 
      ?>
 
  
      
    查詢所有資料表記錄 (尚待確認??)
      SQL Injection 方式
      bind_param資料形態 i:整數 
<?phpmysqlobj .inc.php");
      $sql="SELECT * FROM 資料表 where  欄位 =?"; $stmt = $mysqli->prepare($sql);  $stmt->bind_param('s',$_POST['bookname']); $stmt->execute(); 
      //給定$rowpage[][]二維陣列//////////////////////////////////////////////////////while($rowpage[]=$ stmt ->fetch_array(MYSQLI_ASSOC )){ 
      ....
      ////釋放記憶體////////////////////////////$stmt->close(); 
      
      ?>
 
  
      
    新增一筆記錄 
<?phpmysqlobj .inc.php");
      //新增欄位///////////////////////////////////////////if(isset($_POST['bookname'])){ $sql="INSERT 資料表 (書籍名稱, 價格) VALUES ('{$_POST['bookname']}','{$_POST['bookprice']}')"; 
       if ( $mysqli->query($sql) ) // 執行SQL指令 
      ....
      ////釋放記憶體//////////////////////////// require_once("mysqlobjclose.inc.php"); 
      
      ?>
 
  
      
    新增一筆記錄 
      SQL Injection 方式
      bind_param資料形態 i:整數 
<?phpmysqlobj .inc.php");
       $sql="INSERT 資料表  (書籍名稱, 價格) VALUES (?,?)";
       $stmt = $mysqli->prepare($sql);  
       if ( $stmt->execute() ) // 執行SQL指令 
      ....
      ////釋放記憶體////////////////////////////
      
      ?>
 
  
      
    刪除一筆記錄 
<?phpmysqlobj .inc.php");
      //刪除欄位/////if(isset($_GET['delnum'])){  $sql="delete from books where 書籍編號=".$_GET['delnum'];  echo "資料庫刪除記錄成功, 影響記錄數: ". } ....
      ////釋放記憶體//////////////////////////// require_once("mysqlobjclose.inc.php"); 
      
      ?>
 
  
      
    刪除一筆記錄 
      SQL Injection 方式
      bind_param資料形態        i:整數 
<?phpmysqlobj .inc.php");
      //刪除欄位/////if(isset($_GET['delnum'])){ $sql="delete from  資料表 書籍編號=?";  
      $stmt = $mysqli->prepare($sql); _GET ['delnum' ]); if ( $stmt->execute() ) // 執行SQL指令 刪除 記錄成功, 影響記錄數: ". } ....
      ////釋放記憶體////////////////////////////
      
      ?>
 
  
      
    修改一筆記錄 
<?phpmysqlobj .inc.php");
      //修改欄位///if(isset($_POST['editnum'])){ $sql="update 資料表 set 書籍名稱='".$_POST['editname']."',價格=".$_POST['editprice']." where 書籍編號=".$_POST['editnum'];  if ( $mysqli->query($sql) ) // 執行SQL指令 
      ////釋放記憶體//////////////////////////// require_once("mysqlobjclose.inc.ph 
      //最後轉換到主網頁
      ?>
 
  
      
    修改一筆記錄 
      SQL Injection 方式
      bind_param資料形態 i:整數 
<?phpmysqlobj .inc.php");
      //修改欄位/////$sql="update 資料表 set 書籍名稱=?,價格=? where 書籍編號=?";  $stmt = $mysqli->prepare($sql);  $stmt->bind_param('s',$_POST['editname']); if ( $stmt->execute() )  // 執行SQL指令
      ....
      ////釋放記憶體////////////////////////////
      //最後轉換到主網頁
      ?>
 
  
      
     
      查詢結果
      顯示全部(方法一)
      (不分頁,bootstrap,沒排序)
      範例結果 
$sql= "SELECT 姓名,職稱,出生日期,地址,電話號碼 FROM 資料表";mysqli ->query($sql); 
      echo "<table class='table table-striped table-bordered table-condensed'><thead class='thead-light'><th>姓名</th><th>職稱</th><th>出生日期</th><th>地址</th><th>電話號碼</th></tr></thead><tbody>";while($rowpage[]=$result->fetch_array(MYSQLI_ASSOC)){ rowpage  as $i=>$v){$v['姓名']. "</td><td>".$v['職稱']."</td><td>".$v['出生日期']."</td><td>".$v['地址']."</td><td>".$v['電話號碼']."</td></tr>";
 
  
      
    查詢結果
      顯示表格與分頁
      (沒有標題排序)
      (沒有刪除修改)
<?php
      //顯示表格///////////////////////////////////////////
      echo "<br/>";
      ///顯示頁數//////////////////////////////////////////////
      if($nowpage>1)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage-1)."&sortcolumn=".$sortcolumn."'>上一頁</a></li> ";
      for($i=1;$i<=$totalpage;$i++){
      if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage+1)."&sortcolumn=".$sortcolumn."'>下一頁</a></li> ";
      echo "<li class='page-item'>跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
      ?>
 
  
      
    查詢結果
      顯示表格與分頁
      (有標題排序)
      (沒有刪除修改)
<?php
      //顯示表格///////////////////////////////////////////
      }
      ?>
 
  
      
    查詢結果
      顯示表格與分頁
      (有標題排序)
      (有刪除修改)
<?php
      //顯示表格///////////////////////////////////////////
      echo "<br/>";
      ///顯示頁數//////////////////////////////////////////////
      if($nowpage>1)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage-1)."&sortcolumn=".$sortcolumn."'>上一頁</a></li> ";
      for($i=1;$i<=$totalpage;$i++){
      if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage+1)."&sortcolumn=".$sortcolumn."'>下一頁</a></li> ";
      echo "<li class='page-item'>跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
      ?>
 
  
      
    一組輸入文字方塊,按鈕
      (但是按按鈕後,輸入文字會不見)
       
<form class="form-inline" method="post " action="exp15-4.php ">name="bookname"  placeholder="輸入書名">
 
  
      
    一組輸入文字方塊,按鈕
      (按按鈕後,輸入文字還會繼續顯示)
       
<form class="form-inline" method="post " action="exp15-6.php" >name="bookname " value="<?php 
 
  
      
    兩組輸入文字方塊,一個按鈕
      (在同一行)
      (但是按按鈕後,輸入文字會不見)
       
<form class="form-inline" method="post " action="exp15-10.php ">name="bookname"  placeholder="輸入書名">name="bookprice"  placeholder="1">
 
  
      
      
      
   
  
    1 
     
      留言板card顯示面板
      (全部顯示)(方法一)
      範例結果 
while($row=$result->fetch_array(MYSQLI_ASSOC )){ row ['留言編號']."】".$row ['姓名']."</h5>";row ['日期時間']."</h5>";row ['留言']."</p>";
 
  
    2 
     
      留言板card顯示面板
      (分頁顯示)
      範例結果 
//給定$rowpage[][]二維陣列///////
      .........
      for($i=$min;$i<$max;$i++){ rowpage ['留言編號']."】".$rowpage ['姓名']."</h5>";rowpage ['日期時間']."</h5>";rowpage ['留言']."</p>";
 
  
      
   
  
      
   
  
    Chp15. PHP讀取資料庫方法三:物件PDO:$result=$conn->query($sql) 
   
  
    練習範例 
    15-1讀取第1,2筆記錄,計算筆數 15-2讀取資料表全部記錄(兩種方法) 15-3讀取記錄分頁顯示 15-4關鍵字查詢  
  
    15-5記錄剛剛查詢關鍵字(I):較麻煩方法(都用session) 15-6記錄剛剛查詢關鍵字(II):最省事的法(不斷向主機查詢換頁排序) 15-7新增一筆記錄到資料表 15-8刪除一筆記錄  
  
    15-9修改一筆記錄 15-10新增一筆記錄(避免SQL Injection,輸入一些特殊字元而逃過檢查,而造成正常登入)) 15-11留言板card  
  
    關鍵程式碼(頭尾連線物件) 
    mysqlpdo.inc.php   
      
      
   
  
    關鍵程式碼(一般) 
    查詢所有記錄 查詢關鍵字  查詢根據某欄位排序  新增一筆記錄  
  
      
    刪除一筆記錄 修改一筆記錄   
      
   
  
      
    總共幾筆記錄 總共幾個欄位 查詢結果一次 給定陣列 查詢結果迴圈 給定陣列  
  
    關鍵程式碼(SQL Injection ) 
    查詢所有記錄 新增一筆記錄 刪除一筆記錄 修改一筆記錄  
  
    關鍵程式碼(表格呈現) 
    查詢顯示全部(1)不分頁,bootstrap,沒排序 查詢顯示全部(2)不分頁,bootstrap,沒排序 查詢顯示顯示分頁-沒排序-沒刪除修改 查詢顯示顯示分頁-有排序-沒刪除修改  
  
      
    查詢顯示顯示分頁-有排序-有刪除修改   
      
      
   
  
    關鍵程式碼(輸入文字按鈕) 
    一組輸入文字方塊+按鈕(1)按鈕後,文字會不見 一組輸入文字方塊+按鈕(2)按鈕後,文字保留 兩組輸入文字方塊,一個按鈕(在同一行)   
   
  
    關鍵程式碼(留言板card) 
    留言板card顯示全部(1) 留言板card顯示全部(2) 留言板card顯示分頁   
   
  
    下載練習mySQL資料庫 
    下載資料庫   
      
      
   
  
      
    如何在資料表欄位新增{"types":{"1":"蘋果","2":"柳丁","3":"葡萄"}} 
    
      如何在資料表欄位新增{"types":{"1":"蘋果","2":"柳丁","3":"葡萄"}}
   
  
      
    如何印出sql資料表變數二維陣列的指定某個tid的subject 
    
      如何印出sql資料表變數二維陣列的指定某個tid的subject
   
  
      
     sql 的排序:如何依照多個欄位,兩個欄位來排序 
    
      sql 的排序:如何依照多個欄位,兩個欄位來排序
 
  
        
       php select查詢的標準寫法,要加上判別是否有值:if($res->rowCount()) 
      
          php select查詢的標準寫法,要加上判別是否有值:if($res->rowCount())
 
    
          
        select查詢用fetch(),fetchAll()所取出的欄位寫法不同:$info["fup"],$info[0]["fup"] 
        
            select查詢用fetch(),fetchAll()所取出的欄位寫法不同:$info["fup"],$info[0]["fup"]
 
    
          
        使用left join 在最後的where部分,要用全名查詢 
              
          使用left join 在最後的where部分,要用全名查詢{
 
  
      
    如何刪除mysql資料庫所有具有uuid欄位的資料表: 
    
      如何把查詢後的資料表陣列,轉換成字串:
 
  
      
    如何刪除mysql資料庫所有具有uuid欄位的資料表: 
    
      如何刪除mysql資料庫所有具有uuid欄位的資料表:
 
  
      
    小心容易犯錯的sql語法:不可delete *(必須select *) 
    
      小心容易犯錯的sql語法:不可delete *(必須select *)
 
  
      
    養成習慣:刪除前,一定要先查詢是否有值才能刪除,否則會出現錯誤 
    
      養成習慣:刪除前,一定要先查詢是否有值才能刪除,否則會出現錯誤
   
  
      
    解決php先刪除某個資料表的某個fid,但是若沒有該值,就會發現錯誤 
    
      解決php先刪除某個資料表的某個fid,但是若沒有該值,就會發現錯誤
 
  
      
    fdz刪除資料表某一筆的寫法,必須要先判別是否有值 
    
      fdz刪除資料表某一筆的寫法,必須要先判別是否有值:
 
  
      
    fdz修改資料表某一筆的寫法,必須要先判別是否有值 
    
      fdz修改資料表某一筆的寫法,必須要先判別是否有值:
   
  
      
    如何查詢資料表的陣列,轉換成字串 
    
      如何查詢資料表的陣列,轉換成字串:
   
  
      
    一,合併資料表,一對多 
    
      一,合併資料表,一對多:
 
      
    二,合併資料表,一對多,統計總數量(感謝) 
    
      二,合併資料表,一對多,統計總數量(感謝):
 
  
        
      如何將mySql讀取資料表的資料,轉成陣列 
      
        如何將mySql讀取資料表的資料,轉成陣列:
 
  
        
      vcenter,fdz關鍵字查詢的方法 
      
        (1).vcenter,fdz關鍵字查詢的方法:
 
  
      
    取得資料表的筆數(可以用在pagy) 
    
      (1).取得資料表的筆數(可以用在pagy):
 
  
      
    php刪除多筆記錄,刪除多個傳來的ids字串的Final標準寫法) 
    
        php刪除多筆記錄,刪除多個傳來的ids字串的Final標準寫法:
 
  
      
    操作多筆記錄的各種寫法,有兩種方法:簡便法,完整法 
    
      操作多筆記錄的各種寫法,有兩種方法:簡便法,完整法:
 
  
      
    如何在資料表欄位累加上去新的值 
    
      如何在資料表欄位累加上去新的值
   
  
      
    中文亂碼的處理 
    //echo 中文,不顯示亂碼
      //json_encode,顯示中文(不顯示亂碼)
 
  
      
    日期時間儲存到資料庫,要先轉換成字串string 
    //將datetime轉成string,才能儲存到mySql,以24小時制
 
  
      
    關鍵程式碼(mysqlpdo.inc.php)
      //引入資料庫設定檔案mysqlpdo .inc.php");require_once("mysqlpdo.inc.php"); 
<?php
      // 建立 dsn 字串
      try{  // 嘗試連線
 
  
      
    釋放記憶體
<?php$conn = NULL; 
      ?>
 
  
      
    計算查詢結果總共幾筆(筆數),有兩種寫法
      $result->rowCount();
      計算查詢結果總共幾筆(筆數),有兩種寫法:$num = $result->rowCount(); 
      
 
  
      
    總共幾個欄位
      $result->columnCount(); 
<?php $num = $result->columnCount(); 
      ?>
 
  
      
    查詢結果一次 給定陣列
      $row = $result->fetchAll(); 
<?php一次 給定陣列$row = $result->fetchAll(PDO::FETCH_ASSOC);  
      ?>
      輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);  
 
  
      
    查詢結果迴圈 給定陣列
      $row = $result->fetch(PDO::FETCH_BOTH 
<?php迴圈 給定陣列while($row = $result->fetch(PDO::FETCH_ASSOC )) { }
      ?>
      輸出文字欄位:$row = $result->fetch(PDO::FETCH_ASSOC); 
 
  
      
    查詢所有資料表記錄 
      PDO::FETCH_ASSOC: 
<?php
      //查詢【員工】資料表的的資料$sql="SELECT * FROM 資料表"; $result=$conn->query($sql);   // 執行查詢 
      //給定$row[][]二維陣列-文字欄位////////////////////////////$row = $result->fetchAll(PDO::FETCH_ASSOC);  
      ....
      ////釋放記憶體////////////////////////////
      ?>
      輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);  
 
  
      
    關鍵字查詢資料表記錄 
<?php
      //關鍵字查詢資料表的的資料if(isset($_POST['輸入查詢欄位name'])) $result=$conn->query($sql);   // 執行查詢 
      //給定$row[][]二維陣列-文字欄位////////////////////////////$row = $result->fetchAll(PDO::FETCH_ASSOC);  
      ....
      ////釋放記憶體////////////////////////////
      ?>
      輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);  
 
  
      
    根據某欄位排序 
<?php
      ///讀取要排序的欄位//////////////////////////if(isset($_GET['sortcolumn'])){ 
      //查詢資料表的的資料 $sql="SELECT * FROM 資料表 order by ".$sortcolumn." desc"; $result=$conn->query($sql);   // 執行查詢 
      //給定$row[][]二維陣列-文字欄位////////////////////////////$row = $result->fetchAll(PDO::FETCH_ASSOC);  
      ....
      ////釋放記憶體////////////////////////////
      ?>
      輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);  
 
  
      
    查詢所有資料表記錄 (尚待確認??)
      SQL Injection 方式
<?php
      $sql="SELECT * FROM 資料表 where 欄位 ='李大同'"; 
      //給定$row[][]二維陣列-文字欄位////////////////////////////$row = $result->fetchAll(PDO::FETCH_ASSOC);  
      ....
      ////釋放記憶體////////////////////////////
      ?>
      輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);  
 
  
      
    新增一筆記錄 
<?php//新增欄位///////////////////////////////////////////if(isset($_POST['bookname'])){ $sql="INSERT 資料表 (書籍名稱, 價格) VALUES ('{$_POST['bookname']}','{$_POST['bookprice']}')"; 
      if ($conn->exec($sql)) // 執行SQL指令 echo "資料庫新增記錄成功 <br/>";
      }
      ....
      ////釋放記憶體////////////////////////////
      ?>
     
   
  
      
    新增一筆記錄 
      SQL Injection 方式
      PDO::PARAM_BOOL  (integer)PDO::PARAM_NULL  (integer)PDO::PARAM_INT (integer) 沒有浮點數floattype,小數的decimals ,用PDO::PARAM_STR取代 ,而且要轉換變數(string)  $floa
      (2).沒有日期時間,用PDO::PARAM_STR取代。 
<?php
      $sql="INSERT 資料表 (姓名,留言,日期時間) VALUES (?,?,?)";
      // 繫結參數
      // 寫入資料庫
      ....
      ////釋放記憶體////////////////////////////
      ?>
 
  
      
    刪除一筆記錄 
<?php
      //刪除欄位/////if(isset($_GET['delnum'])){ $sql="delete from books 資料表 書籍編號=".$_GET['delnum'];  
      ////釋放記憶體////////////////////////////
      ?>
 
  
      
    刪除一筆記錄 
      SQL Injection 方式
      PDO::PARAM_BOOL  (integer)PDO::PARAM_NULL  (integer)PDO::PARAM_INT (integer) 沒有浮點數floattype,小數的decimals ,用PDO::PARAM_STR取代 ,而且要轉換變數(string)  $floa
      (2).沒有日期時間,用PDO::PARAM_STR取代。 
<?php
      //刪除欄位////$sql="delete from 資料表 where 書籍編號=?";  
      ////釋放記憶體////////////////////////////
      ?>
 
 
      
    修改一筆記錄 
<?php
      //修改欄位///if(isset($_POST['editnum'])){ $sql="update 資料表 set 書籍名稱='".$_POST['editname']."',價格=".$_POST['editprice']." where 書籍編號=".$_POST['editnum'];  
      ////釋放記憶體////////////////////////////
      ?>
 
 
      
    修改一筆記錄(再累加值) 
        修改一筆記錄(再累加值)
 
  
      
    修改一筆記錄 
      SQL Injection 方式
      PDO::PARAM_BOOL  (integer)PDO::PARAM_NULL  (integer)PDO::PARAM_INT (integer) 沒有浮點數floattype,小數的decimals ,用PDO::PARAM_STR取代 ,而且要轉換變數(string)  $floa
      (2).沒有日期時間,用PDO::PARAM_STR取代。 
<?php
      //修改欄位/////$sql="update 資料表 set 書籍名稱=?,價格=? where 書籍編號=?";  
      ....
      ////釋放記憶體////////////////////////////
      ?>
 
  
      
     
      查詢結果
      顯示全部(方法一)
      (不分頁,bootstrap,沒排序)
      範例結果 
$sql= "SELECT 姓名,職稱,出生日期,地址,電話號碼 FROM 資料表";
      echo "<table class='table table-striped table-bordered table-condensed'><thead class='thead-light'><th>姓名</th><th>職稱</th><th>出生日期</th><th>地址</th><th>電話號碼</th></tr></thead><tbody>";$mydata = $result->fetchAll(PDO::FETCH_ASSOC);  $v['姓名']. "</td><td>".$v['職稱']."</td><td>".$v['出生日期']."</td><td>".$v['地址']."</td><td>".$v['電話號碼']."</td></tr>";
 
  
      
     
      查詢結果
      顯示全部(方法二)
      (不分頁,bootstrap,沒排序)
      範例結果 
$sql= "SELECT 姓名,職稱,出生日期,地址,電話號碼 FROM 資料表";
      echo "<table class='table table-striped table-bordered table-condensed'><thead class='thead-light'><th>姓名</th><th>職稱</th><th>出生日期</th><th>地址</th><th>電話號碼</th></tr></thead><tbody>";
 
  
      
    查詢結果
      顯示表格與分頁
      (沒有標題排序)
      (沒有刪除修改)
<?php
      //顯示表格///////////////////////////////////////////
      echo "<br/>";
      ///顯示頁數//////////////////////////////////////////////
      if($nowpage>1)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage-1)."&sortcolumn=".$sortcolumn."'>上一頁</a></li> ";
      for($i=1;$i<=$totalpage;$i++){
      if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage+1)."&sortcolumn=".$sortcolumn."'>下一頁</a></li> ";
      echo "<li class='page-item'>跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
      ?>
 
  
      
    查詢結果
      顯示表格與分頁
      (有標題排序)
      (沒有刪除修改)
<?php
      //顯示表格///////////////////////////////////////////
      }
      ?>
 
  
      
    查詢結果
      顯示表格與分頁
      (有標題排序)
      (有刪除修改)
<?php
      //顯示表格///////////////////////////////////////////
      echo "<br/>";
      ///顯示頁數//////////////////////////////////////////////
      if($nowpage>1)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage-1)."&sortcolumn=".$sortcolumn."'>上一頁</a></li> ";
      for($i=1;$i<=$totalpage;$i++){
      if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage+1)."&sortcolumn=".$sortcolumn."'>下一頁</a></li> ";
      echo "<li class='page-item'>跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
      ?>
 
  
      
    一組輸入文字方塊,按鈕
      (但是按按鈕後,輸入文字會不見)
       
<form class="form-inline" method="post " action="exp15-4.php ">name="bookname"  placeholder="輸入書名">
 
  
      
    一組輸入文字方塊,按鈕
      (按按鈕後,輸入文字還會繼續顯示)
       
<form class="form-inline" method="post " action="exp15-6.php" >name="bookname " value="<?php 
 
  
      
    兩組輸入文字方塊,一個按鈕
      (在同一行)
      (但是按按鈕後,輸入文字會不見)
       
<form class="form-inline" method="post " action="exp15-10.php ">name="bookname"  placeholder="輸入書名">name="bookprice"  placeholder="1">
 
  
      
      
      
   
  
    1 
     
      留言板card顯示面板
      (全部顯示)(方法一)
      範例結果 
foreach($mydata as $i=>$v){ v ['留言編號']."】".$v ['姓名']."</h5>";v ['日期時間']."</h5>";v ['留言']."</p>";
 
  
    1 
     
      留言板card顯示面板
      (全部顯示)(方法二)
      範例結果 
foreach($mydata as $i=>$v){ 
      for($i=$min;$i<$max;$i++){
 
  
    2 
     
      留言板card顯示面板
      (分頁顯示)
      範例結果 
while($row = $result->fetch(PDO::FETCH_ASSOC )) { 
      echo "<div class='card'>";row ['留言編號']."】".$row ['姓名']."</h5>";row ['日期時間']."</h5>";row ['留言']."</p>";
 
  
      
   
  
      
   
  
    **Chp16. ajax非同步http請求 
   
  
    上課範例 
    16-1使用ajax傳遞php的文字 16-2使用ajax傳遞php的一維陣列 16-3使用ajax讀取local電腦的json檔案 16-4使用ajax傳遞php的mysql資料表    
  
    16-5使用ajax關鍵字查詢php的mysql資料      
  
    觀摩範例 
    16-1檢查註冊名(XHR請求) 16-2檢查註冊名(jQuery $.ajax(),dataType=text) 16-3.檢查註冊名(jQuery $.ajax(),dataType=jsonp 16-4.檢查註冊名(jQuery $.ajax(),dataType=jsonp,建立function callBackdata  
  
    16-5-1XHR讀取php一維陣列 16-5-2XHR讀取php二維陣列(失敗) 16-5-3XHR讀取php物件陣列 16-5-4XHR讀取mySQL查詢物件陣列  
  
    16-6-1jQuery $.ajax讀取php一維陣列 16-6-2jQuery $.ajax讀取php二維陣列(失敗) 16-6-3jQuery $.ajax讀取php物件陣列 16-6-4jQuery $.ajax讀取json檔案  
  
    16-6-5jQuery $.ajax讀取mySQL查詢物件陣列 16-6-6jQuery $.ajax傳回mySQL兩組數據陣列   
     
  
    16-7jQuery $.ajax讀取mySQL,Diy自行建立的json 16-8jQuery $.ajax讀取mySQL,Diy自行建立的json,success接收   
     
  
    16-9.陽春ajax分頁(用javascript-DOM事件) 16-10.Bootstrap分頁(用jQuery 的DOM事件) 16-11.Bootstrap分頁排序(用jQuery 的DOM事件) 16-12.Bootstrap刪除(用jQuery 的DOM事件)  
  
    15-9修改一筆記錄 15-10新增一筆記錄(避免SQL Injection,輸入一些特殊字元而逃過檢查,而造成正常登入)) 15-11留言板card  
  
  
  
      
    下載json檔案 
    book.json school.json personnel.json   
   
  
      
      
    zipcode01.json zipcode02.json   
      
     
  
  
    關鍵程式碼(XHR讀取主機資料) 
    XHR讀取純文字 XHR讀取陣列,物件陣列 XHR讀取json檔案 XHR讀取mySQL查詢物件  
  
    關鍵程式碼(jQuery ajax讀取主機資料) 
    $.ajax讀取純文字 $.ajax讀取陣列,二維陣列,物件陣列 $.ajax讀取json檔案  
  
      
    **$.ajax讀取mySQL查詢物件 **$.ajax傳回mySQL兩組數據陣列 $.ajax讀取jsonp,再由callBackdata函數接收 $.ajax讀取jsonp,callBackdata,但在success接收  
  
      
    $.ajax讀取自己建立的jsonp,再由callBackdata函數接收   
      
      
   
  
      
    關鍵字查詢的ajax寫法 查詢陽春分頁的DOM 查詢bootstrap分頁的DOM 查詢bootstrap分頁+表格排序的DOM  
  
      
    虛擬產生ul-li之DOM元件的$.ajax寫法 虛擬產生table-th之DOM元件的$.ajax寫法   
      
   
  
    關鍵程式碼(一般) 
    查詢所有記錄 查詢關鍵字  查詢根據某欄位排序  新增一筆記錄  
  
      
    刪除一筆記錄 修改一筆記錄   
      
   
  
      
    總共幾筆記錄 總共幾個欄位 查詢結果一次 給定陣列 查詢結果迴圈 給定陣列  
  
    關鍵程式碼(SQL Injection ) 
    查詢所有記錄 新增一筆記錄 刪除一筆記錄 修改一筆記錄  
  
    關鍵程式碼(表格呈現) 
    查詢顯示全部(1)不分頁,bootstrap,沒排序 查詢顯示全部(2)不分頁,bootstrap,沒排序 查詢顯示顯示分頁-沒排序-沒刪除修改 查詢顯示顯示分頁-有排序-沒刪除修改  
  
      
    查詢顯示顯示分頁-有排序-有刪除修改   
      
      
   
  
    關鍵程式碼(輸入文字按鈕) 
    一組輸入文字方塊+按鈕(1)按鈕後,文字會不見 一組輸入文字方塊+按鈕(2)按鈕後,文字保留 兩組輸入文字方塊,一個按鈕(在同一行)   
   
  
    關鍵程式碼(留言板card) 
    留言板card顯示全部(1) 留言板card顯示全部(2) 留言板card顯示分頁   
   
  
    下載練習mySQL資料庫 
    下載資料庫   
      
      
   
  
    1 
    16-1使用ajax傳遞php的文字
      
      範例16-1使用ajax傳遞php的文字1.jquery的ajax程式:
 <script>2.php程式:
         <?php    結果範例 程式碼(html) 程式碼(php) 
         
     
  
    1 
    16-2使用ajax傳遞php的一維陣列
      
      範例16-2使用ajax傳遞php的一維陣列1.jquery的ajax程式:
 <script>2.php程式:
         <?php    結果範例 程式碼(html) 程式碼(php) 
         
     
  
    1 
    16-3使用ajax讀取local電腦的json檔案
      
      範例16-3使用ajax讀取local電腦的json檔案1.下載json檔案 
      1.jquery的ajax程式:
      <script>結果範例 程式碼(html)        
         
     
  
    1 
    16-4使用ajax傳遞php的mysql資料表
      
      範例16-4使用ajax傳遞php的mysql資料表1.下載資料庫 
      1.jquery的ajax程式:
      <script>2.php程式:
              <?php    結果範例 程式碼(html) 程式碼(php) 
         
     
  
    1 
    16-5使用ajax關鍵字查詢php的mysql資料
      
      範例16-5使用ajax關鍵字查詢php的mysql資料1.下載資料庫 
      1.jquery的ajax程式:
      <script>2.php程式:
              <?php    結果範例 程式碼(html) 程式碼(php) 
         
               
  
        
      如何從javascript經由ajax傳送二維陣列到php 
      
          如何從javascript經由ajax傳送二維陣列到php
           
  
      
    ajax如何讀取傳回的陣列 
    
      10.ajax如何讀取傳回的陣列(json)
   
  
      
    ajax讀取php的json陣列的兩種格式 
           
      32.javascript用ajax讀取php的jsong陣列    
  
      
     
      $.ajax傳回純文字
<script src="jquery/jquery-1.8.3.min.js"></script> 
      <script type="text/javascript">
      //#########################
      <?php
      $txt = "$name 這個姓名沒有人註冊過,可以使用";
      echo $txt;
 
  
      
     
      $.ajax讀取陣列,二維陣列,物件陣列
<script src="jquery/jquery-1.8.3.min.js"></script> 
      <script type="text/javascript">
      /////////////////////////////////////////////////////////
      //####################################
      $myJSON = json_encode($a);
      echo $myJSON;
 
  
      
     
      $.ajax讀取json檔案
<script src="jquery/jquery-1.8.3.min.js"></script> 
      <script type="text/javascript">
 
  
      
     
      **實用
      $.ajax讀取mySQL查詢物件
<script src="jquery/jquery-1.8.3.min.js"></script> 
      <script type="text/javascript">
      //########################################
      //查詢資料表
      //關鍵字查詢資料表的的資料
      //給定$rowpage[][]二維陣列///////////////////
      /////傳回將物件轉換成json的物件////////////////////
      echo $myJSON;
      ////釋放記憶體////////////////
      ?>
 
  
      
     
      **實用
      **$.ajax傳回mySQL兩組數據陣列      
       
<script src="jquery/jquery-1.8.3.min.js"></script> 
      <script type="text/javascript">
      str="<table class='table table-striped table-bordered table-condensed'><thead class='thead-dark'><tr><th>書籍編號</th><th>書籍名稱</th><th>價格</th></tr></thead><tbody>";
      },
      });
      //#########################################
      //引入資料庫設定檔案
      //關鍵字查詢資料表的的資料
      $row = $result->fetchAll(PDO::FETCH_ASSOC);
      //取得查詢結果的筆數
      //目前頁數
      //輸出兩組數據,一個為資料表數據data,一個為參數parameter
      /////傳回將物件轉換成json的物件////////////////////
      echo $myJSON;
      ////釋放記憶體////////////////////////////
      ?>
 
  
      
     
      **實用
      $.ajax讀取自己建立的jsonp,再由callBackdata函數接收      
       
<script src="jquery/jquery-1.8.3.min.js"></script> 
      <script type="text/javascript">
      function callBackdata(txt) {
      //############################
      //關鍵字查詢資料表的的資料
      //將查詢結果,輸出成json物件變數while($row = $result->fetch(PDO::FETCH_BOTH)) { 
      $str .="]));";
      echo $str;
      ?>
 
  
      
     
      **實用 
      已經存在html元件的呼叫$.ajax寫法
       
      例如:textboxk查詢關鍵字
<script src="jquery/jquery-1.8.3.min.js"></script> 
      <script type="text/javascript">
      //###########################
       <form class="form-inline" method="" action=""> onkeyup="ajaxCall('exp16-9-keyword.php?name='+this.value) " placeholder="輸入書名"> 
      <div id="result"></div>
 
  
      
     
      **實用 
      自己虛擬製造的DOM元件之呼叫$.ajax寫法
       
      例如: 
      1.先刪除所有舊的的Dom $('.page-item').remove(); 
       
      2.再append你要放入的bootstrap的語法(一定要頭尾標籤同時放入,可用str累加)
      $('#ul01').append("<li id='litop' class='page-item'><a class='page-link'  href='#' id='1'>首頁</a></li>");  
       
      3.再$('li a').bind('click', function() {...},
      $('li a').bind('click', function() { $(this).attr('id')); 
<script src="jquery/jquery-1.8.3.min.js"></script> 
      <script type="text/javascript">
      //先刪除所有舊的 page-item 的Dom ////////////$('.page-item').remove(); $('#ul01').append("<li id='litop' class='page-item'><a class='page-link'  href='#' id='1'>首頁</a></li>");  
      //////////////////////////////只要用$('li a').bind('click', function()  {。。。。就可以知道那個超連結a被按到了,$(this).html()代表這個被按到的元件的innerHtml文字 $(this).attr('id')代表這個被按到的元件的id值 ,我們先把頁數放到每個li的id,然後被按到時就到這個id的頁數$('li a').bind('click', function() { $(this).attr('id' )+"&name="+bookname.value); 
      </script>
      //########################################
      <div id="paging"><ul class="pagination"  id="ul01" > 
       </ul>
 
  
      
     
      **實用 
      自己虛擬製造的DOM元件之呼叫$.ajax寫法
       
      例如: 
      1.先刪除所有舊的的Dom $('#result').empty(); 
       
      2.再append你要放入的bootstrap的語法(一定要頭尾標籤同時放入,可用str累加)
      $('#result').append(str); 
       
      3.再$('li a').bind('click', function() {...},
      $('th a').bind('click', function() {  $(this).attr('id')); 
<script src="jquery/jquery-1.8.3.min.js"></script> 
      <script type="text/javascript">
      // 表格及排序 /////////////////$('#result').empty(); 
       for(i=min;i<max;i++){$('#result').append(str); 
      ///////////////////////////
      $('th a').bind('click', function() {  
      </script>
      //######################
      <div id="result"></div>
 
  
      
      
      
   
  
      
      
      
   
  
      
   
  
      
   
  
    Chp17. 無限捲頁功能(infinite scroll)(ajax)求 
   
  
    練習範例 
    17-1.jQuery寫法無限捲頁到底 17-2.javaScript寫法無限捲頁到底 17-3.javaScript-關鍵字查詢,無限捲頁 17-4.javaScript-捲頁時提示讀取中,讀取完畢  
  
    17-5.javaScript-是否more,按鈕再捲頁 17-6.javaScript-捲頁時提示讀取中,讀取完畢 17-7避免捲頁時瞬間兩次ajax請求而造成傳回同樣資料兩次   
   
  
      練習範例 
      toastr訊息1 toastr訊息2 toastr訊息3 常用toastr訊息指令自己整理  
  
    關鍵程式碼(jQuery) 
    jQuery寫法無限捲頁   
      
      
   
  
    關鍵程式碼(javascript) 
    javascript無限捲頁 javaScript關鍵字查詢,無限捲頁 javaScript-捲頁時提示讀取中,讀取完畢 javaScript-是否more,按鈕再捲頁  
  
      
    javaScript-捲頁時提示讀取中,讀取完畢 避免捲頁時瞬間兩次ajax請求而造成傳回同樣資料兩次   
      
   
  
    下載練習mySQL資料庫 
    下載資料庫   
      
      
   
  
      
    避免捲頁時瞬間兩次ajax請求而造成傳回同樣資料兩次 
    
      7.避免捲頁時瞬間兩次ajax請求而造成傳回同樣資料兩次
    
  
      
     
      jQuery v.s javascript
      起始值事件
jQuery:
          $(document ).ready(function() { 
      /////////////////////////
      javascript:onLoad="ajaxCall()" >
 
  
      
     
      jQuery v.s javascript
      捲頁事件
jQuery:
    $(window ).scroll(function() { 
      /////////////////////////
      javascript:onscroll="showscroll()" >
 
  
      
     
      表格若要不斷新增累加
      在p2處累加
<table  id="p1" class='table table-striped table-bordered table-condensed'> id='p2 '>
 
  
      
     
      捲頁超過超過視窗底部的判別
function showscroll(){ 
          if($(window).scrollTop() >= $(document).height() - $(window).height()-10) { 
       
      }
 
  
      
     
      **實用
      $.ajax讀取時傳遞變數data
       
      在PHP讀取資料庫,讀取筆數
      'offset'  =起始編號(由0開始
      'limit'  = 一次讀取幾個
 var data = $.ajax({data: { 'offset' :flag,'limit' :10
 
  
      
     
      **實用
      SQL語法,一次讀取限制幾個
       
       
(1).select * from 資料表 offset  recNum limit  recCnt
      offset :起始值
      limit :讀取幾個
       
      (2).在PHP的SQL,若要加入php變數
      $sql="SELECT * FROM 資料表 LIMIT {$limit}  OFFSET {$offset} ";
 
  
      
    避免捲頁時瞬間兩次ajax請求而造成傳回同樣資料兩次 
    //pauseajax=true不可再做ajax請求,除非已經接受到資料了,才將pauseajax=false變成可ajax請求狀態/// var pauseajax=false; 
      function showscroll(){if(pauseajax){return;}  
      if($(window).scrollTop() >= $(document).height() - $(window).height()-10) {pauseajax = true;  
       var data = $.ajax({pauseajax = false; pauseajax = false;  
       }
 
  
      
    8.bootstrap pagy分頁套件 pagy 
     
  
      
    7.避免捲頁時瞬間兩次ajax請求而造成傳回同樣資料兩次 
    7.避免捲頁時瞬間兩次ajax請求而造成傳回同樣資料兩次 
   
  
      
    6.jquery alert訊息插件 
    
      6.jquery alert訊息插件toastr.min.css toastr.min.js 
      https://github.com/CodeSeven/toastr
 
  
      
    toastr常用訊息指令 
    
      toastr常用訊息指令:
      範例:
      (0).下載css,jstoastr.min.css toastr.min.js 
 
  
      
    toastr訊息視窗 
    
      Link to toastr.css,toastr.js 
      
 
  
      
    toastr設定參數 
    
        //Optionally enable a close button
 
  
      
    toastr.error('')訊息窗 
    
        (0).下載css,jstoastr.min.css toastr.min.js 
 
  
      
    5.jquery 幻燈片插件
      bxSlider
5.jquery 幻燈片插件
       $(".bxslider").bxSlider();