:::
主內容區域
8-1 update() 更新資料的物件方法
- 上單元的表單界面送出後,會執行流程的
submission_update,會執行的物件方法是:Submission::update(),其預設內容如下://更新 submission 某一筆資料 Submission::update() public static function update($where_arr = [], $data_arr = []) { global $xoopsDB, $xoopsUser; Tools::chk_is_adm('', '', __FILE__, __LINE__); $and = Tools::get_and_where($where_arr); if (!empty($data_arr)) { $col_arr = []; foreach ($data_arr as $key => $value) { $value = Tools::filter($key, $value, 'write', self::$filter_arr); $col_arr[] = "`$key` = '{$value}'"; } $update_cols = implode(', ', $col_arr); $sql = "UPDATE `" . $xoopsDB->prefix("submission") . "` SET $update_cols WHERE 1 $and"; } else { //XOOPS表單安全檢查 Utility::xoops_security_check(__FILE__, __LINE__); foreach ($_POST as $key => $value) { $$key = Tools::filter($key, $value, 'write', self::$filter_arr); } //取得使用者編號 $uid = ($xoopsUser) ? $xoopsUser->uid() : 0; $create_time = date("Y-m-d H:i:s", xoops_getUserTimestamp(time())); $sql = "UPDATE `" . $xoopsDB->prefix("submission") . "` SET `title` = '{$title}', `content` = '{$content}', `start` = '{$start}', `end` = '{$end}', `info` = '{$info}', `uid` = '{$uid}', `create_time` = '{$create_time}' WHERE 1 $and"; } $xoopsDB->queryF($sql) or Utility::web_error($sql); if($where_arr['id']) { $TadUpFiles = new TadUpFiles("submission"); $TadUpFiles->set_col("submission_id", $where_arr['id']); //$TadUpFiles->set_dir('subdir', ""); $TadUpFiles->upload_file('submission_files', '', '', '', '', true, false); } return $where_arr['id']; } - 會傳入兩個資料陣列
$where_arr以及$data_arr - 一樣先用
Tools::chk_is_adm()檢查權限,若是有傳入$where_arr,則用Tools::get_and_where($where_arr)來產生SQL的篩選語法,以便找出要更新哪些資料。Tools::chk_is_adm('', '', __FILE__, __LINE__); $and = Tools::get_and_where($where_arr); - 檢查有無傳入資料陣列,然後執行之
if (!empty($data_arr)) { //有傳入$data_arr,產生更新指定欄位的sql語法 } else { //沒傳入$data_arr,產生更新所有表單欄位的sql語法 } $xoopsDB->queryF($sql) or Utility::web_error($sql); - 若是有傳入資料陣列
$data_arr,那就用Utility::xoops_security_check()檢查 token 後,將$_POST做為資料陣列$data_arr以便後續處理 - 若是有傳入資料陣列
$data_arr,那就根據篩選條件,只更新$data_arr中指定的欄位值,這部份不用改。$col_arr = []; foreach ($data_arr as $key => $value) { $value = Tools::filter($key, $value, 'write', self::$filter_arr); $col_arr[] = "`$key` = '{$value}'"; } $update_cols = implode(', ', $col_arr); $sql = "UPDATE `" . $xoopsDB->prefix("submission") . "` SET $update_cols WHERE 1 $and"; - 若是沒有傳入資料陣列
$data_arr,那就檢查表單後,依序提取由表單送過來的內容,過濾後,全都更新之。其中若需要字東抓取某些值,例如目前登入者的編號 $uid,或者目前的建立時間,可以在過濾後,自行補上。//XOOPS表單安全檢查 Utility::xoops_security_check(__FILE__, __LINE__); foreach ($_POST as $key => $value) { $$key = Tools::filter($key, $value, 'write', self::$filter_arr); } //取得使用者編號 $uid = ($xoopsUser) ? $xoopsUser->uid() : 0; //$create_time = date("Y-m-d H:i:s", xoops_getUserTimestamp(time())); $sql = "UPDATE `" . $xoopsDB->prefix("submission") . "` SET `title` = '{$title}', `content` = '{$content}', `start` = '{$start}', `end` = '{$end}', `info` = '{$info}', `uid` = '{$uid}', `create_time` = '{$create_time}' WHERE 1 $and";$create_time 可以註解掉,避免建立時間被修改成當下時間
- 更新後,就可以開始處理上傳檔案的部份,TadUpFiles 詳細用法可以看這裡
if ($where_arr['id']) { $TadUpFiles = new TadUpFiles("submission"); $TadUpFiles->set_col("submission_id", $where_arr['id']); //$TadUpFiles->set_dir('subdir', ""); $TadUpFiles->upload_file('submission_files', '', '', '', '', true, false); }set_col()和set_dir()的參數及值務必和store()中的設定一致 -
最後,請試試修改是否有作用
8. update 更新資料