Menu
Jest wolny
Zameldować się
główny  /  Rada / Narodziny do człowieka Szukaj pozycji PHP I. Menu wielopoziomowe na PHP i MySQL

Narodziny pakietu wyszukiwania mężczyzny PHP I. Menu wielopoziomowe na PHP i MySQL

Przez Ibrahim Diallo.

Opublikowany lipca 2 2014 ~ 16 minut

Wyszukiwanie to ważna funkcja na stronie internetowej. Kiedy mój niewielu czytelników chce szukać konkretnego przejścia na moim blogu, pole wyszukiwania. Kiedyś był zasilany przez wyszukiwarkę Google, ale od tego czasu zmieniłem go na własną domową wersję, nie dlatego, że mogę zrobić lepiej, ale ponieważ było to interesujące wyzwanie.

Jeśli się spieszysz i chcę, aby Twoja witryna była szarą, rób to, co zrobiłem wcześniej, użyj Google.

// w pliku Search.php $ Term \u003d Isset ($ _ Get ["Query"])? $ _ Pobierz ["Query"]: ""; $ Term \u003d UrlenCodode ($ Term); $ Website \u003d UrlenCode ("www.yourwebsite.com"); $ Redirect \u003d "https://www.google.com/search?q\u003dsite%3A($Website) + ($ Term)"; Nagłówek ("Lokalizacja: $ przekierowania"); Wyjście;

Co to robi jest dość proste. Uzyskaj termin przekazany przez użytkownika i przekazać go na stronę wyszukiwania Google. Ogranicz wynik wyszukiwania do naszej aktualnej domeny za pomocą słowa kluczowego w zapytaniu wyszukiwania. Wszystkie strony, które są indeksowane przez Google będą dostępne za pośrednictwem wyszukiwania. Jeśli chcesz sobie poradzić sobie z wyszukiwaniem w domu, a następnie czytaj dalej.

Solution Homemade Search.

Zanim pójdziemy dalej, spróbuj użyć pola wyszukiwania na tym blogu. Używa tego samego procesu, który opiszę poniżej. Jeśli czujesz, że tego chcesz, kontynuuj czytanie.

To rozwiązanie jest pokrywane do małych stron internetowych. Używam podobnych z dzikich kart na obu końcach, co oznacza, że \u200b\u200bnie można indeksować wyszukiwania. Oznacza to, że rozwiązanie będzie działać dobrze na blogu lub osobistej stronie internetowej, która nie zawierała ton danych. Port na większej stronie i może stać się bardzo wolno. MySQL oferuje pełne wyszukiwanie tekstowe, nie jest tym, co robimy tutaj.

Uwaga: Jeśli masz 5000 postów na blogach, nadal jesteś w porządku. .

Weźmy strukturę tego bloga jako odniesienia. Każdy wpis na blogu ma:

  • Tytuł P_Title.
  • URL P_URL.
  • Podsumowanie P_Summary.
  • Zawartość pocztowa p_contentent
  • I caterigories kategoria.Tagname.

Pole Forume pasujące do naszego terminu wyszukiwania, damy mu wynik. Wynik będzie oparty na znaczeniu meczu:

// dokładne terminy można znaleźć w tytule $ ScoreOfultitle \u003d 6; // Dopasuj tytuł w części $ ScoreTitleyWord \u003d 5; // Dokładne terminy można znaleźć w podsumowaniu $ ScoreOfullsmary \u003d 5; // Dopasuj podsumowanie w części $ ScoresummaryKeyWord \u003d 4; // Dokładne terminy można znaleźć w treści $ ScoreOfulldocument \u003d 4; // Dopasuj dokument w części $ ScoredocumentKeyword \u003d 3; // pasuje do kategorii $ ScoreCategoryKeyWord \u003d 2; // pasuje do adresu URL $ Scoreurlekeyword \u003d 1;

Przed rozpoczęciem Weit jest kilka słów, które nie przyczyniają się do wyszukiwania, które należy usunąć. Przykład "w", "to", "A", "", "of" .... Będziemy przefiltrować te, aby dodać dowolne słowo, które uważasz za nieistotne. Inną rzeczą jest, chcemy ograniczyć długość naszego zapytania. Nie chcemy, aby użytkownik mógł napisać powieść w polu wyszukiwania i awarii naszego serwera MySQL.

// Usuń niepotrzebne słowa z wyszukiwanego terminu i zwróć je jako funkcję tablicy FILTSEARLSjkeys ($ Query) ($ Query \u003d wykończenia (Preg_replace ("/ (S +) + /", "", $ Query)); $ słowa \u003d Tablica (); // Rozwiń tę listę ze swoimi słowami. $ List \u003d Array ("w", "IT", "A", "The", "," lub "," I "," Ty " : "On", "ja", "USA", "oni", "ona", "do", "ale", "to", "to", "te", "wtedy"); $ c \u003d 0 ; Foreach (eksplodować (", $ zapytania) jako $ klucz) (jeśli (in_array ($ klucz, $ lista)) (kontynuuj;) $ słowa \u003d $ klucz; jeśli ($ C\u003e \u003d 15) (przerwa; ++;) Zwróć $ słowa;) // limit słowa Liczba znaków Listy funkcji ($ zapytania, $ Limit \u003d 200) (Return Substr ($ Query, 0, $ Limit););)

Nasze funkcje pomocnicze mogą teraz ograniczyć liczbę znaków i filtrom bezużyteczne słowa. Sposób wdrożenia naszego algorytmu jest podając wynik za każdym razem, gdy znajdziemy dopasowanie. Dopasujemy słowa za pomocą oświadczenia IF i gromadzą punkty, ponieważ pasujemy do więcej słów. Na koniec możemy użyć tego wyniku, aby posortować nasze wyniki

Uwaga: Nie będę pokazywał, jak połączyć się z bazą danych MySQL. Jeśli masz problemy z łatwością połączyć się z bazą danych, zalecam to czytać.

Najpierw dajmy naszą funkcję strukturę. Uwaga I Wyszliwiający zastępcze, abyśmy mogli wdrożyć sekcje oddzielne.

Wyszukiwanie funkcji ($ Query) ($ Query \u003d Trim ($ Query); If (MB_strlen ($ Query) \u003d\u003d\u003d 0) (// Nie ma potrzeby pustych wyszukiwania w prawo? Zwróć fałszywe;) $ Query \u003d Limdchars ($ Query) ; // Wyniki Ważenie $ ScoreEfulltitle \u003d 6; $ ScoreTitleeyword \u003d 5; $ ScoreOpulsummary \u003d 5; $ ScoresummaryKeyWord \u003d 4; $ ScoreOfuldocument \u003d 4; $ ScoredocumentKeyword \u003d 3; $ ScoreCategorykumentKeyword \u003d 3; $ ScoreCategoryKeyword \u003d 2; $ ScoreLearkeyword \u003d 1; $$ kluczowe \u003d FilterSearkeyword \u003d 1; $ Query); $ Escquery \u003d DB :: Escape ($ Query); // patrz uwaga powyżej, aby uzyskać obiekt DB $ Titlesql \u003d Array (); $ sumsql \u003d tablica (); $ docsql \u003d tablica (); $ kategoriiql \u003d tablica (); $ URLSQL \u003d Array (); / ** Dopasowywanie pełnych zdarzeń Uchwyt Place ** / ** Dopasowanie słów kluczowych Uchwyt ** / $ SQL \u003d "Wybierz p.p_id, strp_title, str.p_date_published, P.p_date_ , P.P_Summary, P.P_Content, P.Thumbnail, (- wynik tytułowy .implode ("+", $ Titlesql). ") + (- Podsumowanie .implode (" + ", $ sumsql).") + (- Dokument ".implode (" + ", $ DOCSQL).") + (- Tag / kategoria ".implode (" + ", $ kategoriaSQL).") + (- URL ". Implode (" + ", $ URLSQL).")) Jak trafność z postu P. gdzie p.status \u003d "Opublikowano" mając znaczenie\u003e

W zapytaniu wszystkie wyniki zostaną podsumowane jako zmienna do trafności i możemy go użyć, aby posortować wyniki.

Dopasowywanie pełnych zdarzeń.

Upewniamy się, że najpierw mamy kilka słów kluczowych, a następnie dodać nasze zapytanie.

Jeśli (liczba słów kluczowych)\u003e 1) ($ titlesql \u003d "jeśli (p_title jak"%. $ Escquery. "%", ($ ScoreOfulle), 0) "; $ Sumsql \u003d" If (P_Summary jak "%". $ escquery. "%" ($ scoreOpummary), 0) "; $ DOCSQL \u003d" IF (P_Content "%." $ Escquery. "%" ($ ScoreOfulldocument), 0) ";)

Są to mecze o wyższym wyniku. Jeśli termin wyszukiwania pasuje do artykułu, który go zawiera, będą miały wyższy chancesy o pojawianiu się na górze.

Wydajne słowa kluczowe

Pętlimy wszystkie słowa kluczowe i sprawdzamy, czy pasują do dowolnego pola. Dla kategorii Mecz, wymieniono pod-zapytanie, ponieważ post może mieć wiele kategorii.

Foreach ($ kluczowe jako $ klucz) ($ titlesql \u003d "jeśli (p_title jak"% ". DB :: Escape ($ Key)."% ", ($ Scentleyeyword), 0)" $ sumsql \u003d ", jeśli (p_mummary Jak "%". DB :: Escape ($ Key). "%", ($ Scoresummarykeyword), 0) "; $ DOCSQL \u003d" IF (P_Content Like "%." DB :: Escape ($ Key). "% ", ($ ScoredocumumentKeyword), 0)"; $ Urlsql \u003d "IF (P_URL jak"%. "DB :: Escape ($ Key)."% ", ($ ScoreWorkeyword), 0)" $ CategorySQL \u003d "IF ( (Wybierz Liczba (kategoria.Tag_id) z kategorii Dołącz do post_category na post_category.tag_id \u003d kategoria.tag_id gdzie post_category.post_id \u003d p.post_id i kategoria.Name \u003d "" .db :: Escape ($ Key). "" ")\u003e 0, ($ ScoreCategoryKeyWord), 0) ";)

Również zgodnie z poniższym komentatorem, musimy mieć pewność, że te zmienne nie są puste macierze lub zapytanie nie powiedzie się.

// Wystarczy być pustym, dodaj 0, jeśli (pusty ($ titlesql)) ($ titlesql \u003d 0;), jeśli (pusty ($ sumsql)) ($ sumsql \u003d 0;), jeśli (pusty ($ DOCSQL)) ( Puste $ DOCSQL \u003d 0;) Jeśli (pusty ($ URLSQL)) ($ URLSQL \u003d 0;), jeśli (pusty ($ Tagsql)) ($ Tagsql \u003d 0;)

Na końcu są one wszystkie łączone i dodane razem, aby określić znaczenie postu w wyszukiwanym terminie.

// Usuń niepotrzebne słowa z wyszukiwanego terminu i zwróć je jako funkcję tablicy FILTSEARLSjkeys ($ Query) ($ Query \u003d wykończenia (Preg_replace ("/ (S +) + /", "", $ Query)); $ słowa \u003d Tablica (); // Rozwiń tę listę ze swoimi słowami. $ List \u003d Array ("w", "IT", "A", "The", "," lub "," I "," Ty " : "On", "ja", "USA", "oni", "ona", "do", "ale", "to", "to", "te", "wtedy"); $ c \u003d 0 ; Foreach (eksplodować (", $ zapytania) jako $ klucz) (jeśli (in_array ($ klucz, $ lista)) (kontynuuj;) $ słowa \u003d $ klucz; jeśli ($ C\u003e \u003d 15) (przerwa; ++;) Zwróć $ słowa;) // limit słowa Liczba znaków Funkcje Limdchars ($ Query, $ Limit \u003d 200) (Return Substr ($ Query, 0, $ Limit);) Wyszukiwanie funkcji ($ Query) ($ zapytania \u003d Wykończenie ($ zapytania); jeśli (MB_strlen ($ Query) \u003d\u003d\u003d 0) (// Nie ma potrzeby pustego wyszukiwania w prawo? Zwróć fałszywe;) $ Query \u003d Limdchars ($ Query); // Wyniki ważenia $ ScoreOfultle \u003d 6 ; $ ScoreTitlekeyword \u003d 5; $ scoreOpulsummary \u003d 5; $ ScoresummaryKeyword \u003d 4; $ ScoreOfuldocument \u003d 4; $ ScoredocumentKord \u003d 3; $ ScoreCategoryKeyword \u003d 2; $ Scoreurlke YWord \u003d 1; $ Słowa kluczowe \u003d filtSearchkeys ($ zapytania); $ escquery \u003d db :: Escape ($ Query); // patrz uwaga powyżej, aby uzyskać dane DB $ Titlesql \u003d Array (); $ sumsql \u003d tablica (); $ DOCSQL \u003d Array (); $ Kategoriiql \u003d tablica (); $ URLSQL \u003d Array (); / ** Dopasowanie pełnych wystąpień ** / jeśli (liczba słów kluczowych)\u003e 1) ($ Titlesql \u003d "If (p_title jak"%. "$ Escquery."% ", ($ Symsqll), 0)" \u003d "Jeśli (P_Summary jak"%. "$ Escquery."% ", ($ ScoreOpulsummary), 0)"; $ docsql \u003d "jeśli (p_content jak"%. $ Escquery. "%" ($ ScoreOfulldocument), 0 ) ";) / ** Dopasowanie słów kluczowych ** / foreach ($ Słowa kluczowe jako $ klucz) ($ titlesql \u003d" jeśli (p_title jak "%". DB :: Escape ($ Key). "%" ($ ScoreTitleyWord) , 0) "; $ sumsql \u003d" jeśli (p_mummary jak "%". DB :: Escape ($ Key). "%", ($ ScoresummaryKeyWord), 0) "; $ DOCSQL \u003d" IF (P_Content jak "%" .Db :: Escape ($ Key). "%", ($ ScoredocumentKeyword), 0) "; $ Urlsql \u003d" IF (P_URL jak "%." DB :: Escape ($ Key). "%" ($ ". ScoreUrlkeyword), 0) "$ kategoriaQL \u003d" IF ((Wybierz licznik (kategoria.Tag_id) z kategorii Dołączyć POST_Category na post_category.tag_id \u003d kategoria.Tag_id gdzie post_category.post_id \u003d p.post_id i kategoria.Name \u003d ". : Escape ($ Key). "" ")\u003e 0, ($ ScoreCategoryKeyword), 0)";) // Właśnie Ucase IT "s Puste, dodaj 0, jeśli (pusty ($ Titlesql)) ($ Titlesql \u003d 0;) gdyby. (Pusty ($ sumsql)) ($ sumsql \u003d 0; ) Jeśli (pusty ($ DocSQL)) ($ DOCSQL \u003d 0;), jeśli (pusty ($ URLSQL)) ($ URLSQL \u003d 0;), jeśli (pusty ($ Tagsql)) ($ Tagsql \u003d 0;) $ SQL \u003d " Wybierz p.p_id, p.p_title, p.p_date_published, strp_url, strp_summary, strp_content, p.thumbnail, ((- wynik tytułowy .implode ("+", $ Titlesql). ") + (- Podsumowanie" .implode ("+", $ sumsql). ") + (- Dokument" .implode ("+", $ DOCSQL). ") + (Tag / kategoria" .implode ("+ ", $ KategoriaSQL).") + (- URL. Trafność DESC, str.page_views DESC limit 25 "; $ Wyniki \u003d DB :: Query ($ SQL); Jeśli ($ $ wyniki) (zwróć fałszywe;) zwróć $ wyniki; )

Teraz twój plik Search.php może wyglądać tak:

$ Term \u003d Isset ($ _ Get ["Query"])? $ _ Get ["Query"]: ""; $ search_results \u003d szukaj ($ termin); Jeśli (! $ Search_Results) (Echo "Brak wyników"; Wyjdź;) // Drukuj stronę z wynikami tutaj.

Stworzyliśmy prosty algorytm wyszukiwania, który może obsługiwać uczciwą ilość treści. I arbitralnie wybrałem wynik dla każdego meczu, ulepszam go do czegoś, co działa najlepiej dla Ciebie. I zawsze jest miejsce na poprawę.

Dobrym pomysłem jest śledzenie wyszukiwanego terminu pochodzącego z użytkowników, w ten sposób można zobaczyć, czy większość użytkowników wyszuka to samo. Jeśli jest wzór, możesz zapisać je na wycieczkę i po prostu podręczniki przy użyciu Memcached..

Jeśli chcesz zobaczyć ten algorytm wyszukiwania w akcji, przejdź do przodu i spróbuj wyszukać artykuł w polu wyszukiwania na górze strony. Dodałem dodatkowe funkcje, takie jak zwracanie części, w której znaleziono mecz w tekście. Zapraszam do dodawania funkcji.

Czy lubiłeś ten artykuł? Możesz subskrybować czytanie bardziej niesamowite. .

W związkowym z nim znajduje się kilka interesujących artykułów.

Jeśli istnieje jedna rzecz, którą serwer internetowy robi codziennie IS ISS łączący z bazą danych. Używam PHP od wielu lat, ale jeśli poprosisz mnie o napisanie skryptu, aby pobrać dane z bazy danych, nie mogłem zrobić, nie wracaj do ostatecznego podręcznika PHP, aby znaleźć kilka przykładów najpierw.

Kilka miesięcy temu zaktualizowałem moją wersję PHP. PHP 5,4 do 5.5. Nigdy wcześniej nie miałem problemów z aktualizacją PHP. Ściśle przestrzegam swojego rozwoju i próbuję usunąć moje przestarzałe funkcje, zanim zostaną oficjalnie usunięte. Ale tym razem zostałem złapany strażnik. Po cichu złamał część mojej strony internetowej dla najbłogiego powodu.

Komentarze (45)

Zarayel. 12 sierpnia 2015:

Ian Mustafa. 26 września 2015:

Obrabować 29 września 2015:

powiedzony. 11 lutego 2016:

Ivan Venentiktov. 9 kwietnia 2016 r.

Zaktualizowano 30 kwietnia 2016

I 'm Będziesz pokazać, jak tworzyć proste wyszukiwanie za pomocą PHP i MySQL. My "LL Dowiedz się:

  • Jak używać Get and Metoda pocztowa.s.
  • Połącz się z bazą danych.
  • Komunikuj się z bazą danych.
  • Znajdź pasujące wpisy bazy danych WORT DARMOWY WORD lub fraza
  • Wyświetl wyniki.

Przygotowanie.

Shald ma zainstalowany Apache, MySQL i PHP i uruchomiony oczywiście (można użyć różnych platform lub wampa dla Windowsa, Mamp For Mac) lub serwer internetowy / hosting obsługujący bazy danych PHP i MySQL.

Utwórz bazy danych, stół i wypełnij go niektórymi wpisami, których możemy użyć do wyszukiwania:

  • Idź do PhpmyAdmin, jeśli masz serwer na swoim komputerze, możesz uzyskać do niego dostęp w http: // LocalHost / PhpmyAdmin /
  • Utwórz bazę danych, zadzwoniłem do Mine Tutorial_Search
  • Utwórz tabelę Użyłem 3 pola, zadzwoniłem do artykułów kopalni.
  • Konfiguracja dla 1. pola. Nazwa: ID, Typ: Int, Sprawdź auto_increment, indeks: podstawowy

Int oznacza to "s liczby całkowitej
Auto_increment oznacza, że \u200b\u200bnowe wpisy będą miały inny (wyższy) numer niż poprzedni
Indeks: Podstawowy oznacza, że \u200b\u200bjest to unikalny klucz używany do identyfikacji wiersza

  • Drugie pole: Nazwa: Tytuł, Typ: Varchar, Długość: 225

Varchar oznacza ciąg dalszy tekst, maksymalnie 225 znaków (wymagane do określenia maksymalnej długości), użyj go do tytułów, nazw, adresów
długość oznacza, że \u200b\u200bmoże być dłuższy niż 225 znaków (możesz ustawić go na niższą liczbę, jeśli chcesz)

  • 3. pole: Nazwa: Tekst, Typ: Tekst

Tekst oznacza to, że jest to długi ciąg, nie jest to konieczne do określenia długości, użyj go do długiego tekstu.

  • Wypełnij tabelę niektórymi przypadkowymi stronami internetowymi, na przykład: CNN, BBC itp.). Kliknij Wstaw w menu górnym i skopiuj tekst do określonych pól. Pozostaw pola "ID" puste. Wstaw co najmniej trzy.

Powinien wyglądać na coś takiego:

  • Utwórz folder w katalogu serwerowym i dwa pliki: index.php i search.php (właściwie możemy to zrobić tylko z jednym plikiem, ale pozwól, abyśmy użył dwóch, będzie łatwiejsze)
  • Wypełnij je domyślnym znacznikiem HTML, DocType, Head itp.

Szukaj.

  • Utwórz formularz za pomocą pola wyszukiwania i wyślij przycisk w index.php, możesz użyć metody GET lub Post, ustaw akcję do wyszukiwania.php. Używam "zapytania" jako nazwy pola tekstowego

