[PHP]GET/POST 的差異與配合PHP用法

摘要:[PHP]GET/POST 的差異與配合PHP用法

[鐵人賽Day2] GET/POST 的差異與配合PHP用法
 

今天要來談論的是新手最常搞混的GET/POST
想當初在學習PHP的時候,常常會使用到 Form 這個表單(現在也很常用啦),而傳送資料的方法也常使用POST跟GET的方法來傳遞資料
 
GET/POST用在表單form裡的method,在Html的語法如下:
<form id="form1" method="(GET or POST)" action="">
     -內容物-
</form>


那到底GET/POST差別在哪呢?
 

GET方法
傳送的值藉由GET請求URL發送,簡單來說GET是把資料放在header進行傳送,而在網址列會看到"http://www.xxx.com/test/index.php?test1=value1&test2=value2"
同時,使用GET方式傳遞的話,並不適合傳送些隱密性較高的資料(例如:Password),因為在傳送的過程中就會顯示在網址列上
而GET的請求會被Cache紀錄、GET的請求受限於 QueryString 長度限制(依瀏覽器規定),因此GET的使用時機應為檢視資料時使用
 
POST方法
傳送的值藉由POST請求HTTP發送,簡單來說POST是把資料放在訊息主體內進行傳送
而POST的請求不會被Cache紀錄、POST的請求對資料長度沒有限制,因此POST比GET更安全,所以較適合用來傳送隱密性較高的資料
 
而在PHP中,當資料傳送出來後,GET傳值是運用PHP的$_GET['XXX']的變數接收,POST傳值是運用PHP的$_POST['XXX']的變數接收
(回想剛學習那時,常把兩者弄混淆)
 
GET實作:
說明:test1.php為填寫表單並使用GET傳送,test2.php為接收表單
test1.php
<html>
<head>
    <title>iTHome_Test</title>
    <meta http-equiv="content-type" charset="UTF-8" />
</head>
    <body>
        <form method="GET" action="./test2.php">
            帳號:<input name="username" type="text" />
            <br />
            密碼:<input name="password" type="password" />
            <br />
            <input type="submit" value="確定送出" />
        </form>
    </body>
</html>


test2.php

<html>
<head>
    <title>iTHome_Test</title>
    <meta http-equiv="content-type" charset="UTF-8" />
</head>
    <body>
        <?php
            $get_value1=$_GET['username'];
            $get_value2=$_GET['password'];
            echo "帳號:".$get_value1."<br />密碼:".$get_value2;
        ?>
    </body>
</html>

如圖可看到,傳遞的資料在URL上顯示:

POST實作:
說明:test1.php為填寫表單並使用POST傳送,test2.php為接收表單
test1.php
<form method="GET" action="./test2.php">,把method="GET"改method="POST"
 
test2.php
$get_value1=$_GET['username'];
$get_value2=$_GET['password'];
更改為
$get_value1=$_POST['username'];
$get_value2=$_POST['password'];
 
如圖可看到,傳遞的資料並不在URL上顯示,比GET更安全: