陳擎文教學網:PHP |
||||||
(1).如何在html語法顯示網頁標籤符號:
<:< >:> 換行:用<br/> <br/>:<br/> 空白鍵: 轉換網頁標籤等特殊符號:https://htmleditor.io (2).echo 中文,不顯示亂碼 header('Content-Type: text/html; charset=utf-8'); |
||||||
資源 | ||||||
上課工具 | 線上jamboard白板-網頁 | 用jamborad app![]() |
線上黑板( Online blackboard) | 線上網頁 | ||
校務系統 | ||||||
Goole 輸入法(Input software) | Goole輸入法(Input:exe) | Goole 輸入法(Input:zip) | online goole input(中文) | online goole input(英文) | ||
Windows+Apache +MySQL+PHP整合安裝系統 |
下載phpStudy官網 | 下載phpStudy V8.1 | XAMPP | wampserver | ||
免費的網頁編輯軟體 | 微軟的vs code(visual studio code) | |||||
線上網頁編輯器:轉換網頁標籤等特殊符號 | HTML Editor | |||||
HTML 5 教學網站 | w3c學校-HTML 5 (中文版) | w3c學校-HTML 5 (英文版) | ||||
CSS教學網站 | w3c學校-CSS 3(中文版) | w3c學校-CSS(英文版) | ||||
html,CSS教學網站 | w3c學校-html,xhtml,htm5 ,CSS,cSS3(中文版) |
|||||
jQuery-DOM | jQuery的DOM處理教學1 | jQuery的DOM處理教學2 | ||||
Chp1 : 架站練習,與蒐集已經寫好的各類互動網站 | |||||
目錄 | 1.商業資訊系統的三層架構 | 2.常用的架設主機與mysql的工具 | 3.使用Apache架站範例練習 | ||
(1) | 01.商業資訊系統的三層架構 | 商業資訊系統的三層架構: |
|||
(2) | 02.常用的架設主機與mysql的工具 | 常用的php架設主機工具: |
|||
(3) | 03.使用Apache架站練習 | 01.下載架站軟體:下載phpStudy 03.練習範例:源碼 C.discuz論壇範例(php+mySQL資料庫,解壓縮後,複製upload到www下,直接http://localhost/upload/安裝)
|
|||
Chp2.PHP基本,變數,算術運算子,比較運算子,邏輯運算子 | |||||||||||||||||||||||||||||||||||||||||||||||||
1 | 範例2-1:輸出一段文字 | <?php ![]() 程式碼內容 |
|||||||||||||||||||||||||||||||||||||||||||||||
2 | 範例2-2:註解 | <?php |
|||||||||||||||||||||||||||||||||||||||||||||||
3 | 範例2-3:變數 $a |
<?php ![]() 程式碼內容 |
|||||||||||||||||||||||||||||||||||||||||||||||
4 | 範例2-4:字串運算子 $a.$b.$c |
<?php |
1.祝福大家:<?php echo "<br/>2."; echo "<hr/>3."; ![]() 程式碼內容 |
||||||||||||||||||||||||||||||||||||||||||||||
5 | 範例2-5:算數運算子 +(加法) |
<?php ![]() 程式碼內容 |
|||||||||||||||||||||||||||||||||||||||||||||||
6 | 範例2-6:比較運算子 等於(==) var_dump($a) |
<?php echo '<br>'; $b = 1<2; ![]() 程式碼內容
|
|||||||||||||||||||||||||||||||||||||||||||||||
7 | 範例2-7:邏輯運算子 與(and、&&) var_dump($a) |
<?php $b = (5>6 and 8<9); $c = !(5>6); //負負得正,變成true ![]() 程式碼內容
|
|||||||||||||||||||||||||||||||||||||||||||||||
8 | 三種判斷是否有值:isset,empty,is_null |
三種判斷是否有值:isset,empty,is_null |
|||||||||||||||||||||||||||||||||||||||||||||||
Chp3. 選擇控制結構 | |||||
1 | if控制結構 if(條件){ |
<?php echo "$a大於等於$b"; |
|||
2 | if…else…控制結構 if(條件){ |
<?php echo "$a大於等於$b"; |
|||
3 |
if…elseif…else…控制結構 if(條件一){ |
<?php |
|||
4 |
switch 控制結構 switch($i){ |
<?php |
|||
5 |
三元運算子(?:)控制結構 echo 條件?子句一:子句二; 變數==(條件)?子句一:子句二; |
<?php |
|||
Chp4. html→php→html,之間傳遞參數,與轉換網址 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
目錄 | 4-1前端傳回後端,計算加法(txt顯示) | 4-2前端傳回後端,計算加法(原html顯示) | 4-3後端計算加法(後端同時負責html網頁與計算) | 4-4前端網頁javascript計算加法 | |||||||||||||||||||||||||||||||||||||||||||||||||
4-5前端網頁javascript呼叫後端php計算 | 轉換網頁:從html裡面轉換到PHP | 4-11轉換網頁:從php轉換到html | 4-6註冊會員(php讀取html5各種元件) | ||||||||||||||||||||||||||||||||||||||||||||||||||
4-7單選題考試(php讀取radiobutton) | 4-8複選購物總金額(php讀取checkbox) | 4-9單選題考試(用switch判斷 | 4-10下拉選單衣服樣式(php讀取selec) | ||||||||||||||||||||||||||||||||||||||||||||||||||
4-12一切自己從零做出的範例 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 表單資料上傳 取得表單上的欄位值: |
1.下載表單的html語法,建立exp04-1.html 2.填入參數: 3.撰寫exp4-18.php $a = $_POST["t1"]; ?> ☎成果範例: 結果範例 ☎成果程式碼: exp4-1.php的程式碼 |
網頁間傳遞資料的方法有二種:
(3).所以用POST傳遞資料比較安全 (4)在PHP接收所傳遞來資料的指令 |
||||||||||||||||||||||||||||||||||||||||||||||||||
2 | (接上一題) (從html傳遞參數給php) |
1.下載表單的html語法 ,建立exp04-2.html 2.填入參數: 3.撰寫 exp04-2.php(先複製exp04-2.html的全部html語法),然後插入php語法 4.結果範例
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
3 | (接上一題) (phpl傳遞參數給自己) |
1.下載表單的html語法, 建立exp04-3.php 2.填入參數: 3.撰寫 exp4-3.php 3.程式碼(採用方法2): 4.結果範例
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
4 | (接上一題) (從html傳遞參數給php) |
1.☎素材檔案:下載表單的html語法,建立exp4-4.html 2.<form method="" action="" class="form-inline"></form> 5.在button指定轉換網頁及傳遞參數的function
☎成果範例: |
|||||||||||||||||||||||||||||||||||||||||||||||||||
4 | (接上一題) (從html傳遞參數給php) |
1.下載表單的html語法 ,建立exp4-5.html
2.刪除<form method="post" action="exp4-2.php" class="form-inline"></form> 3.在button指定轉換網頁及傳遞參數的function (1)window.location.assign(網址) (2)window.location.href = 網址 ☎重點2:網絡間呼叫url網址的格式: (1)格式:https://www.sample.com/main/page/index.html?keyword=abc&happy=abc (2)民視購物網站:https://www.pure17go.com.tw/sale/2219/157868/?mid=1916 (3)momo購物網站:https://www.momoshop.com.tw/goods/GoodsDetail.jsp?i_code=7858831&cid=cheap&oid=1&mdiv=1000000000-bt_0_238_01-bt_0_238_01_e1&ctype=B ☎重點3:HTTP 請求方法有 GET、POST、PUT、DELETE 等,最常用的 Get 與 Post。 ☎重點4:GET vs POST (1)Get:瀏覽器將 headers 與 data 同時送出,因此只會產生 1 個 TCP 封包,最後伺服器端回應 200 與資料。 (2)Post:瀏覽器先將 headrs 送出,等到伺服器端回應 100 continue 後再傳送 data,因此會產生 2 個 TCP 封包,最後伺服器端回應 200 與資料。 3.撰寫 exp4-5.php(先複製exp4-5.html的全部html語法),然後插入php語法 (1)方法:if($_POST){} 原理:如果$_POST == true,代表有按了送出submit按鈕 (2)方法:if($_GET){} 原理:如果$_GET == true,代表網址url有傳遞參數
☎範例: |
|||||||||||||||||||||||||||||||||||||||||||||||||||
5 | 轉換網頁方法(I) 4-6.從html裡面轉換到PHP |
(1)傳統form action methoud=post
submit方法 (2)自己寫button onclick法(沒有傳遞參數法) (3)自己寫button onclick法(有傳遞參數法) |
|||||||||||||||||||||||||||||||||||||||||||||||||||
6 | 轉換網頁方法(II) exp4-11.從php轉換到html |
(1)觀念:若在php呼叫javascript,程式碼會重新執行一遍,會出現錯誤信息 所以,只能用php的if判斷式來判別,符合才轉換網頁到html (2)唯一方法:使用php的if來判別是否以及按了按鈕 <?php (3)php1轉換網頁指令 (4)判別某個按鈕是否被按了 (5)isset(變數):就是拿來確定變數是否已經被設置了 (6).unset($c); // 清空 $c 的值 ☎素材檔案:1.下載表單的html語法,建立exp4-11b.php ☎成果範例:(1)結果範例4-11a(由php,自動轉到yahoo網站) (2)結果範例4-11b(php有兩個按鈕,一個轉到yahoo,一個轉到google) ☎成果程式碼檔案:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
5 | 註冊會員 各種html5元件,只有radio,checkbox要先檢查是否有值,isset($_POST["Radiousa"]),若有值才進行計算,若沒判斷會有錯誤 (從html傳遞參數給php) |
1.☎素材檔案:下載表單的html語法 ,建立exp4-6.html 2.填入參數: 3.撰寫 exp4-6.php if(isset($_POST["a10"])){ |
|||||||||||||||||||||||||||||||||||||||||||||||||||
6 | 4-7.單選題考試 php讀取radiobutton單選鈕的name名稱,把value值儲存到該變數 (從html傳遞參數給php) |
1.下載表單的html語法 ,建立exp4-7.html 2.填入參數: 3.撰寫 exp4-7.php $score=0; |
|||||||||||||||||||||||||||||||||||||||||||||||||||
7 | 4-8.複選購物總金額
但php讀取checkbox時要先判斷是否有值,isset($_POST["a1"]),若有值才進行計算,若沒判斷會有錯誤 (從html傳遞參數給php) |
1.下載表單的html語法 ,建立exp4-8.html 2.填入參數: 3.撰寫 exp4-8.php |
|||||||||||||||||||||||||||||||||||||||||||||||||||
8 | 4-9.單選題考試 php讀取radiobutton單選鈕,可以用switch判斷,最適當 (從html傳遞參數給php) |
1.下載表單的html語法 ,建立exp4-9.html 2.填入參數: <?php if(isset($_POST["Rusa"])){ switch($_POST["Rusa"]){ case "1億人": $score=0; break; case "2億人": $score=0; break; case "3億人": $score=100; break; default: $score=0; break; }} ?> 4.結果範例 |
|||||||||||||||||||||||||||||||||||||||||||||||||||
9 | 4-10.下拉選單衣服樣式 php讀取select的name名稱,數值為value (從html傳遞參數給php) |
1.下載表單的html語法 ,建立exp4-10.html 2.填入參數: 3.撰寫 exp4-10.php |
|||||||||||||||||||||||||||||||||||||||||||||||||||
11 | 4-12一切自己從零做出的範例 |
4-12一切自己從零做出的範例 不靠下載表單的html語法,而是自己從零開始建立html,再連接php ☎練習範例1: 結果範例 ☎練習範例2: 結果範例 ☎練習範例3: 結果範例 ☎練習範例4: 結果範例補充說明:HTML 5各種元件 <input> type 語法<input type="value">
唯一的例外:下拉式選單,沒有在上面,必須用早期的html語法select-option 來做,範例: 注意:在手機上無法顯示下拉式選單,除非加上data-native-menu="false",就會出現彈出樣式選單 |
|||||||||||||||||||||||||||||||||||||||||||||||||||
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 echo "顯示第1句英文:<br/>"; echo "顯示所有英文:<br/>"; echo "顯示第2句英文:<br/>"; echo "顯示所有英文:<br/>"; echo "顯示所有英文:<br/>"; echo "<br/><br/>"; |
|||
2 | 範例5-2:陣列編號可以是中英文 $a['李大同'] =..." foreach的二種格式 foreach($tel as $i=>$v){ |
範例5-2:三種一維陣列的文字索引index=>value值 <?php echo "顯示第張花花同學電話:<br/>"; echo "顯示所有同學電話:<br/>"; echo "<br/><br/>"; echo "顯示所有資料:<br/>"; ?>
☎成果範例1:結果範例 ☎成果範例2:結果範例 ☎程式碼: |
|||
3 | 範例5-3:二維陣列 範例5-3:顯示二維陣列 |
範例5-3:二維陣列 <?php echo "顯示第1位同學的所有資料<br/>"; //////////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ?> ☎成果範例1:結果範例 ☎成果範例2:結果範例 ☎程式碼: |
|||
4 | 範例5-4:陣列的各種函數(1) 計算陣列的各元素總和 反轉後的陣列內容 把二維陣列拆解為一維陣列 |
範例5-4:陣列的各種函數(1) <?php echo "//計算陣列內容數 count(陣列)<br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; ?> ☎成果範例1:結果範例 ☎成果範例2:結果範例 ☎程式碼: |
|||
5 | 範例5-5:陣列的各種函數(2) 計算陣列的各元素總和 反轉後的陣列內容 把二維陣列拆解為一維陣列 |
陣列的各種函數(2) <?php echo "//計算陣列內容數 count(陣列)<br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; ?> ☎成果範例1:結果範例 ☎程式碼:程式碼 |
|||
6 | 範例5-6:陣列的排序 數字編號陣列的排序 大到小排序陣列,新的次序:rsort(陣列)
非數字編號陣列,而是文字編號陣列的排序 數值排序:小到大排序陣列次序(文字編號陣列):asort(陣列) 數值排序:大到小排序陣列次序(文字編號陣列):arsort(陣列) 文字key編號排序:小到大排序陣列次序:ksort(陣列) 文字key編號排序:大到小排序陣列次序:krsort(陣列) |
範例5-6:陣列的排序 <?php echo "<br/>//數字編號陣列的排序:<br/>"; ////////////////////////////////////////////////// ////////////////////////////////////////////////// echo "<br/><br/>"; ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ?> ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
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(陣列,數目) 印出游標位置的元素內容 方法二:current(陣列) 移動游標到陣列最後:end(陣列) 目前陣列的游標到位置(index編號):key(陣列) 往上移動一筆):pre(陣列 目前陣列游標位置編號為:key($fruit)
|
範例5-7:陣列的各種函數(3) <?php echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo $key[1]."<br/>"; echo $key[2]."<br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; echo "<br/><br/>"; |
|||
8 | 範例5-8:將一維陣列的定給另外一個二維陣列 一維陣列的定給另外一個一維陣列:$a2 = $fruit 二維陣列的定給另外一個二維陣列:$a2 = $stu 將一維陣列的定給另外一個二維陣列:$a3[] = $fruit |
範例5-8:將一維陣列的定給另外一個二維陣列 <?php
echo "<br/><br/>";
echo "<br/><br/>"; |
|||
8 | 範例5-9:二維陣列的排序 (1)二維陣列的排序(文字編號)
(2)二維陣列的排序(數字編號) 陣列$product |
範例5-9:二維陣列的排序 <?php $arrtemp = array(); echo "<br/><br/>"; $product[1][0]='bb'; $product[2][0]='cc'; $arrtemp = array(); 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() (1)$.each()是jqery,很好用 (2)$.each()的continue,break寫法指令不同(continue=return true)(break=return false) jQuery 有個非常好用的東西叫做 $.each() $.each 這個 function 是用來達到 for each 的功能 for 迴圈跟 while 迴圈都可以使用 continue 跟 break,但$.each() 就不行 $.each() 裡面 return true; 代表的就是 continue; return false; 代表的就是 break; 程式碼如下: $("[name='list[]']").each(function() { count++; if (2 == count) { //break return false; } this.checked = true; //continue return true; }); | ||||
PHP的雙層迴圈,如何break(break 2) |
43.PHP的雙層迴圈,如何break 方法:break 2; for($i=0;$i<5;$i++) { for($j=0;$j<3;$j++) { if($i == 3) { break 2; } } | ||||
1 | 範例6-1:各種計數迴圈 for($i=1;$i<=4;$i++){ $i=1; $i=1; foreach($stu as $v){ foreach($stu as $key=>$v){ 迴圈印到第3個,跳過不印,其它繼續:continue 迴圈印到第3個,就中斷印出陣列:break |
範例6-1:各種計數迴圈 <?php $stu = array(1=>"Orange","Banana","Grape","Apple","Flower"); //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// |
|||
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"); //////////////////////////////////////////////// reset($fruit); reset($fruit); echo "<br/><br/>"; |
|||
3 | 範例6-3:搜尋字串,不用計數器的while迴圈,印出陣列 while(list($key,$v) = each($fruit)){ 搜尋字串:用函數: |
範例6-3:搜尋字串,不用計數器的while迴圈,印出陣列 搜尋字串:用函數$key=array_search() <?php $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower"); //////////////////////////////////////////////// echo "<br/><br/>"; |
|||
4 | 範例6-4:搜尋字串,不用計數器的while迴圈 while(($v=current($fruit)) != NULL){ |
範例6-4:搜尋字串,不用計數器的while迴圈,印出陣列 <?php $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower"); //////////////////////////////////////////////// |
|||
5 | 範例6-5:搜尋字串,用計數器的while迴圈(2) $i=1; |
範例6-5:搜尋字串,用計數器的while迴圈(2) <?php $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower"); //////////////////////////////////////////////// |
|||
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/>"; |
|||
7 | 範例6-7:複選購物總金額
但php讀取checkbox時要先判斷是否有值,isset($_POST["a1"]),若有值才進行計算,若沒判斷會有錯誤 (從html傳遞參數給php) |
範例6-7:複選購物總金額(php讀取checkbox的多個name陣列phone[] 1.下載表單的html語法 ,建立exp06-7.html 2.填入參數: 3.撰寫 exp06-7.php |
|||
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.填入參數: 3.撰寫 exp06-8.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.填入參數: 3.撰寫 exp06-9.php echo "<br/><br/>"; ////////////////////////// } ///////////////////////////////// /////////////////////////////////
|
|||
Chp7. 日期時間 | |||||
練習範例 | 7-1兩種日期時間宣告法 | 7-2設定某個虛擬日期時間 mktime(時,分,秒,月,日,年)(while) | |||
最簡單顯示日期的方法 |
(1).最簡單顯示日期的方法:2018-09-15 |
||||
unix 時間戳 |
(1).unix時間戳 |
||||
1 | 兩種日期時間 (1)傳統:date('Y-m-d') (2)新的物件變數DateTime 類別
日期時間的比較 diff() 時區設定:DateTimeZone class //////////////////////
時間間隔修改DateTime內容 |
<?php echo "//日期時間要先設定時區,方法一: date_default_timezone_set('Asia/Taipei'),日本是Asia/Tokyo"; /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// ///52//////////////////////////////////////////////// /////////////////////////////////////////////////// ///////////////////////////////////////////////// ///////////////////////////////////////////////// $d=strtotime("next Saturday"); $d=strtotime("+3 Months"); echo "<br/><br/>"; // %a 输出总天数 echo "/////////////////////////////////////////////////<br>"; echo "/////輸出 format()////////////////////////////////////////////<br>"; echo "/////日期時間的比較 diff() ////////////////////////////////////////////<br>"; echo "//方法二:date = new DateTime();<br>"; echo "///////時間間隔修改DateTime內容////////////////////////////////////////////<br>"; ///////////////////////////////////////////////////////////////////////////////// echo "//物件時間,方法二:<br/>"; $date = new DateTime('yesterday'); $date = new DateTime('2017-05-17 18:00:00'); $date = new DateTime('2017/05/17 09:15 PM'); // +- day, week, month, year // 1495088399 //日期時間的比較 diff(): //日期時間的比較 diff(): ////////////////////////////////////////////////////////////////////// // 建立 2週 5小時 // 建立 2週 5小時 $date = new DateTime(); ///////////////////////////////////////////// ?> 4.結果範例 |
|||
1 | (1)傳統日期時間 設定某個虛擬日期時間: 例如 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.結果範例 |
|||
Chp8. 自訂函數function() | |||||
練習範例 | 8-1自訂專門比較大小的函數 | 8-2函數參數的預設值 | 8-3自訂計算梯形面積的函數 | 8-4自訂印出陣列所有內容的函數 | |
8-5自訂計算分數的函數 | |||||
1 | 自訂函數function()
|
範例8-1:自訂專門比較大小的函數 <?php function bigsmall($a,$b){ bigsmall(5,6); bigsmall(500,500); bigsmall(500,50); ?> ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
2 |
範例8-2:函數參數的預設值 自訂函數function()
|
<?php function bigsmall($a=7,$b=6){ bigsmall(); bigsmall(500,50); ?> ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
3 | 自訂傳回數值的函數
|
範例8-3:自訂計算梯形面積的函數 <?php function area($a,$b,$c){ echo "<br/>面積為".area(2,2,2); echo "<br/>面積為".area(10,10,10); ?> ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
4 | 自訂函數,傳遞陣列function() show(#array)
|
範例8-4:自訂印出陣列所有內容的函數 <?php function show($a){ $stu = array(1=>"李大同","張花花","林美美","宋妮妮","吳盼盼");
$b = array("Did you lose weight intentionally?妳有故意在減肥嗎?", $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower"); ?> ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
5 | 函數function()若傳回數值變數都有變化了,可傳回陣列,之後再拆解 拆解方法:list($a1,$a2,$a3,$a4) = show($stu1) function show($a) list($a1,$a2,$a3,$a4) = show($stu1)
|
範例8-5:自訂計算分數的函數 <?php function show($a){ $stu1 =array("math"=>90,"english"=>80,"computer"=>75); echo "<br/><br/>"; ?> ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
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(",") 將新的字串label加入到arr資料裡面:arr.push(label) 將最後的陣列,串聯成新字串:arr.join() |
//將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常用在输出包含大量HTML语法d文档的时候。 分類:函数outputhtml()要输出HTML的主页。可以有两种写法。 很明显第二种写法比较简单和易于阅读。 第一种 function outputhtml(){ echo "<html>"; echo "<head><title>主页</title></head>"; echo "<body>主页内容</body>"; echo "</html>"; } 第二种 function outputhtml() { echo <<<EOT <html> <head><title>主页</title></head> <body>主页内容</body> </html> EOT; } 23.注意heredoc的常見錯誤: (1)EOF;必須緊接在開頭(不可有空白) 24.在heredoc 裡面不可以有迴圈,否則會錯誤 25.觀念:php的迴圈及計算指令放在前面計算,最後就是輸出heredoc,一次組裝 範例: //在使用heredoc之前,要先把迴圈的內容裝在另外一個變數,做完後,再一次性的組合(先異地建模,再組裝)// $str=""; foreach($rowall as $i=>$v){ $str .= "<tr><td>{$rowall[$i]['書籍編號']}</td><td>{$rowall[$i]['書籍名稱']}</td><td>{$rowall[$i]['價格']}</td></tr>"; } $content = <<<EOF <table class="table table-striped table-bordered table-condensed"> <thead class="thead-dark"><tr><th>書籍編號</th><th>書籍名稱</th><th>價格</th></tr></thead> <tbody> EOF; $content .= <<<EOF $str EOF; $content .= <<<EOF </tbody> </table> EOF; 26.注意:heredoc裡面,不可以是單引號在最外圍,必須是雙引號在最外圍 錯誤範例: $str =""; $str .= '<span class="demo-item-price"> ... {$rowall[1]["product_price"]}元 </span>'; $content = <<<EOF $str EOF; //正確範例 $str =""; $str .= "<span class='demo-item-price'> ... {$rowall[1]['product_price']}元 </span>"; $content = <<<EOF $str EOF; 27.最後發現:其實在php寫標籤,不需要用到hreedoc($content = <<<EOF) 其實只要用到$str = "<div id='a1'...."; 用字串即可,可以一組""但是分很多行 (發現,根本就不需要heredoc)(用$content = <<<EOF,不好用,經常發生錯誤) 範例: $str=""; foreach($rowall as $i=>$v){ $str .="<div class='review-item' id='item_{$rowall[$i]['product_id']}'> <div class='review-cart'> <a href='javascript:void(0)' onclick='remove_item(\"{$rowall[$i]['product_id']}\",\"{$rowall[$i]['product_price']}\")'> <i id='far_{$rowall[$i]['product_id']}' class='fas fa-times'></i> </a> </div> } | ||||
heredoc的好處:可以在javascript裡面可以直接讀取php的變數 |
(1).heredoc的好處 可以在javascript裡面可以直接讀取php的變數 (傳統的php與javascript無法溝通變數) 範例:在javascript裡面顯示php變數 $res = $db->query("select * from `pre_common_member` where `uuid` = '$uuid'"); $info = $res->fetch(); $username = $info["username"]; $content = <<<EOF <div class="modal-dialog"> <div class="row"> <div class="col-md-4 col-sm-4 col-xs-4"> 主題查看 </div> <div class="col-md-8 col-sm-8 col-xs-8"> <label class="radio-inline"><input type="radio" name="allowviewnew" checked><font color="limegreen">默認</font></label> <label class="radio-inline"><input type="radio" name="allowviewnew">允許</label> <label class="radio-inline"><input type="radio" name="allowviewnew">禁止</label> </div> </div> </div> <script language="javascript"> $( "#tid" ).change(function() { alert( "$username" ); }); </script> EOF; | ||||
heredoc缺點:無法使用陣列變數 |
heredoc缺點:無法使用陣列變數: 範例: $a[0] = "Did you lose weight intentionally?妳有故意在減肥嗎?"; $a[1] = "I've got missed calls. 我有未接來電耶~"; $a[2] = "I wonder which shoes to put on. 該穿那雙鞋呢?"; $a[3] = "I don't have a good appetite these days. 最近都沒什麼胃口"; 以下這個寫法是錯誤的: <script language="javascript"> $( "#tid" ).change(function() { } $( "#tid option:selected" ).each(function() { alert($a[1]); }); }); </script> | ||||
heredoc中間要加上php變數的寫法 |
heredoc中間要加上php變數的寫法: 觀念:有兩種架構,其插入變數的寫法不同 (1).單一heredoc架構,沒有被拆開上下兩段 例如:變數 $fidname = '閒聊哈拉話題區'; 方法:直接放置到heredoc裡面,不需要再串接 $content = << <!-- Modal content--> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h4 class="modal-title">編輯版主 - $fidname</h4> </div> <div class="modal-body"> <div class="row mod-list"> <div class="col-md-1 col-sm-1 col-xs-1 px0"> </div> <div class="col-md-2 col-sm-2 col-xs-2 text-center px0">顯示順序</div> </div> EOF; (2).被拆開成上下的heredoc,在中間的php迴圈生成標籤區域,若要插入變數 例如:變數:$list["uuid"] 若要在中間php迴圈插入變數,必須要用串接 方法:<input type="checkbox" id="'.$list["uuid"].'"> 範例: $content = <<<EOF <div class="modal-dialog"> .... EOF; foreach($info_moderator as $key => $list) { <input type="checkbox" name="delete[]" id="'.$list["uuid"].'"> } $content .= <<<EOF <div class="row mod-list"> </div> EOF; | ||||
heredoc應用:彈出modal視窗,互動操作後讀取資料表再傳回,顯示在modal畫面上 |
heredoc應用:彈出modal: 如何在彈出modal視窗,互動操作後讀取資料表再傳回,顯示在modal畫面上 方法:必須用ajax才能夠完成 (1).include/modal/boardset.php $content = <<<EOF <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h4 class="modal-title" id='h4'>用戶:$username</h4> </div> <div class="modal-body"> <div class="row"> <div class="col-md-4 col-sm-4 col-xs-4" style="line-height: 34px;"> 選擇版塊 </div> <div class="col-md-8 col-sm-8 col-xs-8 text-center"> <select class="form-control" name="tid" id="tid"> $option_forum </select> </div> </div> </div> <script language="javascript"> $( "#tid" ).change(function() { $("#tid option:selected" ).each(function() { $.ajax({ type: "POST", url: "./?sub=action&type=boardset_select", data: "fid=" + $(this).val(), cache: false, dataType: "json", success: function(data) { if(data['status'] == "OK") { toastr.success(' 操作成功!'); } else { toastr.options.timeOut = 1000; toastr.error(' 操作失敗!'); } } }); }); }); </script> EOF; (2).include/action.php switch ($_G['type']) { case "boardset_select": //顯示版塊權限 require_once include_path."/action/boardset_select.php"; break; } (3).boardset_select.php $fid = $_G['fid']; $res = $db->query("select * from `pre_forum_forumfield` where fid = '$fid'"); if($res->rowCount()) { $info_forumfield = $res->fetchAll(PDO::FETCH_ASSOC); die(json_encode(array("status" => "OK", "forum" => $info_forumfield))); } else { die(json_encode(array("status" => "err_pre_forum_forumfield_select"))); } | ||||
heredoc中間要加上php迴圈的寫法 |
heredoc中間要加上php迴圈的寫法: 結構:拆開前後段,中間加入php迴圈指令 $content = <<<EOF <div class="modal-dialog"> .... EOF; foreach($info_moderator as $key => $list) { <input type="checkbox" name="delete[]" id="'.$list["uuid"].'"> } $content .= <<<EOF <div class="row mod-list"> </div> EOF; 範例: $content = <<<EOF <div class="modal-dialog"> <!-- Modal content--> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h4 class="modal-title">編輯版主 - $fidname</h4> </div> <div class="modal-body"> <div class="row mod-list"> <div class="col-md-1 col-sm-1 col-xs-1 px0"> </div> <div class="col-md-2 col-sm-2 col-xs-2 text-center px0">顯示順序</div> <div class="col-md-4 col-sm-4 col-xs-4 text-center px0">用戶名</div> <div class="col-md-3 col-sm-3 col-xs-3 text-center px0">用戶組</div> <div class="col-md-2 col-sm-2 col-xs-2 text-center px0">版塊繼承</div> </div> EOF; foreach($info_moderator as $key => $list) { $username = $list["username"]; $inherited = $list['inherited']==1 ? '是' : '否'; $content .= '<div class="row mod-list"> <div class="col-md-1 col-sm-1 col-xs-1 px0 text-center"> <input type="checkbox" name="delete[]" id="'.$list["uuid"].'"> </div> <div class="col-md-2 col-sm-2 col-xs-2 text-center"> <input class="mod-input dp" type="text" name="displayordernew[1]" id="displayordernew_'.$list["uuid"].'" value="'.$list["displayorder"].'"> </div> <div class="col-md-4 col-sm-4 col-xs-4 text-center"> <a href="./?sub=memberProfile&uuid='.$list["uuid"].'">'.$username.'</a> </div> <div class="col-md-3 col-sm-3 col-xs-3 text-center"> <font color="white">管理員</font> </div> <div class="col-md-2 col-sm-2 col-xs-2 text-center">'.$inherited.'</div> </div>'; } $content .= <<<EOF <div class="row mod-list"> <div class="col-md-1 col-sm-1 col-xs-1 px0 text-center"> 新增 </div> <div class="col-md-2 col-sm-2 col-xs-2 text-center"> <input class="mod-input dp" type="text" name="displayordernew[1]" id="displayordernew_a3227e89-d9d9-4f74-8237-c9765d4b3335"> </div> <div class="col-md-4 col-sm-4 col-xs-4 text-center"> <input class="mod-input dp" type="text" name="newmoderator" id="newmoderator"> </div> <div class="col-md-3 col-sm-3 col-xs-3 text-center"> <select name="newgroup" class="mod-input newgroup"> $option_group </select> </div> <div class="col-md-2 col-sm-2 col-xs-2 text-center"> </div> </div> <div class="row mod-list"> <div class="col-md-1 col-sm-1 col-xs-1 px0 text-center"> <input type="checkbox" id="mod-select"> </div> <div class="col-md-11 col-sm-11 col-xs-11 btn_block"> <button type="button" class="btn btn-danger">刪除</button> <input type="checkbox" name="inheritedmodnew" id="inheritedmodnew" value="1"> <label for="inheritedmodnew">權限繼承到子版塊</label> <button type="button" class="btn btn-blue">送出</button> </div> </div> </div> </div> </div> EOF; | ||||
密碼強度-在heredoc裡面顯示(修改密碼) |
5-密碼強度-在heredoc裡面顯示(修改密碼): |
||||
彈出的modal視窗,下方按鈕(儲存,刪除,送出)的程式碼寫法 |
彈出的modal視窗,下方按鈕(儲存,刪除,送出)的程式碼寫法: |
||||
為什麼志豪版本在modal的點選js函數,可以寫在外面的js函數 |
為什麼志豪版本在modal的點選js函數,可以寫在外面的js函數 |
||||
heredoc單引號,雙引號的規則:第一層’,第二層",第三層\' |
heredoc單引號,雙引號的規則:第一層’,第二層",第三層\' |
||||
1 | **php的字串,前後用雙引號""或是單引號'' **輸出字元,可以用Escape逸出字元,來顯示某些無法正常顯示的字元:例如雙引號,$,tab跳格 **搜尋字串 strpos(被查字串,要查字串) 注意:搜尋字,第一個字由0開始 注意:搜尋中文字,一個字有三個字元
**搜尋所在字之後的字串:strstr(被查字串,要查字串) **搜尋特殊字元(”,\)之後的字串:strchr(被查字串,要查字元) **反向搜尋特殊字元(”,\),從後面開始找的第一個字,的之後字串:strrchr(被查字串,要查字元)
|
<?php /////////////////////////////////////////////////// /////////////////////////////////////////////////// $str = "abcdefghijk";
////////////////////////////////////////// ////////////////////////////////////////// ////////////////////////////////////////// ////////////////////////////////////////// $find1="5";
$find1='/'; ////////////////////////////////////////// ?> |
|||
2 | *取出子字串 方法1:substr(字串,位置3,共4個字) *取出子字串 方法2:取出@之後的文字 strchr(字串,'@') *計算某個字元出現的次數 substr_count(字串,"o") *取代某個字串 substr_replace(字串,"新字串",開始位置4,長度5) *反轉某個字串 strrev(字串) *將某字串分割成陣列 explode(',',字串) *將某陣列組成字串 implode(' , ',字串)
|
<?php /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// ?> |
|||
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會前者大
|
<?php /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// ?> |
|||
4 | 網頁字串相關函數 *把網頁標籤刪除: strip_tags(\$str) *把某個字串有雙引號",單引號',反斜線\的前面都加上反斜線\: addslashes($str) *刪除字串的反斜線\: stripslashes($str) * 把\ n轉成 <br/>:nl2br($str)
|
<?php /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// ?> |
|||
5 | 格式化輸出字串相關函數 *設定輸出文字與數字的格式: sprintf(字串%u...%s....,變數1,變數2) *字串:%s *科學計數法:%e我的名字是李大同,要二手賣i4蘋果手機價錢3.000000e+4,費用剩下5.600000e+3 *控制小數點的格式: sprintf(字串%f,變數1)
|
<?php /////////////////////////////////////////////////// /* */ ?> |
|||
6 | 輸出html特殊字元 <(&lt;)
|
<?php 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]: 驗證是否有任一數字,有兩個方法:[a-zA-A0-9],或是 從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}$/ 檢查是不是電子信箱格式,兩種格式: 檢查住家電話格式是否正確:02-12345678:/^[0-9]{2}-[0-9]{8}$/ 檢查身份證格式是否正確:G123456789:/^[A-Za-z][1-2]\d{8}$/
|
<?php /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// ///////////////////////////////////////////////////
/* 關於密碼驗證的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.填入參數: 3.撰寫 exp06-7.php /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// ///////////////////////////////////////////////////
|
|||
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 /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// ?> |
|||
Chp10. 各種其它函數(數學函數,eval...) | |||||
練習範例 | 10-1亂數顯示骰子,亂數顯示橫幅圖片) | 10-2資料形態轉換的三種方法 | 10-3無條件進位法,無條件捨去法,四捨五入法) | ||
eval的功用:可以把代入變數的代數式進行計算 |
eval的功用:可以把代入變數的代數式進行計算 |
||||
陣列過濾函數array_filter |
陣列過濾函數array_filter:兩種功能: (1).過濾空白值(把null,0...的陣列過濾掉) (2).使用自己的過濾法則來過濾陣列 1.用此函数来過濾数组中的空元素 $arr1 = array('a'=>1,'b'=>0,'c'=>'','d'=>null,'e'=>5,'f'=>false); $resArr1 = array_filter($arr1); print_r($resArr1); 结果 Array ( [a] => 1 [e] => 5 ) 注意值为0的也会给過濾,数组的下标并没有改变 2.用其中的回调函数自定義過濾法则過濾数组 $arr2 = array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5,'f'=>6); $resArr2=array_filter($arr2,'fun_odd');//其中的fun_odd必须加引号,不能加() print_r($resArr2); function fun_odd($arr){ if($arr % 2 == 1){ return $arr; } } 结果:Array ( [a] => 1 [c] => 3 [e] => 5 ) 3.常用應用時機:字串轉成陣列後,再把空白值去除 字串轉成陣列:explode()+array_filter()過濾陣列的空白值 $pid_arr = array_filter(explode(",", $pid)); | ||||
1 | 亂數 mt_rand(min,max) 顯示骰子 亂數顯示每次登入網頁的橫幅圖片與超連結
|
<?php /////////////////////////////////////////////////// $i = mt_rand(0,2); echo "<a href='".$banner[$i][1]."'><img src='".$banner[$i][0]."'></a>"; /////////////////////////////////////////////////// $i = mt_rand(0,2); echo sprintf("<a href='%s'><img src='%s'></a>",$banner[$i][1],$banner[$i][0]); |
|||
2 | 資料形態轉換的三種方法 方法一:(資料形態名稱)變數:例如,(int)$a 種類:int,integer,float,double,real,binary,bool,boolean,string,array,object,unset(轉成NULL),,, 方法二:使用函數來轉換:例如,intval($a) 種類:intval(),strlval(),doubleval(),floatval() 方法三:使用函數settype來轉換:例如,settype($a,'int')
傳回資料形態:gettype($a)
|
<?php /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// ?> |
|||
3 | 四捨五入數學函數 無條件進位法:ceil(3.29) = 4 無條件捨去法:floor(3.29) = 3 四捨五入法:round(3.29) = 3 **指定小數點第幾位四捨五入,或指定百位千位
|
<?php echo "///////////////////////////////////////////////////// <br/>"; echo "///////////////////////////////////////////////////// <br/>"; echo "/////指定小數點第幾位四捨五入,或指定百位千位//////////////////////// <br/>"; ?> |
|||
3 |
php轉換網頁
範例結果 |
/////php前往網頁///////////////////// ?> /////按鈕的超連結(1)///////////////////// /////按鈕的超連結(2)///////////////////// .................................................... <script type="text/javascript">
|
|||
4 | include_once require_once |
include 和 include_once require 和 require_once require_once "exp10-1.inc"; require_once ("exp10-1.inc"); |
|||
Chp11. 在網頁之間傳遞參數的cookie與session | |||||
練習範例 | 11-1建立背景顏色的cookie | 11-2建立背景顏色的cookie陣列 | 11-3下拉選單設定cookie後,關閉瀏覽器再開啟,文字顏色設定還在 | 11-4session設定已登入網頁時間 | |
js傳遞url特殊符號的處理方法 |
從js傳遞url變數,若含有+號碼,在php驗證會出現錯誤: 解決方法: (1).在js:data_string += "&pid=" + pid + "&reason=" + base64EncodingUTF8(encodeURIComponent(reason)); (2).在php:$reason = urldecode(base64_decode($reason)); | ||||
若是傳遞動作原因reason有特殊符號(+,',^...),如何傳遞特殊符號 |
若是傳遞動作原因reason有特殊符號(+,',^...),如何傳遞特殊符號 (1).關鍵原理: js:data_string += "&reason=" + base64EncodingUTF8(encodeURIComponent(reason)) php:$reason = urldecode(base64_decode($reason)); (2).舉例:刪除主題:thread.js case "del": // 刪除主題 var reason = $.trim($("#del_reason").val()); var crime = $("#del_notice_crime").prop("checked"); var notice = $("#del_notice_author").prop("checked"); // data_string += "&reason=" + reason + "&crime=" + Number(crime) + "¬ice=" + Number(notice); data_string += "&reason=" + base64EncodingUTF8(encodeURIComponent(reason)) + "&crime=" + Number(crime) + "¬ice=" + Number(notice); (3).include/threadfunc/delthread.php $reason = urldecode(base64_decode($reason)); | ||||
session無法被清除 |
37.觀念: a.在shipment_save.php,裡面的if(isset($_SESSION['all_product_ids']內,無法將all_product_ids清除session 例如:下面這個的session無法被清除(似乎是被當作if內局部變數) if(isset($_SESSION['all_product_ids'])){ unset($_SESSION['all_product_ids']); } b.只能在獨立檔案的開頭設定:開頭就設定,不可在if(){..內} unset($_SESSION['all_product_ids']); | ||||
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失效,方法一:讓bgcolor值,過期
讓cookie失效,方法二:將bgcolor值,清空
|
<?php ob_start(); /////////////////////////////////////////////////// ?> exp11-1a.php <?php ob_start(); ?> exp11-1b.php <style> } exp11-1c.php <?php ob_start(); if(isset($_COOKIE["bgcolor"])) { ?> exp11-1d.php <?php ob_start(); ?> |
|||
2 | cookie陣列 cookie指令:setcookie("\array["變數"]","內容","保存期限","路徑","網域","安全") 建立文字顏色的cookie: 讀取cookie指令:$_COOKIE["變數"] 接收cookie變數:$_COOKIE['bgcolor'] 讓cookie失效,方法一:讓bgcolor值,過期 讓cookie失效,方法二:將bgcolor值,清空
|
<?php ob_start(); /////////////////////////////////////////////////// ?> exp11-2a.php <?php ob_start(); ?> exp11-2b.php <style> } exp11-2c.php <?php ob_start(); ?> exp11-2d.php <?php ob_start(); ?> |
|||
3 | 設定cookie後,關閉瀏覽器再開啟,文字顏色設定還在
三個if判別,(2)第一次開啟網頁,但已經有cookie設定: 三個if判別,(3)第一次開啟網頁,也沒有cookie設定,則文字顏色為黑色:else{}
|
<?php //設定cookie: <style> |
|||
4 | session:儲存於伺服器端,不用擔心用戶禁用session的問題,但計錄檔案的負荷由伺服器承擔 缺點1:如果關閉瀏覽器過久(超過24分鐘),session的生命週期就結束 限制1:同一瀏覽器的前後網頁之間,才能彼此傳遞參數
一、啟用 Session : session_start() 注意:要將時間轉成造成是:$date1->format('Y年n月j日 G時i分s秒') 注意:結論:session是字串
讀取session變數指令:$_SESSION["變數"]
讓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(); ?> exp11-4b.php <?php session_start(); ?> exp11-4c.php <?php session_start(); } ?> exp11-4d.php <?php session_start(); } ?> |
|||
Chp12. 物件變數,物件變數陣列 | |||||
練習範例 | 12-1物件變數(建構子函數,解構子函數) | 12-2物件變數的簡易宣告(設定網頁背景顏色,文字顏色) | 12-3物件變數的static function,物件常數的引用 | 12-4兩種物件陣列:班上同學資料(姓名,電話,LineID) | |
12-5雲端主機,判別下拉選單是第幾個(阿Q桶麵查詢價錢庫存) | 12-6雲端主機計算物件陣列,計算各科全班平均成績 | 12-7物件陣列(把陣列當作物件來操作):ArrayObject(陣列) | |||
1 | class 名稱{....} method: 給定起始值:建構子函數:function __construct($a1='',$a2=0,$a3=0){...』 method: 解構子函數,釋放物件變數:function __destruct(){$this->name = NULL;} 宣告物件變數:$my = new phone()
|
範例12-1:物件變數(建構子函數,解構子函數) <?php ////////////////////////////////////////////////// echo "<br/><br/>"; echo "<br/><br/>"; echo "//物件變數的比較 ==, === <br/>"; $myp5 = new phone('Samsung Galaxy Note 8手機',30000,5); $myp6 = $myp5; //5-6/////////////////////////////////// ☎成果範例1:結果範例 ☎程式碼1:程式碼 ☎成果範例2:結果範例 ☎程式碼2:程式碼 |
|||
2 | 物件變數的簡易宣告
|
範例12-2物件變數的簡易宣告(設定網頁背景顏色,文字顏色) <?php ////////////////////////////////////////////////// ?> ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
3 |
範例12-3物件變數的static function,物件常數的引用 物件變數的static function不需要宣告,直接用類似呼叫普通function的方式使用 呼叫法: class變數名稱::cubic(); 範例: mymath::cubic();
物件常數在class內部的引用法:self::pi
☎成果範例:結果範例 |
範例12-3物件變數的static function
<?php echo "<br/><br/>"; ?> ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
4 | 範例12-4兩種物件陣列:班上同學資料(姓名,電話,LineID)
|
範例12-4兩種物件陣列:班上同學資料(姓名,電話,LineID) <?php //印出全班姓名 echo "/////第二種物件陣列/////////////////////////////////////////////// <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的選項:在option內判斷,若選到就顯示selected
7.如何在php設定input-text的內容:在input內的value='...'
|
範例12-5:雲端主機,判別下拉選單是第幾個(阿Q桶麵查詢價錢庫存) <?php $selname=""; //讀取selection的數值////////////////////////////////////////////// ?> <select class="col-sm-10" name="list01name" class="form-control" >
<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 數學,英文的輸入數值:在
|
範例12-6:雲端主機計算陣列,計算各科全班平均成績 <?php if(isset($_POST['stuname'])){ //////計算全班數學,英文平均////////////////////////////////// //////更新最新的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'> ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
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物件陣列若要用->取出值,則宣告時必須: 若是宣告成$arrayObj = new ArrayObject($data);, ArrayObject物件陣列= new ArrayObject($data, ArrayObject::ARRAY_AS_PROPS) 計算物件陣列ArrayObject的數目:count(陣列)
印出全部物件陣列1 ArrayObject物件陣列,不能使用二維陣列 |
範例12-7物件陣列(把陣列當作物件來操作):ArrayObject(陣列) <?php $fruit = array(1=>"Orange","Banana","Grape","Apple","Flower"); echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>";
echo "////////////////////////////////////////////////////////////////////<br/>"; echo "//計算物件陣列ArrayObject的數目:count(陣列)<br/>"; echo "印出全部物件陣列".var_dump($arrayObj); echo "////////////////////////////////////////////////////////////////////<br/>"; echo "////////////////////////////////////////////////////////////////////<br/>"; ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
Chp20. 讀取資料庫前要先學習SQL語法 | |||||
目錄 | 1.w3school的SQL語法教學(英文) | 2.w3school的SQL語法教學(中文) | |||
w3school的SQL語法教學 | |||||
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) //引入資料庫設定檔案 |
<?php //連線資料庫伺服器 if (mysqli_connect_errno($conn)) //設定連線的字元集為 UTF8 編碼 |
||||
關鍵程式碼(mysql.inc.php) ////釋放記憶體//////////////////////////// |
<?php ?> |
||||
關鍵程式碼 //引入資料庫設定檔案
////釋放記憶體//////////////////////////// |
<?php //引入資料庫設定檔案 // 【書籍】欄位 //使用表格顯示資料 //使用迴圈逐筆讀取記錄 echo '</table>'; ////釋放記憶體//////////////////////////// |
||||
總共幾筆記錄 $num = mysqli_num_rows($result); |
<?php ?> |
||||
總共幾個欄位 $num = mysqli_num_fields($result); |
<?php ?> |
||||
查詢結果一次給定陣列 $rowall |
<?php ?> MYSQLI_ASSOC:文字欄位 |
||||
查詢結果迴圈給定陣列 $row[]= |
<?php ?> $row=mysqli_fetch_array($result,MYSQLI_ASSOC); |
||||
1 |
PHP讀取資料庫三種方法: 方法一:程序導向的介面():mysqli_connect(),mysqli_query(), mysqli_fetch_array()
方法一:程序導向的介面() 將查詢回傳的陣列設定為 $row 陣列:
//第2筆記錄
//最後一筆記錄 最後一筆記錄,上述這個執行會傳回false(沒有資料庫記錄值) 應用:所以把所有資料迴圈一次,可以用while($row = mysqli_fetch_array($result)){.....}; 因為一旦false就不會再執行迴圈while了
總共幾筆記錄 判別是否查到資料 兩種查詢的指令,都可以 將查詢回傳的陣列設定為 $row 陣列:
|
<?php //資料庫設定 //連線資料庫伺服器 if (mysqli_connect_errno($conn)) //設定連線的字元集為 UTF8 編碼 //查詢【員工】資料表的的資料 //--------- 讀取第 1 筆記錄 --------------- //以欄位名稱字串為索引取得資料 echo "//////第2筆記錄//////////////////////////////////////////////// <br/>";
echo "/////判別是否查到資料//////////////////////////////////// <br/>"; ////釋放記憶體//////////////////////////// |
|||
2 | 印出所有查詢的資料
因為一旦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>"; |
|||
3 |
印出所有資料,分頁顯示(數字頁數超連結) 1.關鍵一:設定一個二維陣列,在迴圈內儲存所有資料表記錄$rowpage[]=mysqli_fetch_array($result 第二位同學的三個欄位:、$rowpage[1][0],$rowpage[1][1],$rowpage[1][2] 2.關鍵二:分頁顯示要設定幾個參數: 3.關鍵三:點按頁數的超連結,用$_GET['pagenum']來讀取
|
<?php /////////////////////////////////////////////////// //連線資料庫伺服器 if (mysqli_connect_errno($conn)) //設定連線的字元集為 UTF8 編碼 //查詢【員工】資料表的的資料 //給定$rowpage[][]二維陣列////////////////////////////////////////////////////// //顯示表格/////////////////////////////////////////// }
|
|||
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內,才能取值 4.關鍵五:超連結的單引號內不可再有單引號(必須用雙引號,且前面必須加上\:
|
<script type="text/javascript"> <style> </head> <body> ///////////////////////////////////////////////////////// //連線資料庫伺服器 if (mysqli_connect_errno($conn)) //設定連線的字元集為 UTF8 編碼 //查詢【員工】資料表的的資料 //給定$rowpage[][]二維陣列////////////////////////////////////////////////////// //顯示表格/////////////////////////////////////////// } ///顯示頁數////////////////////////////////////////////// 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='前往' />"; ////釋放記憶體//////////////////////////// |
|||
5 |
點按標題,自動排序 2.由大到小:select * from 資料表 order by 欄位 desc 3.點按標題排序:在表格標題,加上超連結:<th><a href='exp13-5.php?sortcolumn=書籍編號'>書籍編號
|
//資料庫設定 //連線資料庫伺服器 if (mysqli_connect_errno($conn)) //設定連線的字元集為 UTF8 編碼 ///讀取要排序的欄位////////////////// //查詢【員工】資料表的的資料 //給定$rowpage[][]二維陣列////////////////////////////////////////////////////// //顯示表格/////////////////////////////////////////// } ...................... |
|||
6 |
SQL 語法:函數 1.計算筆數: count(欄位) as 書籍數量 2.計算最大值: max(欄位) as 最高價 3.計算最低值: min(價格) as 最低價 4.計算總和: sum(價格) as 總和價 5.計算平均值: avg(價格) as 平均價
|
//查詢【員工】資料表的的資料 $result=mysqli_query($conn, "SELECT 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']}
|
//引入資料庫設定檔案 if(isset($_POST['bookname'])){ ////釋放記憶體//////////////////////////// |
|||
8 |
1.刪除一筆記錄:$sql="delete from 資料表 where 欄位=10"; 2.判別是否刪除一筆記錄: if(mysqli_affected_rows($conn)>0){....} 3.SQL 語法字串內若要加入:$_POST['bookname'],只要前後用大括弧即可{$_POST['bookname']}
|
//引入資料庫設定檔案 //刪除欄位///////// if(mysqli_affected_rows($conn)>0) ////釋放記憶體//////////////////////////// |
|||
9 |
1.修改一筆記錄:"update資料表 set 文字欄位='..',數字欄位=5 where 欄位=10“ 2.判別是否修改一筆記錄: if(mysqli_affected_rows($conn)>0){....}
exp13-9.php
|
//引入資料庫設定檔案 //修改欄位/////////// if(mysqli_affected_rows($conn)>0) ////釋放記憶體//////////////////////////// |
|||
10 |
避免SQL Injection 1.讀取$_POST['..'],$_GET['..']前要先過濾特殊字元: if (mysqli_affected_rows($conn) > 0){echo '已成功新增一筆記錄';}
|
//引入資料庫設定檔案 //新增欄位//////////////////// if(isset($_POST['bookname'])){ $stmt = mysqli_prepare($conn,$sql); // 繫結參數 // 寫入資料庫 if (mysqli_affected_rows($conn) > 0){ ////釋放記憶體//////////////////////////// |
|||
11 |
留言板card exp13-11.php
留言板新增留言注意:
|
//引入資料庫設定檔案 //查詢【員工】資料表的的資料--過濾特殊字元 //給定$rowpage[][]二維陣列////////////////////////////////////////////////////// ///計算顯示的編號~幾號///////////////////////////////////////////////////// $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> "; ////釋放記憶體////////////////////////////
exp13-11b.php
//////////////////////// /////前往留言板瀏覽全部留言/////////////////////////
|
|||
12 |
查詢資料表,顯示全部 (不分頁,bootstrap) |
//查詢【員工】資料表的的資料 |
|||
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.php | mysqlobjclose.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模板 4.注意:若是資料庫有中文,要加上編碼charset設定:$conn->set_charset("utf8"); |
|||
1 | 14-2使用w3cschool的PHP連線mySQL模板讀取資料表 |
14-2使用w3cschool的PHP連線mySQL模板讀取資料表 1.下載資料庫 2.安裝資料庫到mySQL 3.複製w3cschool的PHP連線mySQL模板 4.注意:若是資料庫有中文,要加上編碼charset設定:$conn->set_charset("utf8"); |
|||
1 | 14-3單筆方式讀取資料庫 |
14-3單筆方式讀取資料庫 1.下載資料庫 2.安裝資料庫到mySQL 3.讀取資料庫的四個步驟: //步驟1.連線資料庫(ch09)$conn = new mysqli("localhost","root","","ch09"); $conn->set_charset('utf8'); //步驟2.查詢資料表(books) $result = $conn->query("select * from books"); //步驟3.輸出資料,有四種方法 (1)fetch_row() (2)fetch_assoc() (3)fetch_array() (4)fetch_all(); //步驟4.close connect $conn->close(); 注意:若是資料庫有中文,要加上編碼charset設定:$conn->set_charset("utf8"); 5.取得資料的方法(函數)有 4 種: (1).fetch_row():取得一列資料(2).fetch_assoc():取得一列資料 (3).fetch_array():取得一列資料 (4).fetch_all():取得全部資料 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 ![]() ![]() ![]() ☎最常用的方式:fetch_array(),最通用的使用方式 ☎若是資料太多太累贅,就用:fetch_assoc(),較精簡 6.讀取全部資料的方法:fetch_all() 範例:$rows = $result->fetch_all(參數);fetch_all(參數),有三種參數: (1)MYSQLI_ASSOC:會輸出 the 欄位名稱index (2)MYSQLI_NUM:會輸出 the 欄位編號num index (3)MYSQLI_BOTH:兩個都會輸出(欄位名稱,編號) 7.輸出json文字格式的方法:json_encode() ☎輸出全部資料(用json格式):echo json_encode($rows);☎若輸出資料有中文會產生亂碼,解決方法:echo json_encode($rows,JSON_UNESCAPED_UNICODE); 否則作文會是亂碼 ☎成果範例1:結果範例 ☎程式碼:程式碼 ☎成果範例2:結果範例 ☎程式碼:程式碼 |
|||
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) 4.第一種方法:while($row = $result->fetch_assoc()) while($row = $result->fetch_assoc()) { echo $row['書籍編號'].','.$row['書籍名稱'].','.$row['價格']; } ☎成果範例1:結果範例 ☎程式碼:程式碼 |
|||
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);//fetch_all(參數),有三種參數: (1)MYSQLI_ASSOC:會輸出 the 欄位名稱index (2)MYSQLI_NUM:會輸出 the 欄位編號num index (3)MYSQLI_BOTH:兩個都會輸出(欄位名稱,編號) foreach($rowall as $item) { echo $item["書籍編號"].','.$item["書籍名稱"].','.$item["價格"]; } ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
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) 4.第一種方法:while($row = $result->fetch_assoc()) while($row = $result->fetch_assoc()) { echo $row['書籍編號'].','.$row['書籍名稱'].','.$row['價格']; } ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
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){ echo $item["書籍編號"].','.$item["書籍名稱"].','.$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){ echo $item["書籍編號"].','.$item["書籍名稱"].','.$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){ echo $item["書籍編號"].','.$item["書籍名稱"].','.$item["價格"]; } ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
1 | 14-10刪除資料(delete from) |
14-10刪除資料(delete from) 1.下載資料庫 2.刪除記錄 $str = "";if(isset($_POST['t1']))$str = $_POST['t1']; if($conn->query("delete from books where 書籍編號=".$str)) echo "成功刪除"; else echo "無法刪除"; ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
1 | 範例14-11查詢單筆資料 |
範例14-11查詢單筆資料 1.下載資料庫 2.查詢單筆資料 $id = 0;if(isset($_POST['t1']))$id=$_POST['t1']; $result = $conn->query("select * from books where 書籍編號=".$id); ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
1 | 範例14-12修改單筆資料 |
範例14-12修改單筆資料 1.下載資料庫 2.修改單筆資料 //2.修改資料$n1 = 0; if(isset($_POST['n1']))$n1=$_POST['n1']; $n2 = ""; if(isset($_POST['n2']))$n2=$_POST['n2']; $n3 = 0; if(isset($_POST['n3']))$n3=$_POST['n3']; $n4 = 0; if(isset($_POST['n4']))$n4=$_POST['n4']; $conn->query("update books set 書籍名稱='".$n2."',價格=".$n3.",負責員工編號=".$n4." where 書籍編號=".$n1); ☎成果範例:結果範例 ☎程式碼:程式碼 |
|||
關鍵程式碼(mysqlobj.inc.php) //引入資料庫設定檔案 |
<?php //建構物件: 連線資料庫伺服器 if ($mysqli->connect_errno) // 存取成員 //設定連線的字元集為 UTF8 編碼 ?> |
||||
釋放記憶體 require_once("mysqlobjclose.inc.php"); |
<?php ?> |
||||
總共幾筆記錄 $num = $result->num_rows; |
<?php ?> |
||||
總共幾個欄位 $num = $result->field_count; |
<?php ?> |
||||
查詢結果一次給定陣列 mysqli_fetch_all($result,MYSQLI_BOTH) 這個指令,在現在版本的php不能用了 |
<?php ?> |
||||
查詢結果迴圈給定陣列 $row[]=$result->fetch_array() |
<?php ?> $row = $result->fetch_array(MYSQLI_NUM); |
||||
查詢所有資料表記錄 |
<?php //查詢【員工】資料表的的資料 //給定$rowpage[][]二維陣列////////////////////////////////////////////////////// .... ////釋放記憶體//////////////////////////// ?> |
||||
關鍵字查詢資料表記錄 |
<?php //關鍵字查詢資料表的的資料 //給定$rowpage[][]二維陣列////////////////////////////////////////////////////// .... ////釋放記憶體//////////////////////////// ?> |
||||
根據某欄位排序 |
<?php ///讀取要排序的欄位////////////////////////// //查詢資料表的的資料 //給定$rowpage[][]二維陣列////////////////////////////////////////////////////// .... ////釋放記憶體//////////////////////////// ?> |
||||
查詢所有資料表記錄(尚待確認??) SQL Injection 方式 bind_param資料形態 |
<?php $sql="SELECT * FROM 資料表 where 欄位 =?"; //給定$rowpage[][]二維陣列////////////////////////////////////////////////////// .... ////釋放記憶體//////////////////////////// ?> |
||||
新增一筆記錄 |
<?php //新增欄位/////////////////////////////////////////// if ( $mysqli->query($sql) ) // 執行SQL指令 .... ////釋放記憶體//////////////////////////// ?> |
||||
新增一筆記錄 SQL Injection 方式 bind_param資料形態 |
<?php $sql="INSERT 資料表 (書籍名稱, 價格) VALUES (?,?)"; $stmt = $mysqli->prepare($sql); if ( $stmt->execute() ) // 執行SQL指令 .... ////釋放記憶體//////////////////////////// ?> |
||||
刪除一筆記錄 |
<?php //刪除欄位///// ////釋放記憶體//////////////////////////// ?> |
||||
刪除一筆記錄 SQL Injection 方式 bind_param資料形態 |
<?php //刪除欄位///// $stmt = $mysqli->prepare($sql); ////釋放記憶體//////////////////////////// ?> |
||||
修改一筆記錄 |
<?php //修改欄位/// ////釋放記憶體//////////////////////////// //最後轉換到主網頁 ?> |
||||
修改一筆記錄 SQL Injection 方式 bind_param資料形態 |
<?php //修改欄位///// .... ////釋放記憶體//////////////////////////// //最後轉換到主網頁 ?> |
||||
查詢結果 顯示全部(方法一) (不分頁,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"> |
||||
一組輸入文字方塊,按鈕 (按按鈕後,輸入文字還會繼續顯示)
|
<form class="form-inline" method="post" action="exp15-6.php"> |
||||
兩組輸入文字方塊,一個按鈕 (在同一行) (但是按按鈕後,輸入文字會不見)
|
<form class="form-inline" method="post" action="exp15-10.php"> |
||||
1 |
留言板card顯示面板 (全部顯示)(方法一) |
while($row=$result->fetch_array(MYSQLI_ASSOC)){ |
|||
2 |
留言板card顯示面板 (分頁顯示) |
//給定$rowpage[][]二維陣列/////// ......... for($i=$min;$i<$max;$i++){ |
|||
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) //引入資料庫設定檔案 |
<?php // 建立 dsn 字串 try{ // 嘗試連線 |
||||
釋放記憶體 |
<?php ?> |
||||
計算查詢結果總共幾筆(筆數),有兩種寫法 $result->rowCount(); |
計算查詢結果總共幾筆(筆數),有兩種寫法: |
||||
總共幾個欄位 $result->columnCount(); |
<?php ?> |
||||
查詢結果一次給定陣列 $row = $result->fetchAll(); |
<?php ?> 輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC); |
||||
查詢結果迴圈給定陣列 $row = $result->fetch(PDO::FETCH_BOTH |
<?php ?> 輸出文字欄位:$row = $result->fetch(PDO::FETCH_ASSOC); |
||||
查詢所有資料表記錄 PDO::FETCH_ASSOC: |
<?php //查詢【員工】資料表的的資料 //給定$row[][]二維陣列-文字欄位//////////////////////////// .... ////釋放記憶體//////////////////////////// ?> 輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC); |
||||
關鍵字查詢資料表記錄 |
<?php //關鍵字查詢資料表的的資料 //給定$row[][]二維陣列-文字欄位//////////////////////////// .... ////釋放記憶體//////////////////////////// ?> 輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC); |
||||
根據某欄位排序 |
<?php ///讀取要排序的欄位////////////////////////// //查詢資料表的的資料 //給定$row[][]二維陣列-文字欄位//////////////////////////// .... ////釋放記憶體//////////////////////////// ?> 輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC); |
||||
查詢所有資料表記錄(尚待確認??) SQL Injection 方式 |
<?php $sql="SELECT * FROM 資料表 where 欄位 ='李大同'"; //給定$row[][]二維陣列-文字欄位//////////////////////////// .... ////釋放記憶體//////////////////////////// ?> 輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC); |
||||
新增一筆記錄 |
<?php //引入資料庫設定檔案 (1).觀念:一個資料表,若有5個欄位,但是新增資料時,只insert3個欄位,就會報錯。 除非:某些欄位有預設值,或是自動新增Increment (1).觀念:所以insert時,(A).要全部欄位都新增寫上。(B).或是某些資料表已經設定預設值。 (2).require_once("mysqlpdo.inc.php"); //新增欄位/////////////////////////////////////////// if ($conn->exec($sql)) // 執行SQL指令 } .... ////釋放記憶體//////////////////////////// ?> |
||||
新增一筆記錄 SQL Injection 方式 PDO::PARAM_BOOL (integer) (2).沒有日期時間,用PDO::PARAM_STR取代。 |
<?php $sql="INSERT 資料表 (姓名,留言,日期時間) VALUES (?,?,?)"; // 繫結參數 // 寫入資料庫 .... ////釋放記憶體//////////////////////////// ?> |
||||
刪除一筆記錄 |
<?php //刪除欄位///// ////釋放記憶體//////////////////////////// ?> |
||||
刪除一筆記錄 SQL Injection 方式 PDO::PARAM_BOOL (integer) (2).沒有日期時間,用PDO::PARAM_STR取代。 |
<?php //刪除欄位//// ////釋放記憶體//////////////////////////// ?> |
||||
修改一筆記錄 |
<?php //修改欄位/// ////釋放記憶體//////////////////////////// ?> |
||||
修改一筆記錄(再累加值) |
修改一筆記錄(再累加值) |
||||
修改一筆記錄 SQL Injection 方式 PDO::PARAM_BOOL (integer) (2).沒有日期時間,用PDO::PARAM_STR取代。 |
<?php //修改欄位///// .... ////釋放記憶體//////////////////////////// ?> |
||||
查詢結果 顯示全部(方法一) (不分頁,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>"; |
||||
查詢結果 顯示全部(方法二) (不分頁,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"> |
||||
一組輸入文字方塊,按鈕 (按按鈕後,輸入文字還會繼續顯示)
|
<form class="form-inline" method="post" action="exp15-6.php"> |
||||
兩組輸入文字方塊,一個按鈕 (在同一行) (但是按按鈕後,輸入文字會不見)
|
<form class="form-inline" method="post" action="exp15-10.php"> |
||||
1 |
留言板card顯示面板 (全部顯示)(方法一) |
foreach($mydata as $i=>$v){ |
|||
1 |
留言板card顯示面板 (全部顯示)(方法二) |
foreach($mydata as $i=>$v){ for($i=$min;$i<$max;$i++){ |
|||
2 |
留言板card顯示面板 (分頁顯示) |
while($row = $result->fetch(PDO::FETCH_ASSOC)) { |
|||
**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 (javascript)寫法 |
查詢bootstrap分頁的DOM (jQuery)寫法 |
查詢bootstrap分頁+表格排序的DOM (jQuery)寫法 |
||
虛擬產生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>function show(v1) { $.get("p16-1.php?a1="+v1,function(data,status) { $('#t1').text(data); }); } </script> <body> <input type="text" onkeyup="show(this.value)" /> <txt id='t1'></txt> 2.php程式: <?phpif($_GET['a1']=='john') { echo "你不能夠使用這個名稱".$_GET['a1']; } else { echo "你可以使用這個名稱".$_GET['a1']; } ?> ☎成果範例:結果範例 ☎程式碼(html):程式碼(html) ☎程式碼(php):程式碼(php) |
|||
1 | 16-2使用ajax傳遞php的一維陣列 |
範例16-2使用ajax傳遞php的一維陣列 1.jquery的ajax程式: <script>$(document).ready(function() { $('#b1').click(function() { $.get("p16-2.php",function(data,status) { a1 = JSON.parse(data); //document.getElementById('sp1').innerHTML = data; $('#sp1').text(a1[0]).append("<br>"+a1[1]).append("<br>"+a1[2]); }); }); }); </script> <body> <input id="b1" type="button" value="查询主機php的陣列" /> <span id="sp1"></span> 2.php程式: <?php$a1[0] = 'john'; $a1[1] = 'tom'; $a1[2] = 'jane'; echo json_encode($a1); ?> ☎成果範例:結果範例 ☎程式碼(html):程式碼(html) ☎程式碼(php):程式碼(php) |
|||
1 | 16-3使用ajax讀取local電腦的json檔案 |
範例16-3使用ajax讀取local電腦的json檔案 1.下載json檔案 1.jquery的ajax程式: <script>$(document).ready(function() { $('#b1').click(function() { $.get("book.json",function(data,status) { //ajax讀取josn檔案後,直接就轉成object array, 不需要再用JSON.parse()轉換了 //alert(data[0].id + ',' + data[0].title) str = '<table class="table table-striped" border=1 style="width:100%"> <tr class="thead-dark"> <th>title</th> <th>author</th> <th>pub date</th> </tr>'; for(i in data) { str += '<tr><td>'+ data[i].title +'</td><td>'+ data[i].author +'</td><td>'+ data[i].pubdate +'</td></tr>'; } str += '</table>'; //$('#txt1').text(str); document.getElementById('txt1').innerHTML = str; }); }); }); </script> ☎成果範例:結果範例 ☎程式碼(html):程式碼(html) |
|||
1 | 16-4使用ajax傳遞php的mysql資料表 |
範例16-4使用ajax傳遞php的mysql資料表 1.下載資料庫 1.jquery的ajax程式: <script>$(document).ready(function() { $('#b1').click(function() { //ajax request to server $.get("p16-4.php",function(data,status) { //1.把json純文字pure text(data)轉成物件陣列a1(object + array) a1 = JSON.parse(data); //2.第一筆資料(a1[0])的書籍名稱欄位 = a1[0].書籍名稱 //alert(a1[0].書籍名稱); //$("#t1").text(a1[0].書籍名稱); //3.把表格table分成三部分:txt1,txt2,txt3 txt1 = '<table class="table table-striped"> <tr class="table-primary"> <td>書籍編號</td> <td>書籍名稱</td> <td>價格</td> </tr>'; txt2 = ""; for(i in a1) { txt2 += '<tr> <td>' + a1[i].書籍編號 + '</td> <td>' + a1[i].書籍名稱 + '</td> <td>' + a1[i].價格 + '</td> </tr> '; } txt3 = '</table>'; //4.output有兩種方式: //(1)在id='t1'處顯示文字:$("#t1").text(...); //(2)在id='t1'處顯示html:$("#t1").html(...); $("#t1").html(txt1+txt2+txt3); }); }); }); </script> <body> 查詢主機php:<input type="button" id="b1" class="btn btn-warning" value="ajax search mysql data" /> <div id="t1"></div> 2.php程式: <?php//echo "good luck"; //1.conect to database $conn = new mysqli("localhost","root","","ch09"); $conn->set_charset('utf8'); //2.search the data table(books) $result = $conn->query("select * from books"); //3.get the 1st row //there are 4 method to get data //(1)fetch_row(), only number index like $row[1]: $row = $result->fetch_row(); echo $row[1] = 'php程式教學'; //(2)fetch_assoc(), only column nmae like $row["書籍名稱"]: $row = $result->fetch_assoc(); echo $row["書籍名稱"] = 'php程式教學'; //(3)fetch_array(), both index & column nmae like $row[1],$row["書籍名稱"]: $row = $result->fetch_array(); echo $row["書籍名稱"] = 'php程式教學'; //(4)fetch_all(); //$row = $result->fetch_assoc(); //echo $row['書籍名稱']; //get 2nd row; //echo "<br>"; //$row = $result->fetch_row(); //echo $row[1]; //get 3rd row; //echo "<br>"; //$row = $result->fetch_array(); //echo $row[0].", ".$row["書籍名稱"]; //get all data $rowall = $result->fetch_all(MYSQLI_ASSOC); //fetch_all(參數),有三種參數: //(1)MYSQLI_ASSOC:會輸出 the 欄位名稱index //(2)MYSQLI_NUM:會輸出 the 欄位編號num index //(3)MYSQLI_BOTH:兩個都會輸出(欄位名稱,編號) //若輸出資料有中文會產生亂碼,解決方法:echo json_encode($rows,JSON_UNESCAPED_UNICODE); echo json_encode($rowall,JSON_UNESCAPED_UNICODE); //4.close connect $conn->close(); ?> ☎成果範例:結果範例 ☎程式碼(html):程式碼(html) ☎程式碼(php):程式碼(php) |
|||
1 | 16-5使用ajax關鍵字查詢php的mysql資料 |
範例16-5使用ajax關鍵字查詢php的mysql資料 1.下載資料庫 1.jquery的ajax程式: <script>$(document).ready(function() { $("#t1").keyup(function() { //alert(this.value); //use ajax and request to php $.get("p16-5.php?a1="+this.value,function(data,status) { alert(data); }); }); }); </script> <body> <div class="container"> Use keyword to search books <input type="text" id="t1" /> </div> 2.php程式: <?php//purpose: get the data from mysql database ch09/books //1.connect to database ch09 $conn = new mysqli("localhost","root","","ch09"); $conn->set_charset("utf8"); //2.search for datatable: books $a1 = $_GET['a1']; $result = $conn->query("select * from books where 書籍名稱 like '%".$a1."%'"); //3.output all the data $alldata = $result->fetch_all(MYSQLI_BOTH); //echo $alldata[0][1]; //4.output to json text from 2d array //若輸出資料有中文會產生亂碼,解決方法:echo json_encode($rows,JSON_UNESCAPED_UNICODE); echo json_encode($alldata,JSON_UNESCAPED_UNICODE); //5.close connection $conn->close(); ?> ☎成果範例:結果範例 ☎程式碼(html):程式碼(html) ☎程式碼(php):程式碼(php) |
|||
如何從javascript經由ajax傳送二維陣列到php |
如何從javascript經由ajax傳送二維陣列到php |
||||
ajax如何讀取傳回的陣列 |
10.ajax如何讀取傳回的陣列(json) |
||||
ajax讀取php的json陣列的兩種格式 |
32.javascript用ajax讀取php的jsong陣列 兩種格式都可以 success: function(data){ (1). alert(data['parameter']['type']) (2). alert(data.parameter.type) php: $myJSON = array("status" => "OK", "content" => $content,"rowcount"=>$result->rowCount(),'parameter'=>$memberstatus); | ||||
$.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物件變數 $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=""> <div id="result"></div> |
||||
**實用 自己虛擬製造的DOM元件之呼叫$.ajax寫法
例如: 1.先刪除所有舊的的Dom
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() { |
<script src="jquery/jquery-1.8.3.min.js"></script> <script type="text/javascript"> //先刪除所有舊的 page-item 的Dom //////////// ////////////////////////////// </script> //######################################## <div id="paging"> </ul> |
||||
**實用 自己虛擬製造的DOM元件之呼叫$.ajax寫法
例如: 1.先刪除所有舊的的Dom
2.再append你要放入的bootstrap的語法(一定要頭尾標籤同時放入,可用str累加) $('#result').append(str);
3.再$('li a').bind('click', function() {...}, $('th a').bind('click', function() { |
<script src="jquery/jquery-1.8.3.min.js"></script> <script type="text/javascript"> // 表格及排序 ///////////////// for(i=min;i<max;i++){ /////////////////////////// $('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: ///////////////////////// javascript: |
||||
jQuery v.s javascript 捲頁事件 |
jQuery: ///////////////////////// javascript: |
||||
表格若要不斷新增累加 在p2處累加 |
<table id="p1" class='table table-striped table-bordered table-condensed'> |
||||
捲頁超過超過視窗底部的判別 |
function showscroll(){
} |
||||
**實用 $.ajax讀取時傳遞變數data
在PHP讀取資料庫,讀取筆數 'offset' =起始編號(由0開始 'limit' = 一次讀取幾個 |
var data = $.ajax({ |
||||
**實用 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請求狀態/// function showscroll(){ if($(window).scrollTop() >= $(document).height() - $(window).height()-10) { var data = $.ajax({ } |
||||
8.bootstrap pagy分頁套件 pagy | 8.bootstrap pagy分頁套件 pagy Demo http://medihack.github.io/bootstrap-pagy/demo/ https://github.com/medihack/bootstrap-pagy |
||||
7.避免捲頁時瞬間兩次ajax請求而造成傳回同樣資料兩次 | 7.避免捲頁時瞬間兩次ajax請求而造成傳回同樣資料兩次 var loading=false; function onReachScrollLimit(){ if(loading){return;} loading=true; load_new_posts(); } function load_new_posts(){ //insert the posts loading=false; } |
||||
6.jquery alert訊息插件 toastr.error |
6.jquery alert訊息插件 https://github.com/CodeSeven/toastr |
||||
toastr常用訊息指令 |
toastr常用訊息指令:
範例:
(0).下載css,js |
||||
toastr訊息視窗 |
Link to toastr.css,toastr.js
|
||||
toastr設定參數 |
//Optionally enable a close button |
||||
toastr.error('')訊息窗 |
(0).下載css,js |
||||
5.jquery 幻燈片插件 bxSlider |
5.jquery 幻燈片插件 $(".bxslider").bxSlider(); |
||||
Chp18 : 申請免費的php網站空間 | |||||
目錄 | 1.byethost免費網站空間 | 2.0fees免費網站空間 | 3.AwardSpace老牌高速免費網站空間 | ||
(1)byethost免費網站空間 | (1)
byethost登入教學檔案 |
||||
(2)0fees免費網站空間 |
(1)0fees介紹: |
||||
(3)AwardSpace老牌高速免費網站空間 |
(1)AwardSpace介紹: |
||||