Zdobądź - oznacza, że \u200b\u200bTwoje informacje będą przechowywane w URL (http: //localhost/tutorial_search/search.php? Query \u003d twoje zapytanie.)
Post - oznacza, że \u200b\u200bTwoje informacje nie są wyświetlane, jest używany do haseł, prywatnych informacji, znacznie bardziej bezpiecznych niż dostać

OK, nie zacznijmy z PHP.

  • Open Search.php.
  • Uruchom PHP ()
  • Połącz się z bazą danych (przeczytaj komentarze w następującym kodzie)

< to > $ Query \u003d mysql_real_escape_string ($ zapytania); // zapewnia, że \u200b\u200bnikt nie używa SQL Injection $ Raw_Results \u003d MySQL_QUERY ("Wybierz * z artykułów, gdzie (` Tytuł "jak"%. "$ Zapytanie."% ") Lub (" Tekst "jak"%. $ Zapytania. "%" ) ") Lub Die (MySQL_Error ()); // * oznacza, że \u200b\u200bwybiera wszystkie pola, można również napisać: `ID`,` Title`, `Text` // Artykuły to nazwa naszego stołu //"% $ Query% "jest tym, czego szukamy ,% Oznacza wszystko, na przykład, jeśli Query jest Hello //, będzie pasuje do "Hello", "Hello Man", "Gogohello", jeśli chcesz dokładny mecz użyj "tytułu" \u003d "$ Query" // lub jeśli chcesz Aby dopasować się do pełnego słowa, więc "Gogohello" jest używać "% $ Query%" ... lub ... "$ Query%" ... lub ... "% $ Query" IF (MySQL_NUM_Rows ($ Raw_Results)\u003e

"$ wyniki [" tytuł "]."

". $ Wyniki [" Tekst "]."

"// Wyniki Wyniki Gotten z bazy danych (tytuł i tekst) Można również pokazać ID ($ Wyniki [ID"])))) ELS (// Jeśli nie ma pasujących wierszy, wykonaj następujące czynniki echo "Brak wyników";)) (// Jeśli długość zapytania jest mniejsza niż minimalna echa "Minimalna długość jest". $ Min_LENTH;)?\u003e

Gotowy!

Teraz działa. Wypróbuj różne słowa, odmiany, kod edycji, eksperymentu. Dodam pełny kod obu plików na wypadek, gdybyś myślał, że coś przegapił. Zapraszamy do zadawania pytań lub poprosić o tutoriale.

index.php.

Szukaj.

search.php.

Wyniki wyszukiwania. \u003d $ Min_Length) (// Jeśli długość zapytania jest mniejsza lub równa minimalna długość, a następnie $ Query \u003d HTMLSpecialchars ($ Query); // zmienia znaki używane w HTML do ich równoważnych, na przykład:< to > $ Query \u003d mysql_real_escape_string ($ zapytania); // zapewnia, że \u200b\u200bnikt nie używa SQL Injection $ Raw_Results \u003d MySQL_QUERY ("Wybierz * z artykułów, gdzie (` Tytuł "jak"%. "$ Zapytanie."% ") Lub (" Tekst "jak"%. $ Zapytania. "%" ) ") Lub Die (MySQL_Error ()); // * oznacza, że \u200b\u200bwybiera wszystkie pola, można również napisać: `ID`,` Title`, `Text` // Artykuły to nazwa naszego stołu //"% $ Query% "jest tym, czego szukamy ,% Oznacza wszystko, na przykład, jeśli Query jest Hello //, będzie pasuje do "Hello", "Hello Man", "Gogohello", jeśli chcesz dokładny mecz użyj "tytułu" \u003d "$ Query" // lub jeśli chcesz Aby dopasować się do pełnego słowa, więc "Gogohello" jest używać "% $ Query%" ... lub ... "$ Query%" ... lub ... "% $ Query" IF (MySQL_NUM_Rows ($ Raw_Results)\u003e 0) (// Jeżeli jeden lub więcej wierszy jest zwrócony podczas ($ wyniki \u003d MySQL_Fetch_array ($ Raw_Results)) (// $ wyniki \u003d MySQL_Fetch_array ($ Raw_Results) umieszcza dane z bazy danych do tablicy, podczas gdy "jest to ważne Pętla echo "

"$ wyniki [" tytuł "]."

". $ Wyniki [" Tekst "]."

"// Wyniki Wyniki Gotten z bazy danych (tytuł i tekst) Można również pokazać ID ($ Wyniki [ID"])))) ELS (// Jeśli nie ma pasujących wierszy, wykonaj następujące czynniki echo "Brak wyników";)) (// Jeśli długość zapytania jest mniejsza niż minimalna echa "Minimalna długość jest". $ Min_LENTH;)?\u003e

W tym artykule pokażę, jak stworzyć menu wielopoziomowe na PHP i MySQL. Oczywiście opcje jego tworzenia można wynaleźć, ale oceniają według liczby twoich pytań na ten temat, potrzebujesz przykładu. I dam to w tym artykule. Natychmiast zauważam, że ten artykuł ma sens tylko dla tych, którzy wiedzą PHP. i wie, jak pracować MySQL.. Cała reszta musi najpierw przejść przez ten, czytać kilka książek PHP i MySQL..

Aby rozpocząć, utwórz tabelę w bazie danych z następującymi pól:

  • iD - unikalny identyfikator.
  • tytuł - Linki kotwiczne w menu.
  • pOŁĄCZYĆ. - adres, do którego będzie element menu.
  • iD rodzica - Identyfikator rodzicielski. Jeśli nie ma przedmiotu nadrzędnego, zerowy będzie tutaj (lub możesz umieścić jeszcze 0).

Tabela została posortowana, teraz nadszedł czas Kod PHP.. Pełny Kod PHP. Znajduje się poniżej:

$ MySQLI \u003d New MySQLI ("LocalHost", "Root", "", "DB"); // Połącz się z bazą danych
$ RESS_SET \u003d $ MySQLI-\u003e Zapytanie ("Wybierz * z menu"); // Wykonujemy próbkę wszystkich wpisów z tabeli z menu
$ Elements \u003d Array (); // tablica do elementów menu
While (($ rzędu \u003d $ Dess_set-\u003e fetch_assoc ())! \u003d False) $ Element [00 rzędu [«ID]] \u003d $ rzędu; // Wypełnij tablicę próbki z bazy danych
$ Childrens \u003d tablica (); // array o zgodności z ich elementami rodzicielską
Foreach ($ towar jako $ element) (
Jeśli ($ element ["Parent_id"]) $ Childrens [$ ELEMENT [ID "]] \u003d $ element [" Parent_id "]; // Wypełnij tablicę
}
Funkcja PrintItem ($ towar, $ Element, $ Childrens) (
/ * Wyświetl pozycję menu * /
Echo "

  • ";
    Echo ". $ Przedmiot [" tytuł "]." ";
    $ ul \u003d false; // Czy wyświetlono elementy dziecka?
    Podczas (prawda) (
    / * Nieskończona pętla, w której szukamy wszystkich elementów dziecka * /
    $ Key \u003d array_search ($ element [ID "], $ Childrens); // szukamy elementu dziecka
    Jeśli (! $ Key) (
    / * Nie znaleziono przedmiotów córki * /
    Jeśli ($ ul) echo ""// Jeśli elementy dziecka są wyjście, zamknij listę
    Złamać; // wyjdź z cyklu
    }
    Unset ($ Childrens [$ Key]); // Usuń znaleziony element (tak, że nie pojawia się ponownie)
    Jeśli (! $ ul) (
    Echo "
      "; // Rozpoczynamy listę wewnętrzną, jeśli elementy dzieci nie były jeszcze
      $ Ul \u003d true; // Ustaw flagę
      }
      Echo Printitem ($ Element [$ Key], $ Element, $ Childrens); // rekurencyjnie wyświetl wszystkie elementy dziecka
      }
      Echo "";
      }
      ?>

      Ten kod jest w pełni pracownik, jednak musisz zrozumieć, że nikt nie pisze (w szczególności, zakończenie echo. HTML Tagov.). A Twoim zadaniem jest podjęcie algorytmu z tego kodu, ale nie samego kodu. A następnie ten algorytm jest podłączony do silnika. Próbowałem dokładnie skomentować kod wyjściowy menu wielopoziomowe na PHP i MySQLAle oczywiście nie jest najbardziej przejrzysty i wymaga dobrej wiedzy początkowej. Jeśli nadal wiesz PHP i MySQL.Potem najpierw zdecydowanie polecam to

      Skrypt urodzinowy męski wymaga szczególnej uwagi. W końcu silna podłoga jest zwykle Rigorowanie ocenia format wakacji. Nasze rozległe doświadczenie wakacyjne pozwala znaleźć idealny scenariusz na urodziny w zależności od wieku, magazyn postaci i interesów oficera urodzin. Oferujemy na przykład scenariusz urodzin, którzy są najbardziej popularne wśród naszych klientów:

      Wiodąca wymowa toast na pokój urodzinowy I kończy go słowami:

      Szampan w szkłach wlać
      I piją wszystko razem na dole!
      Dla młodzieży twoje tosty wychowujemy,
      A młodzież nie jest sama!

      Pierwsze krąg jest zakończone, rozpoczął się nowy
      Dołączyłeś do drugiej młodości.
      Męski wybitny, silny i zdrowy,
      Jesteś pełen świeżych pomysłów i siły.

      Pozostań również energiczny
      W końcu nie pracowałeś na próżno tak wiele lat!
      Więc bądź śmieszny, ładny,
      I niech los zachowuje cię z kłopotów!

      Goście są wykonywane dla sprawcy uroczystości starożytny Cygański Romans.
      (Dwa mogą utrzymywać, a wszystkie pozostałe odebrają Chorusa):

      Okulary są wylewane
      W nich błyszcz bursztyn,
      I twarze świeci
      Jak komiczny świt!

      Z winem, tęsknota zużyta,
      Staje się lekki
      A tosty na sercu pytają:
      Pijemy na rocznicę!

      Chór:

      Nasz chór śpiewa antyczne starożytne,
      Nalewa rzekę Szampana!
      Dla Ciebie nasz przyjaciel jest ukochany,
      Nasza książka urodzinowa (może nazwa) kochana!

      Co może być cudowne
      Kiedy kochaj Taya,
      Spotkasz się z piosenką
      Native i przyjaciele!

      Niech wieczór zaczyna się,
      Jak życie jest nowym kręgu,
      A wszystkie marzenia się spełniają,
      I wszystko kwitnie!

      Chór:
      Dolnes Up! Dolnes Up! Dolnes Up!

      Pauza muzyczna.

      Wtedy zadzwoń tosty dla rodziców.

      Prowadzący:

      Cóż, teraz przyjaciele, chwila przyszła
      Wypełnij szklankę dla rodziców!
      Dla tych, którzy dali radość życia
      I na świecie, wspaniałe drzwi kwestionują,

      Dla tych, którzy go uczą
      I przekaźnik baterii został przekazany.
      Dla tych, którzy teraz
      Nasze urodziny siedzi wśród nas!

      Tak więc napój dla rodziców ... (nazywa je przez nazwę-patronimic)

      Pauza muzyczna.

      Prezenter krótko mówi o ścieżce życia jubileuszy.

      Gospodarz: A teraz śpiewamy "Stare piosenki o głównym bohaterze naszych wakacji".

      (Goście śpiewają na motywach piosenek o pilotach)


      Bez jubileuszu powiedzmy prosto, nie ma nic do roboty.
      Zbieramy się przy stole,
      Pełne okulary Nalmes.
      I dla jego utworów zdrowotnych śpiewamy:

      Nadszedł czas, aby pamiętać
      A ten dzień na spotkanie

      Niech nie masz dwadzieścia, a nie trzydzieści, niech!
      Nie obniżasz swojej bariery!
      Obserwuj, że będziemy ściśle
      Nie skrzywdzisz nas, wiesz też!

      Widzimy odważny, odważny, dzielny
      Mężczyźni smukły, piękny, kręcony!
      Niech seria przejdzie przez lata
      Ale życzymy zawsze
      Twoja dusza pozostała młoda!

      Nadszedł czas, aby pamiętać
      Nadszedł czas, aby świętować, świętować wspaniałą rocznicę!
      A ten dzień na spotkanie
      W dużej firmie krewnych, przyjaciół!

      Niech los czasami będzie okrutny do nas, niech!
      W odpowiedzi puściłeś swoje dowcipy!
      Podążaj za tym samym ściśle
      Nie przyznaj ich przygnębienia!

      Dziś wieczorem wieczorem, wieczorem
      Bez drogiego jubileuszowego nie ma nic do zrobienia!
      Pijemy raz, pićmy dwa
      Na rocznicę i sprawy,
      Ale to jutro nie skrzywdziłem mojej głowy!

      Jesteśmy jubileuszową miłością, szacunkiem
      A nasze gratulacje kontynuują!

      (Goście śpiewają na dzwonku "Nie mogę mi na urodziny ..." :)

      Nie możemy cię na urodziny
      Drogi Mercedesa dają,
      Ale bez wątpienia
      I gotowy do powtórzenia sto razy:

      Że jesteś miły, wesoły, uprzejmy
      I w sprawach ogólnie przyjętych specjalności,
      Co jesteś wspaniałym
      I towarzysza i mąż i ojciec!

      Prowadzący:

      Chcemy pogratulować ci dusz
      Jak również wiek paszportu,
      W końcu mówi twój rodzaj, twój uśmiech,
      Co około dziesięciu lat w błędzie paszportu!

      (Goście śpiewają na motywach piosenki żołnierza "Ścieżka jest daleka od ciebie ...")

      Człowiek urodzinowy - dzielny facet
      Patrząc na sokol w szeregach!
      Szanuj wszystkich słusznie
      Oraz w służbie, jak w bitwie!

      Chór:

      ________ (urodziny) na drodze! Uderzmy w drogę! Uderzmy w drogę!
      Do sto lat
      I silny pozostały
      Los dzwoni do ciebie!
      ________ (urodziny) do przodu!

      Drogi Jubileuszu.
      Gratulacje z duszy!
      I ręka medalowa i prezent
      W środkach dotyczących jego dużego!

      Chór.

      Anniversarier otrzymuje prezent i niezapomniany medal z napisem: "Aby duże zasługi w pracy, przyjaźni i miłości". (Medal można wypełnić z drzewa i powiesić go na szyi urodzinowej na wstążce

      Konkurencja na ten temat "Kto lepiej wiedzie urodziny"!

      Sędzia będzie sam urodziny.
      Prowadzenie prosi pytania i przedstawia żetony na odpowiednie odpowiedzi. Ten, który na końcu gry stał się właścicielem największej liczby żetonów, otrzymuje nagrodę z pełnomocnictwem urodzin.

      Pauza muzyczna.

      Quiz na urodzinach.

      Drodzy przyjaciele! Spróbujmy określić bardzo erudyty gościa! Oczywiście temat jest nadal taki sam - urodziny. Tylko nie w życiu, ale na ekranie!

      Dla każdej prawidłowej lub dowcipnej odpowiedzi podano układ. Podążając za quizem dla największej liczby frytek przyznawany jest nagroda. Na przykład czekolada. Jeśli goście nie mogą odgadnąć, wiodący musi podać monit, trochę przypomnieć o tym filmie.

      Komiczne pytania i odpowiedzi

      Robisz dwie kanapy z pytaniami i odpowiedziami. Początkowo osoba ogłasza, komu zadał pytanie, wyciąga pytanie i czyta. Używa koguty odpowiedziami, na które zadzwonił. Potem ten, który zadzwonił, wyciąga odpowiedź i czyta. Następnie ogłasza również, do kogo zadał pytanie, wyciąga pytanie i czyta. Itp.

      Taniec przez prowadzenie zespołu

      Powitanie telegramów-zagadki (w tym goście)

      Wiodący ogłasza: W przypadku przyszłymi telegramów Tanya Congratulaci, ale wszystkie bez podpisu. Musisz odgadnąć nadawcę. Są to znani ludzie, a także goście. A nawet wspaniali bohaterowie!

      Niech szepczą o miłości do ciebie na ucho!
      Tsarevna na pseudonim ... Żaba

      Chcę pić tylko vintage win!
      Szczęśliwe wakacje dla ciebie! ... Malvina.

      Chcę śpiewać częściej pod gitarą!
      Dobra firma dla ciebie! ... Rotaru.

      Nie chcę spotkać miłości do nieplanowanego!
      Cześć, musical z ... Bulanova.

      Żyj, Seryozha, Fun and Cool!
      Nie zapomnij o dzieciństwie! ... królowa

      Życzę wielu muzyki i śmiechu,
      miłość i wieczna młodzież! ... Pieha.

      Niech pieniądze zawsze idą na ryc!
      I nogi z kurczaka! ... Baba Yaga.

      Ponieważ częściej w polu iw lesie!
      Zdrowie dla ciebie silny! ... Alsu.

      saddy nigdy nie pozwala!
      Big Hello od MOM! ... Orloe.

      Nie wchodź do PE i Shootout!
      Życzę ci długiego życia! Grupa… Strzały

      Ten, który po raz pierwszy podał prawidłową odpowiedź, jest witrynami. Dla największej liczby frytek przyznano nagrodę.

      Tajemnica loterii

      Nagroda otrzymuje, który domyślał, że na temat ołowiu w torbie. Możesz poprosić o wiodące pytania. Odpowiada "tak" lub "nie".

      Loteria - prognoza

      Każdy ciągnie bilety lub dostać je na żart, anegdote. Podczas rysunku prezentera mówi:
      - Teraz doświadczamy losu i dowiemy się, co ugotowała.
      Dając prezenty, począwszy od pierwszego pokoju i czyta prognozę na nadchodzący rok.

      Test "Narysuj nieistniejące zwierzę"

      Prosimy o gości, aby narysować nieistniejące zwierzę i napisz swoją nazwę.

      Test "Narysuj mały człowiek"

      Konieczne jest narysowanie osoby z 12 cyfr: Musisz użyć wszystkich kształtów - okręgu i trójkątów, kwadratów. (W wysokości 12)

      Po zakończeniu wieczoru możesz zaoferować Goście do otwarcia konta na telefon urodzinowy. Po tym, aby znosić 3-litrowy słoik, w którym wszyscy goście mogą rzucić na pierwszą dziesiątkę.