台灣最大裝潢接案平台
輕鬆接案網
租屋五星級服務搬家公司!價格優口碑好
專業團隊,老客戶推薦!

首頁  •  j2h 論壇 • 程式設計討論     • 

[php] php 得不到變數 解決方法

房東:小蛙
發表時間:2011-07-29
[檢舉]


方法一:在PHP.ini中找到register_global,并把它設置為on.

方法二:在接收網頁最前面放上這個extract($_POST);extract($_GET);(注意extract($_SESSION)前必須要有Session_Start()).

方法三:一個一個讀取變量$a=$_GET["a"];$b=$_POST["b"]等,這種方法雖然麻煩,但比較安全.


2:調試你的程序



在運行時必須知道某個變量為何值。我是這樣做的,建立一文件debug.php,其內容如下:









<?PHP

Ob_Start();

Session_Start();

Echo "<pre>";



Echo "本頁得到的_GET變量有:";

Print_R($_GET);



Echo "本頁得到的_POST變量有:";

Print_R($_POST);



Echo "本頁得到的_COOKIE變量有:";

Print_R($_COOKIE);



Echo "本頁得到的_SESSION變量有:";

Print_R($_SESSION);

Echo "</pre>";

?>


然后在php.ini中設置:include_path = "c:/php",并將debug.php放在此文件夾,

以后就可以在每個網頁里包含此文件,查看得到的變量名和值.


3:如何使用session



凡是與session有關的,之前必須調用函數session_start();



為session付值很簡單,如









<?php

Session_start();

$Name = "這是一個Session例子";

Session_Register("Name");//注意,不要寫成:Session_Register("$Name");

Echo $_SESSION["Name"];

//之后$_SESSION["Name"]為"這是一個Session例子"

?>



在php4.2之后,可以為session直接付值:









<?PHP

Session_Start();

$_SESSION["name"]="value";

?>


取消session可以這樣:









<?php

session_start();

session_unset();

session_destroy();

?>


取消某個session變量在php4.2以上還有BUG.取消某個session變量在php4.2以上還有BUG.


注意:



1:在調用Session_Start()之前不能有任何輸出.例如下面是錯誤的.

==========================================

1行

2行 <?PHP

3行 Session_Start();//之前在第一行已經有輸出

4行 .....

5行 ?>

==========================================





提示1:



凡是出現"........headers already sent..........",就是Session_Start()之前向瀏覽器輸出信息.

去掉輸出就正常,(COOKIE也會出現這種錯誤,錯誤原因一樣)



提示2:



如果你的Session_Start()放在循環語句里,并且很難確定之前哪里向瀏覽器輸出信息,可以用下面這種方法:

1行 <?PHP Ob_Start(); ?>

........這里是你的程序......







2:這是什么\錯誤



Warning: session_start(): open(/tmp\\sess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:....

因為你沒有指定session文件的存放路徑.



解決方法:

(1)在c盤建立文件夾tmp

(2)打開php.ini,找到session.save_path,修改為session.save_path= "c:/tmp"















  • 贊助網站       

    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!
    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務

  • 1 樓住戶:凱哥
    發表時間:2011-07-29
    [檢舉]

      1.剛開始學習PHP程式語言的朋友

      2.知道 $_POST,$_GET 卻不了解為什麼要這樣用的朋友

      3.每次都是要把 global register 打開才會寫php的朋友

      4.正在寫php卻完全不知道啥是 $_POST $_GET 的朋友





    緣起: 說到 php 的$_POST跟$_GET這兩個變數,得從PHP4.1開始帶來的變化說起.



    想當初php開始發展的時候,開發人員為了方便操作各種變數與網頁傳進來的值,所以就採用了將所有的不管是client傳進來的變數值,跟Server 端自動產生的變數值,都自動以 $變數名稱 存在於整個php程式中.

    所以當你在當時(php4.1 以前,也就是 php3 ~ php4.0 的時代),會很習慣使用各種 $變數名稱,或是從使用者送出的表單之中的輸入欄位名稱為變數 $欄位名稱.



    問題:但是這種情況,在php發展到了一定的規模後,遇到了一個問題.



    這個問題主要在於安全上的隱憂!

    客戶瀏覽器傳入的值,與系統自動產生的變數,或是系統內部變數,甚至是程式當中的原有變數產生衝突怎麼辦??...

    要是程式當中有個 $subtotal 是存放購物金額的. 但是傳入的表單欄位中不知道為什麼不小心多打了個 subtotal 呢?... 程式會以哪個為準?...

    要是cookie之中的變數名稱與我要用的程式變數名稱重複了?.....



    $_POST與$_GET等變數陣列誕生: 如此多的問題困擾著開發php程式的開發人員,也讓php產生了很多安全上的隱憂, 所以php開發團隊當初建議使用者,使用像是 $HTTP_SERVER_VARS ,$HTTP_GET_VARS ,$HTTP_POST_VARS ,$HTTP_COOKIE_VARS 等陣列來取得該變數..



    但是聰明的你跟懶惰的我,絕對發現了.這樣寫起來.每個變數名稱又臭又長,誰會想這樣寫程式阿  :(



    所以,在 php4.1 以後 變產生了 $_POST $_GET $_SERVER $_COOKIE $_SESSION 等 陣列,其功用就如同上面所列的.是將使用者經由表單送出的資料以陣列的方式進行一個存放,而非直接註冊在 $欄位名稱 這樣的變數裡面.



    接著 PHP 開發團隊更進一步的預設了 php.ini 中 global register 的設定

    值為關閉的狀態.



    這樣.親愛的學員朋友們,你清楚為什麼要使用$_POST 與 $_GET 來取得使用者傳入的表單了嗎?

    希望這一篇文章能幫助您將來撰寫php程式的時候更順利唷.



    HTML補充教室: 使用者傳入的表單為什麼要放入 $_POST 跟 $_GET 兩個不同的陣列阿?



    由於 html 表單傳遞資料的時候分為兩種方法

    1 GET 將資料於 url 中一併送出. 會於網址列顯示像是 http://url/xxx.php?欄位名稱=欄位值

    2 POST 將資料於http request 時,於表頭中直接送出,所以該資料並不會以 http://url/xxx.php?欄位名稱=欄位值 的方式出現在瀏覽器的網址列



    而表單設定的方式則是如下.


    代碼: [選擇]

    <form method="get">


    代碼: [選擇]

    <form method="post">



    而什麼時候會用到 get ? 什麼時候又要用 post 呢?...



    通常使用 post 都是在只能送出一次的資料,像是留言版的留言.會員的登入資料,或是註冊表等.



    而 get 的使用通常是在可以重複,且是用來判斷目前所在位置的情況,像製作換頁功能的時候,用來帶入該頁數,或是像 phpbb2 利用 get 取得目前使用的功能與目前觀看的版面編號等. :D



     





     共 1 人回應  選擇頁數 【第1 頁】 

    姓名:
    佈告內容: