บริการค้นหาคำสำคัญ การปรับปรุงความเกี่ยวข้องในการค้นหาใน sphinxsearch Atopy ค้นหาคำหลัก php
หนึ่งในฟังก์ชั่นที่ได้รับความนิยมและจำเป็นที่สุดในเว็บไซต์คือการค้นหาซึ่งใช้งานโดยใช้แบบฟอร์มพิเศษ ฟังก์ชั่นนี้ช่วยให้ผู้เยี่ยมชมสามารถค้นหาเนื้อหาที่พวกเขาสนใจบนเว็บไซต์ได้อย่างรวดเร็ว
วันนี้เราอยากจะบอกคุณถึงวิธีการค้นหาไซต์โดยใช้แบบฟอร์มพิเศษที่จะสืบค้นตารางฐานข้อมูลและแสดงข้อมูลเกี่ยวกับผู้จัดการปัจจุบันบนไซต์ คุณจะได้เรียนรู้วิธีสร้างตารางฐานข้อมูลที่จะมีข้อมูลเกี่ยวกับบุคลากรปัจจุบัน
พัฒนาแบบฟอร์มการค้นหาสำหรับ 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 ได้ที่นี่