今天測試 XOOPS 2.7 的 profile 模組時,無意間發現後台欄位編輯有一個問題。
操作路徑:後台 → Profile 模組 → 欄位 → 編輯
只要修改任意一項後送出,就會出現錯誤:
Errors
field_name 為必填項
Incorrect column name ''
![]() |
MySQL 除錯訊息會看到類似這段:
ALTER TABLE profile_profile ADD varchar(255) NULL
一開始看起來很像資料表壞掉,因為 SQL 竟然要新增一個空白欄位名稱。但後來追程式才發現,真正原因不是資料表問題,而是表單送出時沒有把既有欄位的 id 傳回去。
XOOPS 2.7 的 modules/profile/admin/field.php 在儲存時會從 POST 讀取欄位 id:
$fieldId = Request::getInt('id', 0, 'POST');
如果 POST 沒有收到 id,系統就會誤判成「新增欄位」。但因為目前其實是在編輯既有欄位,表單中沒有 field_name 輸入框,最後就變成欄位名稱是空字串,進而產生:
ADD varchar(255)
修復方式
用文字編輯器打開:modules/profile/include/forms.php
找到 profile_getFieldForm() 裡建立表單的位置,大約在前段:
$form = new XoopsThemeForm($title, 'form', $action, 'post', true);
在下方加入:
if (!$field->isNew()) {
$form->addElement(new XoopsFormHidden('id', $field->getVar('field_id')));
}
也就是讓所有「編輯既有欄位」的表單,都固定送出 hidden id。
修正後,送出欄位設定時,field.php 就能正常收到 POST id,不會再誤判成新增欄位,也不會產生空欄位名稱的 SQL。
修正後結果
經實測:
- - profile 欄位可正常編輯
- - 欄位設定可正常儲存
- - 不再出現 field_name 為必填項
- - 不再出現 Incorrect column name ''
- - 不再產生 ALTER TABLE ADD varchar(255) 錯誤
這裡做個工作紀錄,有需要升級 XOOPS 2.7 的朋友可以參考看看。
工作心得撰寫:徐嘉裕 Neil hsu

留言
張貼留言