ตัวแปร $_GET และ $_POST ใน PHP ใช้เพื่อดึงข้อมูลจากแบบฟอร์ม เช่น ข้อมูลเข้าของผู้ใช้
สิ่งสำคัญประการหนึ่งที่ควรทราบก็คือ เมื่อประมวลผลแบบฟอร์ม HTML PHP สามารถสร้างองค์ประกอบของแบบฟอร์มจากหน้า HTML ให้กับสคริปต์ PHP ได้โดยอัตโนมัติ
ตัวอย่างด้านล่างมีแบบฟอร์ม HTML ที่มีช่องป้อนข้อมูลสองช่องและปุ่มส่ง
<html><head><metacharset="utf-8"><title>เครือข่ายซอร์สโค้ด (downcodes.com)</title></head><body> <formaction="welcome.php"method="post" > ชื่อ: <inputtype="text"name="fname">อายุ: <inputtype="text"name="age"><inputtype="submit"value="submit"></form> </body>< /html>
เมื่อผู้ใช้กรอกแบบฟอร์มด้านบนและคลิกปุ่มส่ง ข้อมูลแบบฟอร์มจะถูกส่งไปยังไฟล์ PHP ชื่อ "welcome.php":
ยินดีต้อนรับ<?phpecho$_POST["fname"]; ?>!<br>อายุของคุณคือ <?phpecho$_POST["age"];
เราจะอธิบายตัวแปร $_GET และ $_POST ใน PHP ในบทถัดไป
ในตัวอย่างต่อไปนี้ เราตั้งค่าสามตัวเลือกสำหรับเมนูแบบเลื่อนลง แบบฟอร์มใช้วิธี GET เพื่อรับข้อมูล หากค่าแอ็ตทริบิวต์ action ว่างเปล่า หมายความว่าค่านั้นถูกส่งไปยังสคริปต์ปัจจุบัน เมนูแบบเลื่อนลงผ่านแอตทริบิวต์ชื่อที่เลือก:
<?php$q= isset($_GET['q'])? htmlspecialchars($_GET['q']): '';if($q){ if($q=='CODERCTO'){ echo' เครือข่ายซอร์สโค้ด<br>http://www.downcodes.com'; }elseif($q=='GOOGLE'){ echo'Google search<br>http://www.google.com'; }elseif($q=='TAOBAO'){ echo'Taobao<br>http://www.taobao.com'; }}else{?><formaction=""method="get"> <selectname=" q"> <optionvalue="">เลือกไซต์:</option> <optionvalue="CODERCTO">codercto</option> <optionvalue="GOOGLE">Google</option> <optionvalue="TAOBAO">Taobao</option> </select> <inputtype="submit"value="submit"> </form><?php}?>
หากเมนูแบบเลื่อนลงเป็นแบบเลือกหลายรายการ (multiple="multiple") เราสามารถรับได้โดยการตั้งค่า select name="q[]" เป็นอาร์เรย์ และส่งโดยใช้ POST รหัสจะเป็นดังนี้:
<?php$q= isset($_POST['q'])? $_POST['q']: '';if(is_array($q)){ $sites= array( 'CODERCTO'=> 'ซอร์สโค้ด เครือข่าย : http://www.downcodes.com', 'GOOGLE'=> 'ค้นหาโดย Google: http://www.google.com', 'TAOBAO'=> 'Taobao: http://www.taobao.com', ); foreach($qas$val){ //PHP_EOL เป็นค่าคงที่ ใช้สำหรับการแบ่งบรรทัด echo$sites[$val] }else{?><formaction =" "method="post"> <selectmultiple="multiple"name="q[]"> <optionvalue="">เลือกไซต์:</option> <optionvalue="CODERCTO">codercto</option> <optionvalue="GOOGLE">Google</option> <optionvalue="TAOBAO">Taobao</option> </select> <inputtype="submit"value="Submit"> </form><?php}?>
ค่าของแอตทริบิวต์ชื่อในรูปแบบปุ่มตัวเลือก PHP นั้นสอดคล้องกัน แต่ค่าของค่าจะแตกต่างกัน
<?php$q= isset($_GET['q'])? htmlspecialchars($_GET['q']): '';if($q){ if($q=='CODERCTO'){ echo' เครือข่ายซอร์สโค้ด<br>http://www.downcodes.com'; }elseif($q=='GOOGLE'){ echo'Google search<br>http://www.google.com'; }elseif($q=='TAOBAO'){ echo'Taobao<br>http://www.taobao.com'; }}else{?><formaction=""method="get"> <inputtype=" radio"name="q"value="CODERCTO"/>codercto <inputtype="radio"name="q"value="GOOGLE"/>Google <inputtype="radio"name="q"value="TAOBAO"/>เถาเป่า <inputtype="submit"value="submit"></form><?php}?>
ช่องทำเครื่องหมาย PHP สามารถเลือกได้หลายค่า:
<?php$q= isset($_POST['q'])? $_POST['q']: '';if(is_array($q)){ $sites= array( 'CODERCTO'=> 'ซอร์สโค้ด เครือข่าย : http://www.downcodes.com', 'GOOGLE'=> 'ค้นหาโดย Google: http://www.google.com', 'TAOBAO'=> 'Taobao: http://www.taobao.com', ); foreach($qas$val){ //PHP_EOL เป็นค่าคงที่ ใช้สำหรับการแบ่งบรรทัด echo$sites[$val] }else{?><formaction =" "method="post"> <inputtype="checkbox"name="q[]"value="CODERCTO">codercto<br> <inputtype="checkbox"name="q[]"value="GOOGLE">Google<br> <inputtype="checkbox"name="q[]"value="TAOBAO">Taobao<br> <inputtype=" ส่ง"value="submit"></form><?php}?>
เราควรตรวจสอบการป้อนข้อมูลของผู้ใช้ทุกครั้งที่เป็นไปได้ (ผ่านสคริปต์ฝั่งไคลเอ็นต์) การตรวจสอบเบราว์เซอร์ทำได้เร็วกว่าและลดแรงกดดันจากเซิร์ฟเวอร์น้อยลง
หากจำเป็นต้องแทรกอินพุตของผู้ใช้ลงในฐานข้อมูล คุณควรพิจารณาใช้การตรวจสอบความถูกต้องของเซิร์ฟเวอร์ วิธีที่ดีในการตรวจสอบแบบฟอร์มบนเซิร์ฟเวอร์คือการส่งข้อมูลแบบฟอร์มไปยังหน้าปัจจุบัน (การส่งแบบอะซิงโครนัสจะดีกว่า) แทนที่จะข้ามไปยังหน้าอื่น วิธีนี้ผู้ใช้สามารถได้รับข้อความแสดงข้อผิดพลาดในหน้าแบบฟอร์มเดียวกัน ผู้ใช้จะค้นหาข้อผิดพลาดได้ง่ายขึ้น