เปิด
ปิด

บริการค้นหาคำสำคัญ การปรับปรุงความเกี่ยวข้องในการค้นหาใน sphinxsearch Atopy ค้นหาคำหลัก php

11.1ก

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

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

พัฒนาแบบฟอร์มการค้นหาสำหรับ PHP ช่วยด้วยและทำความคุ้นเคยกับ SQL (Structured Query Language) ซึ่งเป็นภาษาพิเศษสำหรับการรวบรวม บันทึก และแก้ไขข้อมูลที่มีอยู่ในฐานข้อมูล ก่อนที่คุณจะเริ่มต้น เราขอแนะนำให้คุณดาวน์โหลดไฟล์โครงการ

สิ่งที่คุณต้องการ

  • เครื่องมือสำหรับการทำงานกับฐานข้อมูล MySQL
  • เซิร์ฟเวอร์ท้องถิ่นหรือระยะไกลพร้อมรองรับ PHP
  • โปรแกรมแก้ไขข้อความ
การสร้างฐานข้อมูล

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

เครื่องมือยอดนิยมสำหรับการจัดการ MySQL คือ PHP My Admin เครื่องมือนี้จะเพียงพอสำหรับบทช่วยสอนของเราวันนี้

การสร้างตาราง

ตารางของเราควรสร้างขึ้นในรูปแบบต่อไปนี้:

ชื่อคอลัมน์ ประเภทข้อมูล ความยาว เป็นโมฆะหรือไม่เป็นโมฆะ คีย์หลัก? เพิ่มขึ้นอัตโนมัติ
บัตรประจำตัวประชาชน อินเตอร์เนชั่นแนล 1 ไม่เป็นโมฆะ ใช่ ใช่
ชื่อจริง วาร์ชาร์ 50 ไม่เป็นโมฆะ เลขที่ เลขที่
นามสกุล วาร์ชาร์ 50 ไม่เป็นโมฆะ เลขที่ เลขที่
อีเมล วาร์ชาร์ 50 ไม่เป็นโมฆะ เลขที่ เลขที่
หมายเลขโทรศัพท์ วาร์ชาร์ 15 ไม่เป็นโมฆะ เลขที่ เลขที่

ตารางฐานข้อมูลประกอบด้วยคอลัมน์และแถว เช่นเดียวกับ Excel คอลัมน์แรกช่วยให้คุณระบุข้อมูลตามชื่อได้ ถัดมาคือคอลัมน์ Data types ซึ่งบอกเราถึงประเภทของข้อมูลที่มีอยู่ในคอลัมน์ ฟิลด์ความยาวระบุจำนวนหน่วยความจำสูงสุด (ที่เก็บข้อมูล) สำหรับคอลัมน์ตาราง เราใช้ตัวแปรที่ให้ความยืดหยุ่นมากขึ้น กล่าวอีกนัยหนึ่ง หากความยาวของชื่อเต็มน้อยกว่า 50 ตัวอักษร ระบบจะครอบครองพื้นที่ที่จัดสรรเพียงบางส่วนเท่านั้น

และในบรรดาข้อมูลบุคลากรนั้นไม่สามารถมีค่าว่างได้ (null, ว่าง ) เน้นบรรทัดแรก สีเหลืองเนื่องจากคอลัมน์ ID คือคีย์หลักของเรา คีย์หลักในฐานข้อมูลช่วยให้แน่ใจว่าแต่ละระเบียนไม่ซ้ำกัน การเพิ่มอัตโนมัติยังใช้กับคอลัมน์นี้ด้วย ซึ่งหมายความว่าแต่ละบันทึกในฐานข้อมูลของเราจะได้รับการกำหนดหมายเลขที่ไม่ซ้ำกันโดยอัตโนมัติ

การเพิ่มตัวแทนเจ้าหน้าที่ไปที่โต๊ะ

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

