為什麼我得不到變數(PHP程式教學問與答)
問題:我在一網頁向另一網頁POST資料name,為什麼輸出$name時卻得不到任何值?
技術回覆:在PHP4.2以後的版本中register_global預設為off
若想取得從另一頁面送出的變數:
方法一:在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.
注意:
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(); ?>
……..這裏是你的程式……