Internet Derazalar Android
Kengaytirmoq

Erkaklar PHP SF-ni qidirishadi. MySQL-da xavfsiz va qulay qidiruv

Sizda brauzeringizda JavaScript bloklangan. JavaScript-ga saytni ishlashiga ruxsat bering!

PHP + Sayt xaritasi bo'yicha rus tilining morfologiyasini hisobga olgan sayt bo'yicha qidirish

Vaqt bilan saytingizni yaratish orqali siz uni universal universal qidirish zarurligi haqida o'ylaysiz. Oddiy echim bor: qidiruv tizimlaridan yaxshiroq qidirish, masalan: Yandex-dan qidirish yoki Google-dan qidirish. Bunday yechimning umumiy yo'qligi - faqat qidiruv tizimiga kirgan sahifalar qidiruv indeksiga qidirish tizimiga kirishni so'raydi. Boshqacha qilib aytganda, saytingizning bir qismi "saralash" bo'lmaydi.

Qayg'uli, boshqa echim qidirmoqda. Ha, bu: Yaneks.server - bu rus tilining morfologiyasini hisobga olgan holda saytingizni qidirish uchun mahsulotni qidirish uchun mahsulot. Yuklash. Yandex Yandex-da. Server demon sifatida ishlaydi va Windows platformasi - xizmat sifatida. Ular. U faqat ildiz otish paytida ishlashi mumkin - serverga kirish. Virtual xostingda saytni ishlayotganda mos emas. :-( Ikkinchi kamchilikni sozlash. Faqat bitta tugma "yugurish / to'xtash".

Biz Internetni "qazishni" boshlaymiz. Qanaqasiga? Hamma sizning veb-saytingizda qidiruvga ega. Qandaydir tarzda, odamlar buni qilishadi. Masalan, men bilan uzoq vaqtdan beri tasvirlangan, so'zlarning may oyida aniqlanmagan va sahifalardagi so'zlarni indeksi ko'rsatmaydigan saytdagi aniq qaror. Ammo vazifaga yanada chuqurroqroq, vazifa to'liq ngardiylik bilan bog'liqligini ko'proq tushunasiz.

Birinchidan, siz butun saytni skanerlashingiz va undan barcha so'zlarni tanlashingiz kerak. Xo'sh, men buni qanday bilganman - Sayt xaritasi generatori uzoq vaqtdan beri ushbu vazifani muvaffaqiyatli hal qilishda muvaffaqiyat qozongan.

Ikkinchidan, siz barcha so'zlarning asl shaklini olishingiz kerak. Bu erda bir nechta variantlar mavjud, masalan, foydalanishingiz mumkin oqimlibu so'zlarning oldidan va oxirida prefiks, effiksiyani tugatadi. Yoki lug'atlar yordamida yanada murakkab tizim.

Uchinchidan, ma'lumotlar bazasiga yuklab olinishi va minimal vaqtni qidirish indeksi mavjud.

Ikki haftalik vaqtni sarflab, ko'p miqdordagi turli xil imkoniyatlar va algoritmlarni sinab ko'rdim:
1. Skanerlash uchun men oddiy ifoda yordamida oddiy ifoda etish, barcha HREDdan sahifani kesib tashlaydi:

// $ html \u003d fayl_get_kontents ($ url) dan noyob havolalar oling; Agar (prag_mach (»| (.*?)| Sei ", $ HTML, $ CREDIA) ($ corti \u003d trim ($ cor); if (prag_mach_all (" ~ ] * HREF \u003d ["] ([^"] [""] [^<>] *\u003e ~ Si ', $ tanasi, $ CRES) $ $ \u003d CARE_UNIKIK ($ cor);)

Endi siz tashqi havoladan ichki va rekorsdan ajratishingiz kerak va kontursiya ichki havola manzili bilan murojaat qiling. Bu erda u "rake" ... Ichki havolalar Http: // domen / manzili bilan ro'yxatdan o'tish mumkin, ular hozirgi sahifaga nisbatan bo'lishi mumkin, ular bazaga nisbatan nisbatan bo'lishi mumkin. Keyin, ushbu sahifaning indeksatsiya qilinishi robots.txt-da taqiqlanganligini tekshirish kerak va ushbu sahifani skanerdan o'tkazmaganmi yoki yo'qligini tekshirish kerak. Siz robotlardan foydalanishingiz mumkin. SQL tomonidan qidirish misoli va qidirish misoli

$ So'zlari \u003d preg_split ("/ [^ a-za-ya-y0-9] + / ', $ - -1, preg_clitty);

biz barcha so'zlarni olib tashlaymiz, biz barcha so'zlarni bitta reestrga o'zgartiramiz va so'zning asosini (ildizi) ajratib turamiz. So'zning tubini ta'kidlash uchun PHP-Sinfdan foydalanishni rejalashtirish yaxshidir, bu sizga rus, ingliz, ukrain, eston morfologiyasi yoki nemis tilini hisobga olgan holda so'zlarning ildizlarini ajratib turish imkonini beradi. Har bir til uchun lug'atlar 10-15 MB ni egallaydi. Serverda qo'shimcha dasturiy ta'minotni o'rnatishning hojati yo'q, hamma narsa eng keng tarqalgan xostingda ishlaydi. Kamchilik ildizning yoritilishi past. Kutubxona quyidagicha bog'liq:

$ Morphi \u003d $ yo'l. "FPMorphy /"; _Once ($ morphi. SRC / Umumiy.php); $ OPTS \u003d CAST ("Smect" \u003d\u003e phpmorfhy_storage_file, "Princt_by_SUffx" \u003d\u003e Princct_by_text "\u003d\u003e RAFLANADI," RAFT, "); $ Morphi \u003d yangi phpmorfhy ($ morfi. "Diks", "RU_RU", $ OPS);

FPMorfhy Ob'ektida uchta parametr mavjud:
Birinchisi, lug'atlar papkasining yo'lidir;
Ikkinchisi - "RU_RU" - UTF-8, "RUS" - 1251 y.
Uchinchisi - variantlar.

