12.
完成編輯功能(40分鐘)
一、關於編輯
- 編輯和新增幾乎是一樣的動作,差別僅在於:編輯會指定要修改哪一筆資料。
- 因此,在秀出表單之前,需先將資料抓出,並塞入表單做為預設值。
- 另外,表單需加入一個「流水號」的隱藏欄位,如此,當使用者填完送出後,系統才知道要修改哪一篇文章。
二、編輯的流程設定
- 由於樣板中有加入編輯的op:
<a href="main.php?op=edit&sn=<{$sn}>" class="btn btn-mini btn-warning">編輯</a>
- 所以流程也要多一組對應設定:
case "edit":
add_form($sn);
break;
- 和新增一樣呼叫 add_form() 函數,唯一不同的是,編輯時要傳入 $sn,如此,系統才知道要修改的到底是哪一筆資料。
三、修改 add_form() 函數
- 編輯和新增不同的地方有三:
- 需傳入$sn
- 需多一個隱藏欄位 sn
- 下一個op不會是insert,應為update
- 故,我們將函數改為:
//編輯詞彙表單
function add_form($sn=""){
global $xoopsTpl,$xoopsDB;
include_once(XOOPS_ROOT_PATH."/class/xoopsformloader.php");
if($sn){
$sql="select eng,cht from ".$xoopsDB->prefix("oxford")." where `sn`='{$sn}'";
$result=$xoopsDB->queryF($sql) or redirect_header('index.php', 3, mysql_error());
list($eng,$cht)=$xoopsDB->fetchRow($result);
$op="update";
}else{
$op="insert";
}
$form = new XoopsThemeForm('編輯詞彙', '', 'main.php', 'post', true);
$input_eng =new XoopsFormText('英文', 'eng', 20 , 255 , $eng);
$input_cht =new XoopsFormText('中文解釋', 'cht', 20 , 255 , $cht);
$hidden_op =new XoopsFormHidden('op', $op);
$hidden_sn =new XoopsFormHidden('sn', $sn);
$submit_btn =new XoopsFormButton('', '', '儲存', 'submit');
$form->addElement($input_eng);
$form->addElement($input_cht);
$form->addElement($hidden_op);
$form->addElement($hidden_sn);
$form->addElement($submit_btn);
$f=$form->render();
$xoopsTpl->assign("form" ,$f);
}
四、流程新增update設定
- 當使用者按下儲存時,如果是編輯,則op為update,因此,流程要多一組設定:
case "update":
update($sn);
break;
header("location:../index.php?eng={$_POST['eng']}");
五、新增update()函數
//更新詞彙
function update($sn=""){
global $xoopsDB;
$eng=$_POST['eng'];
$cht=$_POST['cht'];
$sql="update `".$xoopsDB->prefix('oxford')."` set `eng`='{$eng}' , `cht`='{$cht}' where sn='$sn'";
$xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
}