การส่งข้อมูลจากฟอร์ม (form) แบบ get vs post (เก็ท vs โพส)

PHP Knowledge เป็น บอร์ดรวามความรู้ php เน้นบทความ แนวทางการเขียนโปรแกรม บันทึกกันลืม เพื่อให้สมาชิกได้เขียนความรู้ที่ตัวเองมีให้สมาชิกท่านอื่นๆ ได้ เข้ามาอ่าน และ ไว้อ่านเองกันลืมด้วย

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
pprn
PHP Super Hero Member
PHP Super Hero Member
Posts: 565
Joined: 02/07/2018 10:45 am

การส่งข้อมูลจากฟอร์ม (form) แบบ get vs post (เก็ท vs โพส)

Post by pprn »

  • การส่งข้อมูลจาก ฟอร์ม (form) มีวิธีการส่งอยู่ 2 แบบนั่นคือ แบบ GET กับแบบ POST
  • 1. การส่งข้อมูลจากฟอร์ม (form) แบบ GET นั้น จะส่งข้อมูลแนบต่อท้าย URL ในแบบ Query String ทำให้ผู้ใช้งานสามารถมองเห็นข้อมูลที่ส่งไป
ได้ เหมาะสำหรับการส่งข้อมูลสั้นๆ ไม่เกิน 256 ตัว

  • 2. การส่งข้อมูลจากฟอร์ม (form) แบบ POST นั้น จะส่งข้อมูลไม่แสดงข้อมูลที่ส่งไปให้เห็นผ่าน URL เหมาะสำหรับการส่งข้อมูลแบบยาวๆ
เพราะไม่มีข้อจำกัดของเรื่องขนาดของข้อมูลที่ส่ง และต้องการความปลอดภัย

  • 1. การส่งข้อมูลจากฟอร์ม (form) แบบ GET
  • รูปแบบการส่งข้อมูลฟอร์ม (form) แบบ GET

Code: Select all

<form action="ไฟล์ปลายทางที่ใช้สำหรับเขียนสคิปต์ PHP" method="get">>
ตัวอย่าง
  • โค้ด การส่งข้อมูลจากฟอร์ม (form) แบบ GET
ส่วนของฟอร์ม (form) สำหรับรับข้อมูลจากผู้ใช้

Code: Select all

<form action="welcome.php" method="get">   
Name: <input type="text" name="name1" />     
Age: <input type="text" name="age1" />
<input type="submit" />
</form>
  • โค้ด ส่วนของ PHP ที่ได้จากฟอร์ม (form)
ส่วนของ PHP ที่ได้จากฟอร์ม (form) ไปประมวลผล ในการจะรับข้อมูลแบบ GET นั้น ฟอร์ม (form) ที่ส่งข้อมูลมา จะต้องกำหนด method="get" จะใช้ตัวแปร $_GET ในการรับข้อมูล

Code: Select all

<form>
    Welcome <?php echo $_GET["name1"]; ?>.<br>
You are <?php echo $_GET["age1"]; ?> years old!
</form>

ผลลัพธ์
  • ส่วนของฟอร์ม (form) สำหรับรับข้อมูลจากผู้ใช้
การส่งข้อมูลจากฟอร์ม (form) แบบ GET
การส่งข้อมูลจากฟอร์ม (form) แบบ GET
get1.JPG (18.76 KiB) Viewed 1580 times
  • ส่วนของ PHP ที่ได้จากฟอร์ม (form) จะส่งข้อมูลแนบต่อท้าย URL มาด้วย
ส่วนของ PHP ที่ได้จากฟอร์ม (form) แบบ GET
ส่วนของ PHP ที่ได้จากฟอร์ม (form) แบบ GET
get2.JPG (18.58 KiB) Viewed 1580 times
  • 2. การส่งข้อมูลจากฟอร์ม (form) แบบ POST
  • รูปแบบการส่งข้อมูลฟอร์ม (form) แบบ POST

Code: Select all

<form action="ไฟล์ปลายทางที่ใช้สำหรับเขียนสคิปต์ PHP" method="post">>
ตัวอย่าง
  • โค้ด การส่งข้อมูลจากฟอร์ม (form) แบบ POST
