enctype="multipart/form-data"
```
2. 在表單裡加入 ```
```
因為有「 accept="image/\*」所以使用者預設只能看到圖片,不過仍可以切換至「所有檔案」上傳其他類型檔案
3. 在 op\_insert 增加
在「$sn=$mysqli->insert\_id;//傳回insert 指令所產生之流水號」的後面加入,因為有流水號,才有辦法關連 ```
/*
$_FILES['file']['name']:上傳檔案原始名稱。
$_FILES['file']['type']:檔案的 MIME 類型,例如“image/gif”。
$_FILES['file']['size']:已上傳檔案的大小,單位為bytes。
$_FILES['file']['tmp_name']:檔案被上傳後的臨時檔案名。
$_FILES['file']['error']:和該檔案上傳相關的錯誤代碼。
*/
if($_FILES['file'] and !$_FILES['file']['error'])
{
$col_name=$_POST['kind'];//輪播圖的關鍵字 slider_home
$col_sn=$sn;//相關流水號
$sort=1;//排序
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);//取得副檔名
$ext = strtolower($ext); //轉小寫
$sub_dir="/slider";//儲存位置
$file_name="slider_".$col_sn."_".$sort.".".$ext;//檔名
if($ext == "png" or $ext == "gif" or $ext == "jpg" or $ext == "jpeg" or $ext == "jpe")
{
$kind="img";
}else
{
$kind="file";
}
#寫入資料表 show_files
$sql = "insert into `show_files`
(`col_name`, `col_sn`, `sort`, `kind`,`file_name`,`file_type`,`file_size`,`description`,`sub_dir`)
VALUES
('{$col_name}', '{$col_sn}', '{$sort}', '{$kind}', '{$file_name}', '{$_FILES['file']['type']}','{$_FILES['file']['size']}', '{$_POST['title']}', '{$sub_dir}')";
$mysqli->query($sql) or die(printf("Error: %s
".$sql, $mysqli->sqlstate));
$new_file= WEB_PATH."/uploads".$sub_dir."/".$file_name;
#移動檔案
move_uploaded_file($_FILES['file']['tmp_name'] , $new_file);
}
```
4. 調整顯示單筆
op\_show 函數 ```
#取得圖片src
$DBV['file_name'] = get_file_name_src($DBV['sn'],$TBL['kind']);
```
取得圖片src 函數 ```
########################################
# #取得圖片src
########################################
function get_file_name_src($col_sn,$col_name)
{
global $mysqli;
if(!$col_sn or !$col_name)return;
#這裡可以再寫成函數 取得圖片檔資料
$sql = "select *
from `show_files`
where `col_sn`='{$col_sn}' and `col_name`='{$col_name}'
order by sort";
$result = $mysqli->query($sql) or die(printf("Error: %s
".$sql, $mysqli->sqlstate));
$row = $result->fetch_assoc();
#----------------
#圖片檔src
$file_name = WEB_URL."/uploads".$row['sub_dir']."/".$row['file_name'];
return $file_name;
}
```
樣版(注意 `class``=``"img-responsive")` ```
{if $DBV.file_name}
{/if}
```
5. 調整編輯
get\_show\_kind($sn) 函數 (取得單筆記錄) ```
#取得圖片src
$DBV['file_name'] = get_file_name_src($DBV['sn'],$TBL['kind']);
```
op\_form($sn) 函數 ```
#圖片src
$DBV['file_name'] = (isset($DBV['file_name'])) ? $DBV['file_name'] : "";
```
op\_form 樣板 ```
{if $DBV.file_name}
{/if}
```
把 get\_file\_name\_src($col\_sn,$col\_name) 拆成二個函數 ```
########################################
# #取得圖片src
########################################
function get_file_name_src($col_sn,$col_name)
{
global $mysqli;
if(!$col_sn or !$col_name)return;
#這裡可以再寫成函數 取得圖片檔資料
$sql = "select *
from `show_files`
where `col_sn`='{$col_sn}' and `col_name`='{$col_name}'
order by sort";
$result = $mysqli->query($sql) or die(printf("Error: %s
".$sql, $mysqli->sqlstate));
$row = $result->fetch_assoc();
#----------------
#圖片檔src
$file_name = WEB_URL."/uploads".$row['sub_dir']."/".$row['file_name'];
return $file_name;
}
```
=> ```
########################################
# #取得圖片
########################################
function get_file_name($col_sn,$col_name)
{
global $mysqli;
if(!$col_sn or !$col_name)return;
#
$sql = "select *
from `show_files`
where `col_sn`='{$col_sn}' and `col_name`='{$col_name}'
order by sort";
$result = $mysqli->query($sql) or die(printf("Error: %s
".$sql, $mysqli->sqlstate));
$row = $result->fetch_assoc();
#----------------
return $row;
}
########################################
# #取得圖片src
########################################
function get_file_name_src($col_sn,$col_name)
{
if(!$col_sn or !$col_name)return;
$row = get_file_name($col_sn,$col_name);
#----------------
#圖片檔src
$file_name = $row['file_name'] ? WEB_URL."/uploads".$row['sub_dir']."/".$row['file_name']:"";
return $file_name;
}
```
op\_update($sn="") 函數,這裡是先刪除再新增,所以會有快取的問題,必須使用「$smarty->clearAllCache();」清快取 ```
/*
$_FILES['file']['name']:上傳檔案原始名稱。
$_FILES['file']['type']:檔案的 MIME 類型,例如“image/gif”。
$_FILES['file']['size']:已上傳檔案的大小,單位為bytes。
$_FILES['file']['tmp_name']:檔案被上傳後的臨時檔案名。
$_FILES['file']['error']:和該檔案上傳相關的錯誤代碼。
*/
if($_FILES['file'] and !$_FILES['file']['error'])
{
#刪除舊檔(資料表、實體檔案)
delete_file_name($sn,$TBL['kind']);
#-----------------------
$col_name=$TBL['kind'];//輪播圖的關鍵字 slider_home
$col_sn=$sn;//相關流水號
$sort=1;//排序
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);//取得副檔名
$ext = strtolower($ext); //轉小寫
$sub_dir="/slider";//儲存位置
$file_name="slider_".$col_sn."_".$sort.".".$ext;//檔名
if($ext == "png" or $ext == "gif" or $ext == "jpg" or $ext == "jpeg" or $ext == "jpe")
{
$kind="img";
}else
{
$kind="file";
}
#寫入資料表 show_files
$sql = "insert into `show_files`
(`col_name`, `col_sn`, `sort`, `kind`,`file_name`,`file_type`,`file_size`,`description`,`sub_dir`)
VALUES
('{$col_name}', '{$col_sn}', '{$sort}', '{$kind}', '{$file_name}', '{$_FILES['file']['type']}','{$_FILES['file']['size']}', '{$_POST['title']}', '{$sub_dir}')";
$mysqli->query($sql) or die(printf("Error: %s
".$sql, $mysqli->sqlstate));
$new_file= WEB_PATH."/uploads".$sub_dir."/".$file_name;
#移動檔案
move_uploaded_file($_FILES['file']['tmp_name'] , $new_file);
}
```
delete\_file\_name($col\_sn,$col\_name) 函數 ```
########################################
# 刪除圖片
########################################
function delete_file_name($col_sn,$col_name)
{
global $mysqli;
if(!$col_sn or !$col_name)return;
#取得資料
$row = get_file_name($col_sn,$col_name);
if($row){
#1. 刪除實體檔案
unlink(WEB_PATH."/uploads".$row['sub_dir']."/".$row['file_name']);
#2. 刪除「show_files」記錄
$sql = "delete
from `show_files`
where `sn`='{$row['sn']}'";//die($sql);
$mysqli->query($sql) or die(printf("Error: %s
".$sql, $mysqli->sqlstate));
}
return true;
}
```
流程 ```
#更新記錄
case "op_update":
$sn=op_update($sn);
#刪除快取
$smarty->clearAllCache();
redirect_header("{$WEB['file_name']}?op=op_show&sn={$sn}",3000,"更新資料成功!!");
exit;
break;
```
6. 刪除
op\_delete($sn="") 函數 ```
###############################################################################
# 刪除資料
###############################################################################
function op_delete($sn="")
{
global $mysqli,$TBL;
if(!$sn)redirect_header("index.php",3000,"刪除記錄錯誤!!");
#刪除舊檔(資料表、實體檔案)
delete_file_name($sn,$TBL['kind']);
#刪除 show_kind
$sql = "delete
from `{$TBL['name']}`
where `sn`='{$sn}'";//die($sql);
$mysqli->query($sql) or die(printf("Error: %s
".$sql, $mysqli->sqlstate));
return;
}
```
7. 增加列表縮圖
程式: op\_list
這裡借用前面建立好的取得圖片 src的函數
function get\_file\_name\_src($row\['sn'\],$col\_name)
第30行,其實可以把他移到 迴圈外面,因為它的值是固定的。 ```
########################################
# 列表
########################################
function op_list()
{
global $mysqli,$smarty,$TBL;
#取得所有記錄
$sql = "select *
from `{$TBL['name']}`
where `kind`='{$TBL['kind']}'
order by `sort` ";//die($sql);
$result = $mysqli->query($sql) or die(printf("Error: %s
".$sql, $mysqli->sqlstate));
$rows=array();
while($row = $result->fetch_assoc())
{
#過濾撈出資料
$row['sn'] = intval($row['sn']);
//http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp
$row['title'] = htmlspecialchars($row['title'], ENT_QUOTES); // 轉換雙引號和單引號
$row['url'] = htmlspecialchars($row['url'], ENT_QUOTES); // 轉換雙引號和單引號
$row['sort'] = intval($row['sort']);
$row['enable'] = $row['enable'] ? "是":"否";
$row['target'] = $row['target'] ? "是":"否";
#取得圖片src
$col_name = "slider_home";
$row['file_name'] = get_file_name_src($row['sn'],$col_name);
$rows[]= $row;
}
$smarty->assign("DBV", $rows);
return;
}
```
樣板:增加一欄,寬度為1,原網址寬度改為3,有可能程式並沒有傳 file\_name過來,所以判斷是否有值,如果有才顯示圖片 ```
{* 選單管理 列表 *}
{if $WEB.file_name == "slider.php" and $op == "op_list"}
{literal}
{/literal}
選單管理
縮圖 |
標題 |
網址 |
排序 |
外連 |
啟用 |
|
{foreach from=$DBV item=row}
{if $row.file_name} {/if} |
{$row.title} |
{$row.url} |
{$row.sort} |
{$row.target} |
{$row.enable} |
|
{/foreach}
{/if}
```