作者 主題: [已解決]php表單傳送變數的疑問  (閱讀 6752 次)

0 會員 與 1 訪客 正在閱讀本文。

Squawell

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
[已解決]php表單傳送變數的疑問
« 於: 2009-02-28 18:47 »
各位學長你們好小弟有個關於php表單中傳送變數的問題想請教小弟的程式碼如下:
這是下拉式表單的代碼(傳送選擇的年及月的變數)
代碼: [選擇]
<form name="search_car" method="POST" action="newcar.php?action=view">
                查詢:<select name="s_year">
                <option value=-1>-- 請選擇年份 --</option>
                        <?php
                        
for($i=98;$i<=120;$i++)
                                {
                                        
$currentyear time();
                                        
$toyear date("Y",$currentyear);
                                        
$toyears $toyear -1911;
                                        if(
$i == $toyears)
                                        {
                                                echo 
"<option value=$i selected>" $i ."年</option>";
                                        }else{
                                                echo 
"<option value=$i>" $i ."年</option>";
                                        }
                                }
                        
?>

                </select>
                                <select name="s_month">
                        <option value="-1">-- 請選擇月份 --</option>";
                        <?php
                                
for($i=1;$i<=12;$i++)
                                {
                                        
$currentmonth time();
                                        
$tomonth date("m",$currentmonth);
                                        if(
$i == $tomonth)
                                        {
                                                echo 
"<option value=$i selected>" $i ."月</option>";
                                        }else{
                                                echo 
"<option value=$i>" $i ."月</option>";
                                        }
                                }
                        
?>

                </select><input name="submit" type="submit" value="確定">
                </form>
將變數傳入以下程式區塊中使用
代碼: [選擇]
if($_REQUEST['action'] == 'view')
{
......程式碼在這邊.......
}
以上程式可以顯示出我要的資料問題在於加上分頁程式碼後只要換頁就無法顯示任何資料.
分頁的程式碼如下:
代碼: [選擇]
$years = $_REQUEST['s_year'];
$months = $_REQUEST['s_month'];
                $total = mysql_query("SELECT COUNT(*) AS totals FROM newcar where year = '$years' AND month = '$months'");
        $num = mysql_fetch_array($total);
        $nums = intval($num['totals']);
       
        $perpage = $_REQUEST['perpage'];
        $page = $_REQUEST['page'];
        if(!$perpage)
        {
                $perpage = 33;
        }
        if($page)
        {
                $start = ($page-1) *$perpage;
        }
        else
        {
                $start = 0;
                $page = 1;
        }
        if($nums > $perpage)
        {
                $pages = ceil($nums / $perpage);
        }
        else
        {
                $pages = 1;
        }
  if($page != $pages)
        {
                $npage = $page+1;
                $nextpage = "<a href=newcar.php?action=view&perpage=$perpage&page=$npage>下一頁</a>";
                $lastpage = "<a href=newcar.php?action=view&perpage=$perpage&page=$pages>最後一頁</a>";
        }
        if($page != 1)
        {
                $ppage = $page-1;
                $prepage = "<a href=newcar.php?action=view&perpage=$perpage&page=$ppage>上一頁</a>";
                $firstpage = "<a href=newcar.php?action=view&perpage=$perpage&page=1>第一頁</a>";
        }

        echo $firstpage.$prepage.$nextpage.$lastpage;
有幾個朋友提供以下方法.小弟測試過還是不行
代碼: [選擇]
A方法. 第一個檔案第一行
<form name="search_car" method="POST" action="newcar.php?action=view">
改成
<form name="search_car" method="POST" action="newcar.php">
並隨即增加一行:
<input name="action" type="hidden" value="view">

然後將之後所有 $_REQUEST 改成 $_POST


B方法. 第一行
<form name="search_car" method="POST" action="newcar.php?action=view">
改成
<form name="search_car" method="GET" action="newcar.php?action=view">
小弟知道問題在於換頁後變數並沒有跟著傳遞下去...只是小弟想了好幾天還是想不出個所以然來...
所以來請教各位學長..給小弟一點指教...謝謝
« 上次編輯: 2009-03-01 14:16 由 Squawell »

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: php表單傳送變數的疑問
« 回覆 #1 於: 2009-03-01 09:30 »
重點不在用什麼方式傳送資料, 而是資料有沒有如預期的傳送, 方式 A, B 說實在的, 根本沒差

1. 先檢查瀏覽器上 $firstpage, $prepage, $nextpage, $lastpage 4個連結裡的 page= 是否有資料
2. 點連結後, 先檢查 $_REQUEST['perpage'], $_REQUEST['page'] 是否有資料進來