รหัสคอลัมน์ ชื่อจริง นามสกุล อีเมล หมายเลขโทรศัพท์
2 ไรอัน บัตเลอร์ [ป้องกันอีเมล] 417-854-8547
3 เบรนต์ สิทธิชัย [ป้องกันอีเมล] 417-854-6587
การพัฒนารูปแบบ

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

ค้นหาผู้ติดต่อ:

ค้นหาผู้ติดต่อโดยละเอียด

คุณสามารถค้นหาด้วยชื่อหรือนามสกุล

หากคุณคุ้นเคยกับภาษา HTML ทุกอย่างควรจะชัดเจนสำหรับคุณอย่างน้อยก็จนกว่าจะถึงแท็กเปิดฟอร์ม ภายในแท็กนี้เป็นองค์ประกอบที่สำคัญที่สุดของโค้ดทั้งหมด - คุณลักษณะการกระทำ สำหรับการดำเนินการกับแบบฟอร์ม เราได้ระบุชื่อไฟล์ของเรา จากนั้นใช้สตริงการสืบค้น "go" กับไฟล์

การตรวจสอบการปฏิบัติตามเกณฑ์

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

ก่อนที่จะแสดงผลลัพธ์ที่ร้องขอ เราต้องตรวจสอบอีกครั้ง: (1) แบบฟอร์มถูกส่งแล้ว (2) สตริงการสืบค้นมีค่า go หรือไม่ (3) คำค้นหาที่ป้อนเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่หรือไม่ หากไม่มีเช็คให้ ผลลัพธ์ที่เป็นบวก(จริง) แล้วเราก็ไม่จำเป็นต้องดำเนินการใดๆ

ขั้นแรก ให้เพิ่มบล็อกเล็กๆ ของโค้ดค้นหาไซต์ PHP หลังแท็กปิด:

ขั้นแรก เราจะเปิดบล็อกโค้ด PHP ด้วยแท็ก “”

โค้ด PHP ใดๆ ภายในคู่แท็กนี้จะถูกดำเนินการโดยเซิร์ฟเวอร์ จากนั้นเราตรวจสอบว่าได้ส่งแบบฟอร์มแล้วหรือไม่:

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

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

เรากำลังใส่นิพจน์บูลีนแบบมีเงื่อนไขอีกนิพจน์หนึ่งไว้ในนิพจน์หลัก แต่คราวนี้ เรากำลังใช้อาร์เรย์ $_GET ร่วมกับค่า "go" บันทึกการเปลี่ยนแปลงในไฟล์ search_go.php

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

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

ในกรณีของเรา นี่จะเป็นช่อง "ชื่อ" (ชื่อ) ในการดึงพารามิเตอร์การค้นหาที่ระบุโดยผู้เยี่ยมชม เราจะสร้างตัวแปร $name และผูกเข้ากับค่า POST ด้วยชื่อของฟิลด์แบบฟอร์มที่จะใช้ในการสืบค้น SQL ขณะนี้เราได้ดำเนินการแล้ว: (1) ส่งข้อมูลแบบฟอร์มแล้ว (2) สตริงการสืบค้นมีค่า go และ (3) ผู้เยี่ยมชมได้ป้อนอักษรตัวแรกตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก และการตรวจสอบทั้งหมดนี้จะเกิดขึ้นก่อนการเปลี่ยนแปลงฐานข้อมูล บันทึกการเปลี่ยนแปลงทั้งหมด

เชื่อมต่อ เลือก สืบค้น และส่งคืนผลลัพธ์จากตารางฐานข้อมูล

หากต้องการรับข้อมูลจากตาราง คุณต้องเชื่อมต่อกับเซิร์ฟเวอร์ในสคริปต์ค้นหาไซต์ก่อน ในการทำเช่นนี้เราใช้รหัสต่อไปนี้:

เราสร้างตัวแปร $db และผูกเข้ากับฟังก์ชัน MySQL ในตัว mysql_connect ซึ่งรับพารามิเตอร์สามตัว: เซิร์ฟเวอร์ที่มีฐานข้อมูล (localhost หากคุณทำงานในพื้นที่) การเข้าสู่ระบบและรหัสผ่าน

หลังจากนั้น เราจะรันฟังก์ชัน Die ของ PHP ในตัว ซึ่งจะหยุดการเรียกใช้โค้ดเพิ่มเติมหากไม่มีการเชื่อมต่อกับฐานข้อมูล และเราแสดงข้อมูลเกี่ยวกับข้อผิดพลาดโดยการเรียกใช้ฟังก์ชัน MySQL ในตัว mysql_error ซึ่งจะส่งคืนสาเหตุของข้อผิดพลาด บันทึกไฟล์ search_connectdb.php

เราสร้างตัวแปรชื่อ mydb และผูกเข้ากับฟังก์ชัน MySQL ในตัว mysql_select_db จากนั้นระบุชื่อของฐานข้อมูลที่เราสร้างไว้ก่อนหน้านี้ ต่อไป เราจะสอบถามตารางฐานข้อมูลโดยใช้แบบสอบถาม SQL พร้อมด้วยตัวแปรชื่อที่มีพารามิเตอร์การค้นหาที่ผู้เยี่ยมชมป้อน:

เมื่อทำการสืบค้นตารางฐานข้อมูล เราจะสร้างตัวแปร $sql และผูกเข้ากับสตริงที่มีการสืบค้น SQL เราใช้คำสั่ง SELECT เพื่อดึงค่าจากคอลัมน์ id และคอลัมน์ชื่อและนามสกุลจากตารางผู้ติดต่อ จากนั้นเราจะใช้คำสั่ง WHERE ร่วมกับค่าชื่อและนามสกุลเพื่อจำกัดการค้นหาให้แคบลง

เราใช้เครื่องหมายเปอร์เซ็นต์ (%) ร่วมกับตัวดำเนินการ LIKE ซึ่งเป็นอักขระพิเศษที่ส่งคืนอักขระ 0 ตัวขึ้นไป รวมถึงตัวแปรชื่อจากสตริงการค้นหา เป็นผลให้ LIKE (ร่วมกับอักขระพิเศษ ) ค้นหาชื่อที่ตรงกันในตารางฐานข้อมูล คุณสามารถอธิบายกระบวนการทั้งหมดได้ดังนี้: “เราเลือกชื่อและนามสกุลจากตารางผู้ติดต่อที่ตรงกับชื่อที่ผู้เยี่ยมชมป้อน” บันทึกไฟล์ search_query.php

เราสร้างตัวแปร $result และกำหนดค่าของฟังก์ชัน mysql_query() ให้กับมันโดยการเพิ่มตัวแปรนั้นลงใน $query ตอนนี้แบบสอบถามของเราถูกเก็บไว้ในตัวแปรผลลัพธ์ หากต้องการส่งออกผลลัพธ์ใน PHP เราจะสร้างลูปแล้วส่งออกข้อมูลในรายการที่ไม่เรียงลำดับ:

ขั้นแรกเราสร้าง while loop ภายในนั้นเราสร้างตัวแปรที่เรียกว่า row และเริ่มต้นด้วยค่าที่ส่งคืนของฟังก์ชัน mysql_fetch_array ซึ่งรับตัวแปรผลลัพธ์ซึ่งมีการสืบค้น SQL ของเรา ภายใน while loop เราจะกำหนดค่าแต่ละคอลัมน์ให้กับค่าของตัวแปรที่มีชื่อเดียวกัน จากนั้นเราจะส่งออกค่าภายในรายการที่ไม่เรียงลำดับ

สิ่งสำคัญคือต้องใส่ใจกับสองประเด็นที่นี่: (1) ภายใน while loop คุณไม่จำเป็นต้องกำหนดค่าให้กับตัวแปรอาร์เรย์แถว เนื่องจากค่าสามารถนำมาจากอาร์เรย์แถวได้โดยตรง (2) แท็ก Anchor ซึ่งเราใช้ในชื่อไฟล์ของเราพร้อมกับรหัสและคีย์หลัก เหตุผลก็คือองค์ประกอบการค้นหาจำนวนมากไม่แสดงอะไรเลยในตอนแรก

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

กำลังถอดแท็บ

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

ul li( list-style-type:none; )

ค้นหาด้วยตัวอักษร

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

เพิ่มบรรทัดโค้ดต่อไปนี้หลังแท็กแบบฟอร์มปิด:

ก | บี | เค

.*?"ซิ" , //จาวาสคริปต์ถูกตัดออก
"""ซิ" , // แท็ก HTML ถูกตัดออก
""([\r\n])[\s]+"" , // ตัดพื้นที่ว่างออก
""&(quot|#34);"ฉัน" , // องค์ประกอบ HTML ถูกแทนที่ด้วย
""&(แอมป์|#38);"i" ,
""&(lt|#60);"i" ,
""&(gt|#62);"i" ,
""&(nbsp|#160);"ฉัน" ,
""&(iexcl|#161);"i" ,
""&(ร้อยละ|#162);"ฉัน" ,
""&(ปอนด์|#163);"i" ,
""&(copy|#169);"i" ,
""(\d+);"e" );
$replace = array("e" ,
" " ,
" " ,
"\\1 " ,
"\" " ,
" " ,
" " ,
" " ,
" " ,
CH(161)
CH(162)
CH(163),
CH(169)
"chr(\\1)" );
$text = preg_replace($ค้นหา, $แทนที่, $ข้อความ);
$del_สัญลักษณ์ = อาร์เรย์ ("," , "." , ";" , ซิลิโคน , "\"" , "#" , "\$" , "%" , "^" ,
"!" , "@" , "`" , "~" , "*" , "-" , "=" , "+" , "\\" ,
"|" , "/" , ">" , "origin_arr = explode(" " , ตัดแต่ง($text));
ส่งคืน $this->origin_arr;
}

ฟังก์ชั่น count_words()
{
$tmp_arr = อาร์เรย์();
foreach ($this->origin_arr เป็น $val)
{
ถ้า (strlen($val)>=$this->min_word_length)
{
$val = strtolower($val);
ถ้า (array_key_exists($val, $tmp_arr))
{
$tmp_arr[$val]++;
}
อื่น
{
$tmp_arr[$val] = 1 ;
}
}
}
จัดเรียง($tmp_arr);
$นี่->modif_arr = $tmp_arr;
}

ฟังก์ชั่น get_keywords($ข้อความ)
{
$this->explode_str_on_words($ข้อความ);
$นี่->count_words();
$arr = array_slice($this->modif_arr, 0 , 30 );
$str = "" ;
foreach ($arr เป็น $key=>$val)
{
$str .= $คีย์ , " ;
}
ตัดกลับ(substr($str, 0 , strlen($str)-2 ));
}
}
?>
การใช้คลาส PHP นี้ง่ายมาก คุณสร้างอินสแตนซ์ของคลาสด้วยฟังก์ชันใหม่แล้วจึงเรียกใช้ ฟังก์ชั่นภายใน get_keywords() , ตัวนับคลาส นี่คือตัวอย่างการใช้คลาสนี้:
$word_counter = ตัวนับใหม่();
ถ้า (strlen($เนื้อหา)>50000 )
{
$keywords = $word_counter->get_keywords(substr($content, 0 , 50000 ));
}
อื่น
{
$keywords = $word_counter->get_keywords($content);
}
ตัวแปร $content ควรมีข้อความหลักของเพจที่กำลังสร้างคีย์เวิร์ด แต่สตริงผลลัพธ์จะมีเพียงคำหลักเท่านั้น โดยไม่มีเมตาแท็ก คุณสามารถดาวน์โหลดคลาส PHP นี้เพื่อเลือกคำหลักในไฟล์ zip ได้ที่นี่