Variantlar muhim saqlash parametridan foydalanib, uchta qiymatdan birini olishi mumkin:

  • PhpMorfhy_storage_file (lug'atlarni butun xotiraga yuklamang, bu server resurslari bilan ishlash bo'yicha eng sekin variant, ammo server resurslari bilan ishlash bo'yicha eng tejamkor),
  • PhpMorfhy_storage_shm ("Dictionary - Maxsus lug'at faylini yuklab oling, php Shmop kengaytmasi talab qilinadi) yoki
  • PhpMorfhy_storage_Mem (shuningdek, agar Shmop ishlatilmasa, faylni butun xotiraga yuklab oling, operatsiya tezligi avvalgidan farq qilmaydi).

Virtual hostingda, ehtimol siz birinchi variantdan va ko'proq tezlikda serverda foydalanishingiz kerak, bu xotiradan foydalanib, imkoniyatlardan foydalanish yaxshiroqdir. Agar modulga tez-tez murojaat qilish rejalashtirilgan bo'lsa, sizning vazifalaringiz uchun variantni tanlang, bu umumiy xotira bilan foydalanish yaxshidir.

FPMorphy kutubxonasiga misol.

3. Endi biz barcha skanerlash va tahlil qilish natijalarini saqlaydigan ma'lumotlar bazasi jadvallarini yaratishingiz kerak:

// sayt sahifalarining havolalari, bosh sahifalar va e'lonlar ro'yxati // (Izlash natijalarini ishlab chiqarish uchun birinchi 300 sahifadagi belgilar ro'yxati). Agar post bo'lmasa, jadval yarating (ID) Agar bekor qilinmasa, "URL" (255) NULD SIZNI SAQLANMAYDI (128) Standart "") // saytning barcha so'zlari. // Word - Stemakerdan keyin qolgan narsa ("ildiz" deb ataganmiz // ovoz - bu so'z uchun ovoz balandligi natijasi. Agar biron bir so'z bo'lmasa, jadval yarating (Auto_incrite Auto_increment, Word '' ACOYUD '' 'ADOL) indeks_word induc_word-ni yarating. $ So`r -\u003e Kalom . (Word (8)) indeks_word_undound index. "$ Qidiruv -\u003e so'z." (Sound (4)) // Har bir satr "sahifa" sahifasida "KNT" sahifasida uchrashib, "KNT" sahifasida "Kalom" so'zi - bu indeks mavjud emas ('sahifa) NULL, "IN INFEFAGNED NOLD" yozuvi NULL, `CNT 'CNT' NOLD, NULL, NUCOR (sahifa, so'z))

Endi siz qidiruv so'zi so'rovi shaklini yaratishingiz kerak. Qidiruv so'rovining eng oddiy shakli quyidagicha ko'rinadi:

uning kodi quyidagicha:

Qidirmoq:

Saytni qidirish skriptini yuklab oling

Ushbu misolni yaratish uchun menda juda ko'p vaqt bor, shuning uchun uni pulga aylantirmoqchiman. Agar siz mening featni takrorlamoqchi bo'lsangiz - omad. Agar vaqtingizni qadrlasangiz, men pul evaziga vaqt almashtirishdan mamnunman. Hammasi bo'lib 2900 rubl (~ 46 $) Siz Sayt xaritasi generatori bilan to'liq ochilgan qidiruv skriptini olasiz.

Arxiv tarkibi:

  • fPMorphy / - so'zlarning ildizini olib tashlash uchun kutubxona
  • stemmer / - Tez algoritm so'zining asosini ta'kidlash
  • konfig.php - Sozlamalar Ma'lumotlar bazasi va siz foydalanadigan umumiy funktsiyalar bilan ishlash va ularni o'zingiz bilan almashtirish uchun
  • index.php - Qidiruv shakli + Qidiruv natijalari
  • o'rnatish.php - qidirish uchun MySQL ma'lumotlar bazasi jadvallarini yaratish
  • link_bar.php - sahifa navigatsiyasi
  • qidirish bilan ishlash uchun qidirish.php - sinf. Tarkibida usullar mavjud:
    • sound_ex ($ string) - so'z tovushini olish uchun rus ovozi
    • yangilanish ($ url, $ skanent \u003d 0) - sayt sahifalarining barcha sahifalarini kuzatish, tana, tavsifni ajratib ko'rsatish.
    • Parsingword ($ url, $ so'zlari) - Word-ni tahlil qilish va qidirish bazasiga qo'shing
    • Concwords ($ so'zlari) - Transmed massivida barcha so'zlarni ildizlariga almashtiradi
    • uRL_ShORS ($ url, $ baza \u003d »,, $ epp \u003d 0) - havolani, tashqi a'zolarni ajratish havolasini joylashtiring
    • is_Robotots ($ url) - robots.txt-da havolani tekshirish
    • Readurl ($ sayt) - Kurl, ishlov berish, qayta ishlash, qayta yo'naltirish
  • sayt xaritasi - Sayt xaritasi qurilishi
  • spider_http.php - o'qish va palakaga asoslangan sayt skaneri
  • spider_siteap.php - Sayt xaritasi asosida sayt skaneri

O'rnatish bo'yicha ko'rsatmalar:

  1. Qidiruv.ZIP arxivini qidirish papkasiga oching. Bunga skriptlardan o'rnatishga ruxsat berish 777.
  2. Ma'lumotlar bazasini config.php faylida tahrirlash, kerakli ma'lumotlar bazalari yaratiladi. Ma'lumotlar bazalari yaratiladi.
  3. Yugurish "/Search/ vspider_http.php" Skaner bazaviy jadvallarni to'ldiradi:
    Saytning barcha sahifalar jadvali, sarlavha, kalit so'zlar va tavsifda.
    So'zlar jadvali, uning sahifalarida topilgan so'zlarning ildizlari
    Ushbu foydalanish uchun mavjud sayt xaritasi asosida bazani shakllantirish mumkin, chunki bu foydalanish uchun "/Search/Sider_sitemap.php"
  4. Sahifalarda qidirish so'rovini joylashtiring. So'rov shakli:
    Qidirmoq:
  5. Chiqish formatini qidirish-da tahrirlash
  6. "Upirater.php" ni o'z ichiga boshlang; Yangilash ($ url);
    Har bir sahifani qo'shishda, o'zgartirish yoki o'chirishda
    $ Url - siz yangilashni xohlagan sahifadir.
    Sahifani saqlash o'zgargandan keyin qulay qo'ng'iroq qiling
    Agar sahifa 404 xato bo'lsa yoki u bo'sh bo'lsa, u ma'lumotlar bazasidan o'chiriladi.
  7. sayt xaritasi Map Sayt xariteap.xml-ni yaratish uchun "/search/Siteapeap.php"
    Robots.txt-dagi sayt xaritasiga yo'lni ro'yxatdan o'tkazishni unutmang. Sayt xaritasi: /Sarch/Siteapeap.xml

Saytni qidirish skripti

  • Robots.txt-da taqiqni hisobga olgan holda saytning barcha sahifalarini skanerlash
  • So'zni tanlash, hisoblash so'zlari bilan sahifalar matnini sotish
  • Sahifa sarlavhasidagi tanlov, kalit so'zlar, tavsif
  • Rus tili va kutubxonalarining morfologiyasini hisobga olgan so'zlarning ildizlarini ta'kidlash
  • Tez algoritm tomonidan so'zlarning asoslarini taqsimlash (tavsiya etilmaydi, skript matnida bombardimon qilingan)
  • Lug'atdagi so'zning yo'qligiga qarab skanerlash paytida rus tilini tekshirish
  • To'rtta xabar rejimi: 0-sumark, 1-Saytdagi xatolar va minimal ma'lumotni berishda, 2-chi ma'lumotnomada, 3-batafsil ma'lumotni berish
  • Eshitish so'zlarini qidiring. Rus sadosix.
  • Izlash natijalarini dolzarblik bilan tartiblang. Birinchidan, maksimal miqdorda barcha qidirish so'zlari mavjud bo'lgan sahifalarda ko'rsatilgan.
  • Topilgan natijalarni ishlab chiqing
  • Skript rus tilida rus tilida batafsil
  • Skript kodi PHP + MySQL-da amalga oshiriladi, to'liq ochilib, qo'shimcha kutubxonalardan foydalanmaydi. Sizga kerak bo'lgan hamma narsa to'plamda keladi.
  • Sayohat generatoringiz skaner tomonidan yaratilgan taglik asosida

    Skript:

  • hisobga olinmagan , REL \u003d Nofolt
  • barcha sahifalarda mavjud bo'lgan umumiy matnlarni qidirishdan olib tashlanmang.

Foydalanish to'g'risidagi bitim:

  • Siz qabul qilingan koddan biron bir o'zgarishlar bilan foydalanishingiz mumkin, siz manbaga havolani belgilashingiz shart emas.
  • Siz uni qayta tiklash huquqi, erkin yoki cheklangan kirish joyida, shuningdek har qanday shaklda nashr etish huquqiga ega emassiz.
  • Boshqa barcha huquqlar muallif tomonidan saqlanadi.
  • Muallifga savollar, sharhlar, tilaklar bilan murojaat qilishingiz mumkin. Kontaktlar.

Diqqatli bo'ling! 2900 rubl (~ 46 $) uchun siz bir-biridan sezilarli darajada farq qiladigan ikkita yozuv variantlaridan birini tanlashingiz mumkin.
UTF-8 kodlashdagi sayt uchun qidirish skripti UTF-8 kodlashi (UTInik / Unicode) uchun muntazam ravishda amalga oshiriladigan sahifalarni ajratib turadi. -8.
Windows-1251 kodlash saytida sayt uchun skript faqat bitta tog 'kododlash str *, definmed-kodlar bilan ishlaydigan strelka, bir nechta yo'lli kodlar uchun mo'ljallangan.

Siz kirishingiz yoki ro'yxatdan o'tishingiz mumkin! Yoki ro'yxatdan o'tmasdan
Yuklab olish tugmachasini bosganingizda, ushbu sahifada ko'rsatilgan skriptni ishlatish shartlari bilan qabulni tasdiqlaysiz.
Sizning balansingizdan 2900 rubl (~ 46 $) miqdorida mablag 'beriladi va fayl yuklangan.

Qidiruvni amalga oshirish uchun qisqacha ma'lumotnoma: Satrlarni qayta ishlash, xizmat ko'rsatadigan belgilar, ma'lumotlar bazasi, mantiq, yo'lak, ziddiyat, dolzarblik.

1 qism: general Vedomosti

Satrni qayta ishlash

Avvalo, siz ipni tutqichlar bilan kesishingiz kerak.

$ Search \u003d Subtrr ($ qidirish, 0, 64);

Foydalanuvchiga 64 ta belgi qidirish uchun etarli bo'ladi. Endi men "g'ayritabiiy" ramzlarini qichqiraman.

$ qidirish \u003d preg_replace ("/ [^ \\ xFF \\ s] /", ", $ qidirish);

Nazariyada foydalanuvchiga juda qisqa so'zlarni qidirish imkoniyatini berish mumkin emas - boshqa narsalar qatorida u serverni kuchli yuklaydi. Shunday qilib, ikkita harfdan uzunroq bo'lgan so'zlarga ko'ra, faqat ikkita harfdan uzunroq bo'lgan so'zlarga ko'ra qarashga ruxsat berish (agar cheklov ko'proq bo'lsa, "(1, belgilar soni)" (1, belgilar soni) "ni almashtirish kerak.

$ yaxshi \u003d Trim ("Prag_Replace (" / S (1,2)) \\ s / ",", ",", ",", ",", ",", ",", ",", ",", "," ",", "", ",", ",", ",", ",", "", "" "," "", "", ",", "", "", "", "", "" "," "", "" "," ",", ",", "," "", "" "," "", "", "", "", "", "", "" "," "", "" "," "", "" "," "," ",", ",", "", "", "" "))))"

Va yomon so'zlarni almashtirgandan so'ng - ikki bo'sh joyni siqish kerak (ular qisqa so'zlarni to'g'ri qidirish uchun qilingan).

$ yaxshi \u003d Eerge_eplace ("+", ", $ yaxshi);

Aytaylik, biz foydalanuvchini qidirish mantiqni tanlash imkoniyatini berishni istaymiz - barcha so'zlarni yoki faqat bittasini qidiring. Agar siz Yandex-dagi kabi bajarmoqchi bo'lsangiz - ikkita amperni "va" (Word1 && Word2 && Word3) yoki qandaydir tarzda, keyin men maslahatchi emasman. Kichik Imhone veb-saytidagi qatorlar bo'lgan shamanizm sarflanmagan vaqtni oqlamaydi. Shuning uchun men qidiruv formasini chizaman:

Va qidiruv skriptida foydalanuvchi joriy qilinganligini yana bir marta tekshiring:

Agar (($ (mantiq! \u003d "Va") && ($ mantiq! \u003d »Yoki"))
$ Logic \u003d "yoki";

Qanday mantiq ishlatiladi - quyida.

Qidiruv statistikasi

Foydalanuvchiga stolning qatorlarini topib, darhol xabardor qilish yomon emas. Buning uchun ma'lumotlar bazasiga qo'shimcha so'rov amalga oshiriladi:

$ So'rov \u003d ""%. Str_Replace ("%,%,%,"% "kabi"% "kabi" "kabi"% "kabi.

Muayyan so'zlar bo'yicha statistika uchun siz quyidagilarni amalga oshirishingiz mumkin:

$ Wicor \u003d portlash ("", $ qidirish); Whe (list ($ k, $ v) \u003d har bir ($ (v)\u003e 2) ($ V)\u003e 2) $ status \u003d "$ V" (MySQL_Quveri) (MySQLL_Quveri) % $ V% '')); yana $ stat \u003d "$ V: qisqa";); $ writ_stats \u003d" So'z statistikasi: ". Joylashtiring (" ", $ stat)."
"; Yo'qolgan ($ str);

Poezdni ishlab chiqarish natijalari

Xo'sh, qidirish natijalari va qidiruv natijalari sonining sonini, avtoulovni qidirishni amalga oshiring - bir juftlik bir juftlik. O'zgaruvchan $ sahifasini ($ 0 emas, balki kamida 0 dan kam bo'lmasligi kerak). Chiziqlar sonini hisobga olgan holda, biz sizga kerakli maydonlarni yozamiz. Va keyin qo'shing

Agar ($ sahifa \u003d\u003d 0) $ so'rov. \u003d "RooS_in_age"; Elsetion $ so'rov. \u003d "Cheklov". $ Sahifa * $ RooS_in_page. ",". $ rows_in_page;

(Sintaksisi: chegarasi<кол-во строк> Ikkala cheklovi.<кол-во строк отступа>, <кол-во строк>)

Bunday so'rovning bajarilishi natijasida biz sahifada namoyish qilishni xohlagan qatorlarni olamiz. Siz navigatsiya panelini yoqish uchun keyingi va oldingi sahifaga havolalarni jalb qilishingiz mumkin bir nechta sahifalar.

Agar ($ sahifa\u003e 0) Chop etish (" oldingi sahifa"); agar ($ sahifa) bo'lsa<$results_amount/$rows_in_page) print ("keyingi sahifa");

Yoritgich

Matndagi so'zlarni engil yoki qalin shrift bilan ajratish uchun faqat quyidagilarni bajarishingiz kerak:

$ Guc_Replace ("", "|", $ Yaxshi);

Bo'shliqlar (va ular bizning so'zlarimizda bitta so'z bor, boshqa hech qanday joyda hech narsa qondirmaydi, bundan tashqari, biz ularni oxirigacha kesib tashlamaymiz), oddiy iboralardagi variantlarni almashtirish uchun etarli. "Yomon" so'zlari biz ta'kidlamaymiz, chunki ma'lumotlar bazasida ular qidirmayapti :). Biz yozadigan matnni ko'rsatadigan kodda:

$ ("Matn"] \u003d Eerg_Replace ($ $. \\0"$, $ Rous [" Matn "]);

Muammoni yozgandan so'ng, men shoshildim, yozib, yozdim va "Backlig". Bu erda emas edi! Mening matnimdagi HTML teglari bor, shuning uchun men juda ko'p o'ylashim kerak edi ... Bu narsa shuni aniqladi (ta'kidlash uchun so'zlar bilan satr):

$ matn \u003d Eergi_Replace ("\u003e ([^<]*)($words)", ">\\1\\2", $ Matn";

Siz tomosha qilishingiz kerak, yorliqda hech qanday so'z yo'q. Biroq, bunday almashtirishning resurslari intensivligi (mening K6-266 oyidagi 5 soniya ichida, etti soniya). Qayg'uli.

Bunday usullarni qo'llash, birinchi navbatda, foydalanuvchi harakatining erkinligini cheklash va uni a) berish uchun a) Sinovdan tashqari yukni o'rganish uchun (masalan, matnning megabaytini yuborish) uchta harfdagi so'zlar (ibora noaniq bo'lib chiqadi, ammo yozmadim :) shunga qaramay :) shunga qaramay :) Shunday qilib, skript ma'lumotlar bazasiga 250 marta ko'tarilishi uchun maxsus so'rovlar chizig'iga zarba berish natijasida xato xabarini ko'ring . Ikkinchidan, foydalanuvchi uchun ba'zi qulayliklar traktor va yoritgich hisoblanadi.

Men bunday iborani "xavfsiz va qulay qidiruv" ni eslayman

2-qism. Qisqa vaqt haqida qisqacha

Oleg YUSOV

Kelishuv uchun qidiruv natijalarini ko'rsatish uchun quyidagilar zarur:

  • Kerakli var o'lchamlari yoki matn maydonlarining har qandaylari (kichik matn, o'rta/tisextext va boshqalar) To'liq matn matnli kalitlarini yarating:

    Tekshirish stoli jadvalini qo'shish To'liq matn qo'shish (maydon)

  • Keyingi - hatto osonroq:

    $ So'rov \u003d "Select (" $ qidiruv materiallari "ga qarshi (" $ qidiruv materiallari "ni Relev Desc tomonidan jadval tartibidan Relev sifatida" Seleev "ni tanlang."

Izohlar:

  • Odatiy bo'lib, kamida 4 ta belgidan iborat so'zlarni qidirish. FT_STATIK.C manbaida #defin Min_Word_len 4-ni o'rnatish kerak, garchi mening fikrimcha, uni tahrirlash kerak emas.
  • Qidiruv shaklidagi% belgilar mavjud emas, qidiruv maydonidagi so'zlar qismlar ro'yxatidan foydalanib qadoqlangan.
  • FT_STISTATIC manbaida so'z ayirboshchilarining ro'yxati boshqariladi.
  • Kamida o'nlab yozuvlar, dolzarblikni hisoblashni boshlash uchun stolda kerak.
  • Relev maydonini qaerda bo'lsa, undan foydalanish mumkin emas:

    Relev\u003e 0 buyurtma bo'yicha Relev\u003e 0 buyurtma bo'yicha Selev ("$ qidiruv materiallari" ni tanlang ("$ qidiruv materiallari" ni tanlang

    garchi siz:

    ("$ Qidiruv materiallari" ga qarshi ("$ qidiruv materiallari" ga qarshi ("$ qidiruv materiallari") ga qarshi ("$ qidiruv materiallari") ga qarshi ("$ qidiruv materiallari") ni tanlang.

  • Tezlik etarlicha yuqori - hatto ba'zi hollarda qidiruv kabi tezroq
  • Yuqoridagi barcha ishlari MySQL 3.23.23 versiyasidan boshlanadi

To'liq matn ko'rsatkichlarini yaratishda bir nechta maydonlar uchun 2 ta variant mumkin:

Jadval jadvali (dalada 115), dala2 matn, kasb (maydoni, dala2)) Jadval jadvali (dala1 Varar (LIV1), Fultt Matt (SPORT2))

Birinchi holda, so'rov mumkin:

Maslahat maydonidagi *, maydon1, dala2 ("$ qidiruv materiallari" ga qarshi ("$ qidiruv materiallari" ga qarshi)

muhokislik darhol barcha sohalardan hisoblanadi. Ikkinchi holatda bunday so'rov xatoni keltiradi. Bu erda biz quyidagicha dollarni hisoblaymiz:

Relev dehk tomonidan jadval tartibidan Relev stolli tartibidan ("$ qidiruvlar" ga qarshi ("$ qidiruv materiallari" ga mos keladigan maydonni tanlang

Ikkinchi variant so'rovlarda biroz murakkabroq, ammo menimcha, yaxshiroqdir, chunki Qidiruv moslashuvchanligini oshiradi - har bir soha uchun, masalan, muhimligi va maydonlar ularni ushbu koeffitsientga ko'paytirish uchun maydonlar bilan belgilanishi mumkin. Qidiruv iborasi katta koeffitsient bilan dalada bo'lish uchun "ko'proq" bo'ladi. Masalan, agar biz indekslangan resurslar ma'lumotlari sahifalarini qidirsak, sahifaning nomi Meta yorliqlari tavsifi yoki kalit so'zlarning asosiy koeffitsienti bilan belgilanadi.

3 qism: dolzarblik bilan mashqlar

Avval Fultextext indeksini qanday qo'shish mumkin:

MySQL\u003e Angliya stol Articlea-ni qo'shish (ZTEnt); Xato: "ZTEXT" ustuni MySQL tipidagi "Artyam" turi bilan kalit shaklida ishlatilishi mumkin. \u003e Matnlia Articlea-ni qo'shish Matchext (Ztext); so'rov OK, 36 pog'onaga ta'sir ko'rsatdi (10.00 sekund)

Matn indekslari faqat myisam turlarida amalga oshirilishi mumkin. Matnlar jadvaldan olingan va indeks fayliga tushiriladi va baza o'sadi. So'rovlarga kelsak. Relev maydonini qaerda bo'lsa, undan foydalanish mumkin emas:

Relev\u003e 0 buyurtma bo'yicha Relev\u003e 0 buyurtma bo'yicha Selev ("$ qidiruv materiallari" ni tanlang ("$ qidiruv materiallari" ni tanlang

Garchi siz:

("$ Qidiruv materiallari" ga qarshi ("$ qidiruv materiallari" ga qarshi ("$ qidiruv materiallari") ga qarshi ("$ qidiruv materiallari") ga qarshi ("$ qidiruv materiallari") ni tanlang.

Hisoblangan maydon, albatta, barcha sintaksis qoidalarida foydalanib bo'lmaydi, ammo quyidagilardan foydalanish mumkin:

Relv dehk tomonidan 0 tartibini bo'shatish\u003e 0 buyurtma bo'yicha Selev-ni stolda ("$ qidiruv materiallari" ni tanlang)

O'yinni qidiring, Oleg yozganidek, faqat so'z bilan amalga oshiriladi. ... Biroq, siz faqat o'zingizni saralashingiz mumkin va shunga o'xshash tanlashingiz mumkin (bu, albatta, ishlashiga ta'sir qiladi, hatto qancha narsani bilmayman).

"Reeve\u003e 0" holatini olib tashlaymiz, biz saralashni qoldiramiz. Qolganlari avvalgidek, natijada bo'lgan satrni ishqalang va operatorlar kabi bir nechta so'rovga murojaat qiling:

Relev desci tomonidan "% $ Word2%" yoki "% $ Word2%" yoki "% $ WIDE2%" buyrug'i bilan "$ soxtali" yoki maydonga o'xshash maydonga moslang ("$ qidiruv materiallari" ni tanlang.

4 qism: taklif qilish boshlandi

MySQL ma'lumotlar bazasida dolzarblikni saralash bilan mavzuni qidirishda davom etyapman.

MySQL ma'lumotlar bazasining so'nggi versiyalarida dizaynga qarshi to'liq matnli indeksatsiyalash va mos keladigan maydondan foydalanish uchun taqdim etadi. Biroq, barcha serverlar mysql-ning so'nggi versiyasi emas va barcha hosting provayderlari tizimning ishonchliligi sabablari uchun dasturiy ta'minotni yangilashni xohlashmaydi.

Bir vaqtning o'zida men dolzarblikni saralashni qidirish bir nechta so'rovlarda bo'lishi kerak deb taxmin qildim va shuning uchun uni umuman olmaslik yaxshiroqdir. Munutsiyaning fikriga ko'ra, men turlicha tashrif buyurgan savollarga javob berishi mumkin, ammo men qo'rqib, bunday dizaynni taqdim etdim.

Biroq, Sayt-Ska sayt quradigan firmalar xodimi, ular o'z saytlarida qatnashadigan qidiruv tizimini tuzdilar. Men albatta so'rovni eslayman, men buni takrorlashga harakat qilaman:

Sarlavha, Sana_format (Moliyaviy_Date,% E.% C.% Y), agar ("% Word1% kabi matnli matn" bo'lsa, agar ("% Word1%" 9 bo'lsa, 3 * 10, 0) , 0) + agar ("% Word3%", agar "% World3%",% "% Word1%" yoki matn kabi "%" kabi matnlar bilan bog'liq bo'lgan. "RESFESSECESSECT, Moddiy_Date Decs" tomonidan "% Word3%" buyrug'i

Bu juda g'alati ko'rinadi, lekin u hatto MySQLning eski versiyalarida ishlaydi. Men ushbu so'rov bilan ish tezligini taqqoslashga harakat qildim:

Sanoat, Sane_formatni tanlang ("% Word1 Word2 Word3" yoki "% Word2%" kabi matnga mos keladigan jadvalga muvofiqligi. "% Word3%" buyrug'i "% Word3%" buyrug'i bilan REDVEECESSESS, Calcal_Date Decs

O'rtacha, universal so'rovning tezligi yangi dizaynlardan foydalanishdan ikki baravar kam. Bu juda mantiqiy narsa - shunchalik ko'p qirrali narsa, resurs intensivligi qanchalik ko'p.

Keling, bunday so'rovni avtomatik ravishda qurishga harakat qilaylik. Uzun satrni, shuningdek barcha noto'g'ri belgilar va qisqa so'zlarni o'chiring. So'rovni chizing.

$ So'rov \u003d "Sarlavha, Sana_formate,% E.% C.% Y"% Y "% Y"% Y "'. (Suctr_cuct ($ Suct_Cals). + 1). "* 10, 0) + agar ("% ","% ", $"% ", $ 0, 9, 9, 0) "%" ga o'xshash matnning dolzarbligi sifatida. Str_Replace ("%", $ "%" yoki matnli "%", $

Juda qiyin emas. To'fonlardan ishonchlilik va himoya qilish uchun siz so'rovda so'zlarning sonini cheklashingiz mumkin.

Oldingi nashrlarga ba'zi qo'shimchalar

Jadvalda topilgan satrlarning umumiy soni. Albatta qidiruv natijalarini namoyish qilish uchun siz cheklangan bayonnomadan foydalanishingiz kerak (har safar ushbu parametrni shakllantirish, tayyor funktsiyalardan foydalaning). Agar so'rovda hech qanday guruh operatsiyalari amalga oshirilmasa, darhol so'rovda (*) php mysql_num_num_num_num_ows () funktsiyasidan emas. Siz katta jadvallarni tekshirishingiz mumkin. Agar guruh operatsiyalari ishlab chiqarilsa, biz hisobdan so'raymiz (aniq)<поле, по которому группируем>), lekin guruhsiz.

Yorug'lik. Agar matnlarda HTML teglari bo'lmasa, yashash osonroq

$ Matn \u003d preg_replace ("/ Word1 | Word2 | Word3 / i", " \\0", $ Matn";

Agar teglar matnda ishlatilsa, ya'ni uchta variantni ajratish b) B), foydalanuvchi foydalanuvchini ko'rmaydi (bu juda qiziq foydalanuvchidan tashqari), shunda siz indeks maydonini yaratishingiz mumkin Teglar va belgilar bo'lmaydi [^ \\ w \\ xff \\ xff \\ s] bo'sh joylar bilan almashtiriladi (bu belgilar qidiruv satridan kesilgan, deb qidirish amalga oshirilmaydi). Ushbu holatda qidirish va yoritgichda aniq indeks qilish. c) Ilgari Teglarni srip_tags () funktsiyasi bilan kesilgan faylni odatiy maydondan ajratib oling.

Har doimgidek qidiruv kodi to'liq versiyasi, chunki har doimgidek fayllar ro'yxatida.




Hali ham savollar mavjud yoki tushunarsiz narsamiz - o'zimizga xush kelibsiz
11.1K.

Har qanday saytdagi eng mashhur va zarur funktsiyalardan biri bu maxsus shakl yordamida amalga oshirilgan qidiruv. Ushbu funktsional imkoniyatlarga tashrif buyuruvchilarga saytdagi tarkibini tezda topishga imkon beradi.

Bugun biz saytlar bazasi jadvallaridan intervyu olib boradigan va saytdagi joriy menejerlar haqida ma'lumotni namoyish etadigan maxsus shakldan foydalanib, saytni qidirishni qanday qilishni aytib bermoqchimiz. Siz hozirgi xodimlar haqida ma'lumot beradigan ma'lumotlar bazasi jadvallarini yaratishni o'rganasiz.

PHP-dan foydalanib qidirish shakllarini ishlab chiqish, shuningdek SQL bilan tanishish ( Tuzilgan so'rovlar tili.) - ma'lumotlar bazalarida keltirilgan ma'lumotlarni to'plash, yozuvlar va o'zgartirish uchun maxsus til. Boshlashdan oldin, biz buni tavsiya qilamiz loyiha fayllarini yuklab oling.

Sizga kerak bo'lgan narsa

  • MySQL ma'lumotlar bazasi bilan ishlash vositasi.
  • PHP qo'llab-quvvatlashi bilan mahalliy yoki masofaviy server.
  • Matn muharriri.

Ma'lumotlar bazasini yarating

Agar siz xostingda ma'lumotlar bazasi bilan shug'ullanishingiz mumkin bo'lsa, tegishli ko'rsatmalar yoki yordam olish uchun ishonch bilan bog'laning. Ma'lumotlar bazasi yaratilgandan so'ng, siz uni ulash, stol yaratish va unga kerakli ma'lumotlarni yozishingiz kerak bo'ladi.

MySQL-ni boshqarishning eng mashhur vositasi php m admini, ushbu vositamiz bizning hozirgi qo'llanma uchun etarli bo'ladi.

Stol yaratish

Bizning stolimiz quyidagi formatda yaratilishi kerak:

Ustun nomi. Ma'lumotlar turi Uzunligi. Null yoki null emas Birlamchi kalit? Avtomatik o'sish.
Id Int. 1 Null emas Ha Ha
Ism. Varar. 50 Null emas Yo'q Yo'q
Familiya. Varar. 50 Null emas Yo'q Yo'q
Elektron pochta Varar. 50 Null emas Yo'q Yo'q
Telefon raqami. Varar. 15 Null emas Yo'q Yo'q

Ma'lumotlar bazasi ustunlik va satrlardan iborat, chunki Excel kabi. Birinchi ustun sizga ismlar bo'yicha ma'lumotlarni aniqlashga imkon beradi. Keyinchalik ma'lumotlar ustuni (ma'lumotlar turi), bu ustundagi ma'lumotlar turini ko'rsatadigan ma'lumotlar turiga kiradi. Vaqtinchalik maydon jadval ustuniga maksimal xotiraning maksimal miqdorini (saqlash) ko'rsatadi. Biz ko'proq moslashuvchanlikni beradigan o'zgaruvchidan foydalanamiz. Boshqacha qilib aytganda, agar to'liq ismning uzunligi 50 ta belgidan kam bo'lsa, unda zaxiralangan joyning faqat bir qismi egallab olinadi.

Va bu xodimlar orasida bo'sh qiymatlar bo'lolmaydi ( null, bo'sh). Birinchi qator sariq rangda ajratilgan, chunki ID ustunligi bizning asosiy kalitimiz. Ma'lumotlar bazasidagi asosiy kalit har bir kirish noyob ekanligini ta'minlaydi. Ushbu ustun avtokrilni qo'llaydi, bu bizning ma'lumotlar bazamizdagi har bir kirish avtomatik ravishda noyob raqamga tayinlanadi.

Biz xodimlar vakillarini stolga taqdim etamiz

Siz uni stol bilan tushuntirib, uni ma'lumot bilan to'ldirishni boshlang. 6 ta yozuv tartibni yodda tutish uchun etarli. Quyida men sizga o'zingizning misolingizni taklif qilaman:

Ustun identifikatori. Ism. Familiya. Elektron pochta Telefon raqami.
2 Rayan. Butparast 417-854-8547
3 Brent. Kallahan 417-854-6587

Shaklni ishlab chiqish

Google-dan qidirish shaklini yaratish uchun har qanday mos yozuv muharririni oching. Bepul PSPod-dan foydalanishni tavsiya qilaman. Siz har qanday matn muharriridan foydalanishingiz mumkin, u erda sintaksisning yorug'ligi ta'minlangan. Bu PHP kodini yozish va disklash jarayonini sezilarli darajada osonlashtiradi. Qidiruv shakli uchun sahifani yaratish orqali uni saqlash uchun uni saqlab qolishni unutmang .PTP formatida, aks holda PHP kodi to'g'ri ishlov berilmaydi. Hujjatni saqlab qolishingiz bilanoq, quyidagi belgilarni ulang:

Kontakt qidirish:

Kontaktlarni batafsil izlash

Siz ism yoki familiya bo'yicha qidirishingiz mumkin

Agar siz HTML bilan tanish bo'lgan bo'lsangiz, unda hech bo'lmaganda siz hech bo'lmaganda shaklning ochilish yorlig'iga aniq bo'lsin. Ushbu yorliqda butun kodning eng muhim elementidir - harakat atributi. Bizning shaklimizning harakatlari sifatida biz bizning faylimizning ismini ko'rsatdik va keyin so'rov satrini qo'lladik. boring.”.

Mezonga muvofiqligini tekshiring

Foydalanuvchi ism yoki familiyaga kirganda, tasdiqni bosing, shakl ma'lumotlarni o'z-o'zidan uzatadi va oxirida so'rov satrini qo'shadi " boring.". Ushbu bosqichda biz so'rovlar satrining mavjudligini tekshiramiz. Agar natija ijobiy bo'lsa, qidiruv natijalarini namoyish eting.

Talab qilingan natijalarni ishlab chiqishdan oldin, biz qayta ko'rib chiqishimiz kerak: (1). (2) So'rovlar satrida quyidagilar mavjudmi, (3) pastki yoki yuqori registrda kiritilgan qidiruv so'rovi ? Agar biron-bir tekshiruvlarning hech biri ijobiy natija bersa ( to'g'ri.), keyin biz biron bir harakatni amalga oshirishimiz shart emas.

Boshlash uchun, yopilgan yorliqdan keyin PHP qidirish Sayt qo'shing:

Birinchidan, biz PHP kod blok yorlig'ini ochamiz ".

Ushbu teg juftligi ichidagi har qanday PHP kodi server tomonidan bajariladi. Keyin biz shakl tasdiqlanganligini tekshiramiz:

Qidiruv so'rovini kiriting

"; } ?>

Biz o'rnatilgan Imkoniyat funktsiyasidan foydalanamiz, bu Bool turining qiymatini qaytaradi va unda $ _post-ni joylashtiramiz. Dasturlashda mantiqiy ibora bizga olinishi yoki haqiqiy yoki yolg'on bo'lishi mumkin.

Shunday qilib, agar funktsiya haqiqatni qaytarsa, forma tasdiqlandi va biz kodning bajarilishini davom ettirishimiz kerak. Agar funktsiya noto'g'ri qiymatni qaytarsa, unda biz xato xabarini namoyish etamiz. Qidiruv_submit.php faylida barcha berilgan kodni saqlang.

Qidiruv so'rovini kiriting

"; } } } ?>

Biz asosiy narsaning boshqa shartli mantiqiy ifodaga sarmoya kiritamiz, ammo bu vaqt ichida biz bir qatorda $ _getdan foydalanamiz " boring.". Search_Go.Php faylidagi o'zgarishlarni saqlang.

Endi tashrif buyuruvchilarga faqat pastki yoki faqat pastki qismida joylashgan so'rovlar satri kiritilishi mumkinligiga ishonch hosil qilishimiz kerak. Shuningdek, tashrif buyuruvchi tomonidan kiritilgan qidiruv mezonlarini hisobga olish uchun bizda hisob berish kerak. Mehmonga kiritilgan ma'lumotlarni muntazam ifoda yordamida tekshirish yaxshidir:

Biz ikkalamizning ikkinchi shartli mantiqiy ifodaga egamiz. Bu safar biz tekshiruvni tekshirish uchun muntazam ifodadan foydalanamiz. Biz o'rnatilgan preg_mach funktsiyasidan ikkita parametr bilan foydalanamiz: muntazam ifoda va tekshirish kerak bo'lgan shakl maydoni.

Bizning holatda, u "Ism" dalasi bo'ladi ( ism.). Mehmon tomonidan belgilangan qidiruv variantini olish uchun biz o'zgaruvchi $ ismini yaratamiz va u SQL so'rovida ishlatiladigan shakldagi post qiymatini ulang. Endi biz amalga oshirdik: (1) Shakl ma'lumotlarini yuborish, (2) So'rovlar satrini o'z ichiga oladi va (3) tashrif buyuruvchi sarlavha yoki kichik harfga kirdi. Va bu cheklarning barchasi ma'lumotlar bazasiga o'zgartirish kiritishdan oldin sodir bo'ladi. Barcha o'zgarishlarni saqlang.

Natijalar ulanadi, ma'lumotlar bazasi jadvalidan so'rov va qaytish

Jadvaldan ma'lumotlarni olish uchun avval saytda qidirish skriptingiz Serverga ulanishingiz kerak. Buning uchun biz quyidagi koddan foydalanamiz:

", "") Yoki o'lish (" Men ma'lumotlar bazasiga ulana olmayman, chunki: ". Mysql_rror ()); boshqa (echo)

Iltimos, qidiruv so'rovini kiriting

"; } } }?>

Biz $ DB o'zgaruvchini yaratamiz va uchta parametrni amalga oshiradigan MySQL MySQLLON_CONLONE funktsiyasiga bog'lanamiz: ma'lumotlar bazasiga ega server ( lokalhost., agar siz mahalliy ishlayotgan bo'lsangiz), login va parol.

Shundan so'ng, biz o'rnatilgan PHP funktsiyasini ishga tushiramiz, bu ma'lumotlar bazasiga ulanmasa, kodni keyingi bajarishni to'xtatadi. Xato sababini qaytaradigan xato ma'lumotlarini ochib, xato ma'lumotlarini ko'rsating, bu xato ishini qaytaradi. Search_ConnectDB.Php faylini saqlang.

Iltimos, qidiruv so'rovini kiriting

"; } } } ?>

Mydb deb nomlangan o'zgaruvchini yarating va uni o'rnatilganga bog'lang MySQL funktsiyasi MySQL_Selece_dbVa keyin yaratilgan ma'lumotlar bazasining nomini ko'rsating. Keyinchalik biz SQL so'rovidan foydalanib, SQL so'rovidan foydalanib, ism o'zgaruvchisi bilan suhbatdan foydalanamiz, unda tashrif buyuruvchi tomonidan kiritilgan qidiruv parametrlari mavjud:

Iltimos, qidiruv so'rovini kiriting

"; } } } ?>

Ma'lumotlar bazasi stolida biz $ SQL o'zgaruvchini yaratamiz va uni SQL so'rovini o'z ichiga olgan satrga bog'laymiz. Biz tanlash bayonotidan ID Ustunlar va kontaktlar jadvalidan olingan ism va familiyadan foydalanish uchun biz tanlangan bayonnomadan foydalanamiz. Keyin biz qidiruvni toraytirish uchun ko'rsatma va familiyani nomingiz va familiyasini ishlatamiz.

Ichki operator bilan birgalikda biz foiz belgisi (%) - 0 yoki boshqa belgilar, shuningdek, qidiruv satridan o'zgaruvchan ismni qaytaradigan maxsus monitordan foydalanamiz. Natijada ( mutaxassis bilan birgalikda) Ma'lumotlar bazasi jadvalida har qanday tegishli ism topadi. Siz butun jarayonni quyidagicha tasvirlashingiz mumkin: " Biz kiritilgan tashrif buyuruvchiga mos keladigan kontaktlar jadvalidan ism va familiyani tanlaymiz" Search_querer.php faylini saqlang.

Iltimos, qidiruv so'rovini kiriting

"; } } } ?>

Biz o'zgaruvchi $ 1 natijasini yaratamiz va MySQL_quarerery () funktsiyasini $ so'rovda kiritib, unga tegishli qiymatini belgilaymiz. Endi bizning so'rovimiz natija o'zgaruvchisida saqlanadi. Natija natijalarini PHP-da chiqish uchun biz tsikl yaratamiz va keyin ma'lumotlarni keltirilmagan ro'yxatdagi ma'lumotlarni namoyish etamiz:

n "; echo"

  • " . "
  • n "; echo""; Aks sado"

    Iltimos, qidiruv so'rovini kiriting

    "; } } } ?>

    Birinchidan, biz bir muncha vaqt tsiklni yaratamiz, uning ichida bir xil o'zgaruvchan o'zgaruvchini yaratadi va mysql_fchet_array funktsiyasining qaytish qiymati bilan boshlanadi, bu bizning SQL so'rovi joylashgan natijada. Bir necha tsiklning ichida biz o'zgaruvchining qiymatini har bir ustun qiymatiga bir xil nom bilan belgilaymiz. Keyin biz buzuq ro'yxatga qadriyatlarni olamiz.

    Ikki ballga e'tibor berish juda muhim: (1) ichkarida siz qatorlar o'zgaruvchisining qiymatlarini belgilashingiz shart emas, chunki qiymatlar to'g'ridan-to'g'ri ketma-ket massivdan olinishi mumkin; (2) Fayl nomidan foydalanadigan langar yorlig'i va asosiy kalit bilan birga. Buning sababi shundaki, ko'plab qidiruv elementlarida dastlab ko'rsatilmaganligini anglatadi.

    Biz faqat nomni yorliqning oxirida ko'rsatib, ismini ko'rsatayotganimiz sababli, biz identifikatordan xodimlar haqida qo'shimcha ma'lumot beradigan qo'shimcha so'rov uchun foydalanishimiz mumkin. Faylni saqlang va PHP qidirish saytini sinab ko'ring ( qidirish_display.php.).

    Biz jadvalni olib tashlaymiz

    Natijalar tartibsiz ro'yxat shaklida namoyish etiladi, ammo nuqta shundaki, bizda tabga kerak emas. Undan qutulish uchun faylingiz boshida quyidagi CSS qoidasini qo'shing:

    Harf bo'yicha qidirish

    Harflar bo'yicha qidirishni amalga oshirish uchun faqat bir nechta qo'shimcha kodlar talab qilinadi. Ushbu qulay funksiyani tashrif buyuruvchilar uchun qo'shing. Shunday qilib, ular nomi yoki familiyasida mavjud bo'lgan afsunlangan xodimlarning vakillarini topishlari mumkin.

    Forma yopilgan yorliqdan so'ng quyidagi kod satrini qo'shing:

    A | B | K K.

    Biz yorliqni bog'laymiz Konstitutsiyadan foydalanib so'rovlar qatoriga va uni ma'lum bir harfga tenglashtiring. Harflar bo'yicha ko'rsatilganidek, qidiruv funktsiyasini amalga oshirish uchun biz quyida ko'rsatilganidek, quyidagi kodni yopgandan so'ng, quyidagi kodni qo'shishingiz kerak:

    ) // Scrict ($ _ ($ _ ni [$ _ olish [$ _ olish [$ _ olish [$ _ ni olish [$ _ ni olish [$ "] (MySQLL_Connect (" Server Home "ga ulanish , "Foydalanuvchi nomi", "Parol") yoki: "Men ma'lumotlar bazasiga ulana olmayapman (" Mysql_elect_db ("O'zDATABAZ"); // - "% ni"%. $ harfi kabi "%. $ harfi"%. "%. MySQL so'roviga $ \u003d/sql_quvery ($ sql); // - Hisoblash natijalari $ $ raqamlar \u003d mysql_num_rows ($ ism); echo "

    ". $ juda ko'p." Natijada ". $ harf."

    "; // - tsiklni boshlash va natijalarni saralash. \u003d $ "ID"]; // - natijani echo massivida chiqish "
      n "; echo"
    • "." "Mening birinchi ism.". $ Familiya. "
    • n "; echo"
    "; } }

    Bu erda biz saytni qidirish skriptsiyasining to'rtta parchasini o'zgartirdik:

    • Biz Issiqlik () funktsiyasidan foydalanamiz va unda $ _get _gete _lbe-ni belgilaymiz va keyin qiymat bo'yicha tekshiramiz;
    • O'zgaruvchan $ harfini yarating va $ _get bilan bir qatorda uning qiymatini yarating;
    • SQL so'roviga o'zgaruvchan xat qo'shing;
    • Hisoblanadigan qatorlarni olgan iborada harf o'zgaruvchini belgilang.

    Qidiruv_byletter.php faylini saqlang va natijani tekshiring.

    Muayyan xodimni qidirish

    Quyida ko'rsatilgandek, siz o'zingizdagi noyob id orqali yuboriladigan xodimlarning qolgan qismi haqida ma'lumotni namoyish qilish uchun quyidagi kodni yopgandan so'ng, quyidagi kodni qo'shishingiz kerak:

    ) // skriptning oxiri ($ _ olish) ($ _ ni ["Id] [" ID] ["ID"] ("ID"] ("ServQnl_connect" ("Server nomi", "Foydalanuvchi nomi", "Ma'lumotlar bazasiga ulanish" ("Server Home", "DateName", "Ma'lumotlar bazasiga ulanish" ("Server Home", "Data-server", "Ma'lumotlar bazasiga ulanish" ("Server Home", "DataSnere", "Ma'lumotlar bazasiga ulash "," Parol ") yoki o'lish (" Men ma'lumotlar bazasiga ulana olmayapman: " Baza stolli ma'lumotlar uchun $ SQL \u003d "Kontaktlardan *" MySQLL_quarerery () funktsiyasini tanlang. // - Mysql_quarera ($ s.) uchun so'rov yuboring Natijalar ($ swem \u003d mysql_fchet_arch_arch_ARRAY ($ ismingiz \u003d $ came »);" Famillous "] $ ("Elektron pochta"]; // - natijani echo massivida qaytarib oling "

    "; } }

    Bu erda biz to'rtta kod bo'laklarini o'zgartirdik:

    • Biz Issiqlik () funktsiyasidan foydalanamiz va $ _Get massivida ID qiymatini tekshirish uchun undan foydalaning;
    • $ CONTITIDID o'zgaruvchisini yarating va uni massiv $ _g;
    • Jadvalda yulduzcha bilan belgilangan barcha narsalarni ajrating. Yulduzcha SQL-da qisqartirilgan belgi - bu "degan ma'noni anglatadi" menga barcha ustun va chiziqlarni jadvaldan bering ". Qaysi ma'lumotlarni ishlab chiqarish uchun aniqlashni aniqlash uchun SQL ifoda oxirida aloqa usulini eslaymiz;
    • Biz har bir xodimlarning vakili haqida qo'shimcha ma'lumotlarni olamiz.

    Qidiruv_byid.php faylini saqlang va natijani tekshiring.

    Shuni yodda tutingki, bizning funktsionalligimiz bo'lishi kerak. Dalada ism yoki familiyani kiritishda yoki giperhavola sifatida xatni tanlashda, faqat shaxsiy vakillarning ismlari namoyish etiladi. Agar siz kursorni havolaga olib kelsangiz, siz holat panelida noyob identifikatorni ko'rishingiz mumkin. Agar siz ma'lum bir kishini bossangiz, manzil chizig'i o'zgaradi va ushbu xodim haqida qo'shimcha ma'lumotlar paydo bo'ladi.

    Sql in'ektsiya

    Bizning qidiruv maydonimizga qo'shilganingizning sababi, muntazam ifoda etishimizning sababi, hech kim SQL so'roviga aralasha olmaydi. Ilgari, bu muammo tarqatildi va sizning arizangizni boshqarib SQL so'rovlarini amalga oshirishga muvaffaq bo'ldi. Masalan, bizning sohamizdagi apostrofni ishlatishga ruxsat berilgan bo'lsa, xaker so'rovdan foydalangan holda ma'lumotlar bazasini shunchaki o'chirib tashlashi mumkin:

    "Drop Stol

    Yuqorida aytib o'tilganidek, muntazam ifoda birinchi belgisi sifatida, tashrif buyuruvchi faqat pastki yoki katta harflarda harflarni kiritishi mumkin.

    Yakunida

    Bugungi maqolada biz saytni qanday qidirishni ko'rib chiqdik:

    • Ma'lumotlar bazalari va tegishli jadvallarni yarating;
    • Ma'lumotlar bazalarini boshqarish uchun vositalardan foydalaning, ustunlar yarating va ma'lumotlarni kiriting;
    • Kirish ma'lumotlarini tekshiradigan pHP asosida qidirish shakllarini ishlab chiqish, so'rovdagi o'zgaruvchilarning mavjudligi va mahsulot bazasiga ulanish va chiqish natijalarini jadvaldan chiqish;
    • SQL in'ektsiyalaridan dastur va ma'lumotlar bazasini qanday himoya qilish kerak.

    Ushbu maqoladan olingan bilimlarni ishlatish, siz boshqa birovning kodini, shuningdek, qidiruv shakllarining funktsional imkoniyatlarini kengaytirish uchun osongina o'zgartirishingiz mumkin.

    Ushbu nashr maqolaning tarjimasi " PHP va MySQL bilan qidirish xususiyatini qanday yaratish kerak"Do'stona loyiha jamoasi tomonidan tayyorlandi