標題管理
編輯表單
編輯 form 標籤
把 form 標籤的target="back"
刪除,然後把action改為 api.php
<form method="post" action="api.php?do=tii">
1
顯示後台資料
表格第一列標題列後面放入顯示資料的程式碼
版型預設按鈕會以彈出視窗顯示 view.php,以 do 判斷要顯示的內容
我的do命名規則是新增以n(new)開頭,修改以u開頭(update),後面接admin.php的redo,不過因為標題管理沒有redo,所以直接寫title
<?php
$result = All(sql("title", 0));
foreach($result as $row)
{
?>
<tr>
<input type="hidden" name="id[]" value="<?=$row["id"]?>">
<td>
<img src="img/<?=$row["file"]?>" width="400">
</td>
<td>
<input type="text" value="<?=$row["text"]?>" name="text[<?=$row["id"]?>]">
</td>
<td>
<input type="radio" value="<?=$row["id"]?>" name="display" <?=($row["display"])?"checked":""?>>
</td>
<td>
<input type="checkbox" value="<?=$row["id"]?>" name="del[]">
</td>
<td>
<input type="button" onclick="op('#cover','#cvr','view.php?do=uptitle&id=<?=$row["id"]?>')" value="更新圖片">
</td>
</tr>
<?php
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
完成後修改下方新增按鈕的連結
<input type="button" onclick="op('#cover','#cvr','view.php?do=ntitle')" value="新增網站標題圖片">
1
編輯彈出視窗
標題管理有title和uptitle兩個要顯示
開新檔view.php,以 $_GET["do"]
判斷要做什麼動作
因為這題後台幾乎都有彈出視窗,建議用 switch
節省字數
<?php
include_once "sql.php";
switch($_GET["do"])
{
// 上傳圖片
case "uptitle":
?>
<form enctype="multipart/form-data" method="post" action="api.php?do=uptitle&id=<?=$_GET["id"]?>">
<input type="file" name="file">
<input type="submit">
</form>
<?php
break;
// 新增標題
case "title":
?>
<form enctype="multipart/form-data" method="post" action="api.php?do=ntitle">
<input type="file" name="file">
<input type="text" name="text">
<input type="submit">
</form>
<?php
break;
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
寫處理表單資料的function
在 sql.php 加入處理表單的function
因為這題的檔案上傳都是單檔上傳,且有些地方只要處理檔案,不用處理表單,所以我分成兩個function
要注意的地方是foreach沒有收到值的話會跳出警告訊息,不過處理表單後會瞬間跳回管理頁所以看不到,這是為了應付考試才沒有寫判斷
// 處理表單資料
// $post 為 $_POST
// $tbl為資料表
// $insert為是否要新增一筆資料
function upd($post, $tbl, $insert)
{
global $pdo;
// 如果有要INSERT,先新增一筆只有ID的資料
$newid = -1;
if($insert)
{
All("insert into ".$tbl." (id) values (null);");
$newid = $pdo->lastInsertId();
}
// 迴圈表單的資料
// 先迴POST的NAME
foreach($post as $name => $v)
{
// 有些資料不是陣列
if(!is_array($v))
{
switch($name){
// title的display
case "display":
All("update ".$tbl." set display = 1 where id = ".$v);
break;
// footer、進站人數
case "bottom":
case "count":
All("update ".$tbl." set ".$name." = '".$v."'");
break;
// 新增文字廣告、新增最新消息、新增管理員、新增主選單
default:
All("update ".$tbl." set ".$name." = '".$v."' where id = ".$newid);
break;
}
}
else
{
// 再迴每個NAME的陣列,陣列索引值為資料ID
foreach($v as $id => $vv)
{
switch($name)
{
// 有傳ID的東西設為不顯示
case "id":
All("update ".$tbl." set display = 0 where id = ".$vv);
break;
// 再把要顯示的設為顯示
case "display":
if($insert) $vv = $newid;
All("update ".$tbl." set display = 1 where id = ".$vv);
break;
case "del":
All("delete from ".$tbl." where id = ".$vv);
break;
// 文字、管理者帳號及密碼、選單文字及連結
default:
if($insert) $vv = $newid;
All("update ".$tbl." set ".$name." = '".$vv."' where id = ".$id);
break;
}
}
}
}
// 回傳新增資料的ID,如果沒有新增資料則回傳-1
return $newid;
}
// 處理上傳檔案
function upfile($file, $tbl, $id)
{
// 以目前的時間戳記當檔案名稱
$date = strtotime("now");
// 獲取上傳檔案的副檔名
$ext = pathinfo($file["file"]["name"], PATHINFO_EXTENSION);
// 組合成完整的檔名
$name = $date.".".$ext;
copy($file["file"]["tmp_name"], "img/".$name);
All("update ".$tbl." set file = '".$name."' where id = '".$id."'");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
寫入API
在 api.php 加入處理表單的程式碼
直接套入剛剛寫好的function
case "title":
upd($_POST, "title", 0);
lo("admin.php");
break;
case "uptitle":
upfile($_FILES, "title", $_GET["id"], "");
lo("admin.php");
break;
case "ntitle":
$nid = upd($_POST, "title", 1);
upfile($_FILES, "title", $nid);
lo("admin.php");
break;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15