Php部分常見問題總結

若有出錯地方或者你有更好的想法,歡迎跟貼.


在提問題前請先仔細查閱
PHP手冊,MYSQL手冊 以及PHPINFO裏面的設置
另外希望你讀一下
PHP編程標準

PHP手冊下載地址

1:爲什麼我得不到變量

我在一網頁向另一網頁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.ini中設置:include_path = "c:/php",並將debug.php放在此文件夾,
以後就可以在每個網頁裏包含此文件,查看得到的變量名和值.

3:如何使用session

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


爲session付值很簡單,如:

 



在php4.2之後,可以爲session直接付值:
 

取消session可以這樣:
 


取消某個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"



4:爲什麼我向另一網頁傳送變量時,只得到前半部分,以空格開頭的則全部丟失


 

receive.php的內容:
 


正確的方法是:
 


在接收頁面你不需要使用Urldecode(),變量會自動編碼.


5:如何截取指定長度漢字而不會出現以"?>"結尾,超出部分以"..."代替


一般來說,要截取的變量來自Mysql,首先要保證那個字段長度要足夠長,一般爲char(200),可以保持100個漢字,包括標點.
 



6:規範你的SQL語句


在表格,字段前面加上"`",這樣就不會因爲誤用關鍵字而出現錯誤,
當然我並不推薦你使用關鍵字.

例如
$Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1, 'criterion your sql string ', '2003-07-11 00:00:00')"

"`"怎麼輸入? 在TAB鍵上面.


7:如何使Html/PHP格式的字符串不被解釋,而是照原樣顯示




8:怎麼在函數裏取得函數外的變量值

 



9:我怎麼知道系統默認支持什麼函數

 


10:如何比較兩個日期相差幾天

 


11:爲什麼我升級PHP後,原來的程序出現滿屏的 Notice: Undefined variable:


這是警告的意思,由於變量未定義引起的.
打開php.ini,找到最下面的error_reporting,修改爲error_reporting = E_ALL & ~E_NOTICE

對於Parse error錯誤
error_reporting(0)無法關閉.
如果你想關閉任何錯誤提示,打開php.ini,找到display_errors,設置爲display_errors = Off.以後任何錯誤都不會提示.

那什麼是error_reporting?



12:我想在每個文件最前,最後面都加上一文件.但一個一個添加很麻煩

1:打開php.ini文件
設置 include_path= "c:"

2:寫兩個文件
auto_prepend_file.php 和 auto_append_file.php 保存在c盤,他們將自動依附在每個php文件的頭部和尾部.

3:在php.ini中找到:
Automatically add files before or after any PHP document.
auto_prepend_file = auto_prepend_file.php;依附在頭部
auto_append_file = auto_append_file.php;依附在尾部

以後你每個php文件就相當於
 




13:如何利用PHP上傳文件


 



14:如何配置GD庫


下面是我的配置過程
1:用dos命令(也可以手動操作,拷貝dlls文件夾裏所有dll文件到system32目錄下) copy c:/php/dlls/*.dll c:/windows/system32/
2:打開php.ini
設置extension_dir = "c:/php/extensions/";
3:
extension=php_gd2.dll;把extension前面的逗號去掉,如果沒有php_gd2.dll,php_gd.dll也一樣,保證確實存在這一文件c:/php/extensions/php_gd2.dll
4:運行下面程序進行測試
 



點擊這裏查看結果



15:什麼是UBB代碼


UBB代碼是HTML的一個變種,是Ultimate Bulletin Board (國外一個BBS程序,國內也有不少地方使用這個程序)採用的一種特殊的TAG.
即使禁止使用 HTML,你也可以用 UBBCode? 來實現.也許你更希望使用 UBBCode? 而不是 HTML, 即使論壇允許使用 HTML, 因爲使用起來代碼較少也更安全.

Q3boy的UBB裏面付有例子,可以直接運行測試


16:我想修改MySQL的用戶,密碼

首先要聲明一點,大部分情況下,修改MySQL是需要有mysql裏的root權限的,
所以一般用戶無法更改密碼,除非請求管理員.

方法一
  使用phpmyadmin,這是最簡單的了,修改mysql庫的user表,
  不過別忘了使用PASSWORD函數。

方法二
  使用mysqladmin,這是前面聲明的一個特例。
  mysqladmin -u root -p password mypasswd
  輸入這個命令後,需要輸入root的原密碼,然後root的密碼將改爲mypasswd。
  把命令裏的root改爲你的用戶名,你就可以改你自己的密碼了。
  當然如果你的mysqladmin連接不上mysql server,或者你沒有辦法執行mysqladmin,
  那麼這種方法就是無效的。
  而且mysqladmin無法把密碼清空。

下面的方法都在mysql提示符下使用,且必須有mysql的root權限:
  方法三
  mysql> INSERT INTO mysql.user (Host,User,Password)
  VALUES('%','jeffrey',PASSWORD('biscuit'));
  mysql> FLUSH PRIVILEGES
  確切地說這是在增加一個用戶,用戶名爲jeffrey,密碼爲biscuit。
  在《mysql中文參考手冊》裏有這個例子,所以我也就寫出來了。
  注意要使用PASSWORD函數,然後還要使用FLUSH PRIVILEGES。

方法四
  和方法三一樣,只是使用了REPLACE語句
  mysql> REPLACE INTO mysql.user (Host,User,Password)
  VALUES('%','jeffrey',PASSWORD('biscuit'));
  mysql> FLUSH PRIVILEGES

方法五
  使用SET PASSWORD語句,
  mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
  你也必須使用PASSWORD()函數,
  但是不需要使用FLUSH PRIVILEGES。

方法六
  使用GRANT ... IDENTIFIED BY語句
  mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
  這裏PASSWORD()函數是不必要的,也不需要使用FLUSH PRIVILEGES。

注意: PASSWORD() [不是]以在Unix口令加密的同樣方法施行口令加密。


17:我想知道他是通過哪個網站連接到本頁


 



18:數據放入數據庫和取出來顯示在頁面需要注意什麼

入庫時
$str=addslashes($str);
$sql="insert into `tab` (`content`) values('$str')";
出庫時
$str=stripslashes($str);
顯示時
$str=htmlspecialchars(nl2br($str)) ;





19:如何讀取當前地址欄信息






20:我點擊後退按鈕,爲什麼之前填寫的東西不見

這是因爲你使用了session.
解決辦法:
 



21:怎麼在圖片裏顯示IP地址

 



22:如何取得用戶的真實IP




23:如何從數據庫讀取三天內的所有記錄


首先表格裏要有一個DATETIME字段記錄時間,
格式爲'2003-7-15 16:50:00'

SELECT * FROM `xltxlm` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) <= 3;


24:如何遠程鏈接Mysql數據庫


在增加用戶的mysql表裏有一個host字段,修改爲"%",或者指定允許連接的ip地址,這樣,你就可以遠程調用了。

$link=mysql_connect("192.168.1.80:3306","root","");


25:正則到底怎麼用

點擊這裏
正則表達式中的特殊字符


26:用Apache後,主頁出現亂碼


方法一:
AddDefaultCharset ISO-8859-1 改爲 AddDefaultCharset off

方法二:
AddDefaultCharset GB2312
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章