ส่วนของฟอร์ม (form) สำหรับรับข้อมูลจากผู้ใช้

Code: Select all

<form action="welcomePage.php" method="post">
    Name: <input type="text" name="name1" />
Age: <input type="text" name="age1" />
</form>
  • โค้ด ส่วนของ PHP ที่ได้จากฟอร์ม (form)
ส่วนของ PHP ที่ได้จากฟอร์ม (form) ไปประมวลผล ในการรับข้อมูลในการจะรับข้อมูลแบบ POST นั้น ฟอร์ม(form) ที่ส่งข้อมูลมา จะต้องกำหนด method="post" ในภาษา PHP จะใช้ตัวแปร $_POST

Code: Select all

<form>
Welcome <?php echo $_POST["name1"]; ?><br>
You are <?php echo $_POST["age1"]; ?> years old!
</form>

ผลลัพธ์
  • ส่วนของฟอร์ม (form) สำหรับรับข้อมูลจากผู้ใช้
การส่งข้อมูลจากฟอร์ม (form) แบบ POST
การส่งข้อมูลจากฟอร์ม (form) แบบ POST
Post1.JPG (18.76 KiB) Viewed 1580 times
  • ส่วนของ PHP ที่ได้จากฟอร์ม (form) จะ ไม่ ส่งข้อมูลแนบต่อท้าย URL มาด้วย
ส่วนของ PHP ที่ได้จากฟอร์ม (form) แบบ POST
ส่วนของ PHP ที่ได้จากฟอร์ม (form) แบบ POST
Post2.JPG (16.15 KiB) Viewed 1580 times
การเลือกระหว่างการส่งข้อมูลแบบ GET หรือ POST
  • - ควรใช้ POST เมื่อข้อมูลที่ส่งเป็นความลับ เช่น พาสเวิร์ด เป็นต้น
    - ควรใช้ POST เมื่อต้องการส่งข้อมูลขนาดใหญ่
    - ถ้าต้องการส่งข้อมูลที่เป็นความลับแบบ GET ควรเข้ารหัสไว้ด้วย

----------------------------------------------------------------------------------------------------------------------------------------------------------------
_____________________________________________________________________________________________
บทความนี้เเป็นบทความที่จัดทำขึ้นเพื่อเนะนำเครื่องมือช่วยสำหรับนักพัฒนา PHP ซึ่งเป็นความรู้พื้นฐานในการพัฒนา PHP OOP ต่อไป เเละขอเเนะนำความรู้ที่เกี่ยวข้องกับโดยสามารถศึกษาได้จากบทเรียน PHP ได้ที่นี่ เพื่อเพิ่มความเข้าใจในการใช้งานเครื่องมือต่างๆ ค่ะ
_____________________________________________________________________________________________

----------------------------------------------------------------------------------------------------------------------------------------------------------------
makup
PHP Hero Member
PHP Hero Member
Posts: 168
Joined: 05/10/2020 10:02 am

Re: การส่งข้อมูลจากฟอร์ม (form) แบบ get vs post (เก็ท vs โพส)

Post by makup »

********เพิ่มเติมข้อมูล การส่งข้อมูลจากฟอร์ม (form) แบบ get vs post (เก็ท vs โพส) *********

การส่งค่ามาในรูปแบบของ Form
การส่งค่ามาในรูปแบบของ Form มีอยู่ด้วยกัน 3 แบบ $_GET , $_POST , $_REQUEST โดยหลักการส่งค่านั้น ต้องมาจากการส่งค่า Form ก่อนหรือในส่วนของ Frontend โดยค่าที่ส่งมา จะต้องไปทำการกำหนดในส่วนของ Method ว่า เราจะส่งค่ามาแบบไหนกัน , โดยค่าที่ส่งไป จะไปทำงานในส่วน Backend


Frontend $_GET : ในส่วนของ Frontend จะทำหน้าที่ในการส่งค่าไปในส่วนของ Backend โดยมีการกำหนดผ่านตัว Method="GET", ทั้งนี้ค่าที่ส่งไปนั้น จะมีอยู่กัน 3 ค่า ซึ่งก็ได้แก่ name,password,sex

