Toggle main menu visibility
新聞
下載
教材
影音
討論
其他選單
好站連結
行事曆
電子相簿
常見問題
萬用表單
即時留言簿
友站消息
社大學員
:::
登入
登入
帳號
密碼
登入
重整畫面
:::
所有書籍
「[1062] PHP7入門」目錄
MarkDown
2-4 admin.php
1. 建構開發環境與系統規劃
1-1 Visual Studio Code編輯器完整設定
1-2 各種訊息整理
1-3 test.php
1-4 index.php
1-5 templates/index.tpl
2. 寫入資料到資料庫
2-1 templates/index.tpl
2-2 templates/admin.tpl
2-3 css/my.css
2-4 admin.php
3. 資料庫讀取與程式的整併
3-1 admin.php
3-2 index.php
3-3 function.php
3-4 templtes/index.tpl
4. 加入登入及管理功能
4-1 header.php
4-2 footer.php
4-3 index.php
4-4 admin.php
4-5 templtes/header.tpl
4-6 templtes/footer.tpl
4-7 templtes/index.tpl
4-8 templtes/admin.tpl
4-9 templates/op_show_article.tpl
4-10 templates/op_list_article.tpl
4-11 css/my.css
4-12 signup.php
4-13 templtes/signup.tpl
5. 編輯器及上傳縮圖
5-1 includes/mailsender.php
5-2 config.php
5-3 verifyuser.php
5-4 signup.php
5-5 header.php
5-6 admin.php
5-7 main_login.php
5-8 loginheader.php
5-9 index.php
5-10 css/my.css
5-11 templates/nav.tpl
5-12 templates/admin.tpl
5-13 templates/index.tpl
5-14 templates/signup.tpl
5-15 templates/verifyuser.tpl
5-16 templates/main_login.tpl
5-17 templates/op_article_form.tpl
5-18 ckeditor/config.js
5-19 elFinder/elfinder_cke.php
6. 使用上傳物件及管理功能
6-1 admin.php
6-2 index.php
6-3 templates/nav.tpl
6-4 templates/index.tpl
6-5 templates/admin.tpl
6-6 templates/footer.tpl
6-7 templates/op_article_form.tpl
6-8 templates/op_list_article.tpl
6-9 templates/op_show_article.tpl
6-10 css/my.css
6-11 reporter.sql
7. 多人合作開發
7-1 admin.php
7-2 index.php
7-3 function.php
7-4 templates/op_modify_article.tpl
7-5 templates/op_article_form.tpl
7-6 templates/op_modify_article.tpl
7-7 .gitignore
8. 文章分頁及搜尋
8-1 index.php
8-2 function.php
8-3 PageBar.php
8-4 search.php
8-5 css/my.css
8-6 templates/op_show_article.tpl
8-7 templates/op_list_article.tpl
8-8 templates/nav.tpl
8-9 templates/search.tpl
8-10 templates/op_search_article.tpl
8-11 templates/op_search_form.tpl
9. JOIN資料表及寄信功能
9-1 search.php
9-2 function.php
9-3 admin.php
9-4 templates/op_search_article.tpl
9-5 templates/op_show_article.tpl
3-1 admin.php
\[1062\] PHP7入門 =============== ### 一、 關於函數 1. 函數有兩種,一組是PHP內建函數,另一種是自訂的函數。 2. 一個函數通常都有其獨特的功能,可視為具特定功能的小零件,直接呼叫使用即可,如:`phpinfo()`,有些有傳回值,有些沒有;有些需要輸入參數,有些不用。 3. 完整函數手冊:
4. 函數基本結構:傳回值 函數名稱(參數1,參數2...); 5. 函數傳回值有:string(字串)、int(整數)、array(陣列)、object(物件)、bool(布林值)、void(無傳回值)、mixed(不一定)、new(建立物件) ### 二、 自訂函數 1. 自訂函數的基本語法為: ``` function 函數名稱($參數1='預設值' , $參數2='預設值',...){ global $外面的變數1, $外面的變數2; //函數內容,任何有效的 PHP 程式碼,包括其它函數和class定義 ; return 傳回值; } ``` 2. 參數不見得要有,傳回值也不一定要有。 3. 超級全域變數可直接在函數中使用,外面的一般變數無法進到函數中,除非做成參數或是用 `global `宣告。當然,函數裡面的變數外面也無法取用,除非`return`出去。 4. 函數可放在檔案中任何地方,放在呼叫之前或之後都沒關係。使用時,呼叫函數名稱即可。 5. 建議建立一個function.php檔案,若同一個函數會被兩個以上的檔案呼叫時,即可把該函數放到此檔,以便讓其他檔案共用,例如可以把連線資料庫寫成函數試試。 ### 三、 資料類型 1. 不管變數常數,都會有值,只要有值,就會扯到值的資料類型。PHP有以下資料類型: - (1) 布林值(boolean):`true`、`false`,無須引號。 - (2) 整數(integer):就數字123456,無須引號。 - (3) 浮點數(float):有小數點的數字,如3.14,無須引號。 - (4) 字串(string):一般文字,一定要有引號。 - (a) 雙引號中,變數有效,可用`{}`將變數和文字隔開 - (b) 單引號中,變數會失效 - (5) 陣列(array):可以放很多值的變數,形狀為:「`$arra['索引']=值`」 - (a) 索引可以數字也可以文字,沒填索引預設會從0開始 - (b) 一維陣列(即一個索引值): ``` $stu[1]="tad"; $stu[2]="joe"; $stu=[ 1=>"tad", 2=>"joe" ]; $stu=array( 1=>"tad", 2=>"joe" ); ``` - (c) 二維陣列(即兩個索引值): ``` $stu[1][1]="tad"; $stu[1][2]="joe"; $stu[2][1]="hui"; $stu[2][2]="kai"; $stu = [ 1 => [1 => "tad", 2 => "joe"], 2 => [1 => "hui", 2 => "kai"] ]; $stu = array( 1 => [1 => "tad", 2 => "joe"], 2 => [1 => "hui", 2 => "kai"] ); ``` - (6) 物件(object):可自行定義物件成員、物件方法等。 - (7) 資源(resource):PHP在引用其他資源時所產生的一種類型。 - (8) 無值(null):NULL不分大小寫,不須引號,代表沒東西或不存在。 ### 四、 PHP的變數過濾 1. PHP的變數簡單分可分為在頁面中自己定義的變數,以及外面傳來的變數。 2. 凡是外面傳來的變數,一律要進行變數過濾。 3. 文字部份,` htmlspecialchars(文字)` 函數會將HTML做轉義,讓標籤失效,例如`<`轉成`<`,預設只轉雙引號(單引號無效),用`htmlspecialchars(文字,ENT_QUOTES) `更好。 4. HTML Entity Name 字符實體列表 :[https://www.w3schools.com/html/html\_entities.asp](https://www.w3schools.com/html/html_entities.asp) 5. `htmlentities()` 函數也可轉義,但並不適用中文,因為會連同中文字一起轉義。 6. 用 `htmlentities()` 和 `htmlspecialchars()` 只能防止XSS攻擊(避免被值入javascript),不能防止SQL隱碼攻擊。 7. 用`filter_var($變數)`亦可,會直接把HTML語法直接刪除。 8. 數字的過濾,只要加個`(int)`即可,如`$sn=(int)$_POST['sn'];` 9. 不同過濾器的運用時機:要在php檔案中運算用的,請用PHP來過濾,要寫入資料庫的,用資料庫的`real_escape_string()`來過濾。 ### 五、 PHP的 filter\_var 過濾器 1. 其用法為`filter_var($變數, 過濾器, 選項) `,幾種常用過濾方法: - (1) `FILTER_SANITIZE_STRING`:(預設)去除標籤或特殊字元,html標籤會直接消除 - (2) `FILTER_SANITIZE_ENCODED`:與`urlencode()`相同,過濾特殊字串 - (3) `FILTER_SANITIZE_MAGIC_QUOTES`:過濾針對SQL injection做過濾 - (4) `FILTER_SANITIZE_SPECIAL_CHARS`:同`htmlspecialchars()` - (5) `FILTER_SANITIZE_EMAIL` :過濾e-mail,刪除e-mail格式不該出現的字元 - (6) `FILTER_SANITIZE_URL`: 過濾URL,刪除URL格式不該出現的字元 - (7) `FILTER_SANITIZE_NUMBER_INT`:刪除所有字元,只留下數字與+-符號 - (8) `FILTER_VALIDATE_INT`:判斷數字是否有在範圍內 - (9) `FILTER_VALIDATE_BOOLEAN`:判斷布林值,1、true、on、yes都會判斷成true,反之為false,若是這些以外的值會回傳NULL - (10) `FILTER_VALIDATE_URL`:URL驗證 - (11) `FILTER_VALIDATE_EMAIL`:e-mail驗證 - (12) `FILTER_VALIDATE_IP`:IP驗證 ### 六、 三元運算式: 1. 條件 ? 真動作一 :假動作二 ``` $op = isset($_REQUEST['op']) ? filter_var($_REQUEST['op']) : ''; ``` ### 七、 PHP的運算符 1. 算術運算符:也就是+(加)-(減)\*(乘)/(除) %(餘數) 這類的運算符號。
數學運算符
範例
範例解釋
範例結果
+(加)
$a + $b
$a加$b
10+4的結果:14
-(減)
$a - $b
$a減$b
10-4的結果:6
\*(乘)
$a \* $b
$a乘以$b
10\*4的結果:40
/(除)
$a / $b
$a除以$b
10/4的結果:2.5
%(求餘數)
$a % $b
$a除以$b的餘數
10%4的結果:2
2. 賦值運算符:如$a=3,其中的=就是賦值運算符。 ``` $a = $a + 2; 可改寫成 $a += 2; ``` 3. 比較運算符:就是之前我們學的if(5>3),這類<、>、 <=、>=、==、!=的比較運算。
例子
運算符意義
解釋
$a == $b
==相等
$a和$b的值相等時,才為真
$a === $b
===全等
$a和$b的值以及資料形態都相等時才為真!
$a != $b
!=不相等
$a和$b的值不相等時,才為真
$a <> $b
!=不相等
$a和$b的值不相等時,才為真
$a !== $b
!==不全等
$a和$b的值或資料形態不相等時才為真!
$a < $b
<小於
$a小於$b才為真
$a > $b
>大於
$a大於$b才為真
$a <= $b
<=小於等於
$a小於或等於$b才為真
$a >= $b
>=大於等於
$a大於或等於$b才為真
$a <=> $b
比較
PHP7才新增的 <=> 運算符,只會傳回 -1、0、1三種值! -1,代表左邊小於右邊; 1,代表左邊大於右邊; 0,那就代表左右兩邊相等。
4. 錯誤控制運算符:指的是@這個符號,可以抑制錯誤訊息產生。 5. 遞增、遞減運算符:如++$a這類的用法。
運算符
意義
說明
++$a
先遞增
$a值加1之後才傳回$a值
$a++
後遞增
先傳回$a值之後再將$a值加1
--$a
先遞減
$a值減1之後才傳回$a值
$a--
後遞減
先傳回$a值之後再將$a值減1
6. 邏輯運算符:也就是and、or這類的用法。
範例
邏輯運算符
意義
$a and $b
and(與)
只有$a 與 $b兩者皆為真,結果才為真
$a && $b
and(與)
只有$a 與 $b兩者皆為真,結果才為真
$a or $b
or(或)
只要$a 或 $b兩者之一為真,結果就為真
$a || $b
or(或)
只要$a 或 $b兩者之一為真,結果就為真
$a xor $b
exclusive or(互斥)
只有$a 與 $b一為真、一為假時,結果才為真
!$a
not(否)
只有$a為假時,結果才為真
7. 字串運算符:小黑點「.」,用來連接字串和變數、常數或函數用的! ``` echo "嗨!" . $user_name . "您好!"; echo "資料庫名稱:" . _DB_NAME; echo "今天是:" . date("Y年m月d日"); ``` ### 八、 switch 用法 ``` switch ($變數) { case '特定值': # 動作... break; default: # 動作... break; } ``` 1. `switch `可以判斷某個變數值,當該變數值符合指定條件時,就去執行哪些動作,基本上就是「一個口令,一個動作」之意。 2. `case `到 `break `就是完整一組,可以自行添加無限多組。 3. `break;` 不加也符合語法,但會一直執行到下方動作。 4. `default `即預設動作,當變數跟任一個「特定值」都不相符時要進行的動作,一般放在最下方。 ### 九、 讀出的SQL語法 1. 讀取資料庫的內容,一律用 `select `語法: ``` SELECT `查詢的欄位` [FROM `資料表名稱` 附加的篩選條件] ``` 2. 其中篩選條件語法如下(有順序關係,需注意): ``` [where 篩選條件] [group by `欄位名稱`][having group的篩選條件] [order by {unsigned_integer | `欄位名稱` | formula} [asc | desc] ,...] [limit [起點,] 筆數] ``` ### 十、 PHP從資料庫取得資料的方法 1. 寫SQL送去資料庫執行後,會傳回一個資源變數物件,如`$result` 2. 可以利用`$result`的各種取得資料方法,將資料一筆一筆取回。 3. 一筆資料以上的資料,請放至`while(){}`迴圈中取回。 4. 利用 `$result->fetch_assoc() `取出的資料陣列,會以資料表欄位名稱為陣列索引; 以`$result->fetch_row()` 取出的資料陣列,是以欄位順序為陣列索引,通常搭配`list()`使用 5. `$data=$result->fetch_assoc();` 得到的結果為: ``` $data['sn']=1; $data['title']='文章標題'; $data['content']='文章內容'; $data['create_time']='2017-10-28 11:21:30'; $data['update_time']='2017-10-28 11:21:30'; ``` 6. `$data=$result->fetch_row();` 得到的結果為: ``` $data[0]=1; $data[1]='文章標題'; $data[2]='文章內容'; $data[3]='2017-10-28 11:21:30'; $data[4]='2017-10-28 11:21:30'; ``` 7. 常會寫成這樣: ``` list($sn, $title, $content, $create_time, $update_time)=$result->fetch_row(); ``` ### 十一、 幾個常用的迴圈用法 1. 不曉得迴圈數的 ``` while(條件為真){ //執行動作 } ``` 2. 已知道迴圈數 ``` for($i=0;$i<迴圈數;$i++){ //執行動作 } ``` 3. 抽取陣列 ``` foreach($陣列 as $索引=>$值){ //執行動作 } ``` ### 十二、 字串長度及裁切 1. 計算多語系編碼的字串長度:`mb_strlen($字串, 編碼);` 預設會自斷判斷系統編碼,例如: ``` $len = mb_strlen($data['content']); ``` 2. 裁切多語系編碼的字串:mb\_substr($字串, 起點, 字數, `編碼);`,例如: ``` $data['content'] = mb_substr($data['content'], 0, 100); ``` ### 十三、 Smarty迴圈用法 1. Smarty 若接收到陣列,可用迴圈用來處理,常用方法如下: 2. Smarty3用法 ``` {foreach $來源 as $別名} {$別名.索引} {foreachelse} 該變數沒有值時要出現的內容 {/foreach} ``` 3. Smarty2用法(也是XOOPS用法,亦相容3) ``` {foreach from=$來源 key=索引 item=項目 name=別名} {$項目.索引} {foreachelse} 該變數沒有值時要出現的內容 {/foreach} ``` 4. 迴圈還有一些特別的用法(左為Smarty3用法,右為Smarty2用法): - (1) 迴圈第一圈:`{$別名@first}` 或 `{$smarty.foreach.別名.first}` - (2) 迴圈最後一圈:`{$別名@last}` 或 `{$smarty.foreach.別名.last}` - (3) 取得迴圈的索引值:`{$別名@index}` 或` {$smarty.foreach.別名.index}`,依序輸出0、1、2...... - (4) 取得迴圈的計數值:`{$別名@iteration}` 或 `{$smarty.foreach.別名.iteration}`,依序輸出1、2、3...... - (5) 取得迴圈執行總數:`{$別名@total}` 或 `{$smarty.foreach.別名.total}` ### 十四、 製作PHP頁首頁尾檔(整併PHP檔) 1. 可以製作header.php及footer.php,把每個檔案都會引入的東西放在裡面。 2. 可用`require_once()` 或` include_once()`引入。 3. header.php頁首檔 ``` assign('op', $op); $smarty->assign('title', _PAGE_TITLE); $smarty->display(_PAGE_TEMPLATE); ``` ### 十五、 製作樣板頁首頁尾檔(整併樣板檔) 1. 可以製作header.tpl及footer.tpl,把每個樣板檔案都會引入的東西放在裡面。 2. 可用 `{include file="header.tpl"}` 引入。 ### 十六、 \[補充\]影片背景 1.
2. 影片語法,加在` .img-container` ```
``` 3. 接著在my.css中加入,將影片置於背景下 ``` .video { position: absolute; z-index: -10; } ```
:::
搜尋
search
進階搜尋
QR Code 區塊
快速登入
所有討論區
「PHP全端開發」線上課程討論區
XOOPS使用討論區
一般研習學員
社大學員專用
路過哈啦區
XOOPS佈景設計
XOOPS模組開發
Tad書籍區
即時留言簿
書籍目錄
展開
|
闔起
線上使用者
86
人線上 (
33
人在瀏覽
線上書籍
)
會員: 0
訪客: 86
更多…