DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu

Wyrażenia regularne to bardzo przydatne narzędzie dla programistów. Za ich pomocą możesz znaleźć, zdefiniować lub zamienić tekst, słowa lub inne znaki. W dzisiejszym artykule zebrano 15 najbardziej przydatnych wyrażeń regularnych, których będzie potrzebował każdy programista.

Wprowadzenie do wyrażeń regularnych

Wielu początkujących programistów uważa wyrażenia regularne za bardzo trudne do zrozumienia i użycia. W rzeczywistości wszystko nie jest tak skomplikowane, jak mogłoby się wydawać. Zanim przejdziemy bezpośrednio do wyrażeń regularnych, z ich użytecznym i wszechstronnym kodem, przyjrzyjmy się podstawom:

Składnia wyrażeń regularnych

Wyrażenie regularne Znaczy
bla Ciąg „foo”
^ foo Linia zaczyna się od „foo”
foo $ Linia kończy się na „foo”
^ foo $ „Foo” występuje tylko raz w wierszu
a, b lub c
dowolna mała litera
[^ A – Z] dowolna inna litera
(gif | jpg) Oznacza zarówno „gif”, jak i „jpeg”
+ Jedna lub więcej małych liter
Dowolna cyfra, kropka lub znak minus
^{1,}$ Dowolne słowo, co najmniej jedna litera, cyfra lub _
()() wy, wz, xy lub xz
(^ A-Za-z0-9) Dowolny znak (nie cyfra ani litera)
({3}|{4}) Oznacza trzy litery lub 4 cyfry

Funkcje PHP dla wyrażeń regularnych

Funkcjonować Opis
preg_match () Funkcja preg_match () wyszukuje ciąg według podanego wzorca, zwraca true, jeśli ciąg zostanie znaleziony, lub false, w przeciwnym razie
preg_match_all () Funkcja Preg_match_all () znajduje wszystkie wystąpienia wzorzystego łańcucha
preg_replace () Funkcja preg_replace () działa w taki sam sposób jak ereg_replace (), z wyjątkiem tego, że wyrażeń regularnych można używać zarówno do określenia wzorca wyszukiwania, jak i do ciągu znaków, który ma zastąpić znalezioną wartość.
preg_split () Funkcja preg_split () działa tak samo jak split (), z wyjątkiem tego, że wyrażenie regularne może być użyte jako parametr dla wzorca wyszukiwania.
preg_grep () Funkcja preg_grep () wyszukuje wszystkie elementy tablicy wejściowej, zwracając wszystkie elementy pasujące do wzorca wyrażenia regularnego.
preg_quote () Zmienia znaczenie znaków wyrażenia regularnego

Sprawdzanie nazwy domeny

Sprawdzanie, czy ciąg jest prawidłową nazwą domeny

$ url \u003d "http://komunitasweb.com/"; if (preg_match ("/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i", $ url)) (echo "Twój adres URL jest w porządku . ";) else (echo" Zły adres URL. ";)

Podświetlanie słów w tekście

Jest to bardzo przydatne wyrażenie regularne, możesz go użyć do znalezienia żądanego słowa i podświetlenia go. Szczególnie przydatne do wyświetlania wyników wyszukiwania.

$ text \u003d "Przykładowe zdanie z KomunitasWeb, wyrażenie regularne stało się popularne w programowaniu internetowym. Teraz uczymy się wyrażenia regularnego. Według wikipedii wyrażenia regularne (w skrócie wyrażenia regularne lub wyrażenia regularne, z formami mnogimi wyrażenia regularne, wyrażenia regularne lub wyrażenia regularne) są zapisywane w formalnym język, który może być interpretowany przez procesor wyrażeń regularnych "; $ text \u003d preg_replace ("/ b (regex) b / i", " 1", $ tekst); echo $ tekst;

Wyróżnianie wyników wyszukiwania na blogu WordPress

Jak wspomniano w poprzednim przykładzie, ten przykład kodu jest przydatny w przypadku wyników wyszukiwania i istnieje świetny sposób na zaimplementowanie tej funkcji w blogu Wordpress.

Otwórz plik search.php i znajdź funkcję the_title (). Zastąp go następującym kodem:

Echo $ tytuł;

Teraz powyżej tej linii dodaj ten kod:

\0", $ tytuł);?\u003e

Zapisz plik search.php i otwórz style.css. Dodaj następujący wiersz:

Strong.search-excerpt (tło: żółte;)

Pobieranie wszystkich obrazów z dokumentu HTML

Jeśli kiedykolwiek chciałeś pobrać wszystkie obrazy ze strony internetowej, ten kod powinien tam być.Możesz łatwo utworzyć program do przesyłania obrazów za pomocą funkcji cURL

$ obrazy \u003d tablica (); preg_match_all ("/ (img | src) \u003d (" | \\ ") [^" \\ "\u003e] + / i", $ data, $ media); nieustawiony ($ dane); $ data \u003d preg_replace ("/ (img | src) (" | \\ "| \u003d" | \u003d \\ ") (. *) / i", "$ 3", $ media); foreach ($ data as $ url) ($ info \u003d pathinfo ($ url); if (isset ($ info ["rozszerzenie"])) (if (($ info ["rozszerzenie"] \u003d\u003d "jpg") || ($ info ["rozszerzenie"] \u003d\u003d "jpeg") || ($ info ["rozszerzenie"] \u003d\u003d "gif") || ($ info ["rozszerzenie"] \u003d\u003d "png")) array_push ($ obrazy, $ url);))

Usuń zduplikowane słowa (bez rozróżniania wielkości liter)

Czy podczas pisania słowa często się powtarzają? To wyrażenie regularne pomoże.

$ tekst \u003d preg_replace ("/ s (w + s) 1 / i", "$ 1", $ tekst);

Usuwanie zduplikowanych znaków interpunkcyjnych

To samo, tylko w przypadku interpunkcji. Pożegnaj się z podwójnymi przecinkami.

$ tekst \u003d preg_replace ("/.+/ i", ".", $ tekst);

Wyszukaj znaczniki XML / HTML

To jest prosta funkcja, która przyjmuje dwa argumenty. Pierwsza to tag, który musisz znaleźć, a druga to zmienna zawierająca XML lub HTML. Ponownie, ta funkcja jest bardzo wygodna w użyciu z cURL.

Funkcja get_tag ($ tag, $ xml) ($ tag \u003d preg_quote ($ tag); preg_match_all ("(<".$tag."[^>]*>(.*?). ")", $ xml, $ dopasowania, PREG_PATTERN_ORDER); zwraca $ dopasowania; )

Znajdowanie znaczników XHTML / XML z określoną wartością atrybutu

Ta funkcja jest bardzo podobna do poprzedniej, z tym wyjątkiem, że możesz nadać znacznikowi pożądany atrybut. Na przykład możesz łatwo znaleźć

.

Funkcja get_tag ($ attr, $ value, $ xml, $ tag \u003d null) (if (is_null ($ tag)) $ tag \u003d "\\ w +"; else $ tag \u003d preg_quote ($ tag); $ attr \u003d preg_quote ($ attr); $ value \u003d preg_quote ($ value); $ tag_regex \u003d "/<(".$tag.")[^>] * $ attr \\ s * \u003d \\ s * "." (["\\"]) $ wartość \\\\ 2 [^\u003e] *\u003e (. *?)<\/\\1>/ "preg_match_all ($ tag_regex, $ xml, $ pasuje, PREG_PATTERN_ORDER); zwraca $ dopasowań;)

Znajdowanie szesnastkowych wartości kolorów

Kolejne przydatne narzędzie dla twórców stron internetowych! Pozwala znaleźć / sprawdzić szesnastkową wartość koloru.

$ string \u003d "# 555555"; if (preg_match ("/ ^ # (? :(? :( 3)) (1,2)) $ / i", $ string)) (echo "przykład 6 powiodło się.";)

Wyszukaj tytuł artykułu

Ten fragment kodu znajdzie i wyświetli tekst wewnątrz tagów , na stronie html.

$ fp \u003d fopen ("http://www.catswhocode.com/blog", "r"); while (! feof ($ fp)) ($ page. \u003d fgets ($ fp, 4096);) $ titre \u003d eregi (" (.*)", $ page, $ regs); echo $ regs; fclose ($ fp);

Analizowanie dzienników Apache

Większość witryn działa na dobrze znanym serwerze WWW Apache. Jeśli Twoja witryna jest jedną z nich, dlaczego nie użyć PHP i wyrażeń regularnych do analizowania dzienników Apache?

// Dzienniki: serwer WWW Apache // Udane trafienia tylko do plików HTML. Przydatne do liczenia liczby odsłon. "^ ((? # IP klienta lub nazwa domeny) S +) s + ((? # uwierzytelnianie podstawowe) S + s + S +) s + [((? # data i godzina) [^]] +)] s +" (?: GET | POST | HEAD) ((? #File) / [^? "] +?. Html?) ?? ((? # Parametry) [^?"] +)? HTTP / + "s + (? # Kod stanu) 200s + ((? # Przesłanych bajtów) [- 0-9] +) s +" ((? # Referrer) [^ "] *)" s + "((? # User agent ) [^ "] *)" $ "// Dzienniki: serwer WWW Apache // tylko błędy 404" ^ ((? # IP klienta lub nazwa domeny) S +) s + ((? # Uwierzytelnianie podstawowe) S + s + S +) s + [((? # data i godzina) [^]] +)] s + "(?: GET | POST | HEAD) ((? #file) [^?"] +) ?? ((? # parametry) [ ^? "] +)? HTTP / + "s + (? # Kod stanu) 404s + ((? # Przesłanych bajtów) [- 0-9] +) s +" ((? # Referrer) [^ "] *)" s + "((? # User agent ) [^ "] *)" $ "

Zastępowanie podwójnych cudzysłowów inteligentnymi cudzysłowami

Jeśli jesteś miłośnikiem typografii, spodoba ci się to wyrażenie regularne, które zastępuje zwykłe podwójne cudzysłowy inteligentnymi cudzysłowami. Podobnego wyrażenia regularnego używa wordpress w treści strony.

Preg_replace ("B" b ([^ "x84x93x94rn] +) b" B ","? 1? ", $ Text);

Kompleksowe sprawdzanie hasła

To wyrażenie regularne zapewni, że co najmniej sześć znaków, cyfr, łączników i podkreśleń zostało wprowadzonych w polu tekstowym.

Pole tekstowe musi zawierać co najmniej jedną wielką literę, jedną małą literę i jedną cyfrę.

„A (? \u003d [-_ a-zA-Z0-9] *?) (? \u003d [-_ a-zA-Z0-9] *?) (? \u003d [-_ a-zA-Z0-9] *?) [-_a-zA-Z0-9] (6,) z "

WordPress: Używanie wyrażenia regularnego do pobierania obrazów z posta

Ponieważ wielu z was jest użytkownikami WordPressa, może być potrzebny kod, który pozwoli ci pobrać wszystkie obrazy z tekstu artykułu i wyświetlić je.

Aby użyć tego kodu, po prostu wklej go do dowolnego pliku swojego motywu.

treść postu; $ szSearchPattern \u003d "~ ] * /\u003e ~ "; // Uruchom preg_match_all, aby pobrać wszystkie obrazy i zapisać wyniki w $ aPics preg_match_all ($ szSearchPattern, $ szPostContent, $ aPics); // Sprawdź, czy mamy co najmniej 1 obraz $ iNumberOfPics \u003d count ($ aPics); if ($ iNumberOfPics\u003e 0) (// Teraz zrobisz wszystko, co musisz zrobić z obrazami // W tym przykładzie obrazy są wyświetlane tylko dla ($ i \u003d 0; $ i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Generowanie automatycznych emotikonów

Inną funkcją używaną w wordpressie jest automatyczne zastępowanie emotikonów buźką.

$ texte \u003d "Tekst z uśmiechem :-)"; echo str_replace (":-)", " ", $ texte);

Scenariusz urodzinowy mężczyzny wymaga szczególnej uwagi. W końcu silniejsza płeć zazwyczaj bardziej rygorystycznie ocenia format wakacji. Nasze bogate doświadczenie w obchodzeniu świąt pozwala nam dobrać idealny scenariusz na urodziny w zależności od wieku, temperamentu i zainteresowań urodzinowej osoby. Na przykład oferujemy scenariusz urodzin mężczyzny, który jest najbardziej popularny wśród naszych klientów:

Mówi prezenter toast za urodzinowego chłopca i kończy go słowami:

Wlej szampana do kieliszków
I razem pijemy wszystko na dno!
Wznosimy toast za młodość,
A młodość to nie jedno!

Pierwszy krąg się skończył, rozpoczął się nowy
Wkroczyłeś w swoją drugą młodość.
Mężczyzna jest wydatny, silny i zdrowy,
Masz mnóstwo świeżych pomysłów i siły.

Pozostań energiczny tak samo
Przecież przez tyle lat nie pracowałeś na próżno!
Bądź taki wesoły, słodki
I niech los uchroni cię od kłopotów!

Goście występują dla bohatera okazji stary cygański romans
(dwóch może śpiewać, a wszyscy inni odbierają refren):

Szklanki są nalewane
Mają odblask bursztynu,
I twarze się rozjaśniają
Jak wiosenny świt!

Tęsknotę porywa wino,
Staje się jaśniejszy
A toast za moje serce prosi:
Pijemy do rocznicy!

Chór:

Nasz chór śpiewa starą melodię,
Nalewa szampana jak rzeka!
Dla Ciebie, nasz ukochany przyjacielu,
Nasz urodzinowy chłopiec (może jego imię) jest drogi!

Co może być wspanialszego
Kiedy miłość topnieje
Wita cię piosenka
Rodzina i przyjaciele!

Niech rozpocznie się wieczór
Jak życie to nowy krąg
I wszystkie marzenia się spełniają
I wszystko wokół kwitnie!

Chór:
Bottoms Up! Bottoms Up! Bottoms Up!

Muzyczna pauza.

Wtedy jest rozpoznawany toast za rodziców.

Prowadzący:

Cóż, teraz, przyjaciele, nadeszła chwila
Uzupełnij szklankę dla swoich rodziców!
Dla tych, którzy dawali radość życia
I otworzył drzwi do pięknego świata,

Dla tych, którzy nauczyli go dobroci
I przekazał pałeczkę odwagi.
Dla tych, dzięki którym teraz
Nasz urodzinowy chłopiec siedzi wśród nas!

Więc pijemy do rodziców ... (nazywa ich imieniem i patronimią)

Muzyczna pauza.

Prezenter krótko opowiada o życiu bohatera dnia.

Prowadzący: A teraz będziemy śpiewać „Stare piosenki o głównym bohaterze naszych wakacji”.

(Goście śpiewają do melodii piosenki o pilotach)


Bez bohatera dnia, szczerze mówiąc, nie ma nic do zrobienia.
Zbierzemy się przy stole
Wlać pełne szklanki
A my zaśpiewamy piosenkę dla jego zdrowia:

Czas na świętowanie
I spotkajmy się tego dnia

Niech nie będzie dwudziestu czy trzydziestu, niech tak będzie!
Nie obniżaj poprzeczki swojej radości!
Będziemy ściśle przestrzegać
Nie możesz się przed nami ukryć, po prostu wiesz!

Widzimy odważnych, odważnych, odważnych
Mężczyzna szczupły, przystojny, z kręconymi włosami!
Niech lata mijają
Ale zawsze tego życzymy
Twoja dusza pozostała młoda!

Czas na świętowanie
Czas świętować, świętować wspaniałą rocznicę!
I spotkajmy się tego dnia
W dużym towarzystwie krewnych i przyjaciół!

Niech los będzie dla nas czasami okrutny, niech tak będzie!
W odpowiedzi na nią odpuszczasz sobie żarty!
Zachowaj te same surowe
Nie pozwól, aby wokół było przygnębienie!

Dziś wieczorem, dziś wieczorem, dziś wieczorem
Nie ma nic do zrobienia bez drogiego bohatera dnia!
Wypijemy jednego, wypijemy dwa
Na rocznicę i za czyny,
Ale żeby jutro nie mieć bólu głowy!

Kochamy i szanujemy bohatera dnia
I dalej gratulujemy!

(Goście śpiewają do melodii piosenki „I Can't You On Your Birthday…” :)

Nie możemy cię w twoje urodziny
Drogi Mercedesie, daj
Ale bez wątpienia damy ci prezent
I jesteśmy gotowi powtórzyć sto razy:

Że jesteś miły, wesoły, uważny
A w biznesie powszechnie uznany specjalista,
Że generalnie jesteś z nami cudowny
I towarzyszu, męża i ojca!

Prowadzący:

Serdecznie gratulujemy,
A także popraw wiek w paszporcie,
W końcu twój wygląd mówi, twój uśmiech,
Co za błąd w paszporcie przez dziesięć lat!

(Goście śpiewają na melodię żołnierskiej piosenki „Droga jest daleko dla ciebie i dla mnie ...”)

Urodzinowy chłopak to odważny facet
Wygląda jak sokół w szeregach!
Wszyscy go szanujemy
I w służbie, jak w bitwie!

Chór:

________ (imię urodzinowej osoby) Idź! Ruszajmy w drogę! Ruszajmy w drogę!
Aby dostać się do stu lat
I bądź silny
Los cię wzywa!
________ (imię urodzinowej osoby) Śmiało!

Drogi bohaterze dnia
Gratulujemy z całego serca!
Przedstawiamy medal i upominek
Na znak jego wielkich zasług!

Chór.

Bohater dnia otrzymuje prezent i niezapomniany medal z napisem: „Za wspaniałe zasługi w pracy, przyjaźni i miłości”. (Medal można wyciąć z drewna i zawiesić na szyi urodzinowego chłopca na wstążce

Konkurs na temat „Kto lepiej zna urodzinowego chłopca”!

Sędzią będzie sam urodzinowy mężczyzna.
Prezenter zadaje pytania i przekazuje żetony za poprawne odpowiedzi. Ten, kto na koniec gry ma najwięcej żetonów, otrzymuje nagrodę w postaci aftografu urodzinowego mężczyzny.

Muzyczna pauza.

Urodzinowy quiz w filmach

Drodzy przyjaciele! Spróbujmy zidentyfikować najbardziej wytrawnego gościa! Temat jest oczywiście ten sam - urodziny. Tylko nie w życiu, ale na ekranie!

Za każdą poprawną lub dowcipną odpowiedź przyznawany jest token. Zgodnie z wynikami quizu nagroda jest przyznawana za największą liczbę żetonów. Na przykład tabliczka czekolady. Jeśli goście nie mogą zgadnąć, gospodarz powinien dać wskazówkę, przypomnieć im trochę o tym filmie.

Komiksowe pytania i odpowiedzi

Robisz dwie torby z pytaniami i odpowiedziami. Najpierw osoba ogłasza, komu zada pytanie, rysuje je i odczytuje. Podaje worek z odpowiedziami temu, którego nazwał. Następnie osoba wymieniona wyciąga odpowiedź i odczytuje ją. Następnie ogłasza również komu zada pytanie, rysuje je i odczytuje. Itp.

Taniec na polecenie gospodarza

Gratulacyjne telegramy-zagadki (w tym od gości)

Prezenter ogłasza: Nadeszły telegramy gratulacyjne dla Tanyi, ale wszystkie są niepodpisane. Musisz odgadnąć nadawcę. To ludzie znani wszystkim, a także goście. A nawet fantastyczni bohaterowie!

Niech szepczą ci do ucha o miłości!
Księżniczka pod pseudonimem ... Żaba

Chciałbym pić tylko wina z rocznika!
Wesołych wakacji! ... Malwina

Życzę Wam częstszego śpiewania na gitarze!
Dobre towarzystwo! ... Rotaru

Życzę ci nie spotkać nieplanowanej miłości!
Pozdrowienia dla was musical z ... Bulanova

Żyj, seryozha, fajnie i fajnie!
Nie zapomnij o swoim dzieciństwie! ... królowa

Życzę dużo muzyki i śmiechu,
miłość i wieczna młodość! ... Piekha

Niech zawsze będą pieniądze na figę!
I udka z kurczaka! ... Baba Jaga

Odwiedzaj częściej pole i las!
Dobre zdrowie! ... Alsou

nie pozwól na przygnębienie!
Wielkie cześć od mamy! ... Orbokayte

Nie wdawaj się w sytuacje awaryjne i strzelaniny!
Życzę długiego życia! Grupa… Strzały

Ten, kto pierwszy podał poprawną odpowiedź, otrzymuje żetony. Nagroda jest przyznawana za największą liczbę żetonów.

Loteria zagadek

Nagroda jest przyznawana temu, kto odgadł, jaki przedmiot ma gospodarz w torbie. Możesz zadać prowadzącemu pytania prowadzące. Odpowiada „tak” lub „nie”.

Loteria - prognoza

Każdy wyciąga bilety lub dostaje je na żart, anegdotę. Podczas losowania Moderator mówi:
- Teraz spróbujemy losu i dowiemy się, co przygotowała dla kogo.
Rozdaje prezenty, zaczynając od pierwszego numeru i odczytuje prognozę na następny rok.

Test „Narysuj nieistniejące zwierzę”

Prosimy gości o narysowanie nieistniejącego zwierzęcia i wpisanie jego imienia.

Narysuj test mężczyzny

Musisz narysować osobę z 12 kształtów: musisz użyć wszystkich kształtów - koła i trójkątów, kwadratów. (Łącznie jest ich 12)

Pod koniec wieczoru można zaprosić gości do otwarcia konta bankowego dla urodzinowej osoby. Następnie wyjmij 3-litrowy słoik, w który wszyscy goście mogą wrzucić tuzin.

Przez Ibrahim Diallo

Opublikowany 02 lipca 2014 ~ 16 minut czytania

Wyszukiwanie to ważna funkcja w witrynie. Kiedy kilku moich czytelników chce poszukać konkretnego fragmentu na moim blogu, używają pola wyszukiwania. Kiedyś był zasilany przez wyszukiwarkę Google, ale od tego czasu zmieniłem go na własną, parzoną w domu wersję, nie dlatego, że potrafię lepiej, ale dlatego, że było to ciekawe wyzwanie.

Jeśli się spieszysz i chcesz, aby Twoja witryna była dostępna do przeszukiwania, zrób to, co robiłem wcześniej, użyj Google.

// W pliku search.php $ term \u003d isset ($ _ GET ["query"])? $ _ GET ["query"]: ""; $ term \u003d urlencode ($ term); $ website \u003d urlencode ("www.yourwebsite.com"); $ redirect \u003d "https://www.google.com/search?q\u003dsite%3A($website)+($term)"; nagłówek ("Lokalizacja: $ przekierowanie"); wyjście;

To, co robi, jest dość proste. Uzyskaj termin przekazany przez użytkownika i przekaż go na stronę wyszukiwania Google. Ogranicz wynik wyszukiwania do naszej bieżącej domeny, używając słowa kluczowego site: w zapytaniu. Wszystkie Twoje strony, które są indeksowane przez Google, będą teraz dostępne w wyszukiwarce. Jeśli jednak chcesz przeprowadzić wyszukiwanie we własnym zakresie, czytaj dalej.

Domowe rozwiązanie wyszukiwania

Zanim przejdziemy dalej, spróbuj użyć pola wyszukiwania na tym blogu. Wykorzystuje ten sam proces, który opiszę poniżej. Jeśli uważasz, że tego właśnie chcesz, kontynuuj czytanie.

To rozwiązanie jest przeznaczone dla małych witryn internetowych. Używam LIKE z dzikimi kartami na obu końcach, co oznacza, że \u200b\u200btwoje wyszukiwanie nie może być indeksowane. Oznacza to, że rozwiązanie będzie działać dobrze na Twoim blogu lub osobistej stronie internetowej, która nie zawiera mnóstwa danych. Przenieś je na większą witrynę i może stać się bardzo wolne. MySQL oferuje wyszukiwanie pełnotekstowe, co nie jest tym, co tutaj robimy.

Uwaga: Jeśli masz 5000 postów na blogu, nadal nic ci nie jest. ...

Jako odniesienie weźmiemy strukturę tego bloga. Każdy post na blogu zawiera:

  • Tytuł p_title
  • URL p_url
  • Podsumowanie p_summary
  • Treść posta p_content
  • I kategorie kategorii. Zmienna

Dla każdego pola, które pasuje do naszego wyszukiwanego hasła, przyznamy mu wynik. Wynik będzie oparty na znaczeniu meczu:

// dokładne dopasowanie terminu znajduje się w tytule $ scoreFullTitle \u003d 6; // dopasuj tytuł w części $ scoreTitleKeyword \u003d 5; // dokładne dopasowanie terminu znajduje się w podsumowaniu $ scoreFullSummary \u003d 5; // dopasuj podsumowanie w części $ scoreSummaryKeyword \u003d 4; // dokładne dopasowanie terminu znajduje się w treści $ scoreFullDocument \u003d 4; // dopasuj dokument w części $ scoreDocumentKeyword \u003d 3; // pasuje do kategorii $ scoreCategoryKeyword \u003d 2; // pasuje do adresu URL $ scoreUrlKeyword \u003d 1;

Zanim zaczniemy, jest kilka słów, które nie wnoszą wiele do wyszukiwania, które należy usunąć. Przykład „in”, „it”, „a”, „the”, „of” .... Odfiltrujemy je i nie wahamy się dodać dowolnego słowa, które Twoim zdaniem jest nieistotne. Inną rzeczą jest to, że chcemy ograniczyć długość naszego zapytania. Nie chcemy, aby użytkownik napisał powieść w polu wyszukiwania i zawiesił nasz serwer MySQL.

// Usuń niepotrzebne słowa z wyszukiwanego terminu i zwróć je jako funkcję tablicową filterSearchKeys ($ query) ($ query \u003d trim (preg_replace ("/ (\\ s +) + /", "", $ query)); $ words \u003d array (); // rozszerz tę listę swoimi słowami. $ list \u003d array ("in", "it", "a", "the", "of", "or", "I", "you", „on”, „ja”, „nas”, „oni”, „ona”, „do”, „ale”, „tamto”, „to”, „tamci”, „wtedy”); $ c \u003d 0; foreach (explode ("", $ query) as $ key) (if (in_array ($ key, $ list)) (continue;) $ words \u003d $ key; if ($ c\u003e \u003d 15) (break;) $ c ++ ;) return $ words;) // ogranicz liczbę słów do znaków function limitChars ($ query, $ limit \u003d 200) (return substr ($ query, 0, $ limit);)

Nasze funkcje pomocnicze mogą teraz ograniczać liczbę znaków i filtrować bezużyteczne słowa. Sposób, w jaki zaimplementujemy nasz algorytm, polega na przyznaniu wyniku za każdym razem, gdy znajdziemy dopasowanie. Dopasujemy słowa za pomocą instrukcji if i będziemy gromadzić punkty, dopasowując więcej słów. Na koniec możemy użyć tego wyniku do sortowania naszych wyników

Uwaga: Nie będę pokazywał, jak połączyć się z bazą danych MySQL. Jeśli masz problemy ze sprawnym połączeniem się z bazą danych to polecam przeczytanie tego.

Najpierw nadajmy naszej funkcji strukturę. Uwaga: zostawiłem symbole zastępcze, abyśmy mogli zaimplementować sekcje oddzielnie.

Wyszukiwanie funkcji ($ query) ($ query \u003d trim ($ query); if (mb_strlen ($ query) \u003d\u003d\u003d 0) (// nie ma potrzeby pustego wyszukiwania, prawda? Return false;) $ query \u003d limitChars ($ query) ; // Wyniki ważenia $ scoreFullTitle \u003d 6; $ scoreTitleKeyword \u003d 5; $ scoreFullSummary \u003d 5; $ scoreSummaryKeyword \u003d 4; $ scoreFullDocument \u003d 4; $ scoreDocumentKeyword \u003d 3; $ scoreCategoryKeyword \u003d 2; $ scoreUrlKeyword \u003d 1; $ słowa kluczowe \u003d filterSear $ query); $ escQuery \u003d DB :: escape ($ query); // patrz uwaga powyżej, aby pobrać obiekt db $ titleSQL \u003d array (); $ sumSQL \u003d array (); $ docSQL \u003d array (); $ categorySQL \u003d array (); $ urlSQL \u003d array (); / ** Pasujące pełne wystąpienia PLACE HOLDER ** / / ** Pasujące słowa kluczowe PLACE HOLDER ** / $ sql \u003d "SELECT p.p_id, p.p_title, p.p_date_published, p. p_url, p.p_summary, p.p_content, p.thumbnail, ((- Wynik tytułu ".implode (" + ", $ titleSQL).") + (- Podsumowanie ".implode (" + ", $ sumSQL) . ") + (- dokument" .implode ("+", $ docSQL). ") + (- tag / kategoria" .implode ("+", $ categorySQL). ") + (- url". implode (" + ", $ urlSQL).")) jako trafność OD postu p GDZIE p.status \u003d "opublikowano" MAJĄC trafność\u003e

W zapytaniu wszystkie wyniki zostaną zsumowane jako zmienna trafności i możemy użyć jej do sortowania wyników.

Dopasowanie pełnych wystąpień

Najpierw upewniamy się, że mamy kilka słów kluczowych, a następnie dodajemy nasze zapytanie.

If (count ($ words)\u003e 1) ($ titleSQL \u003d "if (p_title LIKE"% ". $ EscQuery."% ", ($ ScoreFullTitle), 0)"; $ sumSQL \u003d "if (p_summary LIKE"% " . $ escQuery. "%", ($ scoreFullSummary), 0) "; $ docSQL \u003d" if (p_content LIKE "%". $ escQuery. "%", ($ scoreFullDocument), 0) ";)

To są mecze z wyższym wynikiem. Jeśli wyszukiwane hasło pasuje do artykułu, który je zawiera, mają większe szanse na pojawienie się na górze.

Pasujące wystąpienia słów kluczowych

Przeglądamy wszystkie słowa kluczowe i sprawdzamy, czy pasują do któregokolwiek z pól. Aby dopasować kategorię, użyłem zapytania podrzędnego, ponieważ post może mieć wiele kategorii.

Foreach ($ words as $ key) ($ titleSQL \u003d "if (p_title LIKE"% ". DB :: escape ($ key)."% ", ($ ScoreTitleKeyword), 0)"; $ sumSQL \u003d "if (p_summary LIKE "%". DB :: escape ($ key). "%", ($ ScoreSummaryKeyword), 0) "; $ docSQL \u003d" if (p_content LIKE "%". DB :: escape ($ key). "% ", ($ scoreDocumentKeyword), 0)"; $ urlSQL \u003d "if (p_url LIKE"% ". DB :: escape ($ key)."% ", ($ scoreUrlKeyword), 0)"; $ categorySQL \u003d "if ((SELECT count (category.tag_id) FROM category JOIN post_category ON post_category.tag_id \u003d category.tag_id WHERE post_category.post_id \u003d p.post_id AND category.name \u003d "" .DB :: escape ($ key). "")\u003e 0, ($ scoreCategoryKeyword), 0) ";)

Jak zauważył komentator poniżej, musimy upewnić się, że te zmienne nie są pustymi tablicami, w przeciwnym razie zapytanie zakończy się niepowodzeniem.

// Po prostu przypuść, że jest pusty, dodaj 0 if (pusty ($ titleSQL)) ($ titleSQL \u003d 0;) if (pusty ($ sumSQL)) ($ sumSQL \u003d 0;) if (pusty ($ docSQL)) ( $ docSQL \u003d 0;) if (puste ($ urlSQL)) ($ urlSQL \u003d 0;) if (puste ($ tagSQL)) ($ tagSQL \u003d 0;)

Na końcu wszystkie zapytania są łączone i dodawane razem, aby określić znaczenie postu dla wyszukiwanego terminu.

// Usuń niepotrzebne słowa z wyszukiwanego terminu i zwróć je jako funkcję tablicową filterSearchKeys ($ query) ($ query \u003d trim (preg_replace ("/ (\\ s +) + /", "", $ query)); $ words \u003d array (); // rozszerz tę listę swoimi słowami. $ list \u003d array ("in", "it", "a", "the", "of", "or", "I", "you", „on”, „ja”, „nas”, „oni”, „ona”, „do”, „ale”, „tamto”, „to”, „tamci”, „wtedy”); $ c \u003d 0; foreach (explode ("", $ query) as $ key) (if (in_array ($ key, $ list)) (continue;) $ words \u003d $ key; if ($ c\u003e \u003d 15) (break;) $ c ++ ;) return $ words;) // ogranicz liczbę słów do znaków function limitChars ($ query, $ limit \u003d 200) (return substr ($ query, 0, $ limit);) function search ($ query) ($ query \u003d trim ($ query); if (mb_strlen ($ query) \u003d\u003d\u003d 0) (// nie ma potrzeby pustego wyszukiwania, prawda? return false;) $ query \u003d limitChars ($ query); // Wyniki ważenia $ scoreFullTitle \u003d 6; $ scoreTitleKeyword \u003d 5; $ scoreFullSummary \u003d 5; $ scoreSummaryKeyword \u003d 4; $ scoreFullDocument \u003d 4; $ scoreDocumentKeyword \u003d 3; $ scoreCategoryKeyword \u003d 2; $ scoreUrlKe yword \u003d 1; $ words \u003d filterSearchKeys ($ query); $ escQuery \u003d DB :: escape ($ query); // patrz uwaga powyżej, aby pobrać obiekt db $ titleSQL \u003d array (); $ sumSQL \u003d array (); $ docSQL \u003d array (); $ categorySQL \u003d array (); $ urlSQL \u003d array (); / ** Dopasowanie pełnych wystąpień ** / if (count ($ words)\u003e 1) ($ titleSQL \u003d "if (p_title LIKE"% ". $ EscQuery."% ", ($ ScoreFullTitle), 0)"; $ sumSQL \u003d "if (p_summary LIKE"% ". $ escQuery."% ", ($ scoreFullSummary), 0)"; $ docSQL \u003d "if (p_content LIKE"% ". $ escQuery."% ", ($ scoreFullDocument), 0) ";) / ** Dopasowane słowa kluczowe ** / foreach ($ słowa kluczowe jako $ klucz) ($ titleSQL \u003d" if (p_title LIKE "%". DB :: escape ($ key). "%", ($ ScoreTitleKeyword ), 0) "; $ sumSQL \u003d" if (p_summary LIKE "%". DB :: escape ($ key). "%", ($ ScoreSummaryKeyword), 0) "; $ docSQL \u003d" if (p_content LIKE "% ".DB :: escape ($ key)."% ", ($ ScoreDocumentKeyword), 0)"; $ urlSQL \u003d "if (p_url LIKE"% ". DB :: escape ($ key)."% ", ( $ scoreUrlKeyword), 0) "; $ categorySQL \u003d" if ((SELECT count (category.tag_id) FROM category JOIN post_category ON post_category.tag_id \u003d category.tag_id WHERE post_category.post_id \u003d p.post_id AND category.name \u003d "". DB :: escape ($ key). "")\u003e 0, ($ scoreCategoryKeyword), 0) ";) // Po prostu niech jest puste, dodaj 0 if (puste ($ titleSQL)) ($ titleSQL \u003d 0; ) Jeśli (puste ($ sumSQL)) ($ sumSQL \u003d 0; ) if (puste ($ docSQL)) ($ docSQL \u003d 0;) if (puste ($ urlSQL)) ($ urlSQL \u003d 0;) if (puste ($ tagSQL)) ($ tagSQL \u003d 0;) $ sql \u003d " SELECT p.p_id, p.p_title, p.p_date_published, p.p_url, p.p_summary, p.p_content, p.thumbnail, ((- Wynik tytułu ".implode (" + ", $ titleSQL). ") + (- Podsumowanie" .implode ("+", $ sumSQL). ") + (- dokument" .implode ("+", $ docSQL). ") + (- tag / kategoria" .implode ("+", $ categorySQL). ") + (- url" .implode ("+", $ urlSQL). ")) jako trafność OD postu p GDZIE p.status \u003d" opublikowane "MAJĄCE trafność\u003e 0 ZAMÓWIENIE WEDŁUG trafność DESC, p.page_views DESC LIMIT 25 "; $ wyniki \u003d DB :: zapytanie ($ sql); if (! $ wyniki) (return false;) zwraca $ wyników; )

Teraz twój plik search.php może wyglądać następująco:

$ term \u003d isset ($ _ GET ["zapytanie"])? $ _ GET ["zapytanie"]: ""; $ search_results \u003d szukaj ($ termin); if (! $ search_results) (echo "Brak wyników"; exit;) // Tutaj wydrukuj stronę z wynikami.

Stworzyliśmy prosty algorytm wyszukiwania, który może obsłużyć sporą ilość treści. Samowolnie wybieram wynik dla każdego meczu, nie krępuj się, aby zmienić go na taki, który będzie dla Ciebie najlepszy. I zawsze jest miejsce na poprawę.

Warto śledzić wyszukiwane hasła pochodzące od użytkowników, dzięki czemu można sprawdzić, czy większość użytkowników szuka tego samego. Jeśli istnieje wzór, możesz zapisać im wycieczkę i po prostu zapisać wyniki za pomocą Memcached.

Jeśli chcesz zobaczyć ten algorytm wyszukiwania w akcji, spróbuj poszukać artykułu w polu wyszukiwania u góry strony. Dodałem dodatkowe funkcje, takie jak zwrócenie części, w której znaleziono dopasowanie w tekście. Zapraszam do dodawania funkcji do swoich.

Podobał Ci się ten artykuł? Możesz zasubskrybować, aby przeczytać więcej niesamowitych. ...

A propos, oto kilka interesujących artykułów.

Tworzenie własnej witryny internetowej nie powinno być zbyt trudne. Firmy hostingowe, takie jak GoDaddy czy Hostgator, ułatwiają każdemu rozpoczęcie pracy. Pozwalają one stworzyć całą witrynę internetową bez konieczności pisania kodu. Dla większości ludzi wystarczy uruchomić Blog WordPress. Jeśli tego właśnie szukasz, przejdź do Godaddy.com już teraz. Skończyliśmy. Ale z drugiej strony, jeśli chcesz mieć kontrolę i nie być ograniczonym przez niedociągnięcia wspólnego hostingu bez zerwania portfela trafiłeś we właściwe miejsce.

Vim to mój ulubiony edytor tekstu na terminalu. Po krótkiej zabawie z nano i emacsem, w końcu zdecydowałem się na vim ze względu na jego prostotę (proszę go ze mną). Chociaż można go dostosować i używać jak całego środowiska IDE, używam go głównie do edycji plików na moich serwerach i dokonywania małych, ale kluczowych zmian. Nie wdawajmy się w wojnę redaktorów i zaczynajmy.

Doświadczeni programiści są kosztowni. W świecie, w którym cięcie kosztów wydaje się najlepszą opcją, firmy starają się maksymalizować swoje zyski, wydając coraz mniej na dobre talenty. Dużo taniej jest zatrudnić kogoś, kto dopiero kilka tygodni temu nauczył się php, a potem doświadczonego programisty. Ale inwestycja staje się bardzo zła, gdy nowicjusz wprowadza niezabezpieczony kod. Problem polega na tym, że wiele rzeczy, których nauczyliśmy się z tych samouczków dotyczących aplikacji LAMP CRUD, nie koncentruje się zbytnio na bezpieczeństwie. Gdy ten kod zostanie wprowadzony do aplikacji komercyjnej, uszkodzenie może być bardzo kosztowne. Podoba mi się, jak użytkownicy stosu przepełnienia stosu bardzo ciężko walczą, aby wyeliminować wstrzykiwanie SQL, ale wydaje się, że znacznie łatwiej jest znaleźć niezabezpieczony kod w Internecie. To powiedziawszy, spróbuję cię przestraszyć, abyś wiedział lepiej, jaki jest koszt wstrzyknięcia SQL.

Komentarze (45)

Zaryel 12 sierpnia 2015:

Ian Mustafa 26 września 2015:

Obrabować 29 września 2015:

adeem 11 lutego 2016 roku:

Ivan Venediktov 09 kwietnia 2016.

Zaktualizowano 30 kwietnia 2016 r

Pokażę Ci, jak utworzyć proste wyszukiwanie za pomocą PHP i MySQL. Dowiesz się:

  • Jak korzystać z metod GET i POST
  • Połącz się z bazą danych
  • Komunikuj się z bazą danych
  • Znajdź pasujące wpisy bazy danych z podanym słowem lub frazą
  • Wyświetl wyniki

Przygotowanie

Powinieneś oczywiście mieć zainstalowane i uruchomione Apache, MySQL i PHP (możesz używać dla różnych platform lub WAMP dla Windows, MAMP dla Mac) lub serwer WWW / hosting obsługujący bazy danych PHP i MySQL.

Stwórzmy bazę danych, tabelę i wypełnijmy ją kilkoma wpisami, których możemy użyć do wyszukiwania:

  • Przejdź do phpMyAdmin, jeśli masz serwer na swoim komputerze, możesz uzyskać do niego dostęp pod adresem http: // localhost / phpmyadmin /
  • Utwórz bazę danych, nazwałem moją tutorial_search
  • Utwórz tabelę Użyłem 3 pól, nazwałem moje artykuły.
  • Konfiguracja dla pierwszego pola. Imię: id, typ: INT, sprawdź AUTO_INCREMENT, indeks: podstawowy

INT oznacza liczbę całkowitą
AUTO_INCREMENT oznacza, że \u200b\u200bnowe wpisy będą miały inny (wyższy) numer niż poprzednie
Indeks: podstawowy oznacza, że \u200b\u200bjest to unikalny klucz używany do identyfikacji wiersza

  • Drugie pole: Imię: tytuł, typ: VARCHAR, długość: 225

VARCHAR oznacza ciąg tekstowy, maksymalnie 225 znaków (wymagane jest podanie maksymalnej długości), użyj go do tytułów, nazwisk, adresów
długość oznacza, że \u200b\u200bnie może być dłuższa niż 225 znaków (możesz ustawić niższą liczbę, jeśli chcesz)

  • Trzecie pole: Nazwa: tekst, wpisz: TEKST

TEKST oznacza, że \u200b\u200bjest to długi ciąg, nie ma potrzeby określania długości, użyj go dla długiego tekstu.

  • Wypełnij tabelę losowymi artykułami (możesz je znaleźć na serwisach informacyjnych, na przykład: CNN, BBC itp.). Kliknij wstawka w górnym menu i skopiuj tekst do określonych pól. Pozostaw pole „id” puste. Wstaw co najmniej trzy.

Powinien wyglądać mniej więcej tak:

  • Utwórz folder w swoim katalogu na serwerze i dwa pliki: index.php i search.php (właściwie możemy to wszystko zrobić z jednym plikiem, ale użyjmy dwóch, będzie łatwiej)
  • Wypełnij je domyślnymi znacznikami html, typem dokumentu, nagłówkiem itp.

Szukaj

  • Utwórz formularz z polem wyszukiwania i przyciskiem przesyłania w index.php, możesz użyć metody GET lub POST, ustaw akcję na search.php. Użyłem „zapytania” jako nazwy pola tekstowego

POBIERZ - oznacza, że \u200b\u200bTwoje informacje będą przechowywane w adresie URL (http: //localhost/tutorial_search/search.php? Query \u003d twoje zapytanie)
POST - oznacza, że \u200b\u200bTwoje informacje nie będą wyświetlane; są używane do haseł, prywatnych informacji, znacznie bezpieczniejsze niż GET

Ok, zacznijmy od php.

  • Otwórz search.php
  • Uruchom php ()
  • Połącz się z bazą danych (przeczytaj komentarze w poniższym kodzie)

< to > $ zapytanie \u003d mysql_real_escape_string ($ zapytanie); // upewnia się, że nikt nie używa wstrzyknięcia SQL $ raw_results \u003d mysql_query ("SELECT * FROM artykuły WHERE (` title` LIKE "%". $ query. "%") OR (`text` LIKE"% ". $ query."% „)”) lub die (mysql_error ()); // * oznacza, że \u200b\u200bzaznacza wszystkie pola, możesz także wpisać: `id`,` title`, `text` // artykuły to nazwa naszej tabeli //"% $ query% "to jest to, czego szukamy ,% oznacza cokolwiek, na przykład jeśli $ query to Hello //, będzie pasować do „hello”, „Hello man”, „gogohello”, jeśli chcesz uzyskać dokładne dopasowanie, użyj „title` \u003d" $ query "// lub jeśli chcesz aby dopasować tylko całe słowo, więc „gogohello” jest niedostępne, użyj „% $ query%” ... LUB ... „$ query%” ... LUB ... „% $ query” if (mysql_num_rows ($ raw_results)\u003e

". $ wyniki [" tytuł "]."

". $ wyniki [" tekst "]."

"; // publikuje wyniki pobrane z bazy danych (tytuł i tekst), możesz również pokazać id ($ results [" id "]))) else (// jeśli nie ma pasujących wierszy, wykonaj następujące echo" Brak wyników ";)) else (// jeśli długość zapytania jest mniejsza niż minimum echo "Minimalna długość to". $ min_length;)?\u003e

Gotowe!

Teraz działa. Wypróbuj różne słowa, odmiany, edytuj kod, eksperymentuj. Dodam pełny kod obu plików na wypadek, gdybyś sądził, że coś przeoczyłeś. Zapraszam do zadawania pytań lub poproszenia o samouczki.

index.php

Szukaj

search.php

Wyniki wyszukiwania \u003d $ min_length) (// jeśli długość zapytania jest większa lub równa minimalnej długości to $ query \u003d htmlspecialchars ($ query); // zmienia znaki użyte w html na ich odpowiedniki, na przykład:< to > $ zapytanie \u003d mysql_real_escape_string ($ zapytanie); // upewnia się, że nikt nie używa iniekcji SQL $ raw_results \u003d mysql_query ("SELECT * FROM artykuły WHERE (` title` LIKE "%". $ query. "%") OR (`text` LIKE"% ". $ query."% „)”) lub die (mysql_error ()); // * oznacza, że \u200b\u200bzaznacza wszystkie pola, możesz także wpisać: `id`,` title`, `text` // artykuły to nazwa naszej tabeli //"% $ query% "to jest to, czego szukamy ,% oznacza cokolwiek, na przykład jeśli $ query to Hello //, będzie pasować do „hello”, „Hello man”, „gogohello”, jeśli chcesz uzyskać dokładne dopasowanie, użyj „title` \u003d" $ query "// lub jeśli chcesz aby dopasować tylko całe słowo, więc „gogohello” jest niedostępne, użyj „% $ query%” ... LUB ... „$ query%” ... LUB ... „% $ query” if (mysql_num_rows ($ raw_results)\u003e 0) (// jeśli jeden lub więcej wierszy zostanie zwróconych, wykonaj następujące czynności while ($ results \u003d mysql_fetch_array ($ raw_results)) (// $ results \u003d mysql_fetch_array ($ raw_results) umieszcza dane z bazy danych w tablicy, podczas gdy jest to prawidłowe, tak echo pętli ”

". $ wyniki [" tytuł "]."

". $ wyniki [" tekst "]."

"; // publikuje wyniki pobrane z bazy danych (tytuł i tekst), możesz również pokazać id ($ results [" id "]))) else (// jeśli nie ma pasujących wierszy, wykonaj następujące echo" Brak wyników ";)) else (// jeśli długość zapytania jest mniejsza niż minimum echo "Minimalna długość to". $ min_length;)?\u003e

Najlepszym sposobem na zatrzymanie użytkownika w witrynie jest umożliwienie mu znalezienia tego, czego szukają. Jeśli stworzysz do tego wygodny system, poziom preferencji dla Twojej witryny wzrośnie, a użytkownik na pewno wróci, aby znaleźć to, co go interesuje.

Pokażę Ci, jak stworzyć prosty, ale funkcjonalnie skuteczny formularz wyszukiwania, który będzie używany do wyszukiwania artykułów w serwisie. Wyniki pojawią się na stronie bez przeładowań, co jest niewątpliwie najlepszym sposobem prezentacji informacji.

Stworzę 2 pliki: search.php, które będą zawierały HTML i JavaScript. Drugi plik, do_search.php, będzie zawierał kod PHP. Zacznijmy tworzyć pierwszy plik:

Demo wyszukiwania PHP, jQuery

Spróbuj wpisać słowo ajax


wyniki dla

W tym pliku utworzyliśmy zwykły plik Formularz HTMLktóry wysyła żądanie POST do pliku zaplecza do_search.php.

select_list ($ sql); if (count ($ row)) ($ end_result \u003d ""; foreach ($ row as $ r) ($ result \u003d $ r ["title"]; $ bold \u003d " „. $ słowo”."; $ end_result. \u003d"

  • ". str_ireplace ($ słowo, $ pogrubienie, $ wynik)."
  • ";) echo $ end_result;) else (echo"
  • Nie znaleziono żadnych wyników wyszukiwania.
  • "; } } ?>

    Kod PHP zawiera komentarze, dzięki którym możesz łatwo zrozumieć, jak działa skrypt. Jeśli w bazie danych znajdują się dopasowania, pokazujesz je użytkownikowi, wyróżniając pogrubioną czcionką słowa, których szukał użytkownik.

    Dajmy to wszystko trochę CSS:

    Body (font-family: Arial, Helvetica, sans-serif;) * (margin: 0; padding: 0;) #container (margin: 0 auto; width: 600px;) a (color: # DF3D82; text-decoration: brak) a: hover (kolor: # DF3D82; dekoracja tekstu: podkreślenie;) ul.update (styl listy: brak; rozmiar czcionki: 1.1em; margin-top: 10px) ul.update li (wysokość: 30px; border-bottom: #dedede solid 1px; text-align: left;) ul.update li: first-child (border-top: #dedede solid 1px; height: 30px; text-align: left;) #flash (margin- top: 20px; text-align: left;) #searchresults (text-align: left; margin-top: 20px; display: none; font-family: Arial, Helvetica, sans-serif; font-size: 16px; color: # 000;) .word (font-weight: bold; color: # 000000;) #search_box (padding: 4px; border: solid 1px # 666666; width: 300px; height: 30px; font-size: 18px; -moz- border-radius: 6px; -webkit-border-radius: 6px;) .search_button (border: # 000000 solid 1px; padding: 6px; color: # 000; font-weight: bold; font-size: 16px; -moz- border-radius: 6px; -webkit-border-radius: 6px;) .found (font-weight: bold ; styl czcionki: kursywa; kolor: # ff0000; ) h2 (margin-right: 70px;)

    Więc nauczyłeś się, jak utworzyć prosty formularz wyszukiwania, który działa bez ponownego ładowania strony. Mam nadzieję, że samouczek Ci się podobał.

    DZWON

    Są tacy, którzy czytają tę wiadomość przed tobą.
    Zapisz się, aby otrzymywać najnowsze artykuły.
    E-mail
    Imię
    Nazwisko
    Jak chcesz przeczytać The Bell
    Bez spamu