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 可以註解掉,避免建立時間被修改成當下時間
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()
中的設定一致
最後,請試試修改是否有作用