另外
使用 $_REQUEST, $_GET, $_POST 或 $_COOKIE 資料前沒先做任何檢驗是很危險的事
為什麼危險??  google 一下 "sql injection" 就知道的原因了.

Squawell

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
回覆: php表單傳送變數的疑問
« 回覆 #2 於: 2009-03-01 11:22 »
重點不在用什麼方式傳送資料, 而是資料有沒有如預期的傳送, 方式 A, B 說實在的, 根本沒差

1. 先檢查瀏覽器上 $firstpage, $prepage, $nextpage, $lastpage 4個連結裡的 page= 是否有資料
2. 點連結後, 先檢查 $_REQUEST['perpage'], $_REQUEST['page'] 是否有資料進來
1.當從表單選擇送出資料後 echo $page有值,按上下頁連結該數字也會跟著變動
2.echo 表單傳送過來的年月 echo $years及$months二個變數是傳送過來的值沒錯.但一換頁後值就沒了 ???(剛剛測試發現只有年有值傳送過來但是月並沒有 ??? ???)
3.若是不從表單送出年月而用date函數取出年月資料帶入則完全沒有問題
4.有朋友提供以下建議不過小弟還搞不清楚該怎麼作就是了
代碼: [選擇]
你可能要多寫一個session來儲存你的這兩個參數和多寫一個判斷式來判斷你要接收的參數.....

引用
另外
使用 $_REQUEST, $_GET, $_POST 或 $_COOKIE 資料前沒先做任何檢驗是很危險的事
為什麼危險??  google 一下 "sql injection" 就知道的原因了.
這部份先謝謝學長的提醒...小弟會再去研究一下....
« 上次編輯: 2009-03-01 11:31 由 Squawell »

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: php表單傳送變數的疑問
« 回覆 #3 於: 2009-03-01 12:25 »
4.有朋友提供以下建議不過小弟還搞不清楚該怎麼作就是了
代碼: [選擇]
你可能要多寫一個session來儲存你的這兩個參數和多寫一個判斷式來判斷你要接收的參數.....

<a href=newcar.php?action=view&perpage=$perpage&page=$npage>下一頁</a>

換頁連結裡並沒有傳年月資料啊!?  ::)

4.有朋友提供以下建議不過小弟還搞不清楚該怎麼作就是了
代碼: [選擇]
你可能要多寫一個session來儲存你的這兩個參數和多寫一個判斷式來判斷你要接收的參數.....

用 session 是一種方式, 也可以用 cookie, 但是不一定要用
如果不在乎連結帶一大串參數的話, 直接將年月資料加在換頁連結即可

Squawell

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
回覆: php表單傳送變數的疑問
« 回覆 #4 於: 2009-03-01 13:27 »
<a href=newcar.php?action=view&perpage=$perpage&page=$npage>下一頁</a>
換頁連結裡並沒有傳年月資料啊!?  ::)
小弟加上後狀況還是一樣說...但是網址列有出現值 ???
代碼: [選擇]
newcar.php?action=view&year=98&month=2&perpage=33&page=2
用 session 是一種方式, 也可以用 cookie, 但是不一定要用
如果不在乎連結帶一大串參數的話, 直接將年月資料加在換頁連結即可
不知道就這部份是否有較清楚的範例可以給小弟參考...讓小弟嘗試看看..謝謝

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: php表單傳送變數的疑問
« 回覆 #5 於: 2009-03-01 13:36 »
<a href=newcar.php?action=view&perpage=$perpage&page=$npage>下一頁</a>
換頁連結裡並沒有傳年月資料啊!?  ::)
小弟加上後狀況還是一樣說...但是網址列有出現值 ???
代碼: [選擇]
newcar.php?action=view&year=98&month=2&perpage=33&page=2

$years = $_REQUEST['s_year'];
$months = $_REQUEST['s_month'];


比對一下連結裡的, 知道問題在哪了嗎!?

Squawell

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
回覆: php表單傳送變數的疑問
« 回覆 #6 於: 2009-03-01 14:10 »
$years = $_REQUEST['s_year'];
$months = $_REQUEST['s_month'];

比對一下連結裡的, 知道問題在哪了嗎!?
感謝學長的幫忙~現在已經ok了︿︿

果然是你所指出的地方的問題......

另外請教的是關於上面所提到的session的方式...不知學長可否指點一二...謝謝

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: php表單傳送變數的疑問
« 回覆 #7 於: 2009-03-01 14:18 »
關於 session, 建議先用 google 找些教學文章爬一爬
有問題的話再來討論, 不然也不知要從何說起