在前面的文章中我們瞭解到PHP程式碼是一個在伺服端執行的程式,它的輸出(response)對象是使用者端的瀏覽器,所以它的輸入內容是HTML的原始碼,在瀏覽器收到來自於伺服器端的response之後,會再自行解譯排版,成為使用者看得到的網頁。
那麼,如果我們有一些資料要輸入給PHP程式去進行計算,那麼這些資料或是一些動作的選擇,該如何傳遞給伺服器中的PHP程式呢?除了透過表單之外,也可以透過網址列的方式來傳遞,前者是透過POST的協定,在後面一篇文章中會提到,後者則是透過GET協定,玆說明如下。
在瀏覽網站時,網址列中的網址(通常我們會把它稱為URL)除了包含網站的網址之外,也可以包含要存取的程式或網頁檔的資料夾以及程式檔本身,經常,我們會看到如下所示的樣子:
http://example.com/product/detail.php
假設上述的網址是前往網站中要求一項產品的資訊,那麼我想要指定某一個特定的產品,就需要以參數的方式傳遞給detail.php檔案才行,又假設產品的編號變數是sku,其內容希望是1002這項產品,那麼網址就可以編排成下面這個樣子:
http://example.com/product/detail.php?sku=1002
另外一個情況,我們想要列出某一類別的產品,類別變數是cat,items則是用來告訴網頁每一頁要顯示的產品數量,以及page指定是產品的第幾頁,則網址可以編碼成如下所示的樣子:
http://example.com/product/list.php?cat=100&items=20&page=2
上述的網址list.php就可以得到3個變數的內容,分別是 cat的內容是100,items的內容是20,而page的內容則為2。
那麼,在detail.php以及list.php中要如何取出這些變數拿來使用呢?我們以計算BMI的例子來測試。
<?php
$height = $_GET["height"];
$weight = $_GET["weight"];
$bmi = $weight / $height ** 2;
echo "身高:" . $height . "公尺<br>";
echo "體重:" . $wiehgt . "公斤<br>";
echo "BMI = " . round($bmi, 1);
?>
假設這個程式的名稱是index.php,並放在test資料夾之外,則以下列的網址瀏覽:
http://localhost/mysite/test/?height=1.74&weight=68
即可得到以下的輸出畫面:

不過上述的程式有一個風險,就是如果在網址列中沒有輸入任何資訊的話,則輸出的結果會是空的內容,這樣的情況並不是很好,因此正確的方式是利用if敘述先檢查輸入資料的正確性,如果不正確的話,就要說明在網頁中,程式修改如下:
<?php
$height = $_GET["height"];
$weight = $_GET["weight"];
if ($height!=NULL and $weight!=NULL) {
$bmi = $weight / $height ** 2;
echo "身高:" . $height . "公尺<br>";
echo "體重:" . $wiehgt . "公斤<br>";
echo "BMI = " . round($bmi, 1);
} else {
echo "你沒有在網址中指定height和weight";
}
?>