todo
」,「校對」選擇「utf8mb4_general_ci
」。列 | 類型 | 註解 |
---|---|---|
sn | mediumint(8) 自動遞增 | 流水號 |
title | varchar(255) | 待辦事項 |
directions | text | 描述 |
end | date | 到期日 |
priority | enum('高','中','低') | 優先順序 |
assign | varchar(255) | 指派對象 |
done | enum('0','1') | 是否完成 |
create_time | datetime | 建立時間 |
update_time | datetime | 最後更新時間 |
CREATE TABLE `todo`.`list` (
`sn` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '流水號' ,
`title` VARCHAR(255) NOT NULL COMMENT '待辦事項' ,
`directions` TEXT NOT NULL COMMENT '描述' ,
`end` DATE NOT NULL COMMENT '到期日' ,
`priority` ENUM('高','中','低') NOT NULL COMMENT '優先順序' ,
`assign` VARCHAR(100) NOT NULL COMMENT '指派對象' ,
`done` ENUM('1','0') NOT NULL COMMENT '是否完成' ,
`create_time` DATETIME NOT NULL COMMENT '建立時間' ,
`update_time` DATETIME NOT NULL COMMENT '最後更新時間' ,
PRIMARY KEY (`sn`)
) ENGINE = MyISAM DEFAULT CHARSET=utf8mb4;
%
的帳號,先把這帳號給刪掉,這帳號表示資料庫可以匿名登入,這非常不安全請一定要刪除。config.inc.php
,在 password 後面輸入你剛剛所設定的密碼,將19行的值改為http
,如此,登入phpMyAdmin時就會詢問帳號密碼。PHP常數設定
常數是一旦設定就不會變,和變數可以隨時指派其值不一樣。
常數可以直接在函數中使用。
一般常數會以大寫前面加底線來辨識(實際上,不加底線或是用小寫也是可以)。
常數定義方式:
define('常數名稱', '對應值');
index.php
:
//常數設定
define('_DB_LOCATION', 'localhost');
define('_DB_ID', 'root');
define('_DB_PASS', '12345');
define('_DB_NAME', 'todo');
index.php
)
//實體化資料庫物件
$mysqli = new mysqli(_DB_LOCATION, _DB_ID, _DB_PASS, _DB_NAME);
if ($mysqli->connect_error) {
throw new Exception('無法連上資料庫:' . $mysqli->connect_error);
}
$mysqli->set_charset("utf8mb4");
utf8mb4
編碼來擷取資料。header.php
。phpinfo()
,有些有傳回值,有些沒有;有些需要輸入參數,有些不用。
function 函數名稱($參數1='預設值' , $參數2='預設值',...){
global $外面的變數1, $外面的變數2;
//函數內容,任何有效的 PHP 程式碼,包括其它函數和class定義 ;
return 傳回值;
}
function link_db()
{
//實體化資料庫物件
$mysqli = new mysqli(_DB_LOCATION, _DB_ID, _DB_PASS, _DB_NAME);
if ($mysqli->connect_error) {
throw new Exception('無法連上資料庫:' . $mysqli->connect_error);
}
$mysqli->set_charset("utf8mb4");
return $mysqli;
}
// 引入function.php
require_once 'function.php';
global
宣告。當然,函數裡面的變數外面也無法取用,除非 return
出去。
footer.php
加入:
// 取得目前網址
$smarty->assign('action', $_SERVER['PHP_SELF']);
{if 判斷條件}
//條件為真執行
{elseif 判斷條件}
//elseif 的條件為真執行
{else}
//條件為假時執行
{/if}
{if $content}
<div class="table-responsive">
<table class="table table-bordered border-primary table-hover">
<thead class="table-primary">
<tr>
<th scope="col">是否完成</th>
<th scope="col">標題</th>
<th scope="col">到期日</th>
<th scope="col">優先順序</th>
<th scope="col">指派對象</th>
</tr>
</thead>
<tbody>
{foreach $content as $c}
<tr>
<td>{$c.done}</td>
<td>{$c.directions}</td>
<td>{$c.end}</td>
<td>{$c.priority}</td>
<td>{$c.assign}</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{else}
<div class="d-grid col-12 col-md-3 mx-auto">
<a class="btn btn-info" href="{$action}?op=post_form" role="button">新增待辦事項</a>
</div>
{/if}
$op = isset($_REQUEST['op']) ? $_REQUEST['op'] : "";
op
送到 index.tpl
樣板檔,並判斷 op=='post_form'
切換到樣板檔 post_form.tpl
if(判斷條件){
//條件為真執行
}elseif(判斷條件){
//elseif的條件為真執行
}else{
//條件為假時執行
}
switch ($變數) {
case '特定值':
# 動作...
break;
default:
# 動作...
break;
}
match ($op) {
'post_form'=> $content='新增表單',
default=> list_all(),
};
post_form.tpl
並修改所需欄位
<form>
<div class="row mb-3">
<label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3">
</div>
</div>
</form>
<form action="送至.php" method="post" role="form">
表單元件
</form>
<input type="格式" name="名稱" value="預設值" placeholder="佔位字元">
text
(文字框)、 hidden
(隱藏框)、 password
(密碼框)、 file
(上傳)name
最重要!一定要有!因為 name
送出後,會變成 PHP 的變數名稱。<textarea name="名稱">預設值</textarea>
<select name="名稱" size=1>選項</select>
<option value="值">選項文字</option>
selected="selected"
[]
外,還要加上 multiple
屬性。<input type="radio" name="名稱" value="值 1">選項文字 1
<input>
,name 都要一樣才行! checked="checked"
<input type="checkbox" name="名稱[]" value="值 1">選項文字 1
<input>
[]
,如此會送出陣列。checked="checked"
<input type="submit" name="send" value="按鈕文字" class="btn btn-primary" />
可做出按鈕效果