問題討論區


【PHP 語法與資料庫】文章精華區


【請求】 解析PHP插入紀錄後表單變數消失的原因



解析PHP插入紀錄後表單變數消失的原因
飛肯老師
註冊日期:
2008/2/24 18:28
留言: 1169
原文 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();


就先教到這裡,有問題再來討論囉!

2008/3/19 4:02
 


回覆: 解析PHP插入紀錄後表單變數消失的原因
會員一級
註冊日期:
2009/8/31 11:42
留言: 1
飛肯老師您好
請教類似的問題
我利用DW cs3( var sprytextarea1 = new Spry.Widget.ValidationTextarea("sprytextarea1");) 做表單加 驗證碼

碰到重按驗證碼.....產生 javascript:location.reload() .....第一個問題
或驗證碼錯誤.產生 header('location: ../index_1.php')時....第二個問題

欄位變數有"sprytextfield"的都不見了(沒有"sprytextfield"的都還留存著)


<tr>
<th scope="row" ><label for="txtName">物業名稱</label></th>
<td>
<input type="text" name="txtName" size="30" id="txtName" class="text3" onfocus="focusColor(this)" onblur="blurColor(this)" /> </td>
</tr>


<tr>
<th scope="row" class="must" ><label for="txtAge">房齡<em>(必填)</em></label></th>
<td><span id="sprytextfield6">
<input type="text" name="txtAge" size="30" id="txtAge" class="text3" onfocus="focusColor(this)" onblur="blurColor(this)" />
<span class="textfieldRequiredMsg">需要提供一個值。 </span></span></td>
</tr>


請教飛肯老師應如何解決比較正確呢????(我是半兼職的並不是專業程式設計師)

2009/8/31 12:12
 









[高級搜索]


 

課程首頁】 【最新開課時間表】 【範例教學分享區】 【交流討論區】 【企業包班】 【詢問課程】 【合作提案】 【誠徵講師

 

【飛肯設計學苑】 台北市公園路 30-1 號 5 樓 聯絡電話:(02)2370-1122 / 0925-014-000 信箱:flycan@flycan.com.tw
服務時間:(平日)下午 2 點 ~ 晚上 10 點 / (假日)早上 9 點 ~ 下午 5 點

 

台北市短期補習班立案 第 6631 號

TOP

【 Flycan.com 】 Powered by XOOPS