PHP應用技巧七則

來源:互聯網
上載者:User

PHP (Hypertext Preprocessor)是一種 HTML 內嵌式的語言,也是目前比較流行的網頁程式設計語言。它支援的後端資料庫種類凡多,幾乎含蓋了當前的所有資料庫系統。同時它包含了一般語言有的數學運算、時間處理、檔案系統、字串處理、行程處理等功能,再加上它是免費的系統,使得成本與效益比,幾乎等於無限大。

下面是我在用PHP做網站時,總結出一些小技巧,拿出來饗以大家。

1、判斷某個函數是否被支援

由於在PHP中我們可以靈活的使用增加或者減少php支援的模組,所以有的時候我們在使用PHP之前,總是會首先確定某個模組是否被載入,比如,看看GD圖形模組是否被支援,可以用下面的這段代碼:

if(!function_exists(''imagecreate'')) {
die(''這個主機目前不支援GD圖形模組'');
}
?>

同樣的道理,我們可以利用類似的代碼,測試 MSSQL,OCI等模組是否被支援。

2、在字串中把網址改成超級連結

在網頁中提交表單時,經常在提交的說明文本中出現一些網址,比如個人首頁等資訊,如果在顯示時自動將其轉為超級連結,那將是一件很愜意的事,就像用WORD編輯文檔時自動出現超級連結一樣。下面這段代碼就很好的實現了其功能。

$string = "串連賽迪網http://www.ccidnet.com 網站";
//注意:串連後需要有個空格或斷行符號。
$string = eregi_replace("http://([^ ,/r/n]*)","<a href=//0 tarrget=_blank>//0</a>",$string);
$string = eregi_replace("ftp://([^ ,/r/n]*)","<a href=//0 target=_blank>//0</a>",$string);
print $string;
?>

3、用PHP處理多個同名複選框

如果一個表單中有多個同名複選框,在提交到php時卻只有一個值,而並不像asp那樣是一串用逗號分割的值。解決的方法是利用數組。將複選框的name後面加上[],例如:<input type="checkbox" name="pp" value="1"> 改為:<input type="checkbox" name="pp[]" value="1">。這樣php將得到一個叫pp的陣列。在提交的表單中先用Count(pp)來判斷數組的個數即選中的個數,然後對數組進行分別處理就行了。

同樣的道理也適應於處理下拉框的多選問題。

4、利用static實現表格的顏色隔行顯示

我們用PHP從資料庫查詢資料,並將結果輸出到瀏覽器上,如果結果有很多行,表格的bgcolor(背景色)如果全是單色的,瀏覽者會感覺不太舒服。那麼怎樣做使表格各行的顏色不同呢?請看下面代碼:

function getcolor()
{
static $colorvalue;//定義一個靜態變數
if($colorvalue=="#eeeeee")
$colorvalue="#F5F5F5";
else $colorvalue="#eeeeee";
return($colorvalue);
}
print("<table border=1>/n");//下面輸出10行
for($i=0;$i<10;$i++)
{
$bcolor=getcolor();//換背景顏色
print("<tr bgcolor=$bcolor>/n");
print("<td>$i</td>/n");
print("</tr>");
}
print("</table>/n");
?>

說明:

此程式中定義了一個靜態變數static $colorvalue意思是在函數調用結束後,此變數$colorvalue還保留值,沒有消失。當再次調用getcolor()函數時,變數$colorvalue的值是上次函數調用結束時$colorvalue的值。

5、在php中避免重複引用的辦法

大家知道,在C語言中,我們可以用#define來定義一個MACRO名字,通過檢查是否該MACRO名字定義過來決定該標頭檔是否被引用。在PHP中也有同樣的問題,比如:A引用B,C, B引用C,如果不採取措施,C將被引用2次。這樣可能會導致一些奇怪的問題。解決辦法:定義一個全域變數,並且通過檢查該變數是否定義過來解決這個問題.辦法很簡單,類似C。 只是這個全域變數我建議都用[''user_packages''] [''headfilename'']的命名規則。

if (!empty($GLOBALS[''FOODTAILS''][''GLOBALDEFINE''])) return;
$GLOBALS[''FOODTAILS''][''GLOBALDEFINE''] = true;
class FOODTAILS {...
};
?>

另外,在主程式中盡量採用require_once "headfiles.php"; 以避免重複引用。

6、如何避免表單的重複提交

我們在做網站時,常常為一些灌水文章而煩惱。有時,由於網路狀況等原因使用者不知道提交是否成功,也會再次提交同一份表單,這就造成了表單的重複提交不起。有一個簡單的方法可以避免同一表單的重複提交。 首先,先定義一個session變數用來儲存一個表單的提交序號。這裡我定義為“$userLastAction”。然後在表單裡加入一個hidden變數,把值設為$userLastAction+1:<input type=Hidden name=lastAction value=<? =$userLastAction+1 ?>> 最後,在處理提交之前判斷表單是否已被提交過。

if($lastAction>$userLastAction){
$userLastAction++; // 序號加1
// 處理表單資料
}
?>

這個技巧的主要原理是不允許使用者回退後再次提交,也就是說回退後修改再提交也是不允許的,但是還是不能避免Ctrl-C/Ctrl-V的灌水辦法。

7、下載檔案的下載次數回填

我們在下載軟體時,經常會看到此軟體的下載統計次數,而這些統計數給網站管理員分析軟體的受歡迎程度帶來了方便。其實現原理是:在後端資料庫中存放軟體的唯一標識和下載數,在使用者下載軟體時,首先更新對應軟體的下載次數即下載次數加1,然後再到下載檔案上正式開始下載。請看下面的實現代碼:

a、先建一資料表download (後端用MySql)

download表中含有下列兩個欄位:

id    下載的檔案的唯一標識

downnum 下載次數,預設值為0

b、實現

假設已經從資料庫取出:描述檔案名稱 五筆字型 ;下載檔案名稱:wbzx.zip ;標識號id值為2

處理後產生的超級連結代碼為:

<a href="download.php?filename=wbzx.zip&id=2">五筆字型</a>

下面的代碼download.php處理下載次數累計及根據傳遞的檔案名稱定位下載檔案。

//串連Mysql資料庫代碼略
$res=mysql_query("update download set downnum=(downnum+1) where id=''$id''" ,$db);
header("location:$filename");
?>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.