Нээлттэй
Хаах

Түлхүүр үг хайх үйлчилгээ. Sphinxsearch Atopy хайлтын php түлхүүр үгс дэх хайлтын хамаарлыг сайжруулах

11.1К

Аливаа вэбсайт дээрх хамгийн алдартай, шаардлагатай функцүүдийн нэг бол тусгай маягт ашиглан хайлт хийх явдал юм. Энэхүү функц нь зочдод өөрсдийн сонирхсон контентыг сайт дээрээс хурдан олох боломжийг олгодог.

Өнөөдөр бид өгөгдлийн сангийн хүснэгтээс асууж, сайт дээрх одоогийн менежерүүдийн мэдээллийг харуулах тусгай маягт ашиглан сайтыг хэрхэн хайх талаар танд хэлэхийг хүсч байна. Та одоогийн ажилтнуудын талаарх мэдээллийг агуулсан мэдээллийн сангийн хүснэгтийг хэрхэн үүсгэх талаар сурах болно.

Хайлтын маягтуудыг боловсруулах PHP тусламж, мөн мэдээллийн санд агуулагдах мэдээллийг цуглуулах, бүртгэх, өөрчлөх тусгай хэл болох SQL (Structured Query Language) -тэй танилцах. Эхлэхээсээ өмнө бид төслийн файлуудыг татаж авахыг зөвлөж байна.

Танд хэрэгтэй зүйл

  • MySQL мэдээллийн сантай ажиллах хэрэгсэл.
  • PHP дэмжлэгтэй локал эсвэл алсын сервер.
  • Текст засварлагч.
Мэдээллийн сан үүсгэх

Хэрэв та өөрийн хостинг дээрх мэдээллийн баазыг ойлгож чадна гэдэгтээ бүрэн итгэлгүй байгаа бол зохих заавар, тусламж авахын тулд хосттой холбоо барина уу. Өгөгдлийн санг үүсгэсний дараа та үүнийг холбож, хүснэгт үүсгэж, шаардлагатай өгөгдлийг бичих хэрэгтэй.

MySQL-г удирдах хамгийн алдартай хэрэгсэл бол PHP My Admin. Энэ хэрэгсэл нь өнөөдрийн бидний хичээлд хангалттай байх болно.

Хүснэгт үүсгэх

Манай хүснэгтийг дараах форматаар үүсгэх ёстой.

Баганын нэр Өгөгдлийн төрөл Урт Null эсвэл Null биш Үндсэн түлхүүр үү? Автомат өсөлт
ID INT 1 Null биш Тиймээ Тиймээ
Нэр Варчар 50 Null биш Үгүй Үгүй
Овог Варчар 50 Null биш Үгүй Үгүй
Имэйл Варчар 50 Null биш Үгүй Үгүй
Утасны дугаар Варчар 15 Null биш Үгүй Үгүй

Өгөгдлийн сангийн хүснэгт нь Excel шиг багана, мөрүүдээс бүрдэнэ. Эхний багана нь өгөгдлийг нэрээр нь тодорхойлох боломжийг танд олгоно. Дараа нь "Өгөгдлийн төрлүүд" багана ирдэг бөгөөд энэ нь баганад байгаа өгөгдлийн төрлийг бидэнд хэлдэг. Length талбар нь хүснэгтийн баганын санах ойн (хадгалах) дээд хэмжээг зааж өгдөг. Бид илүү уян хатан байдлыг өгдөг хувьсагчдыг ашигладаг. Өөрөөр хэлбэл, бүтэн нэрний урт нь 50 тэмдэгтээс бага бол хуваарилагдсан зайны зөвхөн нэг хэсгийг эзэлнэ.

Мөн боловсон хүчний өгөгдлийн дунд хоосон утга байж болохгүй (нэг, хоосон). Эхний мөрийг тодруулсан шар, учир нь ID багана нь бидний үндсэн түлхүүр юм. Мэдээллийн сан дахь мастер түлхүүр нь бичлэг бүрийг өвөрмөц гэдгийг баталгаажуулдаг. Энэ баганад автоматаар нэмэгдлийг мөн ашигладаг бөгөөд энэ нь манай мэдээллийн сангийн бүртгэл бүрт автоматаар өвөрмөц дугаар олгоно гэсэн үг юм.

Хүснэгтэнд ажилтнуудын төлөөлөгчдийг нэмж оруулах

Хүснэгтийг ойлгосны дараа өгөгдлөөр дүүргэж эхлээрэй. Процедурыг оюун ухаандаа засахад 6 тэмдэглэл хангалттай. Доор би танд өөрийн жишээг санал болгож байна.

