`包起來,並加入`.col-sm-*` 指定輸入框的空間大小
- (3) 若是希望標籤可以靠右邊對齊,則可加入`.text-sm-right`,如此,只有螢幕大於576px時才會靠右,小螢幕時,最自動回到左上方。
- (4) 如果要在欄位下方加上說明,可用`.form-text`,並用`.text-danger`來設定成紅色
### 十、 資料庫規劃
1. 若是不熟,建議先用試算表軟體,如:Calc或Excel來規劃一下(內含完整架構及模擬資料),順便想像一下需要的功能和欄位。
2. 啟動adminer或者直接連至 [http://localhost/us\_opt2/index.php](http://localhost/us_opt2/index.php)
3. 帳密預設為 root 及 12345,點擊「建立新資料庫」,如「`reporter`」,「校對」選擇「`utf8_general_ci`」
![](https://www.tad0616.net/uploads/tad_book3/image/43/php26.png)
4. 點擊「建立資料表」,建立需要的資料表,例如「`article`」資料表 ,「引擎」請選「MyISAM」
![](https://www.tad0616.net/uploads/tad_book3/image/43/php27.png)
5. 接著建立以下資料表:
列 | 類型 | 註解 |
sn | mediumint(9) 自動遞增 | 流水號 |
title | varchar(255) | 文章標題 |
content | text | 文章內容 |
create\_time | datetime | 建立時間 |
update\_time | datetime | 最後更新時間 |
6. 注意,一定要有流水號(勾選AI,即自動遞增)
![](https://www.tad0616.net/uploads/tad_book3/image/43/php28.png)
7. 最後,請匯出sql檔,以便下次使用。
![](https://www.tad0616.net/uploads/tad_book3/image/43/php29.png)
### 十一、 為何需要使用適當欄位類型?
1. 節省空間:不同欄位類型佔用空間不同,往往可以差到好幾倍。
2. 降低開發難度:選用適當欄位類型可以減少許多檢查,例如`ENUM`,或設定適當索引
3. 避免錯誤:例如電話號碼就不可用數字欄位,避免0開頭被省略。
### 十二、 讓PHP7連線到MySQL資料庫
1. HTML網頁語法無法直接存取資料庫伺服器,需透過程式來介接。
2. 注意!PHP7已經不支援MySQL系列函數,而是改用MySQLi物件,或者PDO物件。
3. 使用PDO物件的好處是方便介接其他資料庫,而用MySQLi物件的優點則是其運作和早期MySQL較像,熟悉MySQL函數的話,幾乎可以無痛轉移。底下還是以MySQLi為範例。
4. 基本MySQL資料庫連線方法: ```
$db = new mysqli(_DB_HOST, _DB_ID, _DB_PASS, _DB_NAME);
if ($db->connect_error) {
die('無法連上資料庫:' . $db->connect_error);
}
$db->set_charset("utf8");
```
5. 指定欲連線的來源位置(一般為localhost),資料庫帳號、密碼及資料庫名稱。
6. 若無錯誤訊息,表示連線成功。連線後,需設定用utf8編碼來擷取資料。
### 十三、 常數設定
1. 常數是一定設定就不會變,和變數可以隨時指派其值不一樣。
2. 常數可以直接在函數中使用
3. 一般常數會以大寫前面加底線來辨識(實際上,不加底線或是用小寫也是可以)。
4. 常數定義方式: ```
define('常數名稱', '對應值');
```
5. 可作一個config.php檔,然後讓其他程式來引入。
### 十四、 if條件判斷
1. PHP的判斷式寫法 ```
if(判斷條件){
//條件為真執行
}elseif(判斷條件){
//elseif的條件為真執行
}else{
//條件為假時執行
}
```
2. Smarty的判斷式寫法 ```
{if 判斷條件}
//條件為真執行
{elseif 判斷條件}
//elseif 的條件為真執行
{else}
//條件為假時執行
{/if}
```
3. 由上往下判斷,一旦為真,就執行指定動作。後面就不再繼續判斷。
4. `elseif `和 `else `均可省略,視情況使用即可。
5. `elseif `可以有很多組,其餘的只能有一組。若是太多`elseif`,建議改用`switch`
### 十五、 資料庫insert寫入語法
1. 要操作MySQL,必須用SQL語言,新增資料的SQL語法如下(大小寫無關): ```
INSERT [INTO] `資料表名稱` [(`欄位1`, `欄位2`...)] VALUES ('值1', '值2'...)
```
2. 建議凡是資料庫名稱、資料表名稱、欄位名稱都用重音符號```包起來。
3. 凡是「值」的,都用單引號`'`包起來。
### 十六、 用PHP來操作資料庫流程
1. 先完成連線,取得資料庫資源變數物件,例如:$db
2. 利用` $db->real_escape_string()` 過濾資料,目的是順利讓所有資料存入資料庫,並避免隱碼攻擊。如: ```
$title = $db->real_escape_string($_POST['title']);
```
3. `$db->query($sql)` 就是送執行指令到資料庫。
4. `$db->error` 會秀出資料庫傳回來的錯誤訊息
5. 取得寫入時該資料產生的流水號:`$db->insert_id`
6. 凡是寫入、修改、刪除,進行完都應該做轉向,避免使用者重新整理畫面,又重複執行寫入、修改或刪除:`header("location: index.php?sn={$sn}");`
7. `header()`函數基本上是設定文件檔頭,其中 location屬性可以指定文件轉向,故利用之來達成轉向功能。 ```
if (isset($_POST['op']) and $_POST['op'] == "insert") {
$db = new mysqli(_DB_HOST, _DB_ID, _DB_PASS, _DB_NAME);
if ($db->connect_error) {
die('無法連上資料庫:' . $db->connect_error);
}
$db->set_charset("utf8");
$title = $db->real_escape_string($_POST['title']);
$content = $db->real_escape_string($_POST['content']);
$sql = "INSERT INTO `article` (`title`, `content`, `create_time`, `update_time`) VALUES('{$title}', '{$content}', now(), now())";
$db->query($sql) or die($db->error . $sql);
$sn = $db->insert_id;
header("location: index.php?sn={$sn}");
}
```