Code: Select all

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title><?php echo "รายการในสินค้า";  ?></title>
</head>
<body>
	<form action="test_php.php" method="GET"> 	    <!-- เมื่อกด ปุ่ม submit ค่าจะถูกส่งไป action ของ file test_php.php ..... -->
										 <!-- ..... ส่วน  method="GET" คือการส่งค่า แบบ GET -->


	<label>ชื่อ : <input type="text" value="" name="fname"/></label>	<!-- ค่า name จะถูกส่งมาผ่าน input -->				
	<label>รหัสผ่าน : <input type="password" value="" name="pass"/></label> <!-- ค่า password จะถูกส่งมาผ่าน input-->	
			<br><label>เพศ : </label>
		<input type="radio" name="sex" value="ชาย" checked="checked"/>ชาย  <!-- ค่า sex - จะถูกส่งมาในรูปแบบของ Radio-->	
		<input type="radio" name="sex" value="หญิง">หญิง<br>
		<input type="submit" value="ส่งข้อมูล">         <!-- เมื่อมีกดปุ่ม Submit ก็จะมีการส่งค่านั้นไป -->

		</form>
</body>
</html>



1.รูปในการส่งค่าแบบ $_GET
  • การส่งค่าในรูปแบบ $_GET นั้น , จะเป็นการส่งค่าข้อมูล ผ่าน Link URL , โดยผู้ใช้งานทั่วไป หรือ ใครก็ตาม ก็สามารถเห็นค่านั้น ผ่าน URL ได้ เพราะข้อมูลไม่ได้อยู่ในรูปแบบของ Private

Code: Select all


<?php
header('Content-Type: text/html; charset=utf-8');

$fname_GET = $_GET['fname'];					//$_GET เป็นการส่งค่า ผ่าน URL โดยที่ข้อมูลส่งไป ไม่ได้สำคัญไรมาก ส่วน ...
										//.... ['fname'] คือ รับค่ามาจาก Form name = 'fname' จาก File ...
										//.... Form_test.php 

$pass_GET = $_GET['pass'];
$sex_GET = $_GET['sex'];



echo '<div style="font-size:14px">';

echo '--------------------------------------------------------------------';
echo '<pre>';
echo '<b>แสดงค่าตัวแปร fname</b>', "\n";
echo '[\'fname\'] = ', $fname_GET, "\n";			//ทำการ echo แสดงข้อมูล หลังจากส่งค่า แบบ $_GET ไป
echo '</pre>';
echo '--------------------------------------------------------------------';

echo '--------------------------------------------------------------------';
echo '<pre>';
echo '<b>แสดงค่าตัวแปร pass</b>', "\n";
echo '[\'pass\'] = ', $pass_GET, "\n";
echo '</pre>';
echo '--------------------------------------------------------------------';

echo '--------------------------------------------------------------------';
echo '<pre>';
echo '<b>แสดงค่าตัวแปร sex</b>', "\n";
echo '[\'pass\'] = ', $sex_GET, "\n";
echo '</pre>';
echo '--------------------------------------------------------------------';
echo '</div>';
?>
ผลลัพธ์ที่ได้
ก็จะมีการแสดงข้อมูลผ่าน URL , โดยผู้ใช้งานทั่วไปก็จะสามารถเห็นข้อมูลนี้ได้อย่างเปิดเผย
12.JPG
12.JPG (14.4 KiB) Viewed 67 times
12-Get.JPG
12-Get.JPG (27.57 KiB) Viewed 67 times

Frontend $_POST : ในส่วนของ Frontend จะทำหน้าที่ในการส่งค่าไปในส่วนของ Backend โดยมีการกำหนดผ่านตัว Method="POST", ทั้งนี้ค่าที่ส่งไปนั้น จะมีอยู่กัน 3 ค่า ซึ่งก็ได้แก่ name,password,sex

Code: Select all

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title><?php echo "รายการในสินค้า";  ?></title>
</head>
<body>
	<form action="test_php.php" method="POST"> 	    <!-- เมื่อกด ปุ่ม submit ค่าจะถูกส่งไป action ของ file test_php.php ..... -->
										 <!-- ..... ส่วน  method="POST" คือการส่งค่า แบบ POST -->


	<label>ชื่อ : <input type="text" value="" name="fname"/></label>	<!-- ค่า name จะถูกส่งมาผ่าน input -->				
	<label>รหัสผ่าน : <input type="password" value="" name="pass"/></label> <!-- ค่า password จะถูกส่งมาผ่าน input-->	
			<br><label>เพศ : </label>
		<input type="radio" name="sex" value="ชาย" checked="checked"/>ชาย  <!-- ค่า sex - จะถูกส่งมาในรูปแบบของ Radio-->	
		<input type="radio" name="sex" value="หญิง">หญิง<br>
		<input type="submit" value="ส่งข้อมูล">         <!-- เมื่อมีกดปุ่ม Submit ก็จะมีการส่งค่านั้นไป -->

		</form>
</body>
</html>


2.รูปแบบในการส่งค่าแบบ $_POST
  • การส่งค่าในรูปแบบ $_POST นั้น , จะเป็นการส่งค่าข้อมูล ไม่ผ่านตัว URL , ผู้ใช้งานทั่วไป หรือ ใครก็ตาม ก็ไม่สามารถเห็นค่านั้น ผ่าน URL ได้ เพราะข้อมูลถูกส่งมาในรูปแบบ Hide

Code: Select all

<?php
header('Content-Type: text/html; charset=utf-8');

$fname_POST = $_POST['fname'];				//$_POST เป็นการส่งค่า โดยไม่ผ่าน URL ไม่ต้องการที่จะเปิดเผยข้อมูล ส่วน ...
										//.... ['fname'] คือ รับค่ามาจาก Form name = 'fname' จาก File ...
										//.... Form_test.php 

$pass_POST = $_POST['pass'];
$sex_POST = $_POST['sex'];



echo '<div style="font-size:14px">';

echo '--------------------------------------------------------------------';
echo '<pre>';
echo '<b>แสดงค่าตัวแปร fname</b>', "\n";
echo '[\'fname\'] = ', $fname_GET, "\n";			//ทำการ echo แสดงข้อมูล หลังจากส่งค่า แบบ $_POST ไป
echo '</pre>';
echo '--------------------------------------------------------------------';

echo '--------------------------------------------------------------------';
echo '<pre>';
echo '<b>แสดงค่าตัวแปร pass</b>', "\n";
echo '[\'pass\'] = ', $pass_GET, "\n";
echo '</pre>';
echo '--------------------------------------------------------------------';

echo '--------------------------------------------------------------------';
echo '<pre>';
echo '<b>แสดงค่าตัวแปร sex</b>', "\n";
echo '[\'pass\'] = ', $sex_GET, "\n";
echo '</pre>';
echo '--------------------------------------------------------------------';
echo '</div>';
?>
ผลลัพธ์ที่ได้
ในรูปแบบของ $_POST ก็จะไม่มีการแสดงค่าข้อมูลผ่าน URL ได้เห็น , แสดงข้อมูลที่ถูกส่งมานั้น ไม่ต้องเปิดเผยในที่สาธารณะ
13-Post.JPG
13-Post.JPG (11.27 KiB) Viewed 67 times
13.JPG
13.JPG (32.21 KiB) Viewed 67 times

Frontend $_REQUEST : ในส่วนของ Frontend จะทำหน้าที่ในการส่งค่าไปในส่วนของ Backend โดยมีการกำหนดผ่านตัว Method="REQUEST", ทั้งนี้ค่าที่ส่งไปนั้น จะมีอยู่กัน 3 ค่า ซึ่งก็ได้แก่ name,password,sex

Code: Select all

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title><?php echo "รายการในสินค้า";  ?></title>
</head>
<body>
	<form action="test_php.php" method="REQUEST">  <!-- เมื่อกด ปุ่ม submit ค่าจะถูกส่งไป action ของ file test_php.php ..... -->
										 <!-- ..... ส่วน  method="REQUEST" คือการส่งค่า แบบ REQUEST -->


	<label>ชื่อ : <input type="text" value="" name="fname"/></label>	<!-- ค่า name จะถูกส่งมาผ่าน input -->				
	<label>รหัสผ่าน : <input type="password" value="" name="pass"/></label> <!-- ค่า password จะถูกส่งมาผ่าน input-->	
			<br><label>เพศ : </label>
		<input type="radio" name="sex" value="ชาย" checked="checked"/>ชาย  <!-- ค่า sex - จะถูกส่งมาในรูปแบบของ Radio-->	
		<input type="radio" name="sex" value="หญิง">หญิง<br>
		<input type="submit" value="ส่งข้อมูล">         <!-- เมื่อมีกดปุ่ม Submit ก็จะมีการส่งค่านั้นไป -->

		</form>
</body>
</html>
3.รูปแบบในการส่งค่าแบบ $_REQUEST
  • การส่งค่าในรูปแบบ $_REQUEST , จะเป็นการส่งค่าผ่านทาง method หรือวิธีการที่ใช้ส่งข้อมูลทั้งสองแบบ คือ GET และ POST โดย $_REQUEST จะสามารถเข้าถึงค่าข้อมูลได้โดยไม่จำเป็นต้องระบุว่าเป็น method ดังกล่าวเท่านั้น

Code: Select all

<?php
header('Content-Type: text/html; charset=utf-8');

$fname_REQUEST = $_REQUEST['fname'];		//$_REQUEST เป็นการส่งค่าทั้งสองแบบ $_GET หรือ $_POST ก็ได้
$pass_REQUEST = $_REQUEST['pass'];
$sex_REQUEST = $_REQUEST['sex'];



echo '<div style="font-size:14px">';

echo '--------------------------------------------------------------------';
echo '<pre>';
echo '<b>แสดงค่าตัวแปร fname</b>', "\n";
echo '[\'fname\'] = ', $fname_GET, "\n";			//ทำการ echo แสดงข้อมูล หลังจากส่งค่า แบบ $_REQUEST ไป
echo '</pre>';
echo '--------------------------------------------------------------------';

echo '--------------------------------------------------------------------';
echo '<pre>';
echo '<b>แสดงค่าตัวแปร pass</b>', "\n";
echo '[\'pass\'] = ', $pass_GET, "\n";
echo '</pre>';
echo '--------------------------------------------------------------------';

echo '--------------------------------------------------------------------';
echo '<pre>';
echo '<b>แสดงค่าตัวแปร sex</b>', "\n";
echo '[\'pass\'] = ', $sex_GET, "\n";
echo '</pre>';
echo '--------------------------------------------------------------------';
echo '</div>';
?>
ผลลัพธ์ที่ได้
ในรูปแบบการส่งค่าของ $_REQUEST ที่แสดงผลลัพธ์ให้เห็น , มีการส่งค่าไปในทั้ง 2 แบบบ $_GET และ $_POST
14-Request.JPG
14-Request.JPG (17.94 KiB) Viewed 67 times
14.JPG
14.JPG (31.36 KiB) Viewed 67 times



ข้อสรุปผล
ในการส่งค่ามาจาก Form นั้น ควรต้องระมัดระวังในการส่งค่ามาอย่างยิ่ง , เรามีจุดประสงค์ความต้องการ ในการส่งค่ามาในรูปแบบไหนกัน , ต้องการให้คนอื่นเห็นในที่สาธารณะหรือไหม หรือ ไม่ต้องการเปิดเผยข้อมูล , หากต้องการศึกษาข้อมูลเพิ่มเติม ที่จะช่วยให้เข้ามากยิ่งขึ้น สามารถศึกษาได้ที่จาก บทเรียน PHP เพื่อเพิ่มเติมเข้าใจในส่วนต่างๆ

แหล่งข้อมูลอ้างอิง
$_GET : https://www.w3schools.com/php/php_superglobals_get.asp
$_POST : https://www.w3schools.com/php/php_superglobals_post.asp
$_REQUEST : https://www.w3schools.com/php/php_superglobals_request.asp
Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “PHP Knowledge”

Who is online

Users browsing this forum: No registered users and 10 guests