:::

5-1 store() 儲存資料的物件方法

  1. 上單元的表單界面送出後,會執行流程的 submission_store,會執行的物件方法是:Submission::store(),其預設內容如下:
    //新增資料到 submission Submission::store()
    public static function store($data_arr = [])
    {
        global $xoopsDB, $xoopsUser;
        Tools::chk_is_adm('', '', __FILE__, __LINE__);
    
        //XOOPS表單安全檢查
        if (empty($data_arr)) {
            Utility::xoops_security_check();
            $data_arr = $_POST;
        }
    
        foreach ($data_arr 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 = "INSERT INTO `" . $xoopsDB->prefix("submission") . "` (
            `title`,
            `content`,
            `start`,
            `end`,
            `info`,
            `uid`,
            `create_time`
        ) VALUES(
            '{$title}',
            '{$content}',
            '{$start}',
            '{$end}',
            '{$info}',
            '{$uid}',
            '{$create_time}'
        )";
        $xoopsDB->queryF($sql) or Utility::web_error($sql);
    
        //取得最後新增資料的流水編號
        $id = $xoopsDB->getInsertId();
    
        $TadUpFiles = new TadUpFiles("submission");
        $TadUpFiles->set_col("submission_id", $id);
        $TadUpFiles->set_dir('subdir', "/$id");
        $TadUpFiles->upload_file('submission_files', '', '', '', '', true, false);
        return $id;
    }
  2. 可以自行傳入一個資料陣列 $data_arr
  3. 一樣先用 Tools::chk_is_adm() 檢查權限,若是沒有傳入資料陣列,那就用  Utility::xoops_security_check() 檢查 token 後,將 $_POST 做為資料陣列 $data_arr 以便後續處理
    Tools::chk_is_adm('', '', __FILE__, __LINE__);
    
    //XOOPS表單安全檢查
    if (empty($data_arr)) {
        Utility::xoops_security_check();
        $data_arr = $_POST;
    }
    
  4. 接著用迴圈將傳入的資料陣列,一個一個的用 Tools::filter() 過濾變數,確保可以存入資料庫,避免資料庫隱碼攻擊。
    foreach ($data_arr 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()));

    過濾後,可以自己設定某些變數,來強制其值,例如目前登入者的編號 $uid,或者目前的建立時間

  5. 接著就是寫入資料庫:
    $sql = "INSERT INTO `" . $xoopsDB->prefix("submission") . "` (
        `title`,
        `content`,
        `start`,
        `end`,
        `info`,
        `uid`,
        `create_time`
    ) VALUES(
        '{$title}',
        '{$content}',
        '{$start}',
        '{$end}',
        '{$info}',
        '{$uid}',
        '{$create_time}'
    )";
    $xoopsDB->queryF($sql) or Utility::web_error($sql);
    
    //取得最後新增資料的流水編號
    $id = $xoopsDB->getInsertId();

    執行後務必用 $xoopsDB->getInsertId() 取得該資料流水號,後續會用到

  6. 儲存後,取得資料流水號就可以開始處理上傳檔案的部份,TadUpFiles 詳細用法可以看這裡

    if ($id) {
        $TadUpFiles = new TadUpFiles("submission");
        $TadUpFiles->set_col("submission_id", $id);
        $TadUpFiles->set_dir('subdir', "/$id");
        $TadUpFiles->upload_file('submission_files', '', '', '', '', true, false);
    }

    只要 set_col()set_dir() 和剛剛 create() 中的設定一致即可

  7. 接著,可以輸入資料試試囉!


:::

書籍目錄

展開 | 闔起

快速登入


https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D2073%26tbsn%3D56

計數器

今天: 810810810
昨天: 1856185618561856
總計: 8776734877673487767348776734877673487767348776734