internet pencereler Android
Genişletmek

Erkeklerde arama php sf var. MySQL'de Güvenli ve Kullanılabilir Arama

Tarayıcınızda bir javascript engellendi. Javascript'in siteyi çalışmasına izin ver!

PHP + Site Haritasında Rus dilinin morfolojisi göz önünde bulundurularak siteye göre ara

Sitenizi zamanla oluşturarak, üzerinde uygun bir evrensel arama yapma ihtiyacını düşünün. Basit bir çözüm var: Arama motorlarından arama yapmak, örneğin: Yandex'den arayın veya Google'dan arayın. Böyle bir çözümün genel olmaması - sadece arama motorunun arama dizinine eklemeleri istenen sayfalar arama motoru olacaktır. Başka bir deyişle, sitenizin bir kısmı "sıralama" olmayacaktır.

Üzgün, başka bir çözüm arıyor. Evet, burada şudur: Yandex.Server, Rus dilinin morfolojisini dikkate alarak sitenizi aramak için bir üründür. Yükleniyor. Unix Yandex'te. Sunucu bir arka plan noktası ve MS Windows platformunda - hizmet olarak çalışır. Şunlar. Sadece kök - sunucuya erişim yaparken çalışabilir. Siteyi sanal barındırma üzerinde çalışırken uygun değildir. :-( İkinci dezavantajı ayar değildir. Sadece bir düğme "Çalıştır / Durdur".

İnterneti "kazmaya" başlıyoruz. Nasıl yani? Herkesin web sitenizde bir arama var. Her nasılsa, insanlar yapar. Örneğin, uzun süredir tanımlanmış olan ön karar: Sitede bağlamsal arama, kelimelerin azaltılmasını dikkate almayan ve sayfalardaki kelimeleri endekslemez. Ancak görevin içine daha derine kadar, görevin tamamen nonrivial olduğunu fark ederseniz ne kadar çok şey ifade ediyorsunuz.

İlk önce, tüm siteyi taramanız ve bundan tüm kelimeleri seçmeniz gerekir. Peki, nasıl - nasıl - Site Haritası Jeneratörü uzun zamandır bu görevle başarılı bir şekilde başa çıktı.

İkincisi, tüm kelimelerin orijinal şeklini almanız gerekir. Burada birkaç seçenek var, örneğin, kullanabilirsiniz. flamaönek, eki ve kelimelerin sonunu keser. Veya sözlükleri kullanarak daha karmaşık bir sistem.

Üçüncüsü, her şeyin en az zamanını aramak için veritabanına ve dizine indirilmesi gerekir.

Zamanın iki hafta geçirdikten sonra, çok sayıda farklı seçenek ve algoritma denedim, aşağıdakilerde durdum:
1. Tarama için, normal bir ifadenin yardımıyla, tüm HREF'i sayfadan kesen basitleştirilmiş bir ayrıştırıcı kullanıyorum:

// $ html \u003d file_get_contents ($ url) gelen benzersiz bağlantılar edinin; Eğer (preg_match ("| (.*?)| SEI ", $ HTML, $ ARR)) ($ Body \u003d Trim ($ arr); eğer (preg_match_all (" ~ ] * href \u003d ["] ([^" "] +) [" "] [^<>] *\u003e ~ Si ", $ Body, $ ARR)) $ Links \u003d Array_unique ($ arr);)

Artık dış bağlantıları dahili ve özselinsel olarak ayrıştırıcıya dahili bağlantının adresi ile ayırmanız gerekir. Burada "Rake" başlar ... İç bağlantılar HTTP: // etki alanı / adresiyle harici olarak listelenebilir, geçerli sayfaya göre olabilirler, temel etikete göre olabilirler. Daha sonra, bu sayfanın endekslemesinin Robots.txt dosyasında yasak olup olmadığını ve bu sayfanın taranmadığını kontrol etmek gerekir. Robots.txt analizi örneğini ve bir arama örneğini SQL tarafından kullanabilirsiniz.

$ Kelime \u003d preg_split ("/ [^ a-za-za-ya-y0-9] + /", $ body, -1, preg_split_no_empty);

tüm kısa kelimeleri kaldırıyoruz, tüm kelimeleri bir kayıtla dönüştürüyoruz ve kelimenin temelini (kök) vurguluyoruz. Kelimenin kökenini vurgulamak için, Rus, İngilizce, Ukraynaca, Estonya veya Almanca'nın morfolojisini dikkate alarak, kelimelerin köklerini vurgulamanıza olanak sağlayan PHP sınıfından yararlanmak en iyisidir. Her dil için sözlükler 10-15 MB'dir. Sunucuya ek yazılım yüklemesi gerekmez, her şey en yaygın barındırma üzerinde çalışacaktır. Dezavantaj, kök vurgulaması düşüktür. Kütüphane aşağıdaki gibi bağlanır:

$ Morphy \u003d $ yol. "Phpmorphy /"; İstedi_once ($ morphy. SRC / common.php); $ OPTS \u003d dizi ("depolama" \u003d\u003e phpmorphy_storage_file, "predict_by_suffix" \u003d\u003e true, "predict_by_db" \u003d\u003e true, "graminfo_as_text" \u003d\u003e true,); $ Morphy \u003d yeni phpmorphy ($ morphy. "Dicts", "ru_ru", $ OPTS);

Phpmorphy nesnesinin üç parametresine sahiptir:
Birincisi sözlükler klasörünün yoludur;
İkincisi, "ru_ru" kodudur - UTF-8, "rus" - Rusça, Windows-1251'de Rusça;
Üçüncü - seçenekler.

Seçenekler önemli bir depolama parametresi kullanır, üç değerden birini alabilir:

  • Phpmorphy_storage_file (tüm hafızaya sözlük yüklemeyin, en yavaş seçenektir, ancak sunucu kaynaklarıyla çalışma açısından en ekonomiktir),
  • Phpmorphy_storage_shm ("Tamamen Paylaşılan - Belleği'nde, PHP SHMOP uzantısı gereklidir) veya
  • PHPMORPHY_STORAGE_MEM (SHMOP kullanılmazsa, dosyayı da tüm belleğe indirin, işlem hızı öncekinden farklı değildir).

Sanal bir barındırma üzerinde, büyük olasılıkla, ilk seçeneği kullanmanız gerekecek ve daha fazla hız için özel bir sunucuda, bellek kullanarak seçenekleri kullanmak daha iyidir. Görevleriniz için bir seçenek seçin Eğer sıklıklar modüle sıklıkla planlanırsa, seçeneği paylaşılan hafıza ile kullanmak daha iyidir.

Phpmorphy kütüphanesine bir örnektir.

3. Şimdi, tüm tarama ve ayrıştırma sonuçlarını saklayacağımız veritabanı tablolarını yapmanız gerekir:

// linkler, başlık ve duyuru formundaki site sayfalarının listesi // (Arama sonuçlarında çıktı için ilk 300 sayfa karakter). Masa Oluşturma Sayfa (ID 'değilse, ID' İLİŞKİN İLİŞKİN İLİŞKİN İLİŞKİN İLİŞKİN NULL ORTAM AUTO_INCRENCE, `URL` Varchar (255) Null varsayılan değil" "Benzersiz,` Title` varchar (128) Null varsayılan değil "", `Açıklama` metin boş değil Varsayılan "") // sitenin tüm kelimeleri. // Word - Stemmer'den sonra ne kaldı ("root") // ses - bu kelime için Sodexx işlevinin sonucu. Tablo oluşturularsa, eğer ifade edilmemişse (İmzasız değilse, birincil anahtar Auto_increment, "kelimelik 'varchar (30) null değil,` Sound` char (4) Null varsayılan "A000" değil) IDX_WORD_WORD ON dizin oluşturun. $ Arama -\u003e Word " (Word (8)) IDX_WORD_SOUND dizini oluşturun. "$ Arama-\u003e Word." (Ses (4)) // Her satır, "Sayfa" "CNT" sayfasında bir araya gelmiş olan "Sayfa" "CNT" kelimesidir - Dizin (`Sayfa` int imzasız değilse,` Word` int imzasız değilse tablo oluşturun. , `cnt` küçük unsigned null değil, benzersiz (sayfa, kelime))

Şimdi bir arama ifadesi isteğinin şeklini yapmanız gerekir. Bir arama sorgusunun en basit şekli şöyle görünür:

bunun gibi kodu:

Arama:

Site arama komut dosyasını indirin

Bu örneği oluşturmak için çok fazla zamanım var, bu yüzden paraya dönüştürmek istiyorum. Eğer başarısını tekrarlamak istiyorsan - iyi şanslar. Zamanınızı takdir ederseniz, para için zaman değişimi için mutluyum. Toplamda 2900 ruble (~ 46 $) Site Haritası Jeneratörü ile tam bir açık, ayrıntılı aranan arama komut dosyası alacaksınız.

Arşiv içeriği:

  • phpmorphy / - Kelimelerin kökenini çıkarmak için kütüphane
  • stemmer / - Hızlı algoritma kelimesinin temelini vurgulayın
  • cONFIG.php - Veritabanında ve zaten kullanabileceğiniz ve değiştirebileceğiniz genel işlevler ile çalışmak için ayarlar
  • index.php - Arama Formu + Arama Sonuçları
  • install.php - arama için mysql veritabanı tablolarını oluşturma
  • link_bar.php - sayfa navigasyonu
  • search.php - Arama ile çalışmak için sınıf. Yöntemler içerir:
    • sound_ex ($ string) - kelime ses çıkarmak için Rusçax
    • güncelleme ($ URL, $ SCAN \u003d 0) - Tüm Site sayfalarını tekrar tarayın, sayfanın başlığını, bedenin, açıklamasını vurgulayın.
    • Parsoningword ($ url, $ kelime) - kelime analizi ve onları arama tabanına ekleme
    • GETWORDS ($ kelime) - iletilen dizide, köklerinde tüm kelimeleri değiştirir.
    • url_short ($ url, $ üs \u003d ", $ ext \u003d 0) - Bağlantıyı yerleştirin, dış olanların ayrılması
    • iS_ROBOTS ($ URL) - Robots.txt dosyasındaki bağlantının varlığını kontrol etme
    • Readurl ($ site) - Curl, işleme, - Yönlendirme ile site sayfası okuma
  • sitemap.php - bina sitemap.xml site haritası
  • spider_http.php - Okuma ve sarıştırmaya dayanan site tarayıcısı
  • spider_sitemap.php - sitemap.xml ayrıştırma tabanlı site tarayıcı

Kurulum Talimatları:

  1. Arama.zip arşivinin içeriğini Arama klasörüne açın. Scripts-yükleme haklarından kaydetmeye izin ver 777.
  2. CONFIG.PHP dosyasındaki veritabanının yüklenmesini düzenleyin, Install.php - Gerekli veritabanları oluşturulacaktır.
  3. "/Search/spider_http.php" tarayıcı, taban tablolarını doldurur:
    Sitenin tüm sayfalarının masası, unvan, anahtar kelimeler ve açıklamada bulunur.
    Kelimelerin tablosu, ona sayfalarda bulunan kelimelerin kökleri
    Bu kullanım için mevcut bir saha haritasına dayanarak bir taban oluşturmak mümkündür "/search/spider_sitemap.php"
  4. Arama sorgusunu sayfalara yerleştirin. Arama Sorgu Formu:
    Arama:
  5. Search.php sayfasındaki çıktı biçimini düzenleyin
  6. doletli_once "updater.php"; Güncelleme ($ url);
    Her sayfayı eklerken, değiştirirken veya silerken
    $ URL güncellemek istediğiniz bir sayfa.
    Sayfa değişikliklerini kaydettikten sonra rahatça görüşün
    Sayfa 404 hatası döndürürse veya boşsa - veritabanından kaldırılır.
  7. site haritası oluşturmak için "/search/sitemap.php" çalıştırın. SiteMap.xml
    Robots.txt: Site Haritası: Site Haritası: Site Haritası: /search/sitemap.xml

Site Arama Komut Dosyası Yetenekleri

  • Sitenin tüm sayfalarını taramak, Robots.txt'deki yasağı dikkate alarak ve
  • Kelime seçimi ile sayfaların metin satması, istatistikleri sayma kelimeleri
  • Sayfada seçim başlığı, anahtar kelimeler, açıklama
  • Rus dilinin ve kütüphanelerin morfolojisini dikkate alarak kelimelerin köklerini vurgulayın.
  • Kelimelerin temellerinin hızlı bir algoritma ile tahsisi (tavsiye edilmez, komut dosyasının metninde bombalanmış)
  • Sözcükteki kelimenin yokluğuna göre, taramada Rus büyüsünün kontrolü
  • Dört mesaj modu: 0-iş sessizce, 1-Yalnızca Site Hataları, 2-Veren Hatalar ve Bilgi Verme, 3-Detaylı Bilgilendirme
  • Ünsüz kelimeleri arayın. Rusça sodex.
  • Arama sonuçlarını uygunluğa göre sıralayın. Her şeyden önce, sayfalar, tüm arama kelimelerinin maksimum miktarda olduğu gösterilmiştir.
  • Bulunan sonuçların tren çıktısı
  • Komut dosyası Rusça'da Rusça'da detaylandırılmıştır.
  • Komut dosyası kodu, PHP + MySQL'de uygulanır, tamamen açık ve herhangi bir ek kütüphaneyi kullanmaz. İhtiyacınız olan her şey kit içinde gelir.
  • Site jeneratörünüz, tarayıcı tarafından oluşturulan bir taban temelinde

    Komut dosyasının yapamadığı:

  • dikkate alınmadı , Rel \u003d nofollow
  • tüm sayfalarda bulunan genel metinler aramasından kaldırılmayın.

Kullanım Sözleşmesi:

  • Alınan kodu gelişmelerinizden herhangi birinde kullanabilirsiniz, kaynağa bir başvuru belirtmeniz gerekmez.
  • Yeniden satma hakkınız yok, ücretsiz ya da sınırlı erişimde bulunmanın yanı sıra herhangi bir biçimde yayınlanıyorsunuz.
  • Diğer tüm haklar yazar tarafından kaydedilir.
  • Yazarlara sorular, yorumlar, dileklere göre başvurabilirsiniz. Rehber.

Dikkatli ol! 2900 ruble için (~ 46 $), birbirinden önemli ölçüde farklı olan iki komut dosyası seçeneğinden birini seçebilirsiniz.
UTF-8 kodlamasında sitenin arama komut dosyası, çift baytlık sembollerle çalışmanın işlevlerini kullanır MB_ *, ATF-8 kodlaması için (Unicod / Unicode) için yapılan normal ifadelerle sayfaları çıkarır, UTF'deki veritabanı tablolarını oluşturur. -8.
Windows-1251 kodlaması içindeki site için arama komut dosyası, yalnızca tek bağlantı kodlamaları str * ile çalışma işlevlerini kullanır, tek yollu kodlamalar için düzenli ifadeler içeren sayfalar.

Girebilir veya kayıt olabilirsiniz! Veya kayıt olmadan
İndirme düğmesine bastığınızda, bu sayfada açıklanan komut dosyasının kullanım şartları ile kabul edersiniz.
Bakiyenizden 2900 ruble (~ 46 $) tutarında borçlandırılır ve dosya yüklenir.

Arama uygulaması için kısa referans: Satır işleme, servis karakterlerinin kesilmesi, veritabanına, mantık, kaldırım, alaka düzeyi bir istek hazırlayın.

Bölüm 1: Genel Vedomosti

Satır işleme

Her şeyden önce, dizeyi kolları ile kesmeniz gerekir.

$ Arama \u003d Substr ($ Arama, 0, 64);

Kullanıcıya 64 karakter aramak için yeterli olacaktır. Şimdi tüm "anormal" sembolleri çığlık atacağım.

$ Arama \u003d preg_replace ("/ [^ \\ w \\ x7f- \\ xff \\ s] /", "", $ Arama);

Teoride, kullanıcıya çok kısa kelimeleri aramama fırsatı vermek imkansızdır - diğer şeylerin yanı sıra, sunucuyu güçlü bir şekilde yükler. Öyleyse, yalnızca iki harften daha uzun olan kelimelere göre görünmesine izin verilmesi (kısıtlama daha fazlaysa, "(1.2)" üzerine "(1, karakter sayısı)" olarak değiştirmek gerekir).

$ Good \u003d Trim (Preg_Replace ("/ s (\\ s (1,2)) \\ s /", "", ereg_replace ("+", "", "$ Arama")));

Ve kötü kelimeleri değiştirdikten sonra - çift boşlukları sıkmak gerekir (özellikle kısa kelimeler için doğru arama için yapıldı).

$ Good \u003d ereg_epeplace ("+", "", $ iyi);

Kullanıcıya arama mantığını seçme yeteneğine sahip olmak istiyoruz - tüm kelimeleri ya da birkaç kişiden sadece birini arayın. Yandex'te olduğu gibi yapmak istiyorsanız, iki eşcinsel "ve" (Word1 && Word2 && Word3) (Word1 && Word2 && Word3) veya bir şekilde, bir danışman değilim. Küçük IMHO web sitesindeki satırları olan Şamanizm, harcanan zamanı haklı çıkarmaz. Bu nedenle, bir arama formu çizerim:

Ve arama komut dosyasında bir kez daha kullanıcının tanıtıldığını kontrol edin:

İf (($ mantık! \u003d "Ve") && ($ mantık! \u003d "Veya")))
$ Mantık \u003d "veya";

Mantık nasıl kullanılacak - aşağıda.

Arama İstatistikleri

Masanın sıralarını bulduğu için derhal kullanıcıyı bilgilendirmek zor değildir. Bunun için veritabanına ek bir istek yapılır:

$ Query \u003d ""%.%. STR_REPLAY ("", "%" ya da "%, $ iyi) gibi alanın"% "ya da alan gibi bir alandan birini seçin."% ";

Bazı kelimelerle ilgili istatistikler için aşağıdakileri yapabilirsiniz:

$ Word \u003d patlayabilir ("", $ Arama); İken (liste ($ k, $ v) \u003d her ($ kelime)) (eğer (strlen ($ v)\u003e 2) $ stat \u003d "$ v:". Mysql_num_rows (Mysql_query ("Alanın Gibi Tablodan Kimliğini Seç" % V% "" ")); başka $ stat \u003d" $ v: kısa";); $ wrd_stats \u003d" Kelime istatistikleri: ". Dairlodin (" ", $ stat)."
"; Unsem ($ stat);

Tren çıkışı sonuçları

Peki, arama sonuçları için bir düzenimiz olduğunda ve arama sonuçları çizgilerinin sayısını, bir araba araması yapın - bir çift trifle. Değişken $ Sayfasını (0'dan az, $ 0'dan daha fazla değil) kontrol edin. Satır sayısını sayar (yukarıya bakınız), ihtiyacınız olan alanları ve alanları sıralama alanlarını yazıyoruz. Ve sonra ekle

Eğer ($ sayfa \u003d\u003d 0) $ talebi. \u003d "$ '_İn_in_page limiti"; Else $ talebi. \u003d "Sınır". $ Sayfa * $ rows_in_page. ",". $ rows_in_page;

(Sözdizimi: Sınırı<кол-во строк> Her iki sınır da.<кол-во строк отступа>, <кол-во строк>)

Böyle bir talebin yürütülmesinin bir sonucu olarak, sayfada görüntülemek istediğiniz sıraları tam olarak alacağız. Navigasyon panelini yapmak için bir sonraki ve önceki sayfaya bağlantılar çizebilir veya daha karmaşık hale getirebilirsiniz. birkaç sayfa.

Eğer ($ sayfa\u003e 0) yazdırırsa (" Önceki sayfa"); eğer ($ sayfa<$results_amount/$rows_in_page) print ("sonraki Sayfa");

Arka ışık

Metin içindeki kelimeleri açık veya cesur yazı tipi ile vurgulamak için, yalnızca aşağıdakileri yapmanız gerekir:

$ Highlight \u003d str_replace ("", "|", $ iyi);

Boşluklar (ve kelimelerimizde tek bir kelimeye sahipler ve başka hiçbir yerde, başka hiçbir yerde buluşmaz, ayrıca onları uçlardan kesiyoruz), dikey özelliği değiştirmek için yeterlidir - düzenli ifadelerdeki seçeneklerin ayırıcısı. "Kötü" kelimeler vurgulamıyoruz, çünkü veritabanında aramadıkları için :). Yazdığımız metni görüntüleyen kodda:

$ Satır ["metin"] \u003d ereg_replace ($ vurgulamak " \\0", $ satır [" metin "]);

Konuyu yazdıktan sonra, koştum, yazma ve kendime "arka ışık". Burada değildi! Metnimde HTML etiketlerim var, bu yüzden çok düşünmek zorunda kaldım ... böyle bir şey ortaya çıktı (vurgulamak için kelimelerle bir dize):

$ Text \u003d Eregi_Replace ("\u003e ([^<]*)($words)", ">\\1\\2", $ metin);

İzlemelisin, etikette kelime yok. Bununla birlikte, böyle bir replasmanın kaynak yoğunluğunun bir problemi vardır (5 kilobayttaki metin üzerindeki K6-266'm yedi saniye kadar düşünülmüş). Üzgün.

Bu tür teknikleri uygulamak, öncelikle, kullanıcının eyleminin özgürlüğünü sınırlamak ve a) sitenin yazılım yapısını öğrenmek için B) Sunucunun aşırı yüklenmesine neden olmak için (örneğin, metninden oluşan metnin bir megabayt göndermek) mümkündür. Üç harf uzunluğunda kelimeler (cümle belirsiz olduğu ortaya çıktı, ancak yeniden yazılmayacağım ,) böylece komut dosyası 250 kez veritabanına tırmanır) c) Özel sorgu dili satırında isabet sonucu bir hata mesajı gör . İkincisi, kullanıcı için bir miktar rahatlık, bir traktör ve aydınlatmadır.

"Güvenli ve kullanışlı arama" makalesini hatırlıyorum, böyle bir cümle vardı.

Bölüm 2. Alaka düzeyi hakkında kısaca

Oleg yusov

Arama sonuçlarını uygunluk için görüntülemek için gereklidir:

  • Gerekli varchar tarlaları veya metin alanı çeşitlerinden herhangi biri (Smalltext, MediumMont, vb.) FullText tuşlarını yapın:

    Alter Tablo Tablosu FullText (alan) ekleyin

  • Daha fazla - daha kolay:

    $ Query \u003d "SELECT *, SEÇİMİ (" $ AramaWROWS ") aleyhinde (" $ SearchWrots ") YUUŞ DESC:"

Notlar:

  • Varsayılan olarak, en az 4 karakter içeren kelimeleri arayın. #DEFINE MIN_WORD_LEN 4'ü ft_static.c kaynağında kurmak gerekirse, bence düzenlemek gerekli olmasa da.
  • Arama formundaki% semboller mevcut değil, arama alanındaki kelimeler bölüm listesi kullanılarak paketlenir.
  • Kelime ayırıcılarının listesi, ft_static.c kaynağında yönetilecektir.
  • Alaka düzeyi hesaplamaya başlamak için masada en azından düzine girişi gereklidir.
  • Nerede FAALİYET alanını kullanmak imkansızdır:

    Seçme *, RELV DESC tarafından WHOOL\u003e 0 SİPARİŞTE

    her ne kadar olabilir:

    Seçimi *, ("$ AramaWords") karşılaştığı tablodan ("$ AramaWords") 'nin karşılığı ("$ AramaWords")\u003e 0 siparişle karşılaştırıldığında

  • Hız yeterince yüksek - bazı durumlarda bile arama gibi daha hızlı
  • Yukarıdakilerin tümü MySQL 3.23.23 sürümünden başlayarak

FullText indeksler oluştururken, birkaç alan için 2 seçenek mümkündür:

Tablo tablosu oluşturun (alan1 varchar (255), alan2 metin, fulltext (field1, field2)) Tablo tablosu oluşturun (alan1 varchar (255), field2 metin, FullText (fulltext1), FullText (alan2))

İlk durumda, bir sorgu mümkündür:

Seçin *, Field1, Field2'yi ("$ AramaWROWS") karşısında ("$ AramaWROWS"), RELV DESC tarafından tablo sırasına göre

alaka düzeyi hemen tüm alanlardan hesaplanır. İkinci durumda, böyle bir istek bir hata verecektir. Burada alaka düzeyi aşağıdaki gibi hesaplıyoruz:

Seçin *, Field1'i ("$ SearchWords") karşısında ("$ SearchWords") + maç field2 ("$ SearchWrists") karşılığında ("$ SearchWrists") karşılama

İkinci seçenek, sorgularda biraz daha karmaşıktır, ancak bence daha iyidir, çünkü Arama esnekliğini arttırır - alanların her birine, örneğin, önemi oranı ve alanlar bu katsayıya çarpmak için alanlar tarafından özetlendiğinde ayarlanabilir. Arama öbeği, büyük bir katsayılı alanlarda olmak için "daha" olacaktır. Örneğin, dizinlenmiş kaynak dizini sayfalarını ararsak, Sayfa Adı alanı genellikle meta etiket açıklamaları veya anahtar kelimelerin alanlarından büyük bir katsayılı olarak belirtilir.

Bölüm 3: Alaka düzeyine sahip alıştırmalar

FullText Endeksi Nasıl Eklenir:

MySQL\u003e ALTER TABLE ARTICLEA FullText (ZText); Hata 1073: BLOB Sütun "ZText" Can "t Kullanılmış Tablo Türü ile Kullanılabilir MySQL\u003e Alter Tablo Articlea Type \u003d MyISAM; Sorgu Tamam, 36 Satır Etkilenen (0,60 sn) Kayıtlar: 36 Çoğaltma: 0 Uyarılar: 0 MySQL \u003e Alter Masa Articlea FullText (ZText); Sorgu Tamam, 36 satır etkilendi (10.00 sn) Kayıtlar: 36 Çoğaltma: 0 Uyarılar: 0

Metin dizinleri yalnızca MyISAM tiplerinde yapılabilir. Metinler tablodan alınır ve dizin dosyasına bırakılır ve baz büyüyor. Talepler ile ilgili. Nerede FAALİYET alanını kullanmak imkansızdır:

Seçme *, RELV DESC tarafından WHOOL\u003e 0 SİPARİŞTE

Her ne kadar olabilir:

Seçimi *, ("$ AramaWords") karşılaştığı tablodan ("$ AramaWords") 'nin karşılığı ("$ AramaWords")\u003e 0 siparişle karşılaştırıldığında

Elbette, hesaplanan alan, tüm sözdizimi kurallarının neresinde kullanılamaz, ancak aşağıdakilerde kullanılabilir:

Seçin *, "$ AramaWROWS") aleyhine ("$ AramaWords") karşılaşma alanından ("$ AramaWords"), serbest bırakma\u003e 0 siparişi RELV DESC

Oleg yazdığı gibi maçta arama yapın, yalnızca kelimeyle yapılır. ... Ancak, alaka düzeyinde, yalnızca sıralayabilir ve (bu, tabii ki, performansı etkileyecek, ne kadar bile bilmiyorum).

"WELL\u003e 0" durumunu kaldırın, sıralama bırakıyoruz. Gerisi, daha önce olduğu gibi, ortaya çıkan ipi ovalayın ve birkaç gibi operatörlerle bir talebe dönüşün:

Seçin *, "% $ Search1" ya da "% $ Word2%" gibisiniz "% $ Word2%" gibi alanın "% $ Word2%" siparişi ile reaksiyona girin.

Bölüm 4: Prevening Başladı

MySQL veritabanındaki alaka düzeyinde sıralama ile konuyu aramaya devam ediyorum.

MySQL, veritabanının en son sürümlerinde tasarıma karşı fulltext indeksleme ve eşleşme alanı kullanmak için sunar. Bununla birlikte, tüm sunucular MySQL'in en son sürümü değildir ve tüm barındırma sağlayıcıları, sistemin güvenilirliğinin nedenleri için yazılımı güncellememektedir.

Bir seferde alaka düzeyinde sıralama aramanızın birkaç istek içinde yapması gerektiğini ve bu nedenle, hiç almaması daha iyi olduğunu varsaydık. Alaka düzeyindeki sorguda sayılabileceği düşünceler beni ziyaret etti, ama korktum ve böyle bir tasarıma gönderdim.

Bununla birlikte, site oluşturma firmalarından birinin çalışanı N-SKA, sitelerinde uyguladıkları arama sistemini bana vurdu. İsteği kesinlikle hatırlıyorum, bunu çoğaltmaya çalışacağım:

TARİH, DATE_FORMAT (MALZEME_DATE_DATE_DATE_DATE_DATE, "% E% C.% Y") olarak, eğer ("% Word1 Word2 Word3), 3 * 10, 0) + ise ("% Word1% "9 gibi metin , 0) + Eğer ("% Word2", 9, 0) + eğer (% Word2 ", 9, 0) + ise (% word3", 9, 0) tablodan "% Word1%" veya "% Relveance Desc, Materyal_Date Desc tarafından Word2% "veya"% Word3% "siparişi gibi metin

Çok iyi görünüyor, ancak MySQL'in eski sürümlerinde bile çalışıyor. Bu istekle iş hızını karşılaştırmaya çalıştım:

Başlık, Date_Format (MALZEME_DATE_DATE_DATE_DATE_DATE_DATE, "% E% C.% Y") olarak, metnin "% Word1" veya "% Word2 gibi" metnin "% Word2" "Ya da"% Word3% "Gibi Metin Relveance Desc, Materyal_Date Desc

Ortalama olarak, evrensel talebin hızı, yeni tasarımlar kullanılarak iki kat daha azdır. Oldukça mantıklı olanı nedir - daha çok yönlülük, kaynak yoğunluğu ne kadar büyükse.

Böyle bir istek otomatik olarak yapmaya çalışalım. Uzun dizgiyi kapatın, yanı sıra tüm yanlış karakterler ve kısa kelimeler. Bir istek çizin.

$ Query \u003d "Başlık, date_format (Materyal_Date,"% E% C.% Y ") tarihi olarak seçin1, eğer (metni"%. $ Good_Words. "%", ". (Substr_count ($ Good_Words," ") + 1). "* 10, 0) + eğer (metnin"%. Str_Replace ("", "%", 9, 0) + ise ("%", $ Good_Words gibi metin). "%", 9, 0) "%" gibi metnin bulunduğu tablodan alaka düzeyi olarak. Str_replace ("", "%" veya "%", $ Good_Words gibi metinler). "%" Alaka düzeyine göre sipariş, materyal_date desc ";

Çok zor değil. Sellere karşı güvenilirlik ve koruma için, sorgudaki kelimelerin sayısını sınırlayabilirsiniz.

Önceki yayınlara bazı eklemeler

Tabloda bulunan toplam satır sayısı. Arama sonuçlarını görüntülemek için elbette, limit ifadesini kullanmanız gerekir (bu parametrenin oluşumunu her zaman yazmamak, hazır işlevleri kullanırken) kullanmanız gerekir. Sorguda gruplandırma işlemi yapılmadıysa, derhal sorgu - sayım (*) 'nin PHP MySQL_NUM_ROWS () işlevi aracılığıyla hemen hesaplamak daha iyidir. Büyük tabloları kontrol edebilirsiniz. Grup işlemleri üretilirse, sayımdan bir istek yaparız (belirgin (<поле, по которому группируем>)), ancak grupsuz.

Aydınlatma. Metinlerde HTML etiketi yoksa, yaşamak daha kolaydır.

$ Text \u003d Preg_Replace ("/ Word1 | Word2 | Word3 / I", " \\0", $ metin);

Etiketler metinde kullanılıyorsa, yani, üç seçenek a) Arka ışık çizmemek b) Kullanıcı kullanıcıyı görmüyor (bu çok meraklı bir kullanıcı dışında), sonra indeks alanını yapabilirsiniz. Etiket olmayacak ve karakterler [^ \\ w \\ x7f- \\ xff \\'s] boşluklarla değiştirilecektir (bu karakterler, arama dizesinden en baştan kesilir, böylece arama yapılmaz). Bu durumda arama ve arka ışık, tam olarak dizini yapmak için. c) Metnin arka ışığını normal alandan yapın, daha önce etiketleri SRIP_TAGS () işlevi ile keser.

Arama kodunun tam sürümü, her zaman olduğu gibi, dosyalar listesinde.




Hala sorular ya da anlaşılmaz bir şey var - bizim için hoş geldiniz
11.1k.

Herhangi bir sitedeki en popüler ve gerekli fonksiyonlardan biri, özel bir form kullanılarak uygulanan bir arama. Bu işlev, ziyaretçilerin içeriğini sitede hızlı bir şekilde bulmalarını sağlar.

Bugün, bir site arama yapmayı, veritabanı tablolarıyla görüşecek özel bir form kullanarak nasıl yapacağız ve sitedeki mevcut yöneticiler hakkında bilgi görüntülemektedir. Mevcut personel hakkında bilgi içerecek veritabanı tabloları oluşturmayı öğreneceksiniz.

PHP kullanarak arama formları geliştirin ve ayrıca SQL ile tanışın ( Yapılandırılmış sorgu dili.) - Veritabanlarında yer alan bilgileri toplama, kayıtlar ve değiştirme için özel dil. Başlamadan önce size tavsiye ederiz. proje dosyalarını indirin.

Neye ihtiyacın var

  • MySQL veritabanlarıyla çalışmak için araç.
  • PHP desteği ile yerel veya uzak sunucu.
  • Metin düzeltici.

Bir veritabanı oluştur

Barındırmanızda veritabanıyla başa çıkabileceğinizden emin değilseniz, ilgili talimatlar veya yardım almak için Hoster ile iletişime geçin. Veritabanı oluşturulduktan sonra, bağlanmanız, bir tablo oluşturmanız ve gerekli verileri içine yazmanız gerekir.

MySQL'i yönetmek için en popüler araç, PHP'mi yöneticimdir, bu araç mevcut kılavuzumuz için yeterli olacaktır.

Bir masa oluşturma

Masamızda aşağıdaki formatta oluşturulmalıdır:

Sütun adı. Veri tipi Uzunluğu. Null ya da boş değil BİRİNCİL ANAHTAR? OTOMATİK ARTIŞ.
İD İnt. 1 GEÇERSİZ DEĞİL Evet Evet
İsim. Varchar. 50 GEÇERSİZ DEĞİL Hayır. Hayır.
Soyadı. Varchar. 50 GEÇERSİZ DEĞİL Hayır. Hayır.
E-posta Varchar. 50 GEÇERSİZ DEĞİL Hayır. Hayır.
Telefon numarası. Varchar. 15 GEÇERSİZ DEĞİL Hayır. Hayır.

Veritabanı tablosu, Excel'deki gibi sütunlar ve dizelerden oluşur. İlk sütun, verileri ada göre tanımlamanızı sağlar. Daha sonra, sütundaki veri türünü gösteren veri türleri sütunu (veri tipi) gelir. Uzunluk alanı, tablo sütununun maksimum miktarını (depolama) gösterir. Daha fazla esneklik veren değişkenleri kullanıyoruz. Başka bir deyişle, tam adın uzunluğu 50 karakterden azsa, ayrılmış yerin sadece bir kısmı işgal edilecektir.

Ve bu personel arasında boş değerler olamaz ( boş, boş). İlk satır sarı renkle vurgulanır, çünkü ID sütunu ana anahtarımızdır. Veritabanındaki ana anahtar, her girişin benzersiz olmasını sağlar. Bu sütun ayrıca otokremi de uygular, bu da veritabanımızdaki her girişin otomatik olarak benzersiz bir numara atanması anlamına gelir.

Personel temsilcilerini masaya tanıtıyoruz

Tablodan çözülür görmez, verileri doldurmaya başlayın. 6 kayıt, prosedürü aklında çözmek için yeterlidir. Aşağıda size kendi örneğini sunarım:

Sütun kimliği. İsim. Soyadı. E-posta Telefon numarası.
2 Ryan. Uşak 417-854-8547
3 Brent. Callahan 417-854-6587

Formun Gelişimi

Google'dan bir arama formu oluşturmak için, uygun bir metin düzenleyicisini açın. Ücretsiz PSPAD kullanmanızı öneririm. Sözdizimi arka ışığının sağlandığı herhangi bir metin düzenleyicisini kullanabilirsiniz. Bu, PHP kodunu yazma ve hata ayıklama sürecini büyük ölçüde kolaylaştırır. Bir arama formu için bir sayfa oluşturarak, .Php formatında kaydetmeyi unutmayın, aksi takdirde PHP kodu düzgün şekilde işlenmez. Belgeyi kaydederken, aşağıdaki işaretlemeyi kendisine kopyalayın:

İletişim Arama:

İletişim bilgileri Detaylı Arama

İsim veya soyadı ile arama yapabilirsiniz

HTML'ye aşinassanız, en azından formun açılış etiketine kadar size açık olmalısınız. Bu etiketin içinde tüm kodun en önemli unsurudur - eylem niteliği. Formumuzun eylemleri olarak, dosyamızın adını belirttik ve ardından sorgu dizesini ona uyguladık. git.”.

Kritere uyumu kontrol edin

Kullanıcı adı veya soyadı girdiğinde ve ardından Onay düğmesine basıldığında, form verileri kendisine iletir ve sonunda sorgu dizesini ekler " git.". Bu aşamada, Go Query String'in varlığını kontrol ediyoruz. Sonuç pozitif ise, arama sonuçlarını görüntüleyin.

İstenilen sonuçların çıktılamasından önce, tekrar kontrol edilmemiz gerekir: (1) form onaylandı, (2) sorgu dizesinin GO değerinin değerini içerip içermediği, (3) daha düşük veya üst kayıtta tanıtılan arama sorgusu oldu ? Denetimlerin hiçbiri olumlu bir sonuç verirse ( doğru.), O zaman herhangi bir işlem yapmamız gerekmiyor.

Başlamak için, bir kapanış etiketinden sonra küçük bir blok kodu PHP arama sitesi ekleyin:

İlk önce, PHP kod bloğu etiketini açarız "".

Bu etiket çifti içindeki herhangi bir PHP kodu sunucu tarafından yürütülecektir. Sonra formun doğru olup olmadığını kontrol ediyoruz:

Arama sorgusunu girin

"; } ?>

Bool tipinin değerini döndüren ve içine bir dizi $ _POST dizisi koyan yerleşik ISSET işlevini kullanıyoruz. Programlamadaki mantıksal bir ifade, elde edilmemize veya doğru veya yanlış.

Sonuç olarak, eğer fonksiyon doğru dönerse, form onaylandı ve kodun yürütülmesini daha da devam ettirmemiz gerekiyor. İşlev yanlış değerini döndürürse, bir hata mesajı görüntüleyeceğiz. Tüm dosyalanmış kodu Search_Submit.php dosyasında kaydedin.

Arama sorgusunu girin

"; } } } ?>

Ana'nın içindeki bir başka koşullu mantıksal ifadeyi yatırım yapıyoruz, ancak bu sefer sadece anlamı ile birlikte $ _GET dizisi kullanıyoruz " git.". Search_go.php dosyasındaki değişiklikleri kaydedin.

Şimdi ziyaretçilerin Query Strip'teki ilk harfi yalnızca üst veya yalnızca alt kayıtta girebileceğinden emin olmanız gerekir. Ayrıca ziyaretçiler tarafından tanıtılan arama kriterlerini hesaba katmanın bir yolunu da sağlamalıyız. Ziyaretçi tarafından düzenli bir ifadeyi kullanarak girilen verileri kontrol etmek en iyisidir:

İkimizin içinde başka bir koşullu mantıksal ifadeyi yatırım yapıyoruz. Bu sefer girişi kontrol etmek için düzenli bir ifade kullanıyoruz. Dahili Preg_match işlevini iki parametre ile kullanıyoruz: düzenli bir ifade ve doğrulamanın uygulanması gereken form alanı.

Bizim durumumuzda, "isim" alanı olacaktır ( İsim.). Ziyaretçi tarafından belirtilen arama seçeneklerini çıkarmak için, bir değişken $ adı oluştururuz ve SQL sorgusunda kullanılacak olan formdaki alan adına sahip posta değerini bağlar. Şimdi uyguladık: (1) Form veri gönderme, (2) Sorgu dizesi GO'nun değerini içerir ve (3) ziyaretçi başlığı veya küçük harfi girdi. Ve tüm bu çekler, veritabanında değişiklik yapmadan önce bile meydana gelir. Tüm değişiklikleri kaydedin.

Sonuçlar Bağlayın, SELECT, Sorgu ve Veritabanı tablosundan dönün

Tablodan veri almak için, önce Site arama komut dosyasında sunucuya bağlanmanız gerekir. Bunu yapmak için aşağıdaki kodu kullanırız:

", "") Veya ölmek (" Veritabanına bağlanamıyorum: ". Mysql_Error ()); başka (yankı"

Lütfen arama sorgusunu girin

"; } } }?>

Bir $ DB değişkeni oluştururuz ve üç parametre alan MySQL MySQL_Connect işlevine bağlıyoruz: Veritabanına sahip bir sunucu ( localhost., yerel olarak çalışıyorsanız), giriş ve şifre.

Bundan sonra, veritabanına bağlantı yoksa, kodun daha fazla yürütülmesini durduran yerleşik PHP işlevi kalıbını başlatıyoruz. Ve hata bilgilerini görüntülemek, hatanın nedenini iade edecek yerleşik MySQL MySQL_Error işlevini başlatın. Search_connectdb.php dosyasını kaydedin.

Lütfen arama sorgusunu girin

"; } } } ?>

MyDB adlı bir değişken oluşturun ve yerleşike bağlayın MySQL işlevleri mysql_select_dbVe daha önce oluşturulan veritabanının adını belirtin. Daha sonra, ziyaretçiler tarafından girilen arama parametrelerinin bulunduğu ad değişkeniyle SQL sorgusunu kullanarak veritabanı tablosunu kullanarak görüşüyoruz:

Lütfen arama sorgusunu girin

"; } } } ?>

Bir veritabanı tablosu yoksa, bir $ SQL değişkeni oluştururuz ve bir SQL sorgusu içeren bir dize bağlanırız. Kimlik sütunlarından değerleri çıkarmak için Seçme ifadesini, ayrıca Rehber tablosundan isim ve soyadıdır. Ardından, aramayı daraltmak için adı ve soyadın isimleri ile birlikte kullanılan talimatları kullanırız.

Benzer operatör ile birlikte, yüzde işaretini (%) kullanıyoruz - 0 veya daha fazla işaret döndüren özel bir monitör ve arama dizesinden değişken bir ad kullanıyoruz. Gibi bir sonucu olarak ( bir uzmanla birlikte) Veritabanı tablosunda uygun herhangi bir isim bulur. Tüm işlemi aşağıdaki gibi tanımlayabilirsiniz: " Girilen ziyaretçiye karşılık gelen kontaklar tablosundan isim ve soyadı seçiyoruz" Search_query.php dosyasını kaydedin.

Lütfen arama sorgusunu girin

"; } } } ?>

Değişken bir $ sonuç oluştururuz ve MySQL_QUERY () işlevinin değerini $ Sorgu olarak girerek vererek atayın. Şimdi bizim isteğimiz sonuç değişkeninde saklanır. Sonucu PHP'ye çıkarmak için, bir döngü oluştururuz ve ardından geri olmayan bir listeye veri görüntülemek:

n "; echo"

  • " . "
  • n "; echo"";)) Başka (yankı"

    Lütfen arama sorgusunu girin

    "; } } } ?>

    İlk olarak, bir süre döngüsü oluştururuz, içinde satır denilen bir değişken oluşturur ve SQL Query'nin bulunduğu sonuç değişkenini alan MySQL_FETCH_ARRAY işlevinin dönüş değeri ile başlatın. Bisikletin içinde, bir değişkenin değerini her sütun değerine özdeş bir adla atarız. Sonra değerleri düzensiz listeye çıkarıyoruz.

    İki noktaya dikkat etmek önemlidir: (1) Bunların içinde ise, değerler doğrudan satır masifinden alınabildiğinden, satır dizisi değişkeninin değerlerini atamanıza gerek yoktur; (2) Dosyamızın adını ve ana anahtarla birlikte kullandığımız çapa etiketi. Bunun nedeni, birçok arama elemanında başlangıçta görüntülenmediği gerçeğinde yatmaktadır.

    Sadece isim ve soyadı, etiketlememizin sonundaki kimliği atfedersek, o zaman kimliği personel hakkında ek bilgi sağlayacak ek bir sorgu için kullanabiliriz. Dosyayı kaydedin ve PHP arama sitesini test edin ( search_display.php.).

    Tabloyu kaldırıyoruz

    Sonuçlar, sıralanmamış bir liste biçiminde görüntülenir, ancak nokta bir sekmeye ihtiyacımız olmadığıdır. Ondan kurtulmak için, aşağıdaki CSS kuralını dosyanızın başlangıcına ekleyin:

    Mektupla ara

    Bir aramayı harflerle uygulamak için, yalnızca birkaç ek kod satırı gerekli olacaktır. Ziyaretçiler için bu uygun işlevselliği ekleyin. Böylece, isim veya soyadında bulunan yazılmış personelin temsilcilerini bulabileceklerdir.

    Form kapanış etiketinden sonra aşağıdaki kod satırını ekleyin:

    A | B | K.

    Etiketi bağlıyoruz Sorgu satırına, AncCor kullanarak ve belirli bir harfe eşit olarak ayarlayın. Bir arama işlevselini harflerle uygulamak için, aşağıda gösterildiği gibi kaynak komut dosyasındaki kapanış desteğinden hemen sonra aşağıdaki kodu eklememiz gerekir:

    ) // Arama Formunun Sonu Script (Disket ($ _) "]))) ($ harf \u003d $ _ [" by "]; // bir veritabanına bağlanma $ db \u003d mysql_connect (" SERVERNAME " , "Kullanıcı adı", "şifre") veya ölmek ("Veritabanına bağlanamıyorum:". Mysql_Error ()); // - $ MyDB veritabanı veritabanını seçin \u003d mysql_select_db ("yourdatabase"); // - Temel tabloya talep edin $ SQL \u003d "Kimliğinizi seçin, FirstName, Soyadı"%. $ Mektup. "%" ya da "%. $ Mektup" gibiydi. "%. $ Mektubu" gibi. "%" "; // - Bir istek çalıştırın MySQL Query $ Sonuç \u003d mysql_query ($ sql); // - Sayma sonuçları $ Numrows \u003d mysql_num_rows ($ sonuç); echo "

    ". $ Yağlar." İçin sonuçlanan sonuçlar "$ harfi."

    "; // - döngüyü başlatmak ve sürenin sonuçlarını sıralamak ($ \u200b\u200brow \u003d mysql_fetch_array ($ Sonuç)) ($ FirstName \u003d $ Row [" FirstName "]; $ SONNAME \u003d $ ROW [" SONNAME "]; $ ID \u003d $ "id"]; // - Sonucu yankı dizisiyle çıktı "
      n "; echo"
    • ".". "$ FirstName." ". $ Soyadı."
    • n "; echo"
    "; } }

    Burada site arama komut dosyasının dört parçasını değiştirdik:

    • ISSET () işlevini kullanıyoruz ve içine bir dizi _get dizisi yapın ve ardından değerini kontrol edin;
    • Değişken bir $ harfi oluşturun ve değerini $ _GET dizisi ile başlatın;
    • SQL sorgusuna değişken bir mektup ekleyin;
    • Sayılabilir satır sayısını elde ettiğimiz ifadenin içindeki harf değişkeni belirtin.

    Search_byletter.php dosyasını kaydedin ve sonucu kontrol edin.

    Belirli bir çalışanı aramak

    Referans içi benzersiz bir kimlik aracılığıyla iletilen personelin geri kalanıyla ilgili bilgileri görüntülemek için, aşağıda gösterildiği gibi harf komut dosyasındaki kapanış desteğinden hemen sonra aşağıdaki kodu eklemeniz gerekir:

    ) // eğer komut dosyasının (ISSET ($ _ GET ["ID]))) ($ COMTORID \u003d $ _) ($" alın ("ID"]; // bir veritabanına bağlanma $ db \u003d mysql_connect ("Servername", "Kullanıcı Adı "," Şifre ") veya ölümü (" Veritabanına bağlanamıyorum, ". Mysql_error ()); // - $ MyDB \u003d mysql_select_db (" yourdatabase ") kullanmak için veritabanını seçin; // - Talep Temel tablo verilerine $ sql \u003d "KONUTLARDAN * KONUTLARDAN * SELECT *. $ irtibatlar; // - mysql_query () fonksiyonu $ Sonuç \u003d mysql_query ($ sql); // sonuçlar ($ row \u003d mysql_fetch_array ($ sonuç)) ($ firstname \u003d $ satır ["firstname"]; $ SONNAME \u003d $ satır ["LastName"]; $ phonenumber \u003d $ satır ["PhoneNumber"]; $ e-posta \u003d $ Satır ["e-posta"]; // - Sonucu yankı dizisindeki çekin "

    "; } }

    Burada dört kod parçasını değiştirdik:

    • ISSET () işlevini kullanıyoruz ve $ _GET dizisindeki kimlik değerini kontrol etmek için kullanın;
    • Bir $ COLIDID değişken oluşturun ve bir dizi $ _get ile başlatın;
    • Tabloda, yıldızla işaretlenmiş her şeyi tahsis edin *. Yıldız işareti, SQL'de kısaltılmış bir belirlemedir; bana masadan tüm sütunları ve çizgileri ver ". Hangi bilginin çıktısını belirlemek için, SQL ifadesinin sonundaki adresli değişkenden bahsediyoruz;
    • Her personel temsilcisi hakkında ek bilgi türetiriz.

    Search_byid.php dosyasını kaydedin ve sonucu kontrol edin.

    Lütfen işlevselliğimizin olması gerektiği gibi çalıştığını unutmayın. Alandaki bir isim veya soyadı girerken veya köprü olarak bir harf seçerken, yalnızca personel temsilcilerinin adları görüntülenir. İmleci bağlantıya getirirseniz, durum çubuğunda benzersiz bir kimlik görebilirsiniz. Belirli bir kişiye tıklarsanız, adres çizgisi değişecektir ve bu çalışan hakkında ek bilgi görünecektir.

    SQL Enjeksiyonu

    Arama alanı düzenli ifademize eklememizin nedeni, hiç kimsenin SQL isteğimize müdahale edemeyeceğidir. Önceden, bu sorun dağıtıldı ve bilgisayar korsanları, başvurunuzu manipüle ederek kendi SQL sorgularını gerçekleştirmeyi başardılar. Örneğin, sahamızdaki kesme işlemini kullanmamıza izin verildiydik, bilgisayar korsanı sorguyu kullanarak veritabanını silebilir:

    "Bırak masa

    Zaten belirtildiği gibi, düzenli ifade, ilk sembol olarak ziyaretçinin yalnızca alt veya büyük harflerdeki harfleri girebileceğini garanti eder.

    Sonuç olarak

    Günümüzün makalesinde, sitenin nasıl aranacılığı yapacağız:

    • Veritabanları ve ilgili tablolar oluşturun;
    • Veritabanlarını yönetmek için araçlar kullanın, sütunlar oluşturun ve veri girin;
    • Giriş verilerini doğrulayabilen bir PHP tabanlı arama formları, sorgudaki değişkenlerin kullanılabilirliğini ve tablodan veritabanına ve çıktı sonuçlarına bağlanabilen bir PHP tabanlı arama formları geliştirmek;
    • Uygulama ve veritabanını SQL enjeksiyonlarından nasıl koruyabilirsiniz.

    Bu makaleden elde edilen bilgileri kullanarak, bir başkasının kodunu kolayca değiştirebilir, ayrıca arama formlarının işlevselliğini genişletmek için gerekli olabilir.

    Bu yayın, makalenin çevirisidir " PHP ve MySQL ile bir arama özelliği nasıl oluşturulur"Dostça bir proje ekibi tarafından hazırlandı