php การตรวจสอบที่ไร้รสชาติ การตรวจสอบความถูกต้องและการล้างข้อมูลโดยใช้ PHP การลงทะเบียนกฎการตรวจสอบของคุณเอง
เมื่อสร้างเว็บแอปพลิเคชัน สิ่งสำคัญคือต้องคำนึงถึงความปลอดภัยอย่างจริงจัง โดยเฉพาะอย่างยิ่งเมื่อคุณต้องจัดการกับการรับข้อมูลจากผู้ใช้
กฎความปลอดภัยทั่วไปคือการไม่ไว้วางใจใคร ดังนั้นคุณจึงไม่สามารถพึ่งพาผู้ใช้ให้ป้อนค่าที่ถูกต้องลงในแบบฟอร์มได้ตลอดเวลา ตัวอย่างเช่น แทนที่จะป้อนที่อยู่อีเมลที่ถูกต้องในฟิลด์ ผู้ใช้อาจป้อนที่อยู่ที่ไม่ถูกต้อง หรือแม้แต่ข้อมูลที่เป็นอันตรายบางอย่าง
เมื่อพูดถึงการตรวจสอบข้อมูลผู้ใช้ สามารถทำได้ทั้งบนฝั่งไคลเอ็นต์ (ในเว็บเบราว์เซอร์) หรือบนฝั่งเซิร์ฟเวอร์
ก่อนหน้านี้ การตรวจสอบฝั่งไคลเอ็นต์สามารถทำได้โดยใช้ JavaScript เท่านั้น แต่ทุกอย่างเปลี่ยนไป (หรือเกือบจะเปลี่ยนแปลง) เนื่องจากด้วยความช่วยเหลือของ HTML5 การตรวจสอบความถูกต้องจึงสามารถทำได้ในเบราว์เซอร์ โดยไม่จำเป็นต้องเขียนสคริปต์การตรวจสอบที่ซับซ้อนใน JavaScript
การตรวจสอบแบบฟอร์มโดยใช้ HTML5HTML5 มีกลไกที่ค่อนข้างแข็งแกร่งโดยพิจารณาจากแอตทริบิวต์ของแท็กต่อไปนี้: ประเภท รูปแบบ และข้อกำหนด ด้วยแอตทริบิวต์ใหม่เหล่านี้ คุณสามารถโอนฟังก์ชันการตรวจสอบข้อมูลบางส่วนไปยังเบราว์เซอร์ได้
มาดูแอตทริบิวต์เหล่านี้เพื่อทำความเข้าใจว่าแอตทริบิวต์เหล่านี้สามารถช่วยตรวจสอบแบบฟอร์มได้อย่างไร
แอตทริบิวต์ประเภทแอ็ตทริบิวต์นี้จะบอกว่าฟิลด์อินพุตใดที่จะแสดงสำหรับการประมวลผลข้อมูล เช่น ฟิลด์ที่คุ้นเคย เช่น
ช่องป้อนข้อมูลบางช่องมีวิธีการตรวจสอบมาตรฐานอยู่แล้ว โดยไม่จำเป็นต้องเขียนโค้ดเพิ่มเติม ตัวอย่างเช่น จะตรวจสอบฟิลด์เพื่อให้แน่ใจว่าค่าที่ป้อนตรงกับเทมเพลตของที่อยู่อีเมลที่ถูกต้อง หากป้อนอักขระไม่ถูกต้องลงในฟิลด์ จะไม่สามารถส่งแบบฟอร์มได้จนกว่าค่าจะได้รับการแก้ไข
ลองเล่นกับค่าฟิลด์อีเมลในการสาธิตด้านล่าง
นอกจากนี้ยังมีประเภทฟิลด์มาตรฐานอื่นๆ เช่น และสำหรับตรวจสอบหมายเลข, URL และหมายเลขโทรศัพท์ ตามลำดับ
หมายเหตุ: รูปแบบหมายเลขโทรศัพท์จะแตกต่างกันไปในแต่ละประเทศ เนื่องจากจำนวนหลักในหมายเลขโทรศัพท์และรูปแบบที่แตกต่างกัน ด้วยเหตุนี้ ข้อมูลจำเพาะจึงไม่ได้กำหนดอัลกอริทึมสำหรับการตรวจสอบหมายเลขโทรศัพท์ ดังนั้นในขณะที่เขียนคุณลักษณะนี้เบราว์เซอร์จึงรองรับได้ไม่ดี
โชคดีสำหรับเรา การตรวจสอบความถูกต้องหมายเลขโทรศัพท์สามารถทำได้โดยใช้แอตทริบิวต์ pattern ซึ่งใช้นิพจน์ทั่วไปเป็นอาร์กิวเมนต์ ซึ่งเราจะดูต่อไป
คุณลักษณะรูปแบบแอตทริบิวต์รูปแบบอาจทำให้นักพัฒนาส่วนหน้าจำนวนมากกระโดดด้วยความยินดี คุณลักษณะนี้ยอมรับนิพจน์ทั่วไป (คล้ายกับรูปแบบนิพจน์ทั่วไปของ JavaScript) ที่จะใช้เพื่อตรวจสอบความถูกต้องของข้อมูลที่ป้อนในฟิลด์
นิพจน์ทั่วไปเป็นภาษาที่ใช้ในการแยกวิเคราะห์และจัดการข้อความ มักใช้สำหรับการดำเนินการค้นหาและแทนที่ที่ซับซ้อนตลอดจนการตรวจสอบความถูกต้องของข้อมูลที่ป้อน
ปัจจุบันนิพจน์ทั่วไปรวมอยู่ในภาษาการเขียนโปรแกรมยอดนิยมส่วนใหญ่ เช่นเดียวกับภาษาสคริปต์ ตัวแก้ไข แอปพลิเคชัน ฐานข้อมูล และยูทิลิตี้บรรทัดคำสั่งหลายภาษา
นิพจน์ทั่วไป (RegEX) เป็นเครื่องมือที่มีประสิทธิภาพ กระชับ และยืดหยุ่นสำหรับการจับคู่สตริงข้อความ เช่น อักขระแต่ละตัว คำ หรือรูปแบบอักขระ
ด้วยการส่งนิพจน์ทั่วไปเป็นค่าของแอตทริบิวต์ pattern คุณสามารถระบุค่าที่ยอมรับได้สำหรับฟิลด์อินพุตที่กำหนด รวมทั้งแจ้งให้ผู้ใช้ทราบเกี่ยวกับข้อผิดพลาด
มาดูตัวอย่างการใช้นิพจน์ทั่วไปเพื่อตรวจสอบความถูกต้องของค่าของช่องป้อนข้อมูลกัน
หมายเลขโทรศัพท์ตามที่กล่าวไว้ข้างต้น เบราว์เซอร์ไม่รองรับประเภทช่องโทรศัพท์อย่างสมบูรณ์ เนื่องจากรูปแบบหมายเลขโทรศัพท์ในประเทศต่างๆ ไม่สอดคล้องกัน
ตัวอย่างเช่น ในบางประเทศรูปแบบของหมายเลขโทรศัพท์คือ xxxx-xxx-xxxx และหมายเลขโทรศัพท์จะเป็นดังนี้: 0803-555-8205
นิพจน์ทั่วไปที่รูปแบบนี้ตรงกันคือ: ^\d(4)-\d(3)-\d(4)$ ในโค้ดสามารถเขียนได้ดังนี้:
หมายเลขโทรศัพท์:
ค่าแอตทริบิวต์ที่จำเป็นและตัวอักษรและตัวเลขนี่คือแอตทริบิวต์บูลีนที่ใช้ระบุว่าต้องกรอกค่าของฟิลด์ที่กำหนดเพื่อส่งแบบฟอร์ม เมื่อคุณเพิ่มแอตทริบิวต์นี้ลงในฟิลด์ เบราว์เซอร์จะต้องให้ผู้ใช้กรอกข้อมูลในฟิลด์นี้ก่อนที่จะส่งแบบฟอร์ม
สิ่งนี้ช่วยให้เราไม่ต้องดำเนินการตรวจสอบฟิลด์โดยใช้ JavaScript ซึ่งสามารถช่วยนักพัฒนาประหยัดเวลาได้
ตัวอย่างเช่น: หรือ (สำหรับความเข้ากันได้ของ XHTML)
การสาธิตทั้งหมดที่คุณเห็นด้านบนใช้แอตทริบิวต์ที่จำเป็น ดังนั้นคุณจึงสามารถทดลองใช้ได้โดยลองส่งแบบฟอร์มโดยไม่ต้องกรอกข้อมูลในช่องใดๆ
บทสรุปการรองรับเบราว์เซอร์สำหรับการตรวจสอบแบบฟอร์มนั้นค่อนข้างดี และสำหรับเบราว์เซอร์รุ่นเก่า คุณสามารถใช้ polyfills ได้
เป็นที่น่าสังเกตว่าการอาศัยการตรวจสอบฝั่งเบราว์เซอร์เพียงอย่างเดียวนั้นเป็นอันตราย เนื่องจากผู้โจมตีหรือบอทสามารถข้ามการตรวจสอบเหล่านี้ได้อย่างง่ายดาย
ไม่ใช่เบราว์เซอร์ทั้งหมดที่รองรับ HTML5 และไม่ใช่ข้อมูลที่ส่งไปยังสคริปต์ของคุณจะมาจากแบบฟอร์มของคุณทั้งหมด ซึ่งหมายความว่าก่อนที่จะยอมรับข้อมูลจากผู้ใช้ในที่สุด จำเป็นต้องตรวจสอบความถูกต้องบนฝั่งเซิร์ฟเวอร์
จำเป็นอย่างยิ่งที่จะต้องมีการตรวจสอบอินพุตในแบบฟอร์มของคุณก่อนที่จะนำข้อมูลการส่งแบบฟอร์มไปประมวลผลต่อไป เมื่อมีหลายฟิลด์ในแบบฟอร์ม สคริปต์ตรวจสอบความถูกต้องของ PHP จะซับซ้อนเกินไป นอกจากนี้ เนื่องจากคุณกำลังทำการตรวจสอบแบบเดียวกันหรือคล้ายกันสำหรับแบบฟอร์มส่วนใหญ่ที่คุณสร้าง ความพยายามซ้ำซ้อนมากเกินไปจึงถูกใช้ไปกับการตรวจสอบความถูกต้องของแบบฟอร์ม
สคริปต์ตรวจสอบแบบฟอร์ม PHP ทั่วไปนี้ทำให้การเพิ่มการตรวจสอบแบบฟอร์มของคุณเป็นเรื่องง่ายมาก
เราสร้างและเชื่อมโยงชุด "ตัวอธิบายการตรวจสอบ" กับแต่ละองค์ประกอบในแบบฟอร์ม “ตัวอธิบายการตรวจสอบ” คือสตริงที่ระบุประเภทของการตรวจสอบที่จะดำเนินการ ตัวอย่างเช่น “req” หมายถึงต้องระบุ “alpha” หมายถึงอนุญาตเฉพาะอักขระที่เป็นตัวอักษรและอื่นๆ
แต่ละฟิลด์ในแบบฟอร์มสามารถมีการตรวจสอบความถูกต้องได้ตั้งแต่หนึ่งรายการขึ้นไป ตัวอย่างเช่น ข้อมูลที่ป้อนไม่ควรว่างเปล่า ควรน้อยกว่า 25 ตัวอักษร ควรเป็นตัวอักษรและตัวเลข เป็นต้น
คุณสามารถเชื่อมโยงชุดคำอธิบายการตรวจสอบสำหรับแต่ละฟิลด์อินพุตในแบบฟอร์มได้
ดาวน์โหลดสคริปต์ตรวจสอบแบบฟอร์ม PHPคุณสามารถดาวน์โหลดสคริปต์ตรวจสอบแบบฟอร์ม PHP ได้ที่ด้านล่างนี้:
ไฟล์ ZIP ประกอบด้วยสคริปต์ตรวจสอบแบบฟอร์ม formvalidator.php เอกสารประกอบ และตัวอย่างการใช้งาน
อาร์กิวเมนต์แรกคือชื่อของช่องป้อนข้อมูลในแบบฟอร์ม อาร์กิวเมนต์ที่สองคือตัวอธิบายการตรวจสอบที่บอกประเภทของการตรวจสอบที่จำเป็น อาร์กิวเมนต์ที่สามคือข้อความแสดงข้อผิดพลาดที่จะแสดงหากการตรวจสอบล้มเหลว
$inpname: $inp_err
\n"; ) ) ตัวอย่างตัวอย่างด้านล่างจะทำให้แนวคิดชัดเจนยิ่งขึ้น
ชื่อ: อีเมล์:
การเพิ่มการตรวจสอบแบบกำหนดเองหากคุณต้องการเพิ่มการตรวจสอบแบบกำหนดเอง ซึ่งไม่ได้ระบุไว้โดยตัวอธิบายการตรวจสอบ คุณสามารถทำได้ นี่คือขั้นตอน:
คลาส MyValidator ขยาย CustomValidator ( function DoValidate(&$formars,&$error_hash) ( if(stristr($formars["Comments"],"http://")) ( $error_hash["Comments"]="ไม่อนุญาตให้ใช้ URL ในความคิดเห็น"; return false; ) return true; ) )
$validator = FormValidator ใหม่(); $validator->addValidation("ชื่อ", "req", "กรุณากรอกชื่อ"); $validator->addValidation("Email","email", "ข้อมูลสำหรับอีเมลควรเป็นค่าอีเมลที่ถูกต้อง"); $validator->addValidation("Email", "req", "กรุณากรอกอีเมล์"); $custom_validator = MyValidator ใหม่(); $validator->AddCustomValidator($custom_validator);
ฟังก์ชันการตรวจสอบแบบกำหนดเองจะถูกเรียกโดยอัตโนมัติหลังจากการตรวจสอบอื่นๆ
ตารางตัวอธิบายการตรวจสอบนี่คือรายการตัวอธิบายการตรวจสอบทั้งหมด:
ตัวอธิบายการตรวจสอบ | การใช้งาน |
คำขอ | ช่องนี้ไม่ควรเว้นว่าง |
แม็กซ์เลน=??? | ตรวจสอบความยาวข้อมูลที่ป้อนให้สูงสุด ตัวอย่างเช่น หากขนาดสูงสุดที่อนุญาตคือ 25 ให้ระบุตัวอธิบายการตรวจสอบเป็น "maxlen=25" |
มินเลน=??? | ตรวจสอบความยาวของสตริงที่ป้อนให้เหลือขั้นต่ำที่ต้องการ ตัวอย่าง “มินเลน=5” |
ศิษย์เก่า | ตรวจสอบข้อมูลว่ามีอักขระอื่นนอกเหนือจากอักขระตัวอักษรหรือตัวเลขหรือไม่ |
alnum_s | อนุญาตเฉพาะอักขระตัวอักษร ตัวเลข และช่องว่าง |
จำนวน | ตรวจสอบข้อมูลตัวเลข |
อัลฟ่า | ตรวจสอบข้อมูลตามตัวอักษร |
อัลฟ่า_s | ตรวจสอบข้อมูลตามตัวอักษรและเว้นวรรค |
อีเมล | ช่องนี้เป็นช่องอีเมลและตรวจสอบความถูกต้องของข้อมูล |
lt=??? น้อยกว่า=??? | ตรวจสอบข้อมูลให้น้อยกว่าค่าที่ส่งผ่าน ใช้ได้กับช่องตัวเลขเท่านั้น ตัวอย่าง: หากค่าควรน้อยกว่า 1,000 ให้คำอธิบายการตรวจสอบเป็น “lt=1,000” |
GT=??? มากกว่า=??? | ตรวจสอบข้อมูลให้มากกว่าค่าที่ส่ง ใช้ได้กับช่องตัวเลขเท่านั้น ตัวอย่าง: หากค่าควรมากกว่า 10 ให้คำอธิบายการตรวจสอบเป็น “gt=10” |
regexp=??? | ตรวจสอบด้วยนิพจน์ทั่วไปว่าค่าควรตรงกับนิพจน์ทั่วไป ตัวอย่าง: “regexp=^(1.20)$” อนุญาตให้มีอักขระตัวอักษรได้สูงสุด 20 ตัว |
อย่าเลือก=?? | ตัวอธิบายการตรวจสอบนี้ใช้สำหรับรายการอินพุตที่เลือก (รายการ) โดยปกติ กล่องรายการที่เลือกจะมีหนึ่งรายการว่า 'เลือกหนึ่งรายการ' ผู้ใช้ควรเลือกตัวเลือกอื่นที่ไม่ใช่ตัวเลือกนี้ หากค่าของตัวเลือกนี้คือ 'เลือกหนึ่ง' คำอธิบายการตรวจสอบควรเป็น "dontselect=Select One" |
อย่าเลือก | ตัวอธิบายการตรวจสอบนี้ใช้สำหรับกล่องกาเครื่องหมาย ผู้ใช้ไม่ควรเลือกช่องกาเครื่องหมายที่กำหนด ระบุค่าของช่องทำเครื่องหมายแทน ?? ตัวอย่างเช่นdontselectchk=on |
ควรเลือก | ตัวอธิบายการตรวจสอบนี้ใช้สำหรับกล่องกาเครื่องหมาย ผู้ใช้ควรเลือกกล่องกาเครื่องหมายที่กำหนด ระบุค่าของช่องทำเครื่องหมายแทน ?? ตัวอย่างเช่น shouldselchk=on |
อย่าเลือกวิทยุ | ตัวบอกการตรวจสอบนี้ใช้สำหรับปุ่มตัวเลือก ผู้ใช้ไม่ควรเลือกปุ่มตัวเลือกที่กำหนด ระบุค่าของปุ่มตัวเลือกแทน ?? ตัวอย่างเช่น Dontselectradio=NO |
เลือกวิทยุ | ตัวบอกการตรวจสอบนี้ใช้สำหรับปุ่มตัวเลือก ผู้ใช้ควรเลือกปุ่มตัวเลือกที่กำหนด ระบุค่าของปุ่มตัวเลือกแทน ?? ตัวอย่างเช่น selectradio=yes |
เซลมิน=?? | เลือกกล่องกาเครื่องหมายอย่างน้อย n จำนวนจากกลุ่มกล่องกาเครื่องหมาย ตัวอย่างเช่น: เซลมิน=3 |
โดดเดี่ยว | กำหนดให้กลุ่มวิทยุบังคับ ผู้ใช้ควรเลือกอย่างน้อยหนึ่งรายการจากกลุ่มตัวเลือก |
เท่ากัน=??? | เปรียบเทียบสององค์ประกอบในแบบฟอร์มและตรวจสอบให้แน่ใจว่าค่าเหมือนกัน เช่น 'รหัสผ่าน' และ 'ยืนยันรหัสผ่าน' แทนที่ ??? ด้วยชื่อขององค์ประกอบอินพุตอื่น ตัวอย่างเช่น: eqelmnt=confirm_pwd |
เราจะพูดถึงการตรวจสอบความถูกต้องของข้อมูล POST หรือ GET แม้ว่าโดยหลักการแล้ว สิ่งนี้สามารถนำไปใช้กับข้อมูลที่ได้รับโดยวิธีอื่น เช่น คุกกี้ ได้ด้วย เมื่อคุณพัฒนาเว็บแอปพลิเคชันใด ๆ คุณจะต้องเขียนอินเทอร์เฟซสำหรับการโต้ตอบกับผู้ใช้และสร้างรูปแบบต่าง ๆ ตามธรรมชาติเพื่อให้ผู้ใช้ส่งข้อมูลไปยังเซิร์ฟเวอร์ ตัวอย่างเช่น สิ่งเหล่านี้อาจเป็นความคิดเห็น ฉันคิดว่าทุกคนก็ชัดเจนแล้วว่าข้อมูลที่ได้รับต้องได้รับการตรวจสอบว่าสอดคล้องกับประเภท ขนาด และช่วงที่ระบุหรือไม่ ก่อนอื่นสิ่งนี้จำเป็นเพื่อความปลอดภัยของระบบ เว็บไซต์ หรือฐานข้อมูล เนื่องจาก... ข้อมูลที่ส่งอย่างไม่ถูกต้องหรือคำขอที่มีรูปแบบไม่ดีโดยเจตนาสามารถเปิดการเข้าถึงให้กับผู้โจมตีได้
ประการที่สอง ข้อมูลที่ไม่ได้รับการยืนยัน หากไม่ถูกต้อง อาจทำให้การทำงานของสคริปต์ ระบบ หรือเซิร์ฟเวอร์ทั้งหมดไม่เสถียร ดังนั้นข้อมูลทั้งหมดจึงต้องตรวจสอบและตรวจสอบอีกครั้งบางทีอาจมีคนบอกว่าไม่จำเป็นต้องหวาดระแวงมากเกินไป แต่ฉันเชื่อว่าในเรื่องนี้มันจะไม่มากเกินไป
อย่าเชื่อถือข้อมูลที่ได้รับจากผู้ใช้ไม่ว่าจะด้วยข้ออ้างใด ๆ ไม่ว่าในกรณีใด ๆ มันเกิดขึ้นว่าเราขี้เกียจเกินไปที่จะเขียนโค้ดที่ตรวจสอบข้อมูลที่ได้รับอีกครั้ง หรือเราหวังว่าวิธีการตรวจสอบที่มีอยู่จะเพียงพอ ซึ่งเป็นผลมาจากการที่เราให้สัมปทานกับตัวเอง
การพูดนอกเรื่องเล็กน้อยจากหัวข้อ:
การทำงานในโครงการ การพัฒนาและเขียนโปรแกรมเว็บไซต์ สคริปต์ และระบบอื่นๆ ใช้เวลาว่างของฉันเกือบทั้งหมด (นอกเหนือจากเวลาทำงาน) กล่าวอีกนัยหนึ่ง ฉันทำงานนี้ตามจำนวนชั่วโมงสูงสุดที่เป็นไปได้ต่อวัน ในบางครั้งมีความจำเป็นต้องทดสอบบางสิ่งบางอย่าง เพื่อความสนุกสนานหรือเพียงเพื่อความอยากรู้อยากเห็น เป็นผลให้ไซต์ที่ทำขึ้นอย่างเร่งรีบโดยใช้เครื่องมือทำเองหรือ CMS เวอร์ชันโบราณ กลายเป็นหนูทดลองในห้องปฏิบัติการที่คล้ายกัน แน่นอนว่าทั้งหมดข้างต้นได้รับผลกระทบจากโค้ดที่เขียนคด ขาดการควบคุมข้อมูล และเต็มไปด้วยข้อบกพร่องต่างๆ ที่จริงแล้ว ในกรณีส่วนใหญ่ ในหนึ่งชั่วโมงของการทดลองบนเว็บไซต์ดังกล่าว ฉันพบช่องโหว่ร้ายแรงหลายประการ และส่วนใหญ่อยู่ในการตรวจสอบความถูกต้องของข้อมูลที่ได้รับไม่เพียงพอ ล่าสุดมักพบสิ่งนี้ในสคริปต์ที่ประมวลผลข้อมูล POST ที่ได้รับจาก JavaScript + Ajax
เห็นได้ชัดว่าโปรแกรมเมอร์ที่เขียนสคริปต์เหล่านี้โดยใช้ Ajax เชื่อว่าเนื่องจากคำขอทั้งหมดเกิดขึ้นในเบื้องหลัง โดยที่ผู้ใช้ไม่ทราบหรือเพียงแค่ไม่ได้โหลดหน้าซ้ำ จึงไม่จำเป็นต้องตรวจสอบข้อมูลเป็นพิเศษ
ตามกฎแล้ว สคริปต์เหล่านี้บางส่วนกลับกลายเป็นว่าเต็มไปด้วยรู โดยที่พวกเขาสามารถสร้างรูที่ใหญ่ขึ้นและทำให้เปลือกของพวกมันท่วมโดยไม่ต้องใช้ความพยายามมากนัก แน่นอนเพื่อวัตถุประสงค์ในการทดลองเท่านั้นและไม่มีอะไรเพิ่มเติม (ฝ่ายบริหารของไซต์ดังกล่าวจะได้รับแจ้งถึงช่องโหว่ที่มีอยู่เสมอ)
ฉันคิดว่าความสำคัญของการตรวจสอบนั้นชัดเจนสำหรับทุกคน เป็นเวลานานที่ฉันเขียนโค้ดชิ้นเดียวกันในแต่ละครั้ง จากนั้นใช้ฟังก์ชันการตรวจสอบข้อมูลของตัวเอง ซึ่งหลายฟังก์ชันมีความดั้งเดิมมากและตามกฎแล้วจะกระจัดกระจายในส่วนต่างๆ ของไฟล์ (รวมอยู่ด้วย) ในไม่ช้าฉันก็เริ่มทำความคุ้นเคยกับเฟรมเวิร์ก PHP Zend, CI, Kohana ซึ่งแต่ละเฟรมเวิร์กใช้คลาสของตัวเองในการตรวจสอบข้อมูลที่ฉันยืมมาสำหรับโครงการของฉัน ในท้ายที่สุด ฉันตัดสินใจปรับแต่งคลาส CI หนึ่งคลาสให้ตรงกับความต้องการของฉัน แต่กลับกลายเป็นว่าผู้เขียนบล็อกการเขียนโปรแกรมรายหนึ่งได้จัดการเรื่องนี้แล้ว ต่อไป ฉันจะแบ่งปันผลงานของเขา ซึ่งก็คือไลบรารี CodeIgniter ที่ได้รับการดัดแปลง
ลองดูรหัสต่อไปนี้:
ดูโค้ด PHP
need_once "validator.class.php" ; $validator = เครื่องมือตรวจสอบใหม่() ; $validator -> set_rules ("name" , "ชื่อของคุณ" , array ("required" => , "alpha" => ) ) ; $validator -> set_rules ("email" , "Your email" , array ("required" => "Field %s is required" , "valid_email" => ) ) ; if ($validator -> run () ) ( echo "การตรวจสอบความถูกต้องเสร็จสมบูรณ์" ; ) else ( echo $validator -> get_string_errors () ; ) |
ดังที่คุณเห็นจากตัวอย่าง ในบรรทัดแรก เราจะรวมไฟล์คลาสไว้ด้วย validator.calss.phpไปที่สคริปต์ของเรา ต่อไป เราจะสร้างอินสแตนซ์ของคลาสและบันทึกวัตถุลงในตัวแปร $ตัวตรวจสอบความถูกต้อง.
แล้วใช้วิธี $validator->set_rules($ฟิลด์, $label, $rules)ตั้งค่าฟิลด์สำหรับการตรวจสอบ
วิธีนี้ใช้พารามิเตอร์ 3 ตัว:
หลังจากตั้งค่าฟิลด์สำหรับการตรวจสอบทั้งหมดแล้ว เราจะเปิดตัวเครื่องมือตรวจสอบโดยใช้วิธีการ $ตัวตรวจสอบ->รัน(). หากการตรวจสอบความถูกต้องสำเร็จ วิธีการนี้จะส่งคืนค่า จริงมิฉะนั้นหากมีข้อผิดพลาดก็จะส่งคืน เท็จ.
มีสามวิธีในการรับข้อความแสดงข้อผิดพลาด:
ตามค่าเริ่มต้น ข้อความแสดงข้อผิดพลาดจะรวมอยู่ในแท็ก . หากต้องการตั้งค่าการออกแบบของคุณ ให้ใช้วิธีนี้ set_error_delimiters($คำนำหน้า, $ต่อท้าย). ตัวอย่างเช่น:
ข้อความแสดงข้อผิดพลาดจะปรากฏเป็น กองกับชั้นเรียน "ข้อผิดพลาด"
อย่างที่คุณเห็นทุกอย่างง่ายมาก
ดูโค้ด PHP
$validator -> set_error_delimiters ( " " , " " ) ; |
หากต้องการตั้งกฎการตรวจสอบ คุณสามารถใช้วิธีการนี้ได้ set_rules($ฟิลด์)ส่งผ่านอาเรย์เชื่อมโยงหลายมิติ ลองดูตัวอย่าง:
ดูโค้ด PHP
$rules = array ( array ( "field" => "name" , "label" => "ชื่อของคุณ" , "rules" => array ( "required" => "ต้องระบุฟิลด์ %s" , "alpha" = > "ฟิลด์ %s ต้องประกอบด้วยตัวอักษรเท่านั้น" ) , อาร์เรย์ ( "field" => "email" , "label" => "อีเมลของคุณ" , "rules" => array ( "required" => "Field % s is required" , "valid_email" => "ฟิลด์ %s ต้องมีที่อยู่อีเมลที่ถูกต้อง" ) ) ) ; $validator -> set_rules ($กฎ ) ; |
อย่างที่คุณเห็น ฉันเขียนกฎการตรวจสอบเดียวกันกับในตัวอย่างแรก เฉพาะในรูปแบบของอาเรย์เชื่อมโยงหลายมิติเท่านั้น คุณสามารถใช้วิธีการใดก็ได้ที่เหมาะกับคุณที่สุดในสถานการณ์ที่กำหนด
ดังนั้นคลาสนี้รองรับกฎการตรวจสอบใดบ้าง
ฉันนำกฎการตรวจสอบทั่วไปที่ทุกคนพบมาสู่ชั้นเรียนนี้ นี่คือรายการกฎเหล่านี้ทั้งหมด:
ที่จำเป็น | ส่งคืน FALSE หากฟิลด์ว่างเปล่า |
จำนวนเต็ม | ส่งกลับ FALSE หากค่าไม่ใช่จำนวนเต็ม |
ลอย | ส่งกลับ FALSE ถ้าค่าไม่ใช่ค่าตัวเลข |
valid_url | ส่งคืน FALSE หากค่าไม่ใช่ URL ที่ถูกต้อง |
valid_email | ส่งคืน FALSE หากค่าไม่ใช่ที่อยู่อีเมลที่ถูกต้อง |
valid_ip | ส่งคืน FALSE หากที่อยู่ IP ไม่ถูกต้อง |
ไม้ขีด | ส่งคืน FALSE หากองค์ประกอบไม่ตรงกับค่าขององค์ประกอบฟิลด์อื่น |
อัลฟ่า | ส่งคืน FALSE หากองค์ประกอบมีมากกว่าตัวอักษร |
valid_captcha | ส่งคืนค่า FALSE หากค่าในฟิลด์เซสชันไม่เท่ากับค่าของฟิลด์แบบฟอร์ม |
valid_date | ส่งคืน FALSE หากองค์ประกอบมีวันที่ที่ไม่ถูกต้อง |
กฎเหล่านี้ส่วนใหญ่ใช้ตัวกรองซึ่งมีให้ใช้งานใน PHP 5
หากคุณต้องการ คุณสามารถขยายชุดกฎสำหรับการตรวจสอบได้ตลอดเวลาโดยการเพิ่มฟังก์ชันที่จำเป็นให้กับคลาส Validator
หากต้องการรับค่าข้อมูล POST ที่ประมวลผลแล้ว ให้ใช้วิธีการต่อไปนี้:
ดูโค้ด PHP
โดยทั่วไปแล้ว วิธีการนี้จะถูกเรียกเพื่อล้างแบบฟอร์มเมื่อประมวลผลแบบฟอร์มสำเร็จ
สวัสดีตอนเย็นทุกคน (เหมือนตอนกลางคืน - หมายเหตุบรรณาธิการ) วันนี้เราจะปรับปรุงสิ่งนั้นเล็กน้อย ขั้นแรก มาเรียนรู้วิธีการตรวจสอบความถูกต้องของแบบฟอร์มใน PHP และดำเนินการจัดการด้านความปลอดภัย
ดังนั้น ดูโค้ดด้านล่างและสังเกตการเปลี่ยนแปลงต่อไปนี้และเหตุผลของการเปลี่ยนแปลงต่อไปนี้ ฉันเน้นเส้นใหม่ทั้งหมดด้วยสี
ชื่อของช่องแบบฟอร์มมีการเปลี่ยนแปลง คุณอาจถามว่าทำไมเราถึงต้องการสิ่งนี้? ง่ายๆ ฉันจะตอบคุณ เท่าที่ฉันรู้ สแปมบอทบางตัวค้นหาไซต์ต่างๆ โดยมองหาแบบฟอร์มและกรอกแบบฟอร์มตามชื่อของฟิลด์เหล่านี้ ตามทฤษฎีแล้วหากไม่พบคู่ที่ตรงกันก็จะกลับบ้านซึ่งเป็นสิ่งที่เราต้องการ แน่นอน ฉันไม่คิดว่าระดับของการป้องกันนี้จะดีเป็นพิเศษ แต่ก็จะไม่ทำร้ายเรา และหากอีเมลขยะลดลง 1 ตัวอักษร นั่นก็จะดี =)
ตรวจสอบว่าป้อนที่อยู่อีเมลถูกต้องหรือไม่ บรรทัดที่ 17 ใช้โอเปอเรเตอร์ elseif ซึ่งจะถูกตรวจสอบว่าหากส่งคำตอบเชิงบวกกลับมาให้เราหรือไม่ นั่นคือมันบอกว่าที่อยู่อีเมลหายไปเลยนั่นคือไม่ได้ป้อน ที่นี่เราใช้ฟังก์ชัน preg_match ซึ่งช่วยให้เราสามารถเปรียบเทียบที่อยู่ที่ป้อนด้วย การแสดงออกปกติ. บางทีฉันจะเขียนสั้น ๆ เกี่ยวกับนิพจน์ทั่วไปในภายหลัง แต่ตอนนี้ก็คุ้มค่าที่จะรู้ว่านิพจน์ทั่วไปสร้างเทมเพลตประเภทหนึ่งที่ใช้ตรวจสอบสตริงของเรา และหากในกรณีของเราที่อยู่ที่ป้อนไม่ตรงกับนิพจน์ก็จะแสดงข้อผิดพลาดอีกครั้ง ตัวอย่างเช่น ต่อไปนี้เป็นนิพจน์ทั่วไปอีกสองสามรายการ:
|^[-а-яе\s\.,;:\?!]+$|i– นิพจน์ทั่วไปนี้อนุญาตให้คุณใช้เฉพาะตัวอักษรรัสเซียและอักขระบางตัว เช่น ช่องว่าง จุด จุลภาค ฯลฯ
#http://[-a-z0-9_.]+[-a-z0-9_:@&?=+,.!/~*’%$]*\.(html?|php)#i– และนิพจน์นี้ช่วยให้คุณตรวจสอบการสะกดที่ถูกต้องของที่อยู่บนอินเทอร์เน็ต
ต่อไป เราใช้ตัวดำเนินการ else ซึ่งโค้ดสำหรับส่งจดหมายทั้งหมดของเราได้ถูกโอนไปแล้ว คุณสามารถสร้างกฎการยืนยันได้ด้วยตัวเองในปริมาณเท่าใดก็ได้ เพียงเพิ่มกฎใหม่ เช่น สำหรับการตรวจสอบที่อยู่อีเมล แล้วคุณจะพอใจ
ผู้ติดต่อ:
อีเมล์ติดต่อ:
ข้อความ:
นี่คือวิธีที่คุณสามารถตรวจสอบแบบฟอร์ม PHP ของคุณโดยไม่ต้องพึ่งสิ่งอื่นใดที่ไม่จำเป็น คราวหน้าในการโพสต์หัวข้อแบบฟอร์ม ฉันคิดว่าจะมีการพิจารณาการตรวจสอบความถูกต้องของแบบฟอร์มใน jQuery ด้วย ในระหว่างนี้ฉันกำลังรอความคิดเห็นและความปรารถนาของคุณ ราตรีสวัสดิ์และสวัสดีตอนเช้าทุกคน =)
บทนี้และบทถัดไปจะแสดงวิธีการใช้ PHP เพื่อตรวจสอบความถูกต้องของข้อมูลในแบบฟอร์ม
การตรวจสอบแบบฟอร์ม PHPคิดถึงความปลอดภัยเมื่อประมวลผลแบบฟอร์ม PHP!
หน้าเหล่านี้จะแสดงวิธีการประมวลผลแบบฟอร์ม PHP โดยคำนึงถึงความปลอดภัย การตรวจสอบความถูกต้องของข้อมูลแบบฟอร์มเป็นสิ่งสำคัญในการปกป้องแบบฟอร์มของคุณจากแฮกเกอร์และผู้ส่งอีเมลขยะ!
แบบฟอร์ม HTML ที่เราจะใช้ในบทเหล่านี้ประกอบด้วยช่องป้อนข้อมูลต่างๆ: ช่องข้อความที่จำเป็นและตัวเลือก ปุ่มตัวเลือก และปุ่มส่ง:
กฎการตรวจสอบสำหรับแบบฟอร์มข้างต้นมีดังนี้:
ชื่อ | ที่จำเป็น. + ต้องมีเฉพาะตัวอักษรและช่องว่างเท่านั้น |
อีเมล | ที่จำเป็น. + ต้องมีที่อยู่อีเมลที่ถูกต้อง (มี @ และ .) |
เว็บไซต์ | ไม่จำเป็น. หากมี จะต้องมี URL ที่ถูกต้อง |
ความคิดเห็น | ไม่จำเป็น. ช่องป้อนข้อมูลหลายบรรทัด (พื้นที่ข้อความ) |
เพศ | ที่จำเป็น. ต้องเลือกอย่างใดอย่างหนึ่ง |
ก่อนอื่นเราจะดูโค้ด HTML ธรรมดาสำหรับแบบฟอร์ม:
ช่องข้อความช่องชื่อ อีเมล และเว็บไซต์เป็นองค์ประกอบการป้อนข้อความ และช่องความคิดเห็นคือพื้นที่ข้อความ รหัส HTML มีลักษณะดังนี้:
ชื่อ:
อีเมล:
เว็บไซต์:
ความคิดเห็น:
ช่องเพศเป็นปุ่มตัวเลือกและโค้ด HTML มีลักษณะดังนี้:
เพศ:
หญิง
ชาย
อื่น
รหัส HTML ของแบบฟอร์มมีลักษณะดังนี้: