PHP เบื้องต้น > เริ่มต้นด้วย PHP
การทำงานกับฟอร์ม
ฟอร์มเป็นกลไกการส่งข้อมูลจาก browser กับแม่ข่าย
การส่งข้อมูล
คุณสมบัติ method มี 2 ค่าที่ควบคุมการส่งข้อมูลไปยังแม่ข่ายเมื่อส่งฟอร์ม คือ POST และ GET
เมธอด HTTP GET ส่งข้อมูลทั้งชุดด้วยการต่อท้าย URI ที่ระบุในคุณลักษณะ action บนฟอร์ม ข้อถูกจับต่อท้ายเครื่องหมายคำถาม (?) และแบ่งฟิลด์ด้วยตัวอักษร ampersand (&) ชื่อแต่ละฟิลด์แบ่งจากค่าด้วยเครื่องหมายเท่ากับ ตัวอักษรที่ทำให้ URI ไม่ทำงาน เช่น whitespace, เครื่องหมายคำถาม, เครื่องหมายเท่ากับ หรือตัวอักษรพิมพ์ไม่ได้ จะได้รับการเข้าเป็นเลขฐานสิบหก
ตัวการส่งใบสั่งซื้อจากลูกค้าชื่อ "สุวรรณ แสงแก้ว" หมายเลขสมาชิก NA1235 และรายการสั่งซื้อ
http://localhost/phptrain/chapter01/processorder.php?name=%CA%D8%C7%C3%C3%B3 +%E1%CA%A7%E1%A1%E9%C7+%2F+NA1235&shampooqty=6&conditionerqty=5&soapqty=3
การส่งด้วยเมธอด GET มีข้อดีคือ ทำการตรวจสอบข้อมูลได้ง่ายเพราะมองเห็นได้ใน URI แต่มีข้ออ่อนบางประการ
ถ้า URI เป็นข้อความยาวมากของฟอร์มที่ฟิลด์จำนวนมาก ถึงแม้ว่า browser ส่วนใหญ่สามารถควบคุมข้อความนำเข้า แต่การอ่าน URI ทำได้ยากและการกระจายยุ่งยาก
ฟิลด์รหัสผ่านได้รับการส่งเป็นข้อความธรรมดาบน URI ขณะที่เมธอด POST ส่งรหัสผ่านเป็นข้อความธรรมดา URI ของ GET ได้รับการมองเห็นและจำได้โดย browser ดังนั้นผู้ใช้อื่นที่ใช้คอมพิวเตอร์สามารถค้นหาชื่อและรหัสผ่านได้
เมธอด GET ไม่สนับสนุนการอัพโหลดไฟล์กับฟอร์ม
เมธอด GET ไม่สนับสนุนตัวอักษรอื่นนอกจาก ASCII จึงต้องมีงานเพิ่มขึ้น ถ้าส่งด้วยตัวอักษรส่วนขยาย
เมธอด POST เป็นอีกวิธีในการส่งข้อมูล โดยส่งในส่วน body ของคำขอ HTTP ไปยังแม่ข่าย เมธอดนี้มีข้อได้เปรียบคือ เห็นน้อยกว่าเมธอด POST ควบคุมชุดตัวอักษรได้มากกว่า ASCII และไม่จำกัดโดย "history" ของ browser
คำแนะนำการเลือกเมธอดดังนี้
GET ใช้กับข้อมูลที่ส่งไปสำหรับการคิวรี่และไม่มีการปรับปรุงข้อมูลบนแม่ข่าย
POST ใช้กับกรณีอื่น
การเข้าถึงตัวแปรฟอร์ม
จุดรวมของการใช้ฟอร์มใบสั่งซื้อ คือ การรวบรวมใบสั่งซื้อของลูกค้า การเก็บรายละเอียดสิ่งที่ลูกค้าป้อนลงไปทำได้ง่ายใน PHP
ภายในสคริปต์ PHP สามารถเข้าถึงแต่ละฟิลด์ของฟอร์มในฐานะตัวแปรที่มีชื่อเดียวกับฟิลด์ของฟอร์มให้ดูตัวอย่างคำสั่งใน processorder.php
<?php
$printdate = date("H:i, jS F");
echo <<<ORDERSTR
<p>เวลาประมวลผลใบสั่งซื้อ {$printdate}</p>
ผู้สั่งซื้อ {$_GET['name']}<br/>
<p>รายละเอียดการสั่งซื้อ:<br/>
{$_GET['shampooqty']} ขวด แชมพู<br/>
{$_GET['conditionerqty']} ขวด ครีมนวดผม<br/>
{$_GET['soapqty']} ก้อน สบู่<br/>
</p>
ORDERSTR;
?>
ถ้า browser ได้รับการ refresh ผลลัพธ์ของสคริปต์ จะแสดงตามภาพ 1.1.3 ค่าแต่ละประเภทจะปรากฎออกมา
ภาพ 1.1.3 แสดงผลลัพธ์จากการป้อนข้อมูล
ตัวแปรฟอร์ม
ข้อมูลจากสคริปต์จะส่งผ่าน superglobal array คือ $_GET หรือ $_POST ที่สามารถเข้าถึงได้ผ่านตัวแปร PHP ชื่อตัวแปรนี้เริ่มต้นด้วยเครื่องหมายดอลลาร์ ($) การเข้าถึงข้อมูลของฟอร์มผ่านตัวแปรเขียนได้ 2 วิธ
วิธีที่ 1 คือ การใช้รูปแบบย่อ เช่น $soapqty
วิธีที่ 2 คือ ใช้นิพจน์แบบนี้
$$_GET["soapqty"]
เวอร์ชัน 4 รับข้อมูลจาก $HTTP_GET_VARS และ $HTTP_POST_VARS ที่ไม่ได้เป็น superglobal array สำหรับ array นี้ยังมีอยู่และใช้ได้โดยการตั้งค่า register_long_arrays เป็น on ในไฟล์ php.ini
ถ้าตั้งค่าคำสั่ง register_globals ในไฟล์ php.ini เป็น on สามารถใช้ได้เฉพาะรูปแบบ short ค่านี้เป็นค่าเริ่มต้นปกติของไฟล์ php.ini
ถ้าตั้งค่า register_globals เป็น off สามารถใช้วิธีที่ 2 รวมถึงต้องตั้งค่าคำสั่ง track_var เป็น on
รูปแบบเต็มจะทำงานได้เร็วและหลีกเลี่ยงการสร้างตัวแปรอย่างอัตโนมัติ อย่างไรก็ตาม รูปแบบย่ออ่านได้ง่าย และเหมือนกับ PHP เวอร์ชันก่อน
|