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 ("|
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.
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:
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:
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.
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ı:
Arama.zip arşivinin içeriğini Arama klasörüne açın. Scripts-yükleme haklarından kaydetmeye izin ver 777.
CONFIG.PHP dosyasındaki veritabanının yüklenmesini düzenleyin, Install.php - Gerekli veritabanları oluşturulacaktır.
"/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"
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.
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.
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.
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:
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
(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:
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:
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
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
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:
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.
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
[E-posta Korumalı]
417-854-8547
3
Brent.
Callahan
[E-posta Korumalı]
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: