原文 by 【YOGO版主】
不知道各位朋有是否有方現在DW for PHP中,為何在插入紀錄後,表單變數就消失了。
那是因為dw的插入紀錄是在同一頁作的,其實你按下送出表單,其實是送回你插入紀錄的表單那一頁,因為插入紀錄的程式碼在if判斷式之內,所以當條件成立的時後,才會去處理插入紀錄的程式,完成後再轉址導向你在設定插入紀錄完成後所要前往的頁面,因為在插入紀錄頁面時表單變數是傳給同一頁,你在插入紀錄完成後所要前往的頁面當然無法取得表單變數,因為根本沒有表單變數,你要怎麼取得。
你要傳遞到插入紀錄完成後所要前往的頁面的資料會很多嗎?看你的資料量而有不同的作法。
我目前有幾種作法如下:
1.用session(也就是你有作過的方法,不過你用錯地方而以)
2.用url參數作
3.用另一張表單作
4.你可以在if判斷式內,找到完成插入記錄完成後要前往的頁面網址,在後方加上10個url參數,而url參數的值就是表單變數的值。
5.你可以在if判斷式內,新增10個session變數,而session參數的值就是表單變數的值。
6.你可以在if判斷式內,找到完成插入記錄完成後要前往的頁面網址,把這一段用一張新的表單取代,然後設10設隱藏欄位,欄位值就是表單變數的值,然後用javascript把表單自動送出。
因為有10筆資料(或更多),用以上的方法可能會覺得很累,教另一個更快的方法(別打我,英雄不是都最後的時候才登場嗎?)在完成插入記錄後即表示你在資料庫新增一筆資料了(真是廢話),一般來說我們設定資料表欄位的時會都會設訂一個主鍵,喔!關鍵來囉!你只要在if判斷式內,將表單變數傳遞主鍵的那個變數指派給一個url參數(較不安全)或session變數(較安全),然後在你原本要接收表單資料那一頁(也就是完成插入記錄後要前往的頁面)用上一頁傳過來的url變數或session變數當篩選條件,取出你要的資料就ok了。對了,又想到一個方法了,不要用dw內建的插入記錄,自己在完成插入記錄後要前往的頁面寫程式碼插入記錄,那表單變數就可以在這一頁使用了,方法很多,端看個人喜好囉!不過不管你用何種方式都需寫在if判斷式內,我舉個session的例子好了,假設你的表單名稱是"form1"好了,當你用dw完成插入記錄的伺服器行為後,切換到原始碼編輯,然後找到這一段:
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
這一段是你用dw作插入記錄的伺服器行為後,dw自動幫你加上去的,然後在這一段的下方找這一段:
header(sprintf("Location: %s", $insertGoTo));
在這一段的上方加一段程式碼如下:
$_SESSION['id'] = $_POST['id']; //$_POST['id']這個表單變數是我亂取得,你要依你的實際需求去改變。
這樣即可,然後去你插入記錄完成後要前往的頁面那一頁新增一個資料集,篩選條件就是這個session變數,這樣即可取得你要的資料了喔!若要使用session變數,記得在每頁的開頭加上
session_start();
就先教到這裡,有問題再來討論囉!