Menü
Bedava
giriş
ana  /  Tavsiye / Adamın Doğuşu Arama Öğesi PHP I. PHP ve MySQL'de Çok Seviye Menü

Bir Adam Arama Öğesinin Doğuşu PHP I. PHP ve MySQL'de Çok Seviye Menü

Tarafından Ibrahim Diallo.

Yayınlandı Jul 2 2014 ~ 16 Dakika Oku

Arama bir web sitesinde önemli bir özelliktir. Birkaç okurum, blogumda belirli bir pasajı aramak istediğinde, arama kutusu. Google Arama tarafından desteklenmektedir, ancak o zamandan beri kendi eve demlenmiş versiyonuma değiştirdim, çünkü daha iyisini yapabilirim ama ilginç bir zorluk olduğundan.

Aceleniz varsa ve sitenizin araması olmasını istiyorsanız, daha önce yaptığım şeyi yapın, Google'ı kullanın.

// search.php dosyasında $ terim \u003d issas ($ _ almak ["sorgu"])? $ _ almak ["sorgu"]: ""; $ Terim \u003d urlencode ($ terim); $ Web Sitesi \u003d URLENCODE ("www.yourwebsite.com"); $ redirect \u003d "https://www.google.com/search?q\u003dsite%3a($website) + ($ terim)"; Başlık ("Yer: $ yönlendirme"); çıkış;

Ne yaptığı oldukça basittir. Kullanıcı tarafından geçen terimi alın ve Google Arama sayfasına iletin. Siteyi kullanarak arama sonucunu mevcut etki alanımızla sınırlandırın: Arama Sorgusu'ndaki anahtar sözcüğü. Google tarafından dizine eklenen tek şey, şimdi arama yoluyla açılacaktır. Bununla birlikte, aramanızı evinizde ele almak istiyorsanız, okumaya devam edin.

Ev yapımı arama çözümü

Daha ileri gitmeden önce, bu blogdaki arama kutusunu kullanmayı deneyin. Aşağıda tarif edeceğim işlemi kullanır. Bunun istediğiniz şey olduğunu düşünüyorsanız, lütfen okumaya devam edin.

Bu çözüm küçük web sitelerine yiyecek ve içecektir. Her iki ucunda joker kartlarıyla birlikte kullanıyorum, yani aramanız indekslenemiyor. Bu, çözeltinin blogunuz veya kişisel web siteniz için para cezası için iyi çalışacağı anlamına gelir. Onu daha büyük bir web sitesine götürün ve çok yavaş olabilir. MySQL tam metin arama sunuyor, burada yaptığımız şey değil.

Not: 5000 blog yazınız varsa, hala iyisin. .

Bu blogun yapısını referans olarak alacağız. Her blog gönderi:

  • Bir başlık p_title
  • Bir URL P_URL
  • Bir özet P_Summary.
  • Bir gönderi içerik P_Content
  • Ve catergories kategori.tagname.

Arama terimimizle eşleşen tarla, bir puan vereceğiz. Skor maçın önemine dayanacaktır:

// tam terim maçları, $ scorefulltitle \u003d 6 başlığında bulunur; // part score scoreTitleKeyword \u003d 5 bölümündeki başlığı eşleştirin; // Tam terim maçları, Sumarent ScunefullSmary \u003d 5 özetinde bulunur; // kısım cinsinden özeti eşleştirin ScoreSummaryKeyword \u003d 4; // Tam terim maçları, Content $ scorefulldocument \u003d 4 içeriğinde bulunur; // belgeyi kısmen eşleştirin scoredocumentkeyword \u003d 3; // bir kategori $ scorecategoryKeyword \u003d 2 ile eşleşir; // url $ scoreurlkeyword \u003d 1 ile eşleşir;

Weit başlamadan önce, kaldırılması gereken bir aramaya fazla katkıda bulunmayan birkaç kelime var. Örnek "in", "it", "a", "", " Bunları filtreleyeceğiz ve alakasız olduğunu düşündüğünüz herhangi bir kelime eklemek için özgür hissetmeyeceğiz. Başka bir şey, sorgumuzun uzunluğunu sınırlamak istiyoruz. Bir kullanıcının arama alanına bir roman yazmasını ve MySQL sunucumuzu çarpmasını istemiyoruz.

// Arama teriminden gereksiz kelimeleri kaldırın ve bir dizi işlevi olarak iade edin FiltersearchKeys ($ sorgu) ($ sorgu \u003d trim (Preg_Replace ("/ (\\ s +) + /", "", $ sorgu); $ kelime \u003d Dizi (); // Bu listeyi kelimelerinizle genişletin. $ Liste \u003d dizi ("in", ",", "," "," ",", "veya", "I", "Siz" , "O", "Ben", "ABD", "Onlar", "O", ",", "ama", "", "bu", "", ",", ",", ",", "); $ c \u003d 0 ; Foreach (patlama (", $ sorgu) $ tuşu olarak) (eğer (in_array ($ tuşu, $ listesi)) (devam et;) $ kelimeler \u003d $ tuş; eğer ($ c\u003e \u003d 15) (Break;) $ c ++;) $ kelimeleri geri döndür;) // limit kelimeler Karakter işlevlerinin sayısı Limitchars ($ sorgu, $ limit \u003d 200) (Dönüş Substr ($ sorgu, 0, $ limit);)

Yardımcı fonksiyonlarımız artık karakter sayısını sınırlayabilir ve işe yaramaz kelimeleri filtreleyin. Yol algoritmamızı uygulayacak, her bir eşleşme bulduğumuzda bir puan vererek. Daha fazla sözcüğü eşleştirirken, if ifadesini kullanarak kelimelerle eşleşeceğiz. Sonunda, sonuçlarımızı sıralamak için bu puanı kullanabiliriz.

Not: MySQL veritabanına nasıl bağlanacağını göstermeyeceğim. Verimli bir şekilde veritabanına verimli bağlantı kurmak için sorun yaşıyorsanız, bunu okumanızı öneririm.

Önce işlevimize bir yapı verelim. Not Yer sahiplerini ayrıldım, böylece bölümleri ayrılabilir.

İşlev Arama ($ Sorgu) ($ sorgu \u003d trim ($ sorgu); if (MB_strlen ($ sorgu) \u003d\u003d\u003d 0) (// hayır İhtiyaç için Boş arama doğru mu? Yanlış döndür; ) $ Sorgu \u003d limitchars ($ sorgu); // tartı skorları $ scorefulltitle \u003d 6; $ Scoretitlekeyword \u003d 5; $ scorefullSummary \u003d 5; $ scoreSummaryKeyword \u003d 4; $ scorefulldocument \u003d 4; $ scoredocumentkeyword \u003d 3; $ scorecategoryKeyword \u003d 2; $ scoreurlkeyword \u003d 1; $ Anylowers \u003d FilterSearchKeys ($ sorgu); $ Esquery \u003d db :: kaçış ($ sorgu); // db nesnesini almak için yukarıdaki nota bakınız, TITLESQL \u003d dizi (); $ SUMSQL \u003d dizi (); $ DOCSQL \u003d dizi (); $ Categorysql \u003d dizi (); $ urlsql \u003d dizi (); / ** Eşleştirme Tam Olanaklar Yer Tutucu ** / ** Eşleşen Anahtar Kelimeler Sıra Tutucu ** / $ SQL \u003d "Seç P.P_ID, P.P_TITLE, P.P_SumMARY, P.P_CONTENT, P .Tumbnail, (- Başlık Skoru .Implode ("+", $ Titlesql). ") + (- Özet" .Implode ("+", $ SUMSQL). ") + (- belge". Daire ("+", $ DOCSQL). ") + (- Tag / Category" .Implode ("+", $ CategorySQL). ") + (- URL.).")) P sonrası P sonrası ile alaka düzeyi P.status \u003d "yayınlanmış" alaka düzeyi\u003e

Sorguda, tüm skorlar alaka düzeyi değişkeni olarak toplanacak ve sonuçları sıralamak için kullanabiliriz.

Tam oluşumları eşleştirme.

Önce bazı anahtar kelimelerimiz olduğundan emin oluruz, sonra sorgumuzu ekleyin.

Eğer (sayım ($ anahtar kelimeler)\u003e 1) ($ titlesql \u003d "if (P_TITLE" gibi "%. $ Escquery."% ", ($ Scorefulltle), 0)"; $ SUMSQL \u003d "Eğer (P_Summary" gibi "%". $ Escquery. "%", ($ scorefullSummary), 0) "; $ DOCSQL \u003d" Eğer (P_Content "%." $ 'a kadar. "$ Escquery."% ", ($ scorefulldocument), 0)";)

Bunlar daha yüksek puan alan maçlardır. Arama terimi bunları içeren bir makaleyle eşleşirse, üstte görünen daha yüksek chancese olacaktır.

Eşleşen anahtar kelimeler olayları.

Tüm Anahtar Kelimeler arasında döngü ve alanlardan herhangi biriyle eşleşip eşleşmelerinde kontrol ediyoruz. Kategori maçında, bir gönderinin birden fazla kategoriye sahip olabileceği için bir alt sorgu oluşturulmuştur.

Foreach ($ anahtar olarak $ anahtar kelimeler) ($ titlesql \u003d "if (p_title" gibi "%". DB :: kaçış ($ tuş). "%", ($ ScoreetleKeyword), 0) "; $ SUMSQL \u003d" Eğer (P_Summary "%." Gibi DB :: Kaçış ($ Key). "%", ($ Skoresummarykeyword), 0) "; $ DOCSQL \u003d" Eğer (p_Content "%." DB :: kaçış ($ tuş). "% ", ($ Scoredocumentkeyword), 0)"; $ urlsql \u003d "Eğer (p_url"%. "DB :: Kaçış ($ Key)."% ", ($ Puanlkeyweywey), 0)" $ 'ı kategorisql \u003d "if ( (Kategoriden (kategori.tag_id) kategoriye göre Seçin Post_Category.tag_id \u003d Category.tag_ID NEREDE.TAG_ID NEREDEN POST_CATE.POST_ID \u003d P.POST_ID ve CATECTOR.NAME \u003d "" .db :: Kaçış ($ tuş). "" ")\u003e 0, ($ ScorecategoryKeyword), 0) ";)

Ayrıca aşağıdaki bir yorumcu tarafından işaret ettiği gibi, bu değişkenlerin boş diziler olmadığından veya sorgunun başarısız olacağından emin olmalıyız.

// sadece boş, eğer (boş ($ sumsql)) (boş ($ SUMSQL)) (boş ($ SUMSQL)) (boş ($ SUMSQL)) (boş ($ SUMSQL)) ($ SUMSQL \u003d 0;) ($ SUMSQL \u003d 0;) Boş $ DOCSQL \u003d 0;) Eğer (boş ($ urlsql)) ($ urlsql \u003d 0;) ise (boş ($ tagsql)) ($ tagsql \u003d 0;)

Sonunda, quers, postanın arama terimine alaka düzeyini belirlemek için hepsi birleştirilir ve bir araya gelir.

// Arama teriminden gereksiz kelimeleri kaldırın ve bir dizi işlevi olarak iade edin FiltersearchKeys ($ sorgu) ($ sorgu \u003d trim (Preg_Replace ("/ (\\ s +) + /", "", $ sorgu); $ kelime \u003d Dizi (); // Bu listeyi kelimelerinizle genişletin. $ Liste \u003d dizi ("in", ",", "," "," ",", "veya", "I", "Siz" , "O", "Ben", "ABD", "Onlar", "O", ",", "ama", "", "bu", "", ",", ",", ",", "); $ c \u003d 0 ; Foreach (patlama (", $ sorgu) $ tuşu olarak) (eğer (in_array ($ tuşu, $ listesi)) (devam et;) $ kelimeler \u003d $ tuş; eğer ($ c\u003e \u003d 15) (Break;) $ c ++;) $ kelimeleri geri döndür;) // limit kelimeler karakter sayısı Limitchars ($ sorgu, $ limit \u003d 200) (Dönüş Substr ($ sorgu, 0, $ limit);) İşlev Arama ($ Sorgu) ($ Sorgu) \u003d Döşeme ($ sorgu); eğer (mb_strlen ($ sorgu) \u003d\u003d\u003d 0) (// boş ara aramaya gerek yok mu? False'yı geri getirin;) $ query \u003d Limitchars ($ sorgu); // Ağırlık Skorları $ Scorefulltle \u003d 6 ; $ ScoretitleKeyword \u003d 5; $ ScorEFullSummary \u003d 5; $ ScoreSummaryKeyword \u003d 4; $ ScoreFullDocument \u003d 4; $ scoredocumentkeyword \u003d 3; $ scoreCategoryKeyword \u003d 2; $ scoreurlke yword \u003d 1; $ Anylowers \u003d FilterSearchKeys ($ sorgu); $ Esquery \u003d db :: kaçış ($ sorgu); // db nesnesini almak için yukarıdaki nota bakınız, TITLESQL \u003d dizi (); $ SUMSQL \u003d dizi (); $ DOCSQL \u003d dizi (); $ Categorysql \u003d dizi (); $ urlsql \u003d dizi (); / ** Tam oluşumlarla eşleşen ** / eğer ($ ($ anahtar kelimeler)\u003e 1) ($ titlesql \u003d "if (p_title" öyleyse "%." $ Esquery. "%", ($ Scorefulltle), 0) "; $ SUMSQL \u003d "Eğer (p_Summary" gibi "%." $ Esmer "."% ", ($ ScorefullSummary), 0)"; $ DOCSQL \u003d "Eğer (P_Content"%. $ Esquery. $ Esquery. "%", ($ Scorefulldocument), 0 ) ";) / ** Anahtar Kelimeleri Eşleşen ** / Foreach ($ Key Anahtar Kelimeler) ($ Titlesql \u003d" Eğer (P_TITLE "Gibi"% ". DB :: Kaçış ($ tuş)."% ", ($ Tuş)."% ", ($ ScoreTitleKeyword) , 0) "; $ SUMSQL \u003d" Eğer ("%" gibi P_Summary. DB :: Kaçış ($ tuş). "%", ($ ScoreSummaryweyword), 0) "; $ DOCSQL \u003d" Eğer (P_Content "gibi"% " .Db :: kaçış ($ tuş). "%", ($ Scoredocumentkeyword), 0) "; $ urlsql \u003d" Eğer (p_url "%." DB :: kaçış ($ tuş). "%", ($ ScoreurLkeyword), 0) "$ 'ı kategorisql \u003d" Eğer ((kategorideki kategori (kategori.tag_id) kategoriye göre Post_Category.Tag_ID \u003d CATORL.TAG_ID.TAD_ID.NAME \u003d "". DB: : Kaçış ($ tuş). "" "")\u003e 0, ($ scorecategorykeyword), 0) ";) // sadece boş, eğer boş, ekleyin (boş ($ titlesql)) ($ titlesql \u003d 0;) Eğer. (Boş ($ SUMSQL)) ($ SUMSQL \u003d 0; ) if (boş ($ excsql) (boş ($ urlsql)) (boş ($ urlsql)) ($ urlsql \u003d 0;) ise (boş ($ tagsql)) ($ tagsql \u003d 0;) $ sql \u003d " P.P_ID, P.P_TITLE, P.P_DATE_PUTISHED, P.P_URL, P.P_Summary, P.P_CONTENT, P.Tumbnail, (((- Başlık Skoru .Implode ("+", $ titlesql). ") + (- Özet" .Implode ("+", $ SUMSQL). ") + (- belge". ") + (" + ", $ DOCSQL).") + (- Etiket / Kategori ".Implode (" + ", $ CategorySQL).") + (- URL ".Implode (" + ", $ urlsql).")) P sonrası P.Status \u003d "yayınlanmış" alaka düzeyine sahip olmak\u003e 0 sipariş vererek, p .Page_views desc limit 25 "; $ Sonuçlar \u003d db :: sorgus ($ sql); eğer (! $ sonuçlar) (false döndürün;) $ sonuçlar geri döndürün; )

Şimdi Arama.php dosyanız böyle görünebilir:

$ Terim \u003d issas ($ _ almak ["sorgu"])? $ _ Almak ["sorgu"]: ""; $ Search_Results \u003d Ara ($ terim); Eğer (! $ Search_Results) (Echo "no sonuç"; çıkış;) // sayfayı burada sonuçlarla yazdırın.

Adil bir içerikte bulunabilecek basit bir arama algoritması oluşturduk. Her maç için puanı keyfi olarak seçtim, sizin için en iyi şekilde çalışan bir şeye sokmaktan çekinmeyin. Ve her zaman iyileştirme için yer var.

Kullanıcılarınızdan gelen arama terimini izlemek iyi bir fikirdir, bu şekilde çoğu kullanıcının aynı şeyi araştırıp aramadığını görebilirsiniz. Bir model varsa, onlara bir seyahatten kurtarabilir ve kullanarak sonuçları önbelleğe alabilirsiniz. Memcached.

Bu arama algoritmasını eylemde görmek istiyorsanız, devam edin ve sayfanın üstündeki arama kutusundaki bir makale aramayı deneyin. Maçın metinde bulunduğu kısmı iade etmek gibi ekstra özellikler ekledim. Size özellikler eklemek için çekinmeyin.

Bu makaleyi beğendin mi? Daha müthiş olanları okumak için abone olabilirsiniz. .

İlgili bir notta, burada bazı ilginç makaleler.

Bir web sunucusu varsa, her gün veritabanına bağlanır. PHP'yi uzun yıllardır kullanıyordum, ancak önce veritabanından veri almak için bir komut dosyası yazmamı istiyorsanız, önce birkaç örnek bulmak için Nihai PHP Kılavuzuna geri dönmeden yapamadım.

Birkaç ay önce PHP sürümümü güncelledim. PHP 5.4 ila 5.5. Daha önce PHP güncellenmemeniz hiç sorun yaşamadım. Gelişimini yakından takip ediyorum ve resmi olarak kaldırılmadan önce kullanımdan kaldırılan işlevlerimi kaldırmaya çalışıyorum. Ama bu sefer bekçi yakaladım. Silahsız bir şekilde web sitemin bir kısmını en yumuşak nedenden dolayı kırdı.

Yorumlar (45)

Zarayel. 12 Ağu 2015:

Ian Mustafa. 26 Eylül 2015:

Rob 29 Eylül 2015:

aEDEEM. 11 Şubat 2016:

Ivan Venediktov. 9 Nis 2016.

30 Nisan 2016 tarihinde güncellendi

PHP ve MySQL kullanarak basit arama nasıl oluşturulacağını göstereceğim.

  • Nasıl kullanılır. Al ve. Posta yöntemi.s.
  • Veritabanına bağlanın.
  • Veritabanıyla iletişim kurun.
  • Eşleşen veritabanı girişleri wort verilen kelime veya cümle
  • Sonuçları göster.

Hazırlık.

Siz Shald, Apache, MySQL ve PHP kurulu ve elbette koşmak (farklı platformlar veya wamp için kullanabilirsiniz) pencereler için, Mac için Mamp) veya PHP ve MySQL veritabanlarını destekleyen bir web sunucusu / barındırma.

"Veritabanı, tablo oluşturun ve arama için kullanabileceğimiz bazı girişlerle doldurun:

  • PhpmyAdmin'e gidin, bilgisayarınızda sunucunuz varsa, http: // localhost / phpmyadmin / adresinden erişebilirsiniz.
  • Veritabanı oluşturun, ben Mine Tutorial_Search adresini aradım
  • Tablo oluştur 3 alan kullandım, maden makaleleri aradım.
  • 1. alan için yapılandırma. Adı: ID, Tip: int, Oto_increment'i kontrol edin, Dizin: Birincil

İnt, tamsayı "
Auto_increment, yeni girişlerin önceki (daha yüksek) bir numaraya sahip olacağı anlamına gelir.
Endeks: Birincil, satırı tanımlamak için kullanılan benzersiz bir tuşun olduğu anlamına gelir.

  • 2. alan: İsim: Başlık, Tür: Varchar, Uzunluk: 225

Varchar, maksimum 225 karakter, maksimum 225 karakter (maksimum uzunluk belirlemek için gereklidir), adları, adlar, adresler için kullanın.
uzunluk, 225 karakterden daha uzun olamayacağı anlamına gelir (isterseniz daha az sayıda ayarlayabilirsiniz)

  • 3. Alan: İsim: Metin, Tip: Metin

Metin, "uzun dize" anlamına gelir, uzunluğu belirlemek için gerekli değil, uzun metin için kullanın.

  • Tabloyu bazı rastgele makaleler web siteleri ile doldurun, örneğin: CNN, BBC, vb.). Üst menüye ekle'ye tıklayın ve metni belirli bir alanlara kopyalayın. "ID" alanını boş bırakın. En az üç yerleştirin.

Bunun gibi bir şeye benzemeli:

  • Sunucu dizininizde bir klasör oluşturun ve iki dosya: index.php ve search.php (aslında bütün bunları tek bir dosyayla yapabiliriz, ancak iki tane kullanalım, daha kolay olacaktır)
  • Onları varsayılan HTML İşaretleme, DocType, Baş, vb.

Arama.

  • Arama alanı ile bir form oluşturun ve index.php'deki Gönder düğmesi. GET veya POST yöntemini kullanabilirsiniz, Arama.php için işlemi ayarlayın. Metin alanı için isim olarak "sorgu" kullanıyorum

GET - Bilgilerinizin URL'de saklanacağı anlamına gelir (http: //localhost/tutorial_search/Search.php? Query \u003d senin.)
Gönder - Bilgilerinizin gösterilmesi gerektiği anlamına gelir; şifreler, özel bilgiler, almaktan çok daha güvenli

Tamam, PHP ile başlayalım.

  • Arama.php'yi açın.
  • PHP'yi başlat ()
  • Bir veritabanına bağlanın (aşağıdaki koddaki yorumları okuyun)

< to > $ Query \u003d mysql_real_escape_string ($ sorgu); // kimsenin SQL enjeksiyonunu kullanmadığından emin olun $ Raw_Results \u003d mysql_query ("Seçme *" Makalelerden (`unvan"%. "$ Sorgu."% "Ya da (" Metin 'gibi "%. $ Sorgu."% " ) ") Veya öl (mysql_error ()); // *, tüm alanları seçtiğini, ayrıca yazabileceğiniz anlamına gelir: `ID`,` unvan, `metnin // makaleler, masamızın adıdır //"% $ sorgusu% " ,% Bir şey demektir, örneğin, $ sorgu merhaba ise // "Hello", "Merhaba adam", "Gogohello" ile eşleşirse, "tibet" \u003d "$ sorgu" // veya isterseniz Sadece tam kelimeyle eşleşecek şekilde "Gogohello", "% $ sorgu" ... ya da ... "$ sorgu%" ... ya da ... "% $ sorgusu" if (mysql_num_rows ($ raw_results)\u003e

"$ sonuçlar [" başlık "]."

". $ sonuçlar [" metin "]."

"// veri veritabanından elde edilen sonuçlar (başlık ve metin) Kimlik gösterebilirsiniz ($ sonuçlar [kimliği"]))))))) başka (// eşleşen satır yoksa, "sonuç yok";)) (// sorgu uzunluğu minimum yankıdan daha azsa, "minimum uzunluk". $ Min_length;)?\u003e

Bırak!

Şimdi çalışıyor. Farklı kelimeler, varyasyonlar, düzenleme kodunu deneyin, deneyin. Bir şeyi kaçırdığınızı düşünmeniz durumunda her iki dosyanın tam kodunu ekleyeceğim. Soru sormak veya öğreticiler istemek için çekinmeyin.

index.php.

Arama.

search.php.

Arama Sonuçları. \u003d $ min_length) (// sorgu uzunluğu daha fazla veya eşit derecede minimum uzunluksa, $ sorgu \u003d htmlspecialchars ($ sorgu); // HTML'de kullanılan karakterleri eşdeğerlerine göre değiştirir, örneğin:< to > $ Query \u003d mysql_real_escape_string ($ sorgu); // kimsenin SQL enjeksiyonunu kullanmadığından emin olun $ Raw_Results \u003d mysql_query ("Seçme *" Makalelerden (`unvan"%. "$ Sorgu."% "Ya da (" Metin 'gibi "%. $ Sorgu."% " ) ") Veya öl (mysql_error ()); // *, tüm alanları seçtiğini, ayrıca yazabileceğiniz anlamına gelir: `ID`,` unvan, `metnin // makaleler, masamızın adıdır //"% $ sorgusu% " ,% Bir şey demektir, örneğin, $ sorgu merhaba ise // "Hello", "Merhaba adam", "Gogohello" ile eşleşirse, "tibet" \u003d "$ sorgu" // veya isterseniz Sadece tam kelimeyle eşleşecek şekilde "Gogohello", "% $ sorgu" ... ya da ... "$ sorgu%" ... ya da ... "% $ sorgusu" if (mysql_num_rows ($ raw_results)\u003e 0) (// ise bir veya daha fazla satır döndürülürse ($ sonuçlar \u003d mysql_fetch_array ($ raw_results)) (// $ sonuçlar \u003d mysql_fetch_array ($ raw_results) veritabanından dizi olarak veritabanından veri koyar, geçerlidir. Loop Echo "

"$ sonuçlar [" başlık "]."

". $ sonuçlar [" metin "]."

"// veri veritabanından elde edilen sonuçlar (başlık ve metin) Kimlik gösterebilirsiniz ($ sonuçlar [kimliği"]))))))) başka (// eşleşen satır yoksa, "sonuç yok";)) (// sorgu uzunluğu minimum yankıdan daha azsa, "minimum uzunluk". $ Min_length;)?\u003e

Bu yazıda nasıl oluşturulacağını göstereceğim pHP ve MySQL'de Çok Seviye Menü. Tabii ki, yaratılışının seçenekleri çok icat edilebilir, ancak bu konudaki sorularınızın sayısına göre yargılamak, bir örneğe ihtiyacınız var. Ve bu makalede vereceğim. Bu makalenin sadece bildiği kişiler için mantıklı olduğunu hemen unutmayın. Php. ve nasıl çalışacağını bilir Mysql. Gerisi ilk önce bunun içinden geçmesi ya da bazı kitapları okuması gerekir. PHP ve MySQL.

Başlamak için, aşağıdaki alanlarla veritabanında bir tablo oluşturun:

  • İD - Eşsiz tanımlayıcı.
  • başlık - Menüdeki bağlantı bağlantıları.
  • link. - Menü öğesinin olacağı adres.
  • parent_id - Ebeveyn Kimliği. Ebeveyn bir öğesi yoksa, null burada olacak (veya 0 daha koyabilirsiniz).

Tablo ayrıldı, şimdi zamanı geldi Php kodu. Tam Php kodu Aşağıda bulunur:

$ mysqli \u003d yeni mysqli ("localhost", "kök", "", "db"); // Veritabanına bağlanın
$ Sonuç_set \u003d $ Mysqli-\u003e Sorgu ("Menü`den * 'dan Seç *); // Menüyle masadan tüm girişlerin bir örneğini yaptık.
$ ürün \u003d dizi (); // menü öğeleri için dizi
(($ Row \u003d $ sonuç_set-\u003e fetch_assoc ())! \u003d false) $ ürün [$ satır [«id]] \u003d $ satır; // Numunenin dizisini veritabanından doldurun
$ Childrens \u003d dizi (); // Ebeveyn unsurlarına uygunluk için dizi
Foreach ($ ürün olarak $ öğe) (
Eğer ($ ürün ["ebeveyn_id"]) $ çocuksu [$ öğe [id "]] \u003d $ öğe [" ebeveyn_id "]; // bir diziyi doldur
}
İşlev PrintItem ($ ürün, $ ürün, $ childrens) (
/ * Menü öğesini görüntüleyin * /
Eko "

  • ";
    Yankı ". $ Ürün [" başlık "]." ";
    $ ul \u003d false; // Çocuk elemanları görüntülendi mi?
    (Doğru)
    / * Tüm çocuk elemanlarını aradığımız sonsuz döngü * /
    $ Tuşu \u003d array_search ($ öğe [id "], $ childrens); // bir çocuk unsuru arıyoruz
    if (! $ tuşu) (
    / * Kızı öğeleri bulunamadı * /
    Eğer ($ ul) echo ""; // Çocuk elemanları çıktı ise, listeyi kapatın
    Kırmak; // döngüden çık
    }
    Unsem ($ childrens [$ tuş]); // Bulunan öğeyi silin (böylece tekrar görünmüyor)
    if (! $ ul) (
    Eko "
      "; // Çocuk elemanları henüz olmasaydı dahili listeye başlıyoruz.
      $ Ul \u003d true; // bayrağı ayarla
      }
      ECHO Printitem ($ Maddeler [$ Key], $ ürün, $ childrens); // tüm çocuk elemanlarını özyinelemeli olarak göster
      }
      Eko "";
      }
      ?>

      Bu kod tamamen işçidir, ancak kimsenin yazmadığınızı anlamanız gerekir (özellikle sonuç olarak) eko. Html tagov). Ve görevin algoritmayı bu koddan almak, ancak kodun kendisi değil. Ve sonra bu algoritma motorunuza bağlanır. Çıktı kodu hakkında dikkatlice yorum yapmaya çalıştım pHP ve MySQL'de Çok Seviye MenüAncak, elbette, en şeffaf değildir ve iyi ilk bilgi gerektirir. Hala biliyorsan PHP ve MySQLSonra ilk başta bunu kesinlikle tavsiye etmenizi tavsiye ederim.

      Erkek Doğum Günü Komut Dosyası Özel dikkat gerektirir. Sonuçta, güçlü zemin genellikle titizliktir, tatilin formatını değerlendirir. Tatillerimizin geniş deneyimimiz yaşa, karakter deposuna ve doğum günü görevlisinin çıkarlarına bağlı olarak doğum günü için mükemmel senaryo bulmanızı sağlar. Örneğin, müşterilerimizde en popüler olan doğum günü erkeklerinin senaryosunu sunuyoruz:

      Lider telaffuz doğum günü odası için tost Ve onu kelimelerle bitirir:

      Gözlüklü şampanya dökün
      Ve her şeyi dibe kadar içiyorlar!
      Gençlik için kızartma tostu
      Ve gençlik yalnız değil!

      İlk çember bitti, yeni bir tane başladı.
      İkinci gençliğe katıldın.
      Erkek belirgin, güçlü ve sağlıklı,
      Taze fikirler ve güçle doluysun.

      Ayrıca enerjik kal
      Sonuçta, çok yıllar arasında boşuna çalışmadın!
      Öyleyse komik, güzel olmak,
      Ve kaderin sizi sıkıntılardan uzak tutmasına izin verin!

      Konuklar kutlamanın failinde yapılmaktadır. antik Çingene Romantizm
      (İki koruyabilir ve diğerleri Koro'yu alır):

      Gözlük dökülür
      İçlerinde parıltı amber,
      Ve yüzler aydınlatıyor
      Ne kadar komik şafak!

      Şarapla, uzun süre aşınmış,
      Işık olur
      Ve kalpteki tost, soruyor:
      Yıldönümü için içiyoruz!

      Koro:

      Bizim koro antik antik şarkı söylüyor,
      Şampanya Nehri döküyor!
      Senin için arkadaşımız sevgili,
      Doğum Günü Kitabımız (Belki Ad) canım!

      Ne harika olabilirdi
      Ne zaman, aşk taya,
      Bir şarkı ile tanıştın
      Yerel ve arkadaşlar!

      Akşama başlasın,
      Hayat ne kadar yeni bir çevredir?
      Ve tüm rüyalar gerçekleşir,
      Ve her şey etrafta çiçek açar!

      Koro:
      Dipler! Dipler! Dipler!

      Müzikal duraklama.

      Sonra ara ebeveynler için tost.

      Lider:

      Şimdi, şimdi arkadaşlar, an geldi
      Ebeveynler için bir cam doldurun!
      Yaşamın sevincini verenler için
      Ve dünyada, harika kapılar meydan okudu,

      Ona öğretenler için
      Ve pil rölesi teslim edildi.
      Kimler için şimdi, şimdi
      Doğum günümüz arasında oturuyor!

      Öyleyse ebeveynler için iç ... (Onları isim-patronimik ile çağırır)

      Müzikal duraklama.

      Sunucu, jübileenin hayat yolu hakkında kısaca konuşuyor.

      Ana Bilgisayar: Ve şimdi şarkı söylüyoruz "Tatilimizin ana kahramanı hakkında eski şarkılar".

      (Konuklar pilotlarla ilgili şarkıların sebeplerini söyler)


      Bir jubilee olmadan, düz diyelim ki, yapacak bir şey yok.
      Masada toplanacağız,
      Tam gözlük nalmes
      Ve söylediğimiz sağlık şarkıları için:

      Notumuzun zamanı geldi
      Ve bu gün buluşmak için

      Yirmi olmasın, otuz değil, izin verin!
      Bariyerinizi düşürmezsiniz!
      İzle kesinlikle olacağız
      Bize zarar vermezsin, ayrıca biliyorsun!

      Cesur, cesur, cesur görüyoruz
      Erkekler ince, güzel, kıvırcık!
      Serisi yıllarca gitsin
      Ama her zaman diliyorum
      Ruhun genç kaldı!

      Notumuzun zamanı geldi
      Kutlama zamanı, görkemli yıldönümünü kutlamak!
      Ve bu gün buluşmak için
      Akrabaların büyük şirketi, arkadaşlar!

      Kaderin bazen bize acımasız olalım, izin verin!
      Cevap olarak, şakalarınızı bırakın!
      Aynı şeyi kesinlikle takip edin
      Etrafta bir umutsuzluk kabul etmeyin!

      Bu gece, akşamları, akşamları
      Pahalı bir jübile olmadan, yapacak bir şey yok!
      Bir kere içeceğiz, iki tane içeceğiz
      Yıldönümü ve işler için,
      Ama bu yarın kafama zarar vermedim!

      Biz bir jübile aşkıyız, saygı
      Ve tebriklerimiz devam ediyor!

      (Konuklar bir zil sesi üzerinde şarkı "Ben doğum gününde yapamam ..." :)

      Doğum gününde yapamayız
      Sevgili Mercedes,
      Ama bir hediye eli, şüphesiz
      Ve yüz kez tekrarlamaya hazır:

      Nazik, neşeli, özenli olduğun
      Ve konularda genel olarak kabul edilen özel ürünler,
      Ne harikasın
      Ve yoldaş, ve koca ve baba!

      Lider:

      Seni ruhtan tebrik etmek istiyoruz
      Pasaportun yaşı yanı sıra,
      Sonuçta, senin türün, gülüşün,
      Pasaport hatasında yaklaşık on yıl!

      (Konuklar, Asker'in Şarkısının Memnuniyetini Şarkı "Yol bizden bizden uzakta ...")

      Doğum günü adamı - cesur adam
      Sokol'a rütbelerde bakıyor!
      Haline saygı duymak
      Ve hizmette, savaşta olduğu gibi!

      Koro:

      ________ (doğum günü adı) yolda! Hadi yola çıkalım! Hadi yola çıkalım!
      Yüz yıla ulaşmak
      Ve güçlü kal
      Kader seni çağırıyor!
      ________ (doğum günü adı) ileri!

      Sevgili Jubilee.
      Ruhun tebrikleri!
      Ve madalya el ve bir hediye
      Büyükünün liyakat aracılığıyla!

      Koro.

      Yılbaşı hediye verilir ve unutulmaz yazıt ile madalya: "İş, arkadaşlık ve sevgide büyük esaslar için." (Madalya ağaçtan doldurulabilir ve şeritteki doğum günü partisinin boynuna asılabilir

      "Doğum günü daha iyi tanıyan" konusundaki rekabet!

      Hakim doğum günün kendisi olacak.
      Lider, sorular sorar ve doğru cevaplar için cipsleri sunar. Oyunun sonunda en fazla sayıda cipin sahibi oldu, doğum günü adamının avukatı ile ödül aldı.

      Müzikal duraklama.

      Doğum günlerinde sınav

      Sevgili arkadaşlar! Çok Erudite Misafirini belirlemeye çalışalım! Tabii ki konuyla ilgili, hala aynı - doğum günü. Sadece hayatta değil, ekranda!

      Her doğru veya esprili yanıt için bir çip verilir. En fazla cips için sınavın ardından bir ödül verilir. Örneğin, çikolata. Konuklar tahmin edemiyorsa, lider bu filmi biraz hatırlatmak için bir bilgi vermelidir.

      Komik sorular ve cevaplar

      Sorular ve cevaplarla iki kanepe yap. İlk başta, bir kişi soruyu soracağını duyurdu, soruyu çeker ve okur. Arandığı cevaplarla muslukları makasla. Sonra arayan, cevabı çeken ve okur. Sonra da bir soru soracağını da duyurdu, soruyu çeker ve okur. Vb.

      Takım kurşunuyla dans

      Tebrik telgrafları-bilmeceler (misafirler dahil)

      Lider Duyurular: Tanya için tebrik telgrafları geldi, ama hepsi imza olmadan. Göndereni tahmin etmelisin. Bunlar iyi bilinen insanlar ve misafirlerdir. Ve hatta muhteşem kahramanlar!

      Kulakta size sevgi hakkında fısıldaymalarına izin verin!
      Takma adı için Tsarevna ... Kurbağa

      Sadece bağbozumu şarap içmek istiyorum!
      Senin için mutlu tatil! ... Malvina

      Gitarın altında daha sık söylemek istiyorum!
      Sana iyi bir şirket! ... Rotaru

      Planlanmamış sevgisini karşılamak istemiyorum!
      Merhaba seni müzikal ... Buldanova

      Canlı, Seryozha, eğlenceli ve serin!
      Çocukluğunu unutma! ... Kraliçe

      Size çok fazla müzik ve kahkaha diliyorum,
      aşk ve sonsuz gençlik! ... Pieha

      Paranın her zaman inceye gitmesine izin verin!
      Ve Tavuk Bacakları! ... Baba Yaga

      Çünkü alanda ve ormanda daha sık!
      Size sağlıklı sağlık! ... Alsu

      saddy asla izin vermiyor!
      Annemden büyük merhaba! ... Orloe.

      PE ve ÇIKIŞ ALABİLİR!
      Sana uzun bir hayat diliyorum! Grup ... Ok

      Önce doğru cevabı veren kişi cips verilir. En fazla sayıda cips için bir ödül verilir.

      Piyango Gizem

      Ödül, çantadaki kurşun konusu için bunu tahmin eden birini alır. Önde gelen sorular sorabilirsiniz. "Evet" ya da "hayır" yı cevaplıyor.

      Piyango - Tahmin

      Herkes biletleri çeker veya bir şaka, anecdote için alın. Sunucu çizimi sırasında şöyle diyor:
      - Şimdi kaderi yaşayacağız ve ne pişirdiğini öğreneceğiz.
      İlk odadan başlayarak hediyeler vermek ve önümüzdeki yılın tahminini okur.

      Test "Var olmayan bir hayvan çizin"

      Konukların var olmayan bir hayvan çizmesini ve adını yazmalarını istiyorsunuz.

      Test "Küçük bir adam çizin"

      Bir kişiyi 12 rakamdan çıkarmak gerekir: tüm şekilleri kullanmanız gerekir - bir daire ve üçgenler, kareler. (Bunların miktarında 12)

      Akşamın sonuçlarında, konukların doğum günü telefonu için bir hesap açmalarını sağlayabilirsiniz. Bundan sonra, 3. - tüm misafirlerin ilk ona atabilecekleri bir litre kavanoza katlanmak.