Баганын ID Нэр Овог Имэйл Утасны дугаар
2 Райн Батлер [имэйлээр хамгаалагдсан] 417-854-8547
3 Брент Каллахан [имэйлээр хамгаалагдсан] 417-854-6587
Маягтын хөгжил

Google-ээр дамжуулан сайтын хайлтын маягт үүсгэхийн тулд тохирох текст засварлагчийг нээнэ үү. Би үнэгүй PSPad ашиглахыг зөвлөж байна. Та синтакс тодруулдаг дурын текст засварлагчийг ашиглаж болно. Энэ нь PHP код бичих, дибаг хийх үйл явцыг ихээхэн хөнгөвчлөх болно. Хайлтын маягтдаа хуудас үүсгэхдээ .php форматаар хадгалахаа мартуузай, эс бөгөөс РНР кодыг зөв задлан шинжлэхгүй. Баримт бичгийг хадгалсны дараа түүнд дараах тэмдэглэгээг хуулна уу:

Харилцагч хайх:

Холбоо барих дэлгэрэнгүй хайлт

Та нэр эсвэл овог нэрээр хайх боломжтой

Хэрэв та HTML хэлийг мэддэг бол хамгийн багадаа маягтыг нээх хүртэл бүх зүйл танд ойлгомжтой байх ёстой. Энэ шошгон дотор бүх кодын хамгийн чухал элемент болох үйлдлийн шинж чанар байдаг. Бид маягтын үйлдлийнхээ хувьд файлынхаа нэрийг зааж өгөөд дараа нь түүнд "явах" хайлтын мөрийг ашигласан.

Шалгуурт нийцэж байгаа эсэхийг шалгаж байна

Хэрэглэгч өөрийн нэр эсвэл овог нэрээ оруулаад, дараа нь илгээх товчийг дарахад маягт нь өгөгдлийг өөртөө дамжуулж, төгсгөлд нь "явах" хайлтын мөрийг нэмнэ. Энэ үед бид go асуулгын мөр байгаа эсэхийг шалгана. Хэрэв үр дүн эерэг байвал бид хайлтын үр дүнг харуулна.

Хүссэн үр дүнг харуулахын өмнө бид дараах зүйлийг дахин шалгах хэрэгтэй: (1) маягтыг илгээсэн эсэх, (2) асуулгын мөрөнд утга орсон эсэх, (3) хайлтын нэр томъёог жижиг эсвэл том үсгээр оруулсан уу? Хэрэв шалгалтын аль нь ч өгөхгүй бол эерэг үр дүн(үнэн), тэгвэл бид ямар нэгэн үйлдэл хийх шаардлагагүй.

Эхлээд хаалтын шошгоны ард PHP сайтын хайлтын кодны жижиг блок нэмж оруулъя:

Эхлээд бид "" шошготой PHP кодын блокыг нээнэ.

Энэ хос шошгон доторх дурын PHP кодыг сервер гүйцэтгэх болно. Дараа нь бид маягтыг илгээсэн эсэхийг шалгана:

Бид bool буцаадаг isset функцийг ашиглан $_POST массивыг оруулна. Програмчлалын логикийн илэрхийлэл нь үнэн эсвэл худал утгыг авах боломжийг олгодог.

Тиймээс, хэрэв функц үнэнийг буцаавал маягтыг илгээсэн тул бид кодыг үргэлжлүүлэн ажиллуулах шаардлагатай болно. Хэрэв функц худал буцаавал бид алдааны мессежийг хэвлэх болно. Бичсэн бүх кодыг search_submit.php файлд хадгална уу.

Бид үндсэн утга дотор өөр нөхцөлт логик илэрхийлэл оруулж байгаа бол энэ удаад $_GET массивыг "go" утгын хамт ашиглаж байна. Өөрчлөлтүүдийг search_go.php файлд хадгална уу.

Одоо бид зочдод зөвхөн асуулгын мөрийн эхний үсгийг том үсгээр эсвэл зөвхөн жижиг үсгээр оруулах боломжтой эсэхийг шалгах хэрэгтэй. Мөн бид зочны оруулсан хайлтын шалгуурыг харгалзан үзэх арга замыг өгөх хэрэгтэй. Зочдын оруулсан мэдээллийг баталгаажуулах хамгийн сайн арга бол ердийн илэрхийлэл ашиглах явдал юм:

Бид хоёрынхоо дотор өөр нөхцөлт логик илэрхийлэлийг тавьсан. Энэ удаад бид оролтыг баталгаажуулахын тулд ердийн илэрхийлэл ашиглаж байна. Бид суулгасан preg_match функцийг ердийн илэрхийлэл ба баталгаажуулалтыг хэрэглэх маягтын талбар гэсэн хоёр параметртэй ашигладаг.

Манай тохиолдолд энэ нь "Нэр" талбар (нэр) байх болно. Зочны тодорхойлсон хайлтын параметрүүдийг сэргээхийн тулд бид $name хувьсагчийг үүсгэж, SQL асуулгад ашиглагдах маягтаас талбарын нэр бүхий POST утгыг холбоно. Бид одоо хэрэгжүүлсэн: (1) маягтын өгөгдлийг илгээсэн, (2) асуулгын мөрөнд go гэсэн утгыг багтаасан, (3) зочин том эсвэл жижиг эхний үсгийг оруулсан. Эдгээр бүх шалгалтууд нь мэдээллийн санд өөрчлөлт оруулахаас өмнө хийгддэг. Бүх өөрчлөлтийг хадгал.

Өгөгдлийн сангийн хүснэгтээс үр дүнг холбох, сонгох, асуух, буцаах

Хүснэгтээс өгөгдөл авахын тулд та эхлээд сайтын хайлтын скрипт дэх серверт холбогдох хэрэгтэй. Үүнийг хийхийн тулд бид дараах кодыг ашиглана:

Бид $db хувьсагчийг үүсгэж, MySQL-ийн суулгасан mysql_connect функцтэй холбодог бөгөөд энэ нь мэдээллийн баазтай сервер (хэрэв та дотоодод ажиллаж байгаа бол localhost), нэвтрэх болон нууц үг гэсэн гурван параметрийг авдаг.

Үүний дараа бид өгөгдлийн сантай холбогдоогүй тохиолдолд кодын цаашдын гүйцэтгэлийг зогсоодог PHP функцийг ажиллуулдаг. Мөн бид MySQL-ийн суулгасан mysql_error функцийг ажиллуулснаар алдааны талаарх мэдээллийг харуулах бөгөөд энэ нь алдааны шалтгааныг буцаана. search_connectdb.php файлыг хадгал.

Бид mydb нэртэй хувьсагчийг үүсгээд MySQL-ийн суулгасан mysql_select_db функцтэй холбож, өмнө нь үүсгэсэн мэдээллийн сангийн нэрийг зааж өгдөг. Дараа нь бид зочны оруулсан хайлтын параметрүүдийг агуулсан нэрийн хувьсагчтай SQL асуулга ашиглан мэдээллийн сангийн хүснэгтийг хайдаг.

Өгөгдлийн сангийн хүснэгтээс асуулга хийхдээ бид $sql хувьсагч үүсгэж, SQL асуулга агуулсан стрингтэй холбоно. Бид SELECT мэдэгдлийг харилцагчдын хүснэгтээс id багана болон нэр, овог баганаас утгыг авахын тулд ашигладаг. Дараа нь бид хайлтыг нарийсгахын тулд овог нэрийн утгын хамт WHERE заалтыг ашиглана.

LIKE операторын хамт бид хувийн тэмдэг (%) - 0 ба түүнээс дээш тэмдэгтийг буцаадаг тусгай тэмдэгт, түүнчлэн хайлтын мөрийн нэр хувьсагчийг ашигладаг. Үүний үр дүнд LIKE (тусгай тэмдэгттэй хослуулан) өгөгдлийн сангийн хүснэгтээс тохирох нэрийг олно. Та бүх үйл явцыг дараах байдлаар дүрсэлж болно: "Бид зочны оруулсан нэрстэй тохирох харилцагчдын хүснэгтээс нэр, овог нэрийг сонгоно." search_query.php файлыг хадгална уу.

Бид $ үр дүнгийн хувьсагчийг үүсгэж, үүнийг $ query-д нэмж mysql_query() функцийн утгыг онооно. Одоо бидний асуулга үр дүнгийн хувьсагчид хадгалагдаж байна. Үр дүнг PHP дээр гаргахын тулд бид гогцоо үүсгээд дараа нь өгөгдлийг эрэмбэлэгдээгүй жагсаалтад гаргана.

Эхлээд бид while давталт үүсгээд дотор нь row хэмээх хувьсагчийг үүсгээд mysql_fetch_array функцийн буцаах утгыг эхлүүлж, бидний SQL query агуулсан үр дүнгийн хувьсагчийг авдаг. while давталт дотор бид багана тус бүрийг ижил нэртэй хувьсагчийн утгад өгдөг. Дараа нь бид эрэмблэгдээгүй жагсаалт доторх утгуудыг гаргана.

Энд хоёр зүйлд анхаарлаа хандуулах нь чухал: (1) while давталт дотор та мөрийн массивын хувьсагчид утгыг оноох шаардлагагүй, учир нь утгуудыг эгнээний массиваас шууд авах боломжтой; (2) id болон үндсэн түлхүүрийн хамт бидний файлын нэрэнд ашигладаг зангууны шошго. Үүний шалтгаан нь хайлтын олон элементүүд эхэндээ юу ч харуулахгүй байна.

Бид зөвхөн овог нэр, зангуу тагны төгсгөлд ID-г харуулж байгаа тул ID-г нэмэлт асуулгад ашиглах боломжтой. Нэмэлт мэдээлэлажилтнуудын тухай. Файлыг хадгалаад PHP сайтын хайлтын маягтыг (search_display.php) шалгана уу.

Таб устгаж байна

Үр дүн нь эрэмбэлэгдээгүй жагсаалт хэлбэрээр харагдана, гэхдээ гол нь бидэнд таб хэрэггүй. Үүнээс салахын тулд толгой дээрх файлынхаа хамгийн эхэнд дараах CSS дүрмийг нэмнэ үү.

ul li( жагсаалтын хэв маягийн төрөл: байхгүй; )

Үсгээр хайх

Үсгийн хайлтыг хэрэгжүүлэхийн тулд танд хэдхэн нэмэлт мөр код хэрэгтэй. Зочдод энэ тохиромжтой функцийг нэмье. Ингэснээр тэд нэр эсвэл овог нэрэнд байгаа үсгээр ажилтнуудын төлөөлөгчийг олох боломжтой болно.

Хаалтын маягтын шошгоны дараа дараах кодын мөрийг нэмнэ үү.

А | B | К

.*?"si", //Javascript таслагдсан
"""си", // HTML хаягуудыг хассан
""([\r\n])[\s]+"" , // Хоосон зайг хайчилж ав
""&(quot|#34);"i" , // HTML элементүүдийг сольсон
""&(amp|#38);"i" ,
""&(lt|#60);"i" ,
""&(gt|#62);"i" ,
""&(nbsp|#160);"i" ,
""&(iexcl|#161);"i" ,
""&(цент|#162);"i" ,
""&(фунт|#163);"i" ,
""&(хуулбар|#169);"i" ,
""(\d+);"e");
$ солих = массив("e" ,
" " ,
" " ,
"\\1 " ,
"\" " ,
" " ,
" " ,
" " ,
" " ,
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)" );
$текст = preg_replace($хайх, $солих, $текст);
$del_symbols = массив ("," , "." , ";" , ":" , "\"" , "#" , "\$" , "%" , "^" ,
"!" , "@" , "`" , "~" , "*" , "-" , "=" , "+" , "\\" ,
"|" , "/" , ">" , "origin_arr = тэсрэх(" " , trim($текст));
$this->origin_arr буцаана;
}

count_words() функц
{
$tmp_arr = массив();
foreach ($this->origin_arr гэж $val)
{
хэрэв (strlen($val)>=$this->min_word_length)
{
$val = strtolower($val);
хэрэв (массив_түлхүүр байгаа ($val, $tmp_arr))
{
$tmp_arr[$val]++;
}
өөр
{
$tmp_arr[$val] = 1 ;
}
}
}
arsort($tmp_arr);
$ this->modif_arr = $tmp_arr;
}

функц get_keywords($текст)
{
$this->explode_str_on_words($текст);
$ this->count_words();
$arr = массив_зүсмэл($this->modif_arr, 0 , 30 );
$str = "" ;
foreach ($arr гэж $key=>$val)
{
$str .= $key . ", " ;
}
буцаах trim(substr($str, 0 , strlen($str)-2 ));
}
}
?>
Энэхүү PHP классыг ашиглах нь маш энгийн бөгөөд та шинэ функцтэй ангийн жишээг үүсгээд дараа нь залгана дотоод функц get_keywords() , анги Тоолуур . Энэ ангийг ашиглах жишээ энд байна:
$word_counter = шинэ Тоолуур();
хэрэв (strlen($content)>50000 )
{
$keywords = $word_counter->get_keywords(substr($content, 0 , 50000 ));
}
өөр
{
$keywords = $word_counter->get_keywords($content);
}
$content хувьсагч нь түлхүүр үгсийг үүсгэж байгаа хуудасны үндсэн текстийг агуулсан байх ёстой. Гэсэн хэдий ч үүссэн мөр нь мета шошгогүй зөвхөн түлхүүр үгсийг агуулна. Та zip архиваас түлхүүр үг сонгоход зориулсан энэхүү PHP ангийг эндээс татаж авах боломжтой.