แบบฟอร์มส่งข้อมูลด้วย PHP (POST, GET) แบบฟอร์ม HTML วิธีการส่งข้อมูลไปยังเซิร์ฟเวอร์โดยใช้แบบฟอร์ม

การใช้วิธี GET และ POST ใน PHP เป็นเรื่องยากที่จะประเมินค่าสูงไป เนื่องจากวิธีการเหล่านี้พบได้ในเกือบทุกเว็บไซต์ ก่อนที่จะศึกษาเนื้อหาที่อธิบายไว้ด้านล่าง ฉันขอแนะนำให้คุณทำความคุ้นเคยกับแท็ก html

- มาดูรายละเอียดแต่ละวิธีเหล่านี้กัน

วิธีการรับ

วิธีการ GET ใช้สตริง URL เพื่อถ่ายโอนข้อมูล คุณอาจสังเกตเห็น URL ที่ยาวและไม่ชัดเจน ตัวอย่างเช่น: function.php?login=Alex&email=dezyakin- ในกรณีนี้ ข้อมูลจะถูกประมวลผลใน function.php หลังเครื่องหมายคำถาม "?" จะมีรายการพารามิเตอร์ที่ส่งผ่าน (พารามิเตอร์ถูกคั่นด้วย "&") พร้อมด้วยค่า: พารามิเตอร์การเข้าสู่ระบบถูกกำหนดให้เป็นค่า Alex และตัวแปรอีเมลถูกกำหนดให้เป็นค่า dezyakin ข้อมูลจะถูกจัดเก็บไว้ในอาร์เรย์ซูเปอร์โกลบอล $_GET ตัวอย่างของการใช้วิธี GET แสดงไว้ด้านล่าง:

เข้าสู่ระบบ: อีเมล: การใช้อาร์เรย์ superglobal $_GET เราจะแสดงค่าที่ยอมรับได้:*/เอคโค่ "
เข้าสู่ระบบ = ". $_GET["เข้าสู่ระบบ"] ; echo "
อีเมล = ". $_GET["อีเมล"] ; ?>

สังเกตว่าเราอ่านค่าจาก $_GET superglobal array ได้อย่างไร: $_GET["ตัวแปร_ชื่อ"]- ในตัวอย่างของเรา ชื่อตัวแปรถูกประกาศในรูปแบบ (name=login และ name=email)

คำแนะนำ:
ก่อนที่จะประมวลผลค่าที่ได้รับ ฉันแนะนำให้คุณตรวจสอบการมีอยู่ของค่าเหล่านั้นผ่านฟังก์ชันต่างๆ isset(ชื่อตัวแปร)หรือ ว่างเปล่า (ชื่อตัวแปร)- ฟังก์ชั่นเหล่านี้ถูกกล่าวถึงในบทที่ 2 ก่อนหน้า: ตัวแปรใน PHP ตัวอย่างเช่น:

ตรวจสอบการมีอยู่โดยใช้ isset:ถ้า isset ($_GET["เข้าสู่ระบบ"] ) ( ตัวดำเนินการสำหรับการประมวลผลการเข้าสู่ระบบ ... } //หรือตรวจสอบการมีอยู่โดยใช้ว่าง:ถ้าว่างเปล่า ($_GET["email"] ) ( โอเปอเรเตอร์สำหรับการประมวลผลอีเมล ... } ?>

ในแบบฟอร์ม คุณสามารถระบุชื่อไฟล์ที่จะประมวลผลค่าที่ถ่ายโอนได้ ทำได้โดยใช้แอตทริบิวต์การกระทำของแบบฟอร์ม ซึ่งสามารถกำหนดที่อยู่ของไฟล์นี้ได้ ตามค่าเริ่มต้น ไฟล์นี้ถูกกำหนดให้กับไฟล์ปัจจุบัน (นั่นคือ จะถูกประมวลผลในไฟล์ที่มีแบบฟอร์มอยู่) นี่คือตัวอย่างที่ข้อมูลจากแบบฟอร์มถูกถ่ายโอนไปยังไฟล์ sccipt.php เพื่อการประมวลผล:

เข้าสู่ระบบ: อีเมล:

ไฟล์ script.php ต้องมีตัวจัดการข้อมูลบางประเภท ไม่เช่นนั้นข้อมูลจะถูกส่งว่างเปล่า

วิธีการ GET มีข้อเสียหลายประการ:

  • ผู้ใช้เห็นค่าของพารามิเตอร์ที่ส่งผ่าน
  • ผู้ใช้สามารถปลอมแปลงพารามิเตอร์ที่ส่งผ่านได้อย่างง่ายดาย
  • การส่งข้อมูลไบนารี่ไม่สะดวก (คุณต้องเข้ารหัสเป็นรูปแบบข้อความ)
  • ปริมาณข้อมูลที่ถ่ายโอนมีจำกัด - 8 KB;

เนื่องจากข้อเสียข้างต้น วิธี GET จึงใช้เฉพาะในกรณีที่จำเป็นต้องถ่ายโอนข้อมูลจำนวนเล็กน้อย และข้อมูลนี้ไม่ได้จัดประเภทในทางใดทางหนึ่ง

วิธีการโพสต์

วิธี POST แตกต่างจาก GET ตรงที่ข้อมูลจะถูกถ่ายโอนในรูปแบบส่วนตัว มีอาร์เรย์ superglobal $_POST ซึ่งสามารถอ่านข้อมูลได้ดังนี้: $_POST["ตัวแปร_ชื่อ"]- ตัวอย่างเช่น:

เข้าสู่ระบบ: "> อีเมล์: ">
การใช้อาร์เรย์ superglobal $_POST เราจะแสดงค่าที่ยอมรับได้:*/เอคโค่ "
เข้าสู่ระบบ = ". $_POST["เข้าสู่ระบบ"] ; echo "
อีเมล = ". $_POST["อีเมล"] ; ?>

ผลลัพธ์ของการรันโค้ดข้างต้นจะแสดงในรูปด้านล่าง:

อย่างที่คุณเห็น URL ไม่มีคำลงท้าย แต่ยังคงได้รับและแสดงข้อมูล

บันทึก:
1) ปริมาณของค่าที่ส่งโดยใช้วิธี POST ถูกจำกัดโดยค่าเริ่มต้นและเท่ากับ 8 MB ในการเพิ่มค่านี้ คุณต้องเปลี่ยนคำสั่ง post_max_size ใน php.ini

2) ใน PHP เวอร์ชันก่อนหน้า แทนที่จะใช้ชื่ออาร์เรย์ superglobal แบบสั้น $_GET และ $_POST กลับใช้ชื่อที่ยาวกว่า: $HTTP_GET_VARS และ $HTTP_POST_VARS ตามค่าเริ่มต้นจะถูกปิดใช้งานใน PHP 5 แต่คุณสามารถเปิดใช้งานได้ในไฟล์กำหนดค่า php.ini โดยใช้พารามิเตอร์ register_long_arrays ในเวอร์ชัน php 6 ชื่อยาวเหล่านี้จะไม่สามารถใช้ได้

3) ก่อนที่จะประมวลผลตัวแปรจาก $_POST ฉันแนะนำให้คุณตรวจสอบตัวแปรว่ามีตัวแปรอยู่หรือไม่ เช่นเดียวกับที่ทำกับเมธอด GET

แบบฟอร์ม HTML อาร์เรย์ $_POST และ $_GET

แบบฟอร์ม HTML วิธีการส่งข้อมูลไปยังเซิร์ฟเวอร์

คุณอาจเคยพบรูปแบบ HTML แล้ว:

ใส่ชื่อของคุณ:

เมื่อบันทึกโค้ดนี้ในไฟล์ HTML และดูโดยใช้เบราว์เซอร์ที่คุณชื่นชอบ คุณจะเห็นรูปแบบ HTML ที่คุ้นเคย:

ใส่ชื่อของคุณ:

แท็ก

โดยมีแท็กปิดท้ายที่จับคู่กัน
กำหนดรูปแบบจริงๆ คุณลักษณะของมันคือทั้งทางเลือก:

  • การดำเนินการ - ระบุ URL (แบบเต็มหรือแบบสัมพันธ์) ที่จะส่งแบบฟอร์มไป
  • หากไม่ได้ระบุแอตทริบิวต์นี้ เบราว์เซอร์ส่วนใหญ่ (หรืออย่างแม่นยำยิ่งขึ้นคือเบราว์เซอร์ทั้งหมดที่ฉันรู้จัก) จะส่งแบบฟอร์มไปยังเอกสารปัจจุบัน ซึ่งก็คือ "ถึงตัวมันเอง" นี่เป็นชวเลขที่สะดวก แต่ตามมาตรฐาน HTML จำเป็นต้องมีแอ็ตทริบิวต์ action
    • method - วิธีการส่งแบบฟอร์ม มีสองคน
      GET - การส่งข้อมูลแบบฟอร์มในแถบที่อยู่ ) และ "value" คือเนื้อหาของแอตทริบิวต์ value (เช่น มีการป้อนข้อมูลของผู้ใช้ลงในช่องข้อความของแท็กเดียวกัน ).
      ตัวอย่างเช่น ลองค้นหาบางอย่างใน Yandex และให้ความสนใจกับแถบที่อยู่ของเบราว์เซอร์ของคุณ
    • นี่คือวิธี GET
    POST - ข้อมูลแบบฟอร์มจะถูกส่งไปในส่วนเนื้อหาของคำขอ หากยังไม่ชัดเจนทั้งหมด (หรือไม่ชัดเจนโดยสิ้นเชิง) ว่านี่คืออะไร ไม่ต้องกังวล เราจะกลับมาที่ปัญหานี้อีกครั้งเร็วๆ นี้

แท็ก หากไม่ได้ระบุแอตทริบิวต์ของวิธีการ GET จะถือว่า

  • - ระบุองค์ประกอบแบบฟอร์มที่กำหนดโดยแอตทริบิวต์ประเภท:
  • ค่า "ข้อความ" ระบุช่องป้อนข้อความบรรทัดเดียว

ค่า "ส่ง" ระบุปุ่มที่เมื่อคลิกแล้วจะส่งแบบฟอร์มไปยังเซิร์ฟเวอร์ ค่าอื่น ๆ ที่เป็นไปได้ (และ

- ไม่ใช่แท็กเดียวที่ระบุองค์ประกอบแบบฟอร์ม)

  1. แล้วจะเกิดอะไรขึ้นเมื่อเราคลิก "ตกลง"?
  2. เบราว์เซอร์จะดูองค์ประกอบที่รวมอยู่ในแบบฟอร์มและสร้างข้อมูลแบบฟอร์มจากแอตทริบิวต์ชื่อและค่า
    สมมติว่ามีการป้อนชื่อวาสยา ในกรณีนี้ ข้อมูลแบบฟอร์มคือ name=Vasya&okbutton=OK
  3. เบราว์เซอร์สร้างการเชื่อมต่อกับเซิร์ฟเวอร์ส่งคำขอเอกสารที่ระบุในแอตทริบิวต์การกระทำของแท็กไปยังเซิร์ฟเวอร์
  4. โดยใช้วิธีการส่งข้อมูลที่ระบุในแอตทริบิวต์ method (ในกรณีนี้ - GET) โดยส่งข้อมูลแบบฟอร์มในคำขอ

เซิร์ฟเวอร์วิเคราะห์คำขอที่ได้รับ สร้างการตอบกลับ ส่งไปยังเบราว์เซอร์ และปิดการเชื่อมต่อ

เบราว์เซอร์แสดงเอกสารที่ได้รับจากเซิร์ฟเวอร์

การส่งคำขอเดียวกันด้วยตนเอง (โดยใช้ telnet) จะมีลักษณะดังนี้ (สมมติว่าชื่อโดเมนของไซต์คือ www.example.com):

Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n โฮสต์: www.example.com\r\n \r\n

ดังที่คุณคงเดาได้อยู่แล้ว การคลิกปุ่มส่งบนแบบฟอร์มด้วยวิธีการส่ง "GET" จะเหมือนกับการพิมพ์ URL ที่เกี่ยวข้อง (พร้อมเครื่องหมายคำถามและข้อมูลแบบฟอร์มที่ส่วนท้าย) ลงในแถบที่อยู่ของเบราว์เซอร์: Http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK

ในความเป็นจริง วิธีการ GET จะใช้เมื่อใดก็ตามที่คุณขอเอกสารจากเซิร์ฟเวอร์โดยเพียงแค่ป้อน URL หรือคลิกที่ลิงก์ เมื่อใช้

ตอนนี้เรามาแทนที่บรรทัดแรกของแบบฟอร์มของเราด้วยสิ่งต่อไปนี้:

เราระบุวิธีการส่งเป็น "POST" ในกรณีนี้ ข้อมูลจะถูกส่งไปยังเซิร์ฟเวอร์ด้วยวิธีที่แตกต่างออกไปเล็กน้อย:

Telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n โฮสต์: www.example.com\r\n ประเภทเนื้อหา: application/x-www-form-urlencoded\r\ n ความยาวเนื้อหา: 41263\r\n \r\n name=Vasya&okbutton=OK

เมื่อใช้วิธีการ POST ข้อมูลแบบฟอร์มจะถูกส่งหลังจาก "ป้อนสองครั้ง" - ในเนื้อหาของคำขอ ทุกอย่างข้างต้นเป็นส่วนหัวของคำขอจริงๆ (และเมื่อเราใช้วิธีการ GET ข้อมูลแบบฟอร์มจะถูกส่งไปในส่วนหัว) เพื่อให้เซิร์ฟเวอร์ทราบว่าไบต์ใดที่จะหยุดอ่านเนื้อหาคำขอ ส่วนหัวจะมีบรรทัด Content-Length; ว่าข้อมูลแบบฟอร์มจะถูกส่งในรูปแบบ parameter1=value1¶meter2=value2... และค่าจะถูกส่งในรูปแบบของ urlencode - นั่นคือเหมือนกับการใช้วิธี GET ทุกประการ แต่อยู่ในเนื้อความของ คำขอ - ส่วนหัวของเนื้อหาแจ้งให้เซิร์ฟเวอร์ทราบ -Type: application/x-www-form-urlencoded

ข้อดีของวิธี POST คือไม่มีการจำกัดความยาวของบรรทัดข้อมูลของฟอร์ม

เมื่อใช้วิธีการ POST คุณจะไม่สามารถส่งแบบฟอร์มโดยเพียงแค่ "ตามลิงก์" เช่นเดียวกับที่คุณทำกับ GET

เมื่อใช้แบบฟอร์ม POST คุณสามารถระบุพารามิเตอร์ของแบบฟอร์ม GET หลังเครื่องหมายคำถามได้ในแอตทริบิวต์การดำเนินการ ดังนั้นวิธี POST จึงรวมวิธี GET ไว้ด้วย

อาร์เรย์ $_GET และ $_POST

ดังนั้นแบบฟอร์มจึงเป็นวิธีหลักในการแลกเปลี่ยนข้อมูลระหว่างเว็บเซิร์ฟเวอร์และเบราว์เซอร์นั่นคือให้การโต้ตอบกับผู้ใช้ - อันที่จริงแล้วการเขียนโปรแกรมเว็บมีไว้เพื่ออะไร

ลองดูตัวอย่างง่ายๆ:



ถ้า ($_SERVER [ "REQUEST_METHOD" ] == "POST" ) (
เสียงสะท้อน "

สวัสดี, " . $_POST [ "ชื่อ" ] . "

!" ;
}
?>
">
ใส่ชื่อของคุณ:






แบบฟอร์มที่แสดงในบรรทัดที่ 8-12 มีสององค์ประกอบ: ชื่อ และ okbutton แอตทริบิวต์ method ระบุวิธีการส่งแบบฟอร์ม POST ในขณะที่แอตทริบิวต์ action ระบุ URL ที่ส่งแบบฟอร์มไป และเต็มไปด้วยค่าของตัวแปรเซิร์ฟเวอร์ PHP_SELF ซึ่งเป็นที่อยู่ของสคริปต์ที่กำลังทำงานอยู่ในปัจจุบัน

- แบบฟอร์มย่อสำหรับ .

สมมติว่าเราป้อนค่า Vasya ในช่องชื่อแล้วคลิกปุ่มตกลง ในกรณีนี้ เบราว์เซอร์จะส่งคำขอ POST ไปยังเซิร์ฟเวอร์ เนื้อหาคำขอ: name=Vasya&okbutton=OK PHP เติมอาร์เรย์ $_POST โดยอัตโนมัติ:

$_POST ["ชื่อ" ] = "วาสยา"
$_POST ["ปุ่มตกลง" ] = "ตกลง"

ในความเป็นจริง ค่า "Vasya" จะถูกส่งโดยเบราว์เซอร์ในรูปแบบ urlencode สำหรับการเข้ารหัส windows-1251 ค่านี้ดูเหมือน %C2%E0%F1%FF แต่เนื่องจาก PHP จัดการการถอดรหัสที่จำเป็นโดยอัตโนมัติ เราจึงสามารถ "ลืม" เกี่ยวกับคุณสมบัตินี้ได้ - จนกว่าเราจะต้องจัดการกับคำขอ HTTP ด้วยตนเอง

เนื่องจากเนื้อความของคำขอระบุเฉพาะชื่อและค่า แต่ไม่ใช่ประเภทองค์ประกอบของฟอร์ม PHP จึงไม่ทราบว่า $_POST["name"] ตรงกับสตริงอินพุต ปุ่ม หรือกล่องรายการ แต่โดยทั่วไปแล้วเราไม่ต้องการข้อมูลนี้เลย -

เนื่องจากเราไม่จำเป็นต้องรู้ว่าปุ่มส่งพูดว่าอะไร เราจึงสามารถลบแอตทริบิวต์ name ในบรรทัดที่ 11 ออกได้ โดยย่อคำอธิบายของปุ่มให้สั้นลง - ในกรณีนี้ เบราว์เซอร์จะส่งคำขอ POST name=Vasya

และตอนนี้ก็เหมือนกัน แต่สำหรับแบบฟอร์ม GET:



ถ้า (isset($_GET [ "ชื่อ" ])) (
เสียงสะท้อน "

สวัสดี, " . $_GET [ "ชื่อ" ] . "

!" ;
}
?>
">
ใส่ชื่อของคุณ:







ในบรรทัดที่ 8 เราสามารถเขียนได้อย่างง่ายดายเช่นกัน

: GET เป็นวิธีการเริ่มต้น คราวนี้เบราว์เซอร์ส่งคำขอ GET ซึ่งเทียบเท่ากับการป้อนที่อยู่ในแถบที่อยู่: http://site-address/script-name.php?name=Vasya

PHP ทำเช่นเดียวกันกับแบบฟอร์ม GET เช่นเดียวกับที่ทำกับ POST โดยมีความแตกต่างตรงที่อาร์เรย์ $_GET ถูกเติมเข้าไป

ความแตกต่างที่สำคัญอยู่ในบรรทัดที่ 4 เนื่องจากเพียงป้อนที่อยู่ในบรรทัดเบราว์เซอร์ก็เป็นคำขอ GET การตรวจสอบว่า ($_SERVER["REQUEST_METHOD"] == "GET") นั้นไม่มีความหมายหรือไม่ ดังนั้นเราจึงใช้โครงสร้าง isset() ซึ่งจะคืนค่าเป็นจริงหากมีการกำหนดตัวแปรไว้ (นั่นคือ กำหนดค่าไว้แล้ว) และคืนค่าเป็นเท็จหากไม่ได้กำหนดตัวแปรไว้ หากกรอกแบบฟอร์มแล้ว - ตามที่คุณเข้าใจแล้ว PHP จะกำหนดค่าที่เหมาะสมให้ $_GET["name"] โดยอัตโนมัติ

วิธีการตรวจสอบโดยใช้ isset() เป็นแบบสากล นอกจากนี้ยังสามารถใช้กับแบบฟอร์ม POST ได้ด้วย ยิ่งไปกว่านั้น วิธีนี้เหมาะกว่าเพราะช่วยให้คุณทราบว่ากรอกแบบฟอร์มใดในช่องใด

ตัวอย่างที่ซับซ้อนกว่าเล็กน้อย




echo "กรุณากรอกชื่อ!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
เสียงสะท้อน
"
;
) อื่น (

" ;

สะท้อน "ถึงคุณ" $อายุ " ปี
" ;
}
เสียงสะท้อน "


" ;
}
?>
">
ใส่ชื่อของคุณ:


กรอกปีเกิดของคุณ:







ไม่มีการใช้เทคนิคใหม่ที่นี่ คิดออก รันโค้ด ลองแก้ไข...

เรามาเปลี่ยนตัวอย่างสุดท้ายเพื่อให้ผู้ใช้ไม่ต้องกรอกข้อมูลในฟิลด์อีกครั้ง ในการดำเนินการนี้ให้กรอกแอตทริบิวต์ค่าขององค์ประกอบแบบฟอร์มด้วยค่าที่เราเพิ่งป้อน



$name = isset($_POST [ "ชื่อ" ]) ? $_POST [ "ชื่อ" ] : "" ;
$ปี = isset($_POST [ "ปี" ]) ? $_POST [ "ปี" ] : "" ;

ถ้า (isset($_POST [ "ชื่อ" ], $_POST [ "ปี" ])) (
ถ้า ($_POST [ "ชื่อ" ] == "" ) (
echo "กรุณากรอกชื่อ!
" ;
) อื่น ๆ ถ้า ($_POST [ "ปี" ]< 1900 || $_POST [ "year" ] > 2004 ) {
เสียงสะท้อน "กรุณาระบุปีเกิด! ช่วงค่าที่ถูกต้อง: 1900..2004
"
;
) อื่น (
ก้อง "สวัสดี" . $_POST [ "ชื่อ" ] . -
" ;
$อายุ = 2004 - $_POST [ "ปี" ];
สะท้อน "ถึงคุณ" $อายุ " ปี
" ;
}
เสียงสะท้อน "


" ;
}
?>
">
ใส่ชื่อของคุณ:


กรอกปีเกิดของคุณ:







บรรทัดที่ 4 และ 5 อาจจะค่อนข้างสับสน ทุกอย่างง่ายมาก: บรรทัดที่ 4 สามารถเขียนได้ดังนี้:

ถ้า (isset($_POST [ "ชื่อ" ]))
$name = $_POST ["ชื่อ" ];
อื่น
$ชื่อ = "" ;

คำถามอาจเกิดขึ้น - ทำไมไม่โยนบรรทัด 4-5 ออกแล้วเขียน:

ใส่ชื่อของคุณ: ">

กรอกปีเกิดของคุณ: ">

ประเด็นก็คือหากไม่ได้กำหนดตัวแปร POST เหล่านี้ - และจะเป็นกรณีนี้หากยังไม่ได้กรอกแบบฟอร์ม - PHP จะออกคำเตือนเกี่ยวกับการใช้ตัวแปรที่ไม่ได้เตรียมใช้งาน (และค่อนข้างสมเหตุสมผล: ข้อความดังกล่าวช่วยให้คุณได้อย่างรวดเร็ว ค้นหาการพิมพ์ผิดที่ยากต่อการตรวจจับในชื่อตัวแปร และยังเตือนเกี่ยวกับ "ช่องโหว่" บนไซต์ด้วย) แน่นอนคุณสามารถใส่รหัส isset ลงในแบบฟอร์มได้โดยตรง แต่จะยุ่งยากเกินไป

เข้าใจแล้ว? ตอนนี้พยายามค้นหาข้อผิดพลาดในรหัสที่กำหนด ไม่ใช่ข้อผิดพลาด แต่เป็นข้อบกพร่อง

htmlอักขระพิเศษ()

ไม่พบมันเหรอ? ฉันจะให้คำแนะนำแก่คุณ ตัวอย่างเช่นป้อนเครื่องหมายคำพูดคู่และข้อความเช่น "Va" ในช่อง "ชื่อ" ส่งแบบฟอร์มและดูซอร์สโค้ดของหน้าที่เป็นผล บรรทัดที่สี่จะมีลักษณะดังนี้:

ใส่ชื่อของคุณ:

นั่นคือไม่มีอะไรดีเลย จะเกิดอะไรขึ้นถ้าผู้ใช้ที่มีไหวพริบป้อนโค้ด JavaScript?

ในการแก้ปัญหานี้ คุณต้องใช้ฟังก์ชัน htmlspecialchars() ซึ่งจะแทนที่อักขระพิเศษด้วยการแสดง HTML (เช่น เครื่องหมายคำพูดด้วย "):



$name = isset($_POST [ "ชื่อ" ]) ? htmlอักขระพิเศษ ($_POST [ "ชื่อ" ]) : "" ;
$ปี = isset($_POST [ "ปี" ]) ? htmlอักขระพิเศษ ($_POST [ "ปี" ]) : "" ;

ถ้า (isset($_POST [ "ชื่อ" ], $_POST [ "ปี" ])) (
ถ้า ($_POST [ "ชื่อ" ] == "" ) (
echo "กรุณากรอกชื่อ!
" ;
) อื่น ๆ ถ้า ($_POST [ "ปี" ]< 1900 || $_POST [ "year" ] > 2004 ) {
เสียงสะท้อน "กรุณาระบุปีเกิด! ช่วงค่าที่ถูกต้อง: 1900..2004
"
;
) อื่น (
ก้อง "สวัสดี" . $ ชื่อ . -
" ;
$อายุ = 2004 - $_POST [ "ปี" ];
สะท้อน "ถึงคุณ" $อายุ " ปี
" ;
}
เสียงสะท้อน "


" ;
}
?>
">
ใส่ชื่อของคุณ:


กรอกปีเกิดของคุณ:







ทำการทดสอบซ้ำและตรวจสอบให้แน่ใจว่าโค้ด HTML ถูกต้องแล้ว

ข้อควรจำ - ต้องใช้ฟังก์ชัน htmlspecialchars() ทุกครั้งที่แสดงเนื้อหาของตัวแปรที่อาจมีอักขระพิเศษ HTML

phpinfo()

ฟังก์ชัน phpinfo() เป็นหนึ่งในฟังก์ชันที่สำคัญที่สุดใน PHP แสดงข้อมูลเกี่ยวกับการตั้งค่า PHP ค่าของตัวแปรการกำหนดค่าต่างๆ...

เหตุใดฉันจึงพูดถึงมันในบทความเกี่ยวกับแบบฟอร์ม? phpinfo() เป็นเครื่องมือแก้ไขจุดบกพร่องที่สะดวก phpinfo() พิมพ์ค่าของตัวแปร $_GET, $_POST และ $_SERVER ทั้งหมด ดังนั้นหากตัวแปรฟอร์มสูญหาย วิธีที่ง่ายที่สุดในการค้นหาว่ามีอะไรผิดปกติคือการใช้ฟังก์ชัน phpinfo() เพื่อให้แน่ใจว่าฟังก์ชันแสดงเฉพาะค่าของตัวแปร (และโดยที่คุณไม่ต้องเลื่อนดูหลายสิบหน้า) ควรเรียกดังนี้: phpinfo(INFO_VARIABLES); หรือ - ซึ่งเป็นสิ่งเดียวกันอย่างแน่นอน - phpinfo(32) ;.



">
ใส่ชื่อของคุณ:


phpinfo(32);
?>



หรือตัวอย่างเช่น สถานการณ์นี้: คุณต้องการค้นหาที่อยู่ IP ของผู้เข้าชม คุณจำได้ว่าตัวแปรที่เกี่ยวข้องถูกเก็บไว้ในอาร์เรย์ $_SERVER แต่ - โชคร้าย - คุณลืมว่าตัวแปรนั้นเรียกว่าอะไร อีกครั้ง โทร phpinfo(32); ให้มองหาที่อยู่ IP ของคุณในเครื่องหมายและค้นหาในบรรทัด $_SERVER["REMOTE_ADDR"]

งานห้องปฏิบัติการ 1. โปรโตคอล HTTP วิธีการ GET, POST แบบฟอร์ม HTML

ส่วนทางทฤษฎี

วงจรการร้องขอ HTTP

  1. เบราว์เซอร์ เปิดการเชื่อมต่อกับเซิร์ฟเวอร์
  2. เบราว์เซอร์ส่งคำขอไปยังเซิร์ฟเวอร์เพื่อรับเพจ
  3. เซิร์ฟเวอร์สร้างการตอบกลับ (ส่วนใหญ่มักจะเป็นโค้ด HTML) ไปยังเบราว์เซอร์และ ปิดการเชื่อมต่อ
  4. เบราว์เซอร์ประมวลผลโค้ด HTML และแสดงเพจ

ให้ความสนใจกับไฮไลท์ ตัวหนา- ก่อนที่คุณจะเห็นหน้าที่ร้องขอบนหน้าจอ การเชื่อมต่อกับเซิร์ฟเวอร์จะถูกปิดและเซิร์ฟเวอร์จะลืมคุณไปแล้ว และเมื่อคุณป้อนที่อยู่อื่น (หรือที่อยู่เดียวกัน) หรือคลิกที่ลิงก์ หรือคลิกที่ปุ่มแบบฟอร์ม HTML รูปแบบเดียวกันจะเกิดซ้ำอีกครั้ง

งานประเภทนี้เรียกว่า "ไคลเอนต์เซิร์ฟเวอร์"- ลูกค้าในกรณีนี้คือเบราว์เซอร์

ดังนั้นการเชื่อมต่อกับเว็บเซิร์ฟเวอร์จะใช้เวลาเพียงไม่กี่วินาที (หรือเศษส่วนของวินาที) ซึ่งเป็นช่วงเวลาระหว่างการคลิกลิงก์ (หรือคำขอประเภทอื่น) และหน้าที่เริ่มแสดง เบราว์เซอร์ส่วนใหญ่แสดงตัวบ่งชี้บางประเภทระหว่างการเชื่อมต่อ เช่น MS Internet Explorer จะแสดงภาพเคลื่อนไหวที่มุมขวาบน

หากต้องการกำจัดการรับรู้ HTTP ว่าเป็น "กล่องดำ" ไปตลอดกาล ให้ "แกล้งทำเป็น" ว่าเป็นเบราว์เซอร์ที่ใช้ telnet:

  1. เปิดตัวกันเลย เทลเน็ต ya.ru 80
  2. มาป้อนข้อมูลต่อไปนี้ในหน้าต่างเทอร์มินัล (หากอินพุตไม่ปรากฏขึ้นก็ไม่เป็นไร):

รับ / HTTP/1.0[กด Enter ที่นี่]
ผู้ดำเนินรายการ: ya.ru[ที่นี่กด Enter สองครั้ง]

การกด Enter มักจะสอดคล้องกับการรวมกันของอักขระ CR + LF ซึ่งแสดงว่าเป็น \ร\n- สัญกรณ์นี้จะถูกนำมาใช้ด้านล่าง

รหัส HTML ของหน้า http://ya.ru/ จะทำงานทั่วทั้งหน้าจอ อย่างที่คุณเห็นไม่มีอะไรซับซ้อน

ซอร์สโค้ดของหน้าปัจจุบันสามารถดูได้ในเกือบทุกเบราว์เซอร์โดยเลือก "ดู|แหล่งที่มา" จากเมนู

รูปภาพ เฟรม - ทั้งหมดนี้เป็นคำขอเพิ่มเติมเหมือนกันทุกประการ จริงๆ แล้ว รูปภาพเหล่านี้มาจากไหนในหน้าต่างเบราว์เซอร์: เมื่อแยกวิเคราะห์ (ประมวลผล) โค้ด HTML เบราว์เซอร์จะเจอแท็ก https://i2.wp.com/ รูปภาพ"> ส่งคำขอเพิ่มเติมไปยังเซิร์ฟเวอร์ - คำขอ รูปภาพและแสดงในตำแหน่งที่แท็กอยู่ .



พยายาม:

เทลเน็ต www.google.ru 80

รับ /php/php5ru.png HTTP/1.0\ร\n
ผู้ดำเนินรายการ: ya.ru\r\n\r\n

สิ่งที่คุณจะเห็นหากคุณดูไฟล์ PNG นี้ในโปรแกรมแก้ไขข้อความจะกะพริบไปทั่วหน้าจอ

ไอ-2. แบบฟอร์ม HTML วิธีการส่งข้อมูลไปยังเซิร์ฟเวอร์

คุณอาจเคยพบรูปแบบ HTML แล้ว:

  1. ใส่ชื่อของคุณ:

เมื่อบันทึกโค้ดนี้ในไฟล์ HTML และดูโดยใช้เบราว์เซอร์ที่คุณชื่นชอบ คุณจะเห็นรูปแบบ HTML ที่คุ้นเคย:

ใส่ชื่อของคุณ:

มาดูแท็กที่ใช้ในตัวอย่างสั้นๆ นี้กันดีกว่า

แท็ก

โดยมีแท็กปิดท้ายที่จับคู่กัน
กำหนดรูปแบบจริงๆ คุณลักษณะของมันคือทั้งทางเลือก:

  • การกระทำ- ระบุ URL (เต็มหรือสัมพันธ์) ที่ ส่งแล้วรูปร่าง. การส่งแบบฟอร์มเป็นคำขอเดียวกันกับเซิร์ฟเวอร์เหมือนกับคำขออื่นๆ ทั้งหมด (ตามที่ฉันได้อธิบายไว้ข้างต้น)

หากไม่ได้ระบุแอตทริบิวต์นี้ เบราว์เซอร์ส่วนใหญ่ (หรืออย่างแม่นยำยิ่งขึ้นคือเบราว์เซอร์ทั้งหมดที่ฉันรู้จัก) จะส่งแบบฟอร์มไปยังเอกสารปัจจุบัน ซึ่งก็คือ "ถึงตัวมันเอง" นี่เป็นชวเลขที่สะดวก แต่ตามมาตรฐาน HTML จำเป็นต้องมีแอ็ตทริบิวต์ action

  • วิธี - ทาง กำลังส่งแบบฟอร์ม มีสองคน
    • รับ- ส่งข้อมูลแบบฟอร์มในแถบที่อยู่
      คุณอาจสังเกตเห็นว่ามี "?" อยู่ท้าย URL ในเว็บไซต์ต่างๆ และข้อมูลในรูปแบบต่อไปนี้ พารามิเตอร์=ค่า- ที่นี่ "พารามิเตอร์" สอดคล้องกับ ความหมายคุณลักษณะ ชื่อองค์ประกอบแบบฟอร์ม (ดูด้านล่างเกี่ยวกับแท็ก ) และ "value" - เนื้อหาของแอตทริบิวต์ ค่า(ประกอบด้วย เช่น การป้อนข้อมูลของผู้ใช้ลงในช่องข้อความของแท็กเดียวกัน ).
      ตัวอย่างเช่น ลองค้นหาบางอย่างใน Yandex และให้ความสนใจกับแถบที่อยู่ของเบราว์เซอร์ของคุณ นี่คือวิธี GET
    • โพสต์- ข้อมูลแบบฟอร์มถูกส่งไปที่ ขอร่างกาย- หากยังไม่ชัดเจนทั้งหมด (หรือไม่ชัดเจนโดยสิ้นเชิง) ว่านี่คืออะไร ไม่ต้องกังวล เราจะกลับมาที่ปัญหานี้อีกครั้งเร็วๆ นี้

ถ้าแอตทริบิวต์ วิธีไม่ได้ระบุ - "GET" มีความหมายโดยนัย

แท็ก - ชุด องค์ประกอบแบบฟอร์มกำหนดโดยแอตทริบิวต์ พิมพ์ :

  • ความหมาย "ข้อความ"ระบุช่องป้อนข้อความบรรทัดเดียว
  • ความหมาย "ส่ง"ระบุปุ่มที่เมื่อกดแล้วจะทำให้เกิด กำลังส่งแบบฟอร์มไปยังเซิร์ฟเวอร์

ค่า "ส่ง" ระบุปุ่มที่เมื่อคลิกแล้วจะส่งแบบฟอร์มไปยังเซิร์ฟเวอร์ - ไม่ใช่แท็กเดียวที่กำหนดองค์ประกอบแบบฟอร์ม) แต่เราจะดูแท็กเหล่านั้นในบทต่อไปนี้

- ไม่ใช่แท็กเดียวที่ระบุองค์ประกอบแบบฟอร์ม)

  1. เบราว์เซอร์จะดูองค์ประกอบที่รวมอยู่ในแบบฟอร์มและสร้างแอตทริบิวต์ชื่อและค่าจากองค์ประกอบเหล่านั้น ข้อมูลแบบฟอร์ม- สมมติว่ามีการป้อนชื่อ วาสยา- ในกรณีนี้ข้อมูลแบบฟอร์มคือ name=วาสยา&okbutton=ตกลง
  2. เบราว์เซอร์สร้างการเชื่อมต่อกับเซิร์ฟเวอร์ส่งคำขอไปยังเซิร์ฟเวอร์สำหรับเอกสารที่ระบุในแอตทริบิวต์ การกระทำแท็ก
    โดยใช้วิธีการส่งข้อมูลที่ระบุในแอตทริบิวต์ วิธี(ในกรณีนี้ - GET) ส่งข้อมูลแบบฟอร์มในคำขอ
  3. เบราว์เซอร์สร้างการเชื่อมต่อกับเซิร์ฟเวอร์ส่งคำขอเอกสารที่ระบุในแอตทริบิวต์การกระทำของแท็กไปยังเซิร์ฟเวอร์
  4. โดยใช้วิธีการส่งข้อมูลที่ระบุในแอตทริบิวต์ method (ในกรณีนี้ - GET) โดยส่งข้อมูลแบบฟอร์มในคำขอ

เซิร์ฟเวอร์วิเคราะห์คำขอที่ได้รับ สร้างการตอบกลับ ส่งไปยังเบราว์เซอร์ และปิดการเชื่อมต่อ

เทลเน็ต www.example.com 80

รับ /cgi-bin/form_handler.cgi?name=Vasya&okbutton=ตกลง HTTP/1.0\ร\n
โฮสต์: www.example.com\ร\n
\ร\n

ดังที่คุณคงเดาได้อยู่แล้ว การคลิกปุ่มส่งบนแบบฟอร์มด้วยวิธีการส่ง "GET" จะเหมือนกับการพิมพ์ URL ที่เกี่ยวข้อง (พร้อมเครื่องหมายคำถามและข้อมูลแบบฟอร์มที่ส่วนท้าย) ลงในแถบที่อยู่ของเบราว์เซอร์: http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK

ดังที่คุณคงเดาได้อยู่แล้ว การคลิกปุ่มส่งบนแบบฟอร์มด้วยวิธีการส่ง "GET" จะเหมือนกับการพิมพ์ URL ที่เกี่ยวข้อง (พร้อมเครื่องหมายคำถามและข้อมูลแบบฟอร์มที่ส่วนท้าย) ลงในแถบที่อยู่ของเบราว์เซอร์: URL จะถูกต่อท้ายด้วยเครื่องหมายคำถามและข้อมูลแบบฟอร์ม

ตอนนี้เรามาแทนที่บรรทัดแรกของแบบฟอร์มของเราด้วยสิ่งต่อไปนี้:

เราระบุวิธีการส่งเป็น "POST" ในกรณีนี้ ข้อมูลจะถูกส่งไปยังเซิร์ฟเวอร์ด้วยวิธีที่แตกต่างออกไปเล็กน้อย:

เทลเน็ต www.example.com 80

โพสต์ /cgi-bin/form_handler.cgi HTTP/1.0\ร\n
โฮสต์: www.example.com\ร\n
ประเภทเนื้อหา: application/x-www-form-urlencoded\ร\n
ความยาวเนื้อหา: 22\ร\n
\ร\n
name=วาสยา&okbutton=ตกลง

เมื่อใช้วิธีการ POST ข้อมูลแบบฟอร์มจะถูกส่งหลังจาก "ป้อนสองครั้ง" - ถึง ร่างกายขอ. ทุกอย่างข้างต้นเป็นจริง ชื่อคำขอ (และเมื่อเราใช้วิธี GET ข้อมูลแบบฟอร์มจะถูกส่งไปในส่วนหัว) เพื่อให้เซิร์ฟเวอร์ทราบว่าไบต์ใดที่จะหยุดอ่านเนื้อหาคำขอ ส่วนหัวจึงมีบรรทัด ความยาวของเนื้อหา- ว่าข้อมูลแบบฟอร์มจะถูกส่งไปในแบบฟอร์ม พารามิเตอร์1=ค่า1&พารามิเตอร์2=ค่า2...และค่าจะถูกส่งในรูปแบบของ urlencode - นั่นคือเหมือนกับการใช้วิธี GET ทุกประการ แต่ในเนื้อความของคำขอ - เซิร์ฟเวอร์จะได้รับแจ้งจากส่วนหัว "Content-Type: application/x- www-form-urlencoded"

ข้อดีของวิธี POST คือไม่มีการจำกัดความยาวของบรรทัดข้อมูลของฟอร์ม

เมื่อใช้วิธีการ POST จะไม่สามารถส่งแบบฟอร์มโดยเพียงแค่ "ไปตามลิงก์" ได้ เช่นเดียวกับในกรณีของ GET

เมื่อใช้แบบฟอร์ม POST ในแอตทริบิวต์ การกระทำคุณยังสามารถระบุพารามิเตอร์แบบฟอร์ม GET หลังเครื่องหมายคำถามได้ ดังนั้นวิธี POST จึงรวมวิธี GET ไว้ด้วย

อัปเดตเมื่อ 12/12/2558

แม้ว่าหัวข้อการส่งข้อความอีเมลโดยตรงจากหน้าต่างๆ ของไซต์จะค่อนข้างถูกแฮ็กอยู่แล้ว เมื่อพิจารณาจากจดหมายที่ฉันได้รับจากผู้เยี่ยมชมไซต์ของฉัน ฉันสรุปได้ว่าหลายคนยังคงมีช่องว่างความรู้ในเรื่องเหล่านี้

ดังนั้นในบทช่วยสอนนี้ เราจะได้เรียนรู้วิธีดำเนินการ แบบฟอร์มส่งข้อความอีเมล์จากหน้าเว็บไซต์พร้อมตรวจสอบการป้อนข้อมูลที่ถูกต้อง- เหล่านั้น. หากไม่ได้กรอกแบบฟอร์มใด ๆ สคริปต์จะสร้างข้อผิดพลาดและแจ้งให้ผู้เยี่ยมชมทราบ คุณสามารถดูตัวอย่างวิธีการทำงานของแบบฟอร์มนี้ได้ หากคุณกรอกแบบฟอร์มนี้แล้วคลิกปุ่ม: ส่งข้อความแล้วฉันจะได้รับข้อความของคุณ

ข้อดีของการส่งข้อความด้วยวิธีนี้ชัดเจน:

1. คุณไม่จำเป็นต้อง "ส่องแสง" ที่อยู่อีเมลของคุณบนอินเทอร์เน็ต ซึ่งหมายความว่าจะไม่สามารถเข้าถึงผู้ส่งอีเมลขยะได้

2. หากผู้เยี่ยมชมต้องการถามคำถามคุณหรือถามอะไรบางอย่าง เขาไม่จำเป็นต้องคัดลอกที่อยู่อีเมล เปิดโปรแกรมรับส่งเมล เขียนข้อความ ฯลฯ ผู้เยี่ยมชมจะกรอกข้อมูลที่จำเป็นในแบบฟอร์มอย่างรวดเร็วและส่งข้อความถึงคุณ

3. ด้วยการจัดระเบียบข้อเสนอแนะจากผู้เยี่ยมชม ความน่าจะเป็นที่ข้อความจะถูกส่งถึงคุณเกือบ 100% โดยเฉพาะอย่างยิ่งหากที่อยู่อีเมลเชื่อมโยงกับโดเมนของคุณ ท้ายที่สุดแล้ว โหนดระดับกลางจะถูกแยกออกจากห่วงโซ่จดหมายแบบยาว ซึ่งหมายความว่าความน่าเชื่อถือในการจัดส่งทางไปรษณีย์เพิ่มขึ้นอย่างมาก

จะสร้างแบบฟอร์มการส่งข้อความได้อย่างไร?

โดยทั่วไปแล้ว สคริปต์ดังกล่าวจะประกอบด้วยสองส่วนและโค้ดจะอยู่ในไฟล์ที่แตกต่างกันสองไฟล์:

  • ไฟล์แรก- นี่คือแบบฟอร์มที่กรอกข้อมูลข้อความ
  • ไฟล์ที่สอง- นี่คือไฟล์ตัวจัดการที่รับข้อมูลจากแบบฟอร์ม (ไฟล์แรก) และส่งไปยังที่อยู่อีเมลที่ระบุในสคริปต์ แต่ส่วนต่างๆ ของสคริปต์นี้จะทำงานเป็นคู่เสมอ

เราใส่ส่วนแรกของสคริปต์ลงในไฟล์แยกต่างหากและเรียกมันว่า: เมล.php- ไฟล์นี้จะมีแบบฟอร์มการป้อนข้อมูล ชื่อไฟล์ เมล.phpฉันรับมันตามเงื่อนไขคุณสามารถเรียกไฟล์นี้ตามที่คุณต้องการ ไฟล์นี้อาจมีนามสกุลอื่น เป็นต้น .html.

หากต้องการติดต่อผู้เยี่ยมชมไซต์ไปยังไฟล์นี้ พวกเขามักจะสร้างลิงก์ง่ายๆ: เขียนถึงผู้เขียนไซต์ ส่งข้อความ หรืออะไรทำนองนั้น เมื่อผู้เยี่ยมชมคลิกลิงก์ดังกล่าว เขาจะถูกพาไปยังหน้าแยกต่างหากพร้อมแบบฟอร์มที่เขาต้องป้อนข้อมูล (ข้อมูล) เพื่อส่งข้อความ

ดังนั้นให้สร้างไฟล์ใหม่ตั้งชื่อ: เมล.phpหรือ เมล.htmlและวางโค้ดลงไป รายการ 1.

รายการ 1









หากต้องการส่งข้อความถึงผู้เขียนเว็บไซต์ ให้ใช้แบบฟอร์มต่อไปนี้:



ชื่อของคุณ:


อีเมลของคุณ:


ข้อความของคุณ:




นี่เป็นรูปแบบที่ง่ายที่สุดซึ่งประกอบด้วยเพียง 3 ช่องสำหรับการป้อนข้อมูล ฉันเรียกฟิลด์เหล่านี้: ชื่อของคุณ, อีเมลของคุณ, ข้อความของคุณ- หากจำเป็น สามารถเพิ่มจำนวนฟิลด์ได้

สองฟิลด์แรก: ชื่อของคุณ, อีเมลของคุณอธิบายด้วยแท็ก:

ชื่อของคุณ:

แต่แต่ละคนก็มีชื่อเรียกตัวเองว่า ตัวระบุ: ชื่อ = "ชื่อ"และ ชื่อ = "อีเมล"ตามนั้น

ฟิลด์ที่สามสำหรับการป้อนข้อความอธิบายโดยแท็ก:

ข้อความของคุณ:

ฟิลด์นี้มีตัวระบุ: ชื่อ = "ระเบียบ".

และแน่นอนว่ามีสองปุ่ม: ส่งข้อความและ ฟอร์มใส.

ข้อมูล (ข้อมูล) ที่ผู้เยี่ยมชมป้อนลงในแบบฟอร์มได้รับการกำหนดตัวระบุที่เหมาะสม: ชื่อ, อีเมลและ ความยุ่งเหยิงจำไว้ - นี่เป็นสิ่งสำคัญ!

เพื่อความสะดวกในการออกแบบ แบบฟอร์มทั้งหมดจะถูกวางไว้ในตารางปกติ ซึ่งสามารถออกแบบรูปลักษณ์ได้โดยใช้ สำหรับฉัน นี่คือคลาส: ชั้น = "td_border"ฉันไม่ได้นำเสนอที่นี่ หากจำเป็น ให้เพิ่มด้วยตัวคุณเองตามรสนิยมของคุณ

ตัวจัดการไฟล์

ส่วนที่สองของสคริปต์ประกอบด้วยไฟล์ตัวจัดการ: mail2.phpด้วยวิธีไหน โพสต์ข้อมูลทั้งหมดที่มีตัวระบุที่เกี่ยวข้องจะถูกส่ง: ชื่อ, อีเมลและ ความยุ่งเหยิง- ข้อมูลนี้ถูกวางไว้ในตัวแปร: $ชื่อ, $อีเมล์, $ระเบียบ.

สร้างไฟล์ mail2.phpและเขียนโค้ดลงไป รายการ 2:

รายการ 2

$name = $_POST["ชื่อ"];
$อีเมล = $_POST["อีเมล"];
$mess = $_POST["ระเบียบ"];

$REMOTE_ADDR = $_POST["REMOTE_ADDR"];

ถ้า (isset ($ ชื่อ))
{
$name = substr($ชื่อ,0,20); //ต้องมีความยาวไม่เกิน 20 ตัวอักษร
ถ้า (ว่าง($ชื่อ))
{
เสียงสะท้อน "

ไม่ระบุชื่อ!!!

";
เสียงสะท้อน "";
ออก;
}
}
อื่น
{
$name = "ไม่ได้ระบุ";
}

ถ้า (isset ($ อีเมล))
{
$email = substr($email,0,20); //ต้องมีความยาวไม่เกิน 20 ตัวอักษร
ถ้า (ว่าง($อีเมล))
{
เสียงสะท้อน "

ไม่ได้ระบุอีเมล์!!!

";
เสียงสะท้อน " ย้อนกลับไปกรอกแบบฟอร์มให้ถูกต้อง";
ออก;
}
}
อื่น
{
$email = "ไม่ได้ระบุ";
}

ถ้า (isset ($ระเบียบ))
{
$mess = substr($mess,0,1000); //ต้องมีความยาวไม่เกิน 1,000 ตัวอักษร
ถ้า (ว่าง ($ระเบียบ))
{
เสียงสะท้อน "

ไม่ได้เขียนข้อความ!!!

";
เสียงสะท้อน " ย้อนกลับไปกรอกแบบฟอร์มให้ถูกต้อง";
ออก;
}
}
อื่น
{
$mess = "ไม่ได้ระบุ";
}

$i = "ไม่ได้ระบุ";
ถ้า ($ชื่อ == $i และ $email == $i และ $mess == $i)
{
echo "โปรดทราบ! เกิดข้อผิดพลาด! คุณไม่ได้กรอกข้อมูลในช่องข้อความ!";
ออก;
}

$to = "admin@site";
$เรื่อง = " ข้อความจากไซต์ไซต์";
$message = "ชื่อผู้ส่ง: $name .\nที่อยู่อีเมล: $email\nข้อความ: $mess .\nที่อยู่ IP: $_SERVER";
mail ($to,$subject,$message,"Content-type:text/plain; charset = windows-1251 ") หรือพิมพ์ "ฉันไม่สามารถส่งจดหมายได้!!!";
เสียงสะท้อน "

ขอบคุณสำหรับการส่งข้อความของคุณ

นี่เป็นสิ่งสำคัญมากสำหรับฉัน!

คุณจะได้รับคำตอบเร็วๆ นี้อย่างแน่นอน";
ออก;
?>

ไฟล์นี้จะตรวจสอบข้อมูลที่ผู้เยี่ยมชมเว็บไซต์ป้อนลงในแบบฟอร์ม จากนั้นส่งข้อความไปยังที่อยู่อีเมลที่ระบุ

หากช่องเว้นว่างไว้หรือกรอกไม่ถูกต้อง สคริปต์จะส่งข้อความกลับไปยังผู้เยี่ยมชมโดยระบุเหตุผลเฉพาะ

โปรดทราบว่าไฟล์: mail2.php ต้องมีส่วนขยาย .php , เพราะ การส่งข้อความทำได้โดยใช้ฟังก์ชัน เมล PHP.

และแน่นอนว่าโฮสติ้งของคุณต้องรองรับ PHP สิ่งนี้ใช้กับโฮสติ้งฟรีเป็นหลัก แม้ว่าเมื่อเร็วๆ นี้แม้แต่โฮสติ้งฟรีก็มีการติดตั้ง PHP เกือบทุกที่แล้ว

ในรหัส รายการ 2ง่ายมาก แก้ไขค่าทั้งหมดที่เน้นด้วยสีแดงให้ตรงกับความต้องการของคุณ ได้แก่:

  • ลงทะเบียนของคุณ ที่อยู่อีเมลที่จะส่งข้อความไป (ตัวแปร $ถึง);
  • แก้ไขหัวเรื่องของข้อความ (variable $เรื่อง);
  • ให้ความสนใจกับการเข้ารหัส ( ชุดอักขระ=windows-1251- ป้อนการเข้ารหัสที่ใช้ในเว็บไซต์ของคุณ บนอินเทอร์เน็ตภาษารัสเซีย การเข้ารหัสอาจเป็น: "utf-8"หรือ "วินโดว์-1251"- หากคุณทำผิดพลาดในการเข้ารหัสข้อความในตัวอักษรจะแสดงไม่ถูกต้อง (บ้า)

เหลือเพียงการอัปโหลดไฟล์เท่านั้น: เมล.phpและ mail2.phpและแบบฟอร์มส่งข้อความที่สะดวกจะปรากฏบนเว็บไซต์ของคุณ



ความคิดเห็นเกี่ยวกับบทความนี้ (บทเรียน):

ขอบคุณสำหรับบทเรียน เป็นเรื่องจริงที่พวกเขาพูด: ทุกอย่างมาตรงเวลา วันนี้ฉันจะค้นหาวิธีสร้างแบบฟอร์มติดต่อสำหรับเว็บไซต์และแบบฟอร์มอิสระบนอินเทอร์เน็ต ฉันเข้าใจว่าอันนี้จะทำ

บทเรียนที่ดี! ขอบคุณ!

ขอบคุณ Andrey บทเรียนที่ดี

ขอบคุณครับ ผมคิดว่าคงจะมีประโยชน์นะครับ

Savin Dmitry Aleksandrovich (SAVIN DMITRY ALEXANDROVICH) เขียนถึงคุณ ฉันต้องการทราบรายละเอียดเพิ่มเติมเกี่ยวกับแบบฟอร์มใน CSS ฉันรู้เพียงเล็กน้อยเกี่ยวกับเรื่องนี้: รายละเอียดเพิ่มเติมเกี่ยวกับคุณสมบัติการดำเนินการเนื่องจากฉันรู้ว่าการกระทำคือลิงก์ไปยังเอกสารที่ คำขอข้อมูลถูกส่งหรือข้อมูลจากแบบฟอร์มหรือบางอย่างเช่น that.method="post" ประมวลผลข้อมูลในขนาดที่ใหญ่กว่าที่ได้รับ ฯลฯ โปรดอธิบายเพิ่มเติมเกี่ยวกับแบบฟอร์ม ฉันเกือบจะสูญเสียมันไปแล้ว

สวัสดีอันเดรย์! ด้วยความเคารพคุณอาหมัด

ดังนั้นฉันจึงต้องการสร้าง “เพิ่มความคิดเห็นของคุณ” บนเว็บไซต์เพื่อให้ผู้เยี่ยมชมสามารถแสดงความคิดเห็นได้ ขอบคุณ ฉันชอบมัน

หล่อ! ข้อมูลที่เป็นประโยชน์มาก!

มันมีประโยชน์ มันมีประโยชน์ แต่มันใช้งานไม่ได้ หลังจากกรอกแบบฟอร์มแล้ว รายการ mail2.php จะปรากฏขึ้น

มันมีประโยชน์ มันมีประโยชน์ แต่มันไม่ทำงาน หลังจากกรอกแบบฟอร์มแล้ว รายการ mail2.php จะปรากฏขึ้น

ทุกอย่างทำงานได้ดี มีเพียงปุ่มเท่านั้นที่ไม่ใหญ่โตเหมือนของผู้เขียน ใครช่วยบอกวิธีสร้างปุ่มขนาดใหญ่ได้ไหม ขอขอบคุณผู้เขียน!

แต่มันไม่ได้ผลสำหรับฉัน แม่นยำยิ่งขึ้นมันได้ผลเพียงครึ่งเดียว จดหมายถูกส่งไปแล้วแต่ว่างเปล่า ข้อมูลจาก mail1 ไม่ได้ไปที่ mail2

ไม่มาอีเมล มีอะไรจับ? ฉันไม่เข้าใจว่าเขาจะส่งอะไรโดยไม่ต้องเข้าสู่ระบบและรหัสผ่านได้อย่างไร นี่คือเมลเซิร์ฟเวอร์ใช่ไหม รูปแบบเรียบง่ายแค่นั้นเอง

ขอบคุณสำหรับแบบฟอร์ม! ได้ผล! หากไม่ได้ผลสำหรับคุณ ให้ปฏิบัติตามแต่ละขั้นตอนอย่างระมัดระวัง มันไม่ได้ผลสำหรับฉันทันทีเช่นกัน อันเดรย์ขอบคุณอีกครั้ง!

โปรดช่วยด้วย ฉันใส่แบบฟอร์มแล้วและดูเหมือนว่าทุกอย่างจะเรียบร้อยดี แต่ข้อความไปไม่ถึงที่อยู่อีเมลที่ฉันระบุ แม้ว่าจะมีข้อความระบุว่าส่งข้อความแล้ว...

อันเดรย์. ฉันเข้าใจว่ามีคนเรียกตัวจัดการ ฉันยังไม่ค่อยมีความรู้เกี่ยวกับ PHP มากนัก แต่นี่คือสิ่งที่ฉันต้องการทำให้สำเร็จ: มีเพียงหน้าเดียวที่มีแบบฟอร์มทางไปรษณีย์นั่นคือ หลังจากคลิก "ส่งข้อความ" หน้าต่างใหม่จะไม่เปิดขึ้น แต่หน้าปัจจุบันเปลี่ยนไป นั่นคืออย่างที่ฉันเข้าใจมันเป็นแบบไดนามิก ฉันยังไม่รู้ว่าจะต้องทำอย่างไรด้วยตัวเอง ดังนั้นฉันจึงขอคำแนะนำ

Andrey โปรดบอกฉันว่าแบบฟอร์มใช้งานได้ดีใน Chrome แต่ Explorer มีปัญหา ไม่ได้ส่งอีเมลและข้อผิดพลาดหรือการส่งข้อความจะไม่แสดง เกิดอะไรขึ้น? ขอบคุณล่วงหน้า

บทเรียนเด็ด! ขอบคุณ!

ขอบคุณ ทุกอย่างทำงานได้ดีมาก)

ไม่มีแท็กปิด /p ในโค้ด ทำไม

คำเตือน: mail(): ไม่ได้ตั้งค่า "sendmail_from" ใน php.ini หรือส่วนหัว "จาก:" แบบกำหนดเองหายไปใน E:Roomsu362571transport-online.netwwwmail.php ออนไลน์ 66 ฉันไม่สามารถส่งจดหมายได้!!! ว้าว-เป็นยังไงบ้างคะ??

ฉันไม่สามารถเข้าใจการเข้ารหัสได้ หากคุณเข้าสู่ windows-1251 ข้อความของสคริปต์ในข้อความจะเป็นปกติ แต่ข้อความของข้อความนั้นจะถูกส่งไปยังเมลในรูปแบบจระเข้ และถ้าคุณใส่ utf-8 - ข้อความของสคริปต์ในข้อความทางไปรษณีย์ - เครื่องหมายคำถามและข้อความของข้อความจากแบบฟอร์ม - ปกติ ฉันจะแน่ใจได้อย่างไรว่าทั้งคู่เป็นเรื่องปกติ

มันใช้งานไม่ได้สำหรับฉัน แต่ไซต์ยังไม่ได้โฮสต์ ฉันจะโพสต์ได้เมื่อใด

ทุกอย่างใช้งานได้ ขอบคุณสำหรับสคริปต์! โปรดบอกวิธีตรวจสอบให้แน่ใจว่าเมื่อคุณคลิกปุ่มส่ง หน้าใหม่ที่มีตัวจัดการจะไม่เปิดขึ้นมา เพื่อให้เว็บไซต์ยังคงอยู่ในหน้าเดิมก่อนที่จะกดปุ่มส่ง?

จะทำให้ช่องป้อนข้อมูลอีเมลสูงขึ้นได้อย่างไร?

หากคุณต้องการส่งจดหมายไปยังที่อยู่หลายแห่ง เพียงเพิ่มที่อยู่ที่ต้องการโดยคั่นด้วยเครื่องหมายจุลภาคดังนี้: $to = "admin@site, [ป้องกันอีเมล], [ป้องกันอีเมล]";

ฉันจะแน่ใจได้อย่างไรว่าหลังจากส่งข้อความแล้วมีการเปลี่ยนเส้นทางไปยังหน้าอื่น

มี $to = "admin@site"; คำถาม: หากจำเป็นต้องส่งไปยัง 2 ที่อยู่! หนึ่งในที่อยู่ในรูปแบบ $to = "$email"; กล่าวอีกนัยหนึ่งคือฟังก์ชัน "แนะนำเพื่อน" ที่มีการทำซ้ำข้อความไปยังอีเมลที่ฉันระบุ ขอบคุณ

ด้วยเหตุผลบางประการ แบบฟอร์มคำติชมใช้ไม่ได้สำหรับฉัน และไม่มีสิ่งใดใช้ได้ผลเลย แกล้งทำเป็นว่าข้อความถูกส่งไปแล้ว แต่มันไม่มาถึงทางไปรษณีย์

สวัสดี! โปรดอธิบายว่าทำไมมันใช้งานไม่ได้บนโฮสติ้ง โดยมีข้อความว่า “ฉันไม่สามารถส่งจดหมายได้” และบน localhost ในเดนเวอร์ก็ทำงานได้ดี มีปัญหาอะไรมั้ย...

เหตุใดแบบฟอร์มของฉันมากกว่าหนึ่งรายการจึงใช้งานไม่ได้

ขอบคุณมาก. ทุกอย่างเรียบง่ายและเข้าถึงได้ ฉันใช้ตัวอย่างของคุณบนเว็บไซต์ gosdogovor.ru ฉันเพิ่งปรับแต่งการออกแบบเล็กน้อยเพื่อให้เหมาะกับตัวเองและองค์ประกอบของทุ่งนา: http://www.gosdogovor.ru/easuzcon.html ขอบคุณอีกครั้ง.

พวกคุณถ้าคุณพยายามส่งข้อความจากเซิร์ฟเวอร์ในพื้นที่ของคุณนั่นคือจากไซต์ที่ยังไม่ได้โพสต์บนอินเทอร์เน็ตจะไม่มีอะไรทำงาน วางไว้บนโฮสติ้งบางแห่งแล้วคุณจะมีความสุข)

Andrey ฉันจะทำอย่างไรเพื่อให้เมื่อฉันกดปุ่มข้อความที่มีข้อความเฉพาะจะถูกส่งไปยังที่อยู่เฉพาะ โปรดช่วยด้วย: [ป้องกันอีเมล]

โดยปกติแบบฟอร์มนั้นมีจุดประสงค์เพื่อรับข้อมูลจากผู้ใช้เพื่อส่งไปยังเซิร์ฟเวอร์เพิ่มเติม โดยที่โปรแกรมตัวจัดการจะได้รับข้อมูลแบบฟอร์ม โปรแกรมดังกล่าวสามารถเขียนในภาษาโปรแกรมฝั่งเซิร์ฟเวอร์ใดก็ได้ เช่น PHP, Perl ฯลฯ ที่อยู่โปรแกรมระบุไว้ในแอตทริบิวต์การกระทำของแท็ก

ดังแสดงในตัวอย่างที่ 1

ตัวอย่างที่ 1: การส่งข้อมูลแบบฟอร์ม

HTML5 IE Cr Op Sa Fx

ข้อมูลแบบฟอร์ม



ในตัวอย่างนี้ ข้อมูลแบบฟอร์มที่ระบุโดยแอตทริบิวต์ name (ข้อมูลเข้าสู่ระบบและรหัสผ่าน) จะถูกส่งไปยังไฟล์ที่ /example/handler.php หากไม่ได้ระบุแอ็ตทริบิวต์การดำเนินการ การถ่ายโอนจะเกิดขึ้นไปยังที่อยู่ของเพจปัจจุบัน

การถ่ายโอนไปยังเซิร์ฟเวอร์เกิดขึ้นในสองวิธีที่แตกต่างกัน: GET และ POST เพื่อตั้งค่าวิธีการในแท็ก

มีการใช้แอตทริบิวต์ method และค่าของมันคือคีย์เวิร์ดรับและโพสต์ หากไม่ได้ระบุแอตทริบิวต์ของวิธีการ ตามค่าเริ่มต้นข้อมูลจะถูกส่งไปยังเซิร์ฟเวอร์โดยใช้วิธี GET ในตาราง รูปที่ 1 แสดงความแตกต่างระหว่างวิธีการเหล่านี้

วิธีการใดที่ใช้สามารถกำหนดได้อย่างง่ายดายโดยแถบที่อยู่ของเบราว์เซอร์ หากมีเครื่องหมายคำถามปรากฏขึ้นและที่อยู่มีลักษณะเช่นนี้ แสดงว่านี่คือ GET แน่นอน

http://www.google.ru/search?q=%D1%81%D0%B8%D1%81%D1%8C%D0%BA%D0%B8&ie=utf-8

การผสมผสานพารามิเตอร์ที่ไม่ซ้ำกันในแถบที่อยู่จะระบุหน้าเว็บได้โดยไม่ซ้ำกัน ดังนั้นหน้าเว็บที่มีที่อยู่ ?q=node/add และ ?q=node จึงถือว่าแตกต่างกัน คุณลักษณะนี้ใช้โดยระบบการจัดการเนื้อหา (CMS, ระบบการจัดการเนื้อหา) เพื่อสร้างหน้าเว็บไซต์จำนวนมาก ในความเป็นจริง ไฟล์เดียวถูกใช้เพื่อรับคำขอ GET และสร้างเนื้อหาของเอกสารตามนั้น

รายการด้านล่างคือการใช้งานทั่วไปของวิธีการเหล่านี้บนเว็บไซต์

รับ

การถ่ายโอนข้อมูลข้อความขนาดเล็กไปยังเซิร์ฟเวอร์ ค้นหาไซต์

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

โพสต์

การถ่ายโอนไฟล์ (ภาพถ่าย ไฟล์เก็บถาวร โปรแกรม ฯลฯ ); การส่งความคิดเห็น การเพิ่มและแก้ไขข้อความในฟอรั่ม บล็อก

ตามค่าเริ่มต้น แบบฟอร์มจะถูกประมวลผลในแท็บเบราว์เซอร์ปัจจุบัน อย่างไรก็ตาม เมื่อส่งแบบฟอร์ม คุณสามารถเปลี่ยนพารามิเตอร์นี้และเปิดตัวจัดการแบบฟอร์มในแท็บหรือเฟรมใหม่ พฤติกรรมนี้ระบุผ่าน "ชื่อบริบท" ซึ่งเป็นค่าของแอตทริบิวต์เป้าหมายของแท็ก - ค่ายอดนิยมคือ _blank เพื่อเปิดแบบฟอร์มในหน้าต่างหรือแท็บใหม่ และชื่อของเฟรมซึ่งระบุโดยแอตทริบิวต์ name ของแท็ก



ในตัวอย่างนี้ เมื่อคุณคลิกปุ่ม "ส่ง" ผลลัพธ์ของการส่งแบบฟอร์มจะเปิดในเฟรมที่เรียกว่า พื้นที่

องค์ประกอบแบบฟอร์มมักจะวางไว้ภายในแท็ก

จึงกำหนดข้อมูลที่จะส่งไปยังเซิร์ฟเวอร์ ในเวลาเดียวกัน HTML5 มีความสามารถในการแยกแบบฟอร์มออกจากองค์ประกอบต่างๆ สิ่งนี้ทำเพื่อความสะดวกและคล่องตัว ดังนั้นเลย์เอาต์ที่ซับซ้อนอาจมีหลายรูปแบบที่ไม่ควรตัดกันหรือตัวอย่างเช่นองค์ประกอบบางอย่างแสดงโดยใช้สคริปต์ในที่เดียวบนเพจและฟอร์มนั้นอยู่ในอีกที่หนึ่ง . การเชื่อมต่อระหว่างแบบฟอร์มและองค์ประกอบเกิดขึ้นในกรณีนี้ผ่านตัวระบุแบบฟอร์ม และควรเพิ่มแอตทริบิวต์แบบฟอร์มที่มีค่าเท่ากับตัวระบุนี้ให้กับองค์ประกอบ (ตัวอย่างที่ 3)

ตัวอย่างที่ 3: การเชื่อมโยงแบบฟอร์มไปยังฟิลด์

HTML5 IE Cr Op Sa Fx

รูปร่าง



ในตัวอย่างนี้แท็ก

ได้รับการระบุโดยไม่ซ้ำกันผ่านตัวระบุการรับรองความถูกต้อง และ form="auth" จะถูกเพิ่มลงในฟิลด์ที่ควรส่งผ่านแบบฟอร์ม ในกรณีนี้ ลักษณะการทำงานขององค์ประกอบจะไม่เปลี่ยนแปลง เมื่อคลิกปุ่ม การเข้าสู่ระบบและรหัสผ่านจะถูกส่งไปยังตัวจัดการ handler.php

แม้ว่าพารามิเตอร์การถ่ายโอนแบบฟอร์มจะถูกระบุแบบดั้งเดิมในแท็ก ยังสามารถโอนไปยังปุ่มส่งแบบฟอร์มได้ (