Konfiguracja sprzętu i oprogramowania

Kwantyfikatory zachłanne i leniwe w wyrażeniach regularnych. Prosty system komentowania AJAX

Komentarze w PHP są podobne do komentarzy używanych w HTML. W składni PHP komentarze zawsze zaczynają się od specjalnej sekwencji znaków, a każdy tekst, który pojawia się pomiędzy tymi znakami specjalnymi, zostanie zignorowany przez interpreter.

W języku HTML głównym celem komentarza jest służenie jako notatka dla programistów, którzy mogą przeglądać źródło Twoja strona. Komentarze PHP różnią się tym, że nie będą wyświetlane odwiedzającym. Jedynym sposobem przeglądania komentarzy PHP jest otwarcie pliku do edycji. To sprawia, że ​​komentarze PHP są przydatne tylko dla programistów PHP.

Jeśli zapomniałeś lub nie wiesz, jak komentarze są tworzone w HTML, zobacz poniższy przykład.

Składnia komentarza php: komentarz jednowierszowy

Podczas gdy html ma tylko jeden typ komentarza, PHP ma dwa typy. Pierwszym rodzajem, który omówimy, jest komentarz jednowierszowy. To znaczy komentarz, który mówi tłumaczowi, aby zignorował wszystko, co dzieje się w tym wierszu po prawej stronie komentarzy. Aby użyć tego komentarza, użyj znaków "//" lub "#", a cały tekst po prawej stronie zostanie zignorowany przez interpreter PHP.

Psst...Nie widzisz moich komentarzy PHP!"; // echo "nic"; // echo "Nazywam się Humperdinkle!"; # echo "Ja też nic nie robię"; ?>

Wynik:

Witaj świecie! Psst...Nie widzisz moich komentarzy PHP!

Zauważ, że kilka naszych poleceń echo nie zostało przetworzonych, ponieważ skomentowaliśmy je specjalnymi znakami komentarza. Ten rodzaj komentarza jest często używany do szybkiego pisania o złożonym i zaciemnionym kodzie lub do tymczasowego usunięcia wiersza kodu PHP (w celach debugowania).

składnia komentarza php: komentarz wielowierszowy

Podobnie jak komentarze HTML, wielowierszowe komentarze w PHP mogą być używane do komentowania dużych bloków kodu lub do pisania komentarzy w wielu wierszach. Komentarze wieloliniowe w PHP zaczynają się od "/*" i kończą na "*/". Wszystko pomiędzy tymi znakami zostanie zignorowane.

Wynik.

Krok 1 — XHTML

Najpierw spójrzmy na znaczniki komentarzy. Ten kod jest generowany przez PHP z klasą Komentarz .

demo.php

Nazwa użytkownika
30 czerwca 2010

Tekst komentarza

div awatara zawiera link (jeśli użytkownik wpisał poprawny adres URL podczas publikowania komentarza) oraz obraz awatara, który otrzymujemy z gravatar.com . Wrócimy do generowania znaczników w kroku PHP. Na koniec obserwuj div Nazwa div czas i tekst komentarza.

Innym ważnym elementem XHTML jest formularz komentarza. Wysyła z POCZTA. Wszystkie pola z wyjątkiem adresu URL muszą być wypełnione.

demo.php

Dodaj komentarz

Formularz jest przesyłany za pomocą AJAX. Kontrola jest przeprowadzana w tło v prześlij.php. Każde pole ma odpowiedni element etykieta, z zestawem atrybutów dla .

Krok 2 - PHP

PHP obsługuje komunikację z bazą danych Dane MySQL i generuje znaczniki dla komentarza. Pobiera również koniec żądania AJAX i wstawia dane komentarza do tabeli uwagi.

demo.php

/* / Zaznacz wszystkie komentarze i zapełnij tablicę $comments obiektami */ $comments = array(); $result = mysql_query("WYBIERZ * Z komentarzy ORDER BY id ASC"); while($row = mysql_fetch_assoc($result)) ( $comments = new Comment($row); )

Zapytanie MySQL wybiera wszystkie rekordy z tabeli i wypełnia tablicę $komentarze obiekty klasy komentarz. Dana tablica dane wyjściowe dalej, gdy skrypt jest wykonywany.

demo.php

/* / Wydrukuj komentarze jeden po drugim: */ foreach($comments as $c)( echo $c->markup(); )

Każdy komentarz ma swoją metodę narzut(), który generuje poprawny kod HTML, gotowy do wyświetlenia na stronie. Poniżej znajdują się definicje klas i metod.

Klasa otrzymuje wiersz z bazy danych (uzyskany za pomocą mysql_fetch_assoc()) i przechowuj go w zmiennej $dane. Jest dostępny tylko dla metody klasy.

comment.class.php - Część 1

class Comment ( private $data = array(); public function __construct($row) ( /* / Constructor */ $this->data = $row; ) public function markup() ( /* / Ta metoda wyświetla znacznik XHTML dla komentarza */ // Ustawia alias, aby nie trzeba było go pisać za każdym razem $this->data: $d = &$this->data; $link_open = ""; $link_close = ""; if($d["url"])( // Jeśli podczas dodawania komentarza wprowadzono adres URL, // określ otwierający i zamykający tag linku $link_open = ""; $link_close = ""; ) // Konwertuj czas do formatu UNIX: $d["dt"] = strtotime($d["dt"]); // Potrzebne do ustawienia domyślnego obrazu: $url = "http://".dirname($_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"])."/img/default_avatar.gif"; powrót"
".$link_open." „.$link_zamknij”.
".$link_open.$d["nazwa"].$link_close."
".data("d M R",$d["dt"])."

".$d["ciało"]."

"; }

Skrypt używa gravatara do reprezentowania awatara w komentarzach. Gravatar to bardzo przydatna usługa, która dopasowuje awatar do adresu e-mail. Obraz awatara można łatwo uzyskać, przekazując zakodowaną funkcję md5() Twój adres e-mail na gravatar.com.

Skrypt określa adres URL, na którym jest wykonywany i określa dokładny adres obrazu domyślny_awatar.gif. Ten obraz jest przekazywany wraz z hashem md5, a jeśli dla podanego adresu e-mail nie zostanie znaleziony awatar, zostanie wyświetlony alternatywny obraz.

comment.class.php - Część 2

public static function validate(&$arr) ( /* / Ta metoda służy do sprawdzania poprawności danych przesyłanych przez AJAX. / / Zwraca true/false w zależności od ważności danych i wypełnia / przekazaną tablicę $arr jako parametr z danymi lub */ $errors = array(); $data = array(); // Użyj funkcji filter_input wprowadzonej w PHP 5.2.0 if(!($data["email"] = filter_input(INPUT_POST ,"email ",FILTER_VALIDATE_EMAIL))) ( $errors["email"] = "Wprowadź poprawny adres e-mail."; ) if(!($data["url"] = filter_input(INPUT_POST,"url",FILTER_VALIDATE_URL) )) ( // Jeśli w polu URL wprowadzono nieprawidłowy adres URL, // zachowuj się tak, jakby nie podano adresu URL: $url = ""; ) // Użyj filtra z funkcją zwrotną: if(!($data[ "body"] = filter_input(INPUT_POST,"body",FILTER_CALLBACK,array("options"=>"Comment::validate_text")))) ( $errors["body"] = "Proszę wprowadzić tekst komentarza."; ) if(!( $data["nazwa"] = filter_input(INPUT_POST,"nam e",FILTER_CALLBACK,array("opcje"=>"Comment::validate_text")))) ( $errors["name"] = "Proszę podać nazwę."; ) if(!empty($errors))( // Jeśli są błędy, skopiuj tablicę $errors do $arr: $arr = $errors; return false; ) // Jeśli dane wejściowe są poprawne, wyczyść dane i skopiuj to do $arr : foreach($data as $k=>$v)( $arr[$k] = mysql_real_escape_string($v); ) // email musi być małymi literami: $arr["email"] = strtolower( trim($ arr["e-mail"])); zwróć prawdę; )

metoda uprawomocnić()(również część klasy) jest zdefiniowany jako statyczny. Oznacza to, że można go wywołać bezpośrednio za pomocą konstrukcji komentarz::zatwierdź(), bez tworzenia obiektu klasy. Ta metoda sprawdza poprawność danych przekazywanych przez AJAX.

Metoda wykorzystuje Nowa cecha filtr, który stał się dostępny w PHP 5.2.0. W ten sposób możemy łatwo sprawdzić i przefiltrować dane, które są przekazywane do skryptu. Na przykład, filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL) oznacza, że ​​sprawdzamy czy $_POST["adres URL"] poprawny adres URL. Jeśli tak, to funkcja zwraca wartość zmiennej, w przeciwnym razie zwraca wartość fałszywy.

Przed użyciem takiej funkcji konieczne było użycie wyrażeń regularnych do walidacji danych (za pomocą serii konstrukcji Jeśli). Dodatkową korzyścią jest to, że otrzymujemy dane przed wykonaniem jakichkolwiek konkretnych przekształceń.

Możliwe jest również zdefiniowanie funkcji, która wykona dodatkowe modyfikacje danych.

comment.class.php - Część 3

prywatna funkcja statyczna validate_text($str) ( /* / Ta metoda jest używana jako FILTER_CALLBACK */ if(mb_strlen($str,"utf8")<1) return false; // Кодируем все специальные символы html (<, >, ", & .. itp) i przekonwertuj // znak nowej linii na znacznik
: $str = nl2br(htmlspecialchars($str)); // Usuń wszelkie pozostałe znaki nowej linii $str = str_replace(array(chr(10),chr(13)),"",$str); return $str; )

Ostatnia metoda walidacja_tekstu przekazany jako funkcja powrotu w dwóch wywołaniach filtr_wejście. Konwertuje wszystkie specjalne znaki HTML, co skutecznie blokuje ataki XSS. Zastępuje również znaki nowej linii tagami
.

prześlij.php

/* / Ta tablica zostanie wypełniona danymi / przekazanymi do skryptu / lub komunikatami o błędach. /*/ $arr = tablica(); $validate = Komentarz::validate($arr); if($validates) ( /* Dobrze, wstawiaj dane do bazy danych: */ mysql_query(" INSERT INTO comments(name,url,email,body) VALUES ("".$arr["name"]."", "".$arr["url"]."", "".$arr["email"]."", "".$arr["body"]."")"); $arr["dt "] = date("r",time()); $arr["id"] = mysql_insert_id();/* / Dane w $arr są przygotowane do zapytania mysql, / ale musimy je wyświetlić, więc / przygotowujemy wszystkie elementy w tablicy: /*/ $arr = array_map("stripslashes",$arr); $insertedComment = new Comment($arr); /* Wydrukuj znacznik wstawionego komentarza: */ echo json_encode (array("status "=>1,"html"=>$insertedComment->markup())); ) else ( /* Wyświetlaj komunikaty o błędach */ echo "("status":0,"errors":". json_encode($arr ).")"; )

prześlij.php pobiera komentarz z danych za pośrednictwem żądania AJAX. Weryfikuje go i generuje obiekt JSON zawierający znacznik XHTML z osadzonym komentarzem lub listę błędów. jQuery użyj właściwości status aby określić, co ma być wyświetlane — komunikat o błędzie lub dodanie znacznika komentarza na stronie.

Poniżej dwa przykłady.

Udana odpowiedź

( "status": 1, "html": "Kod HTML komentarza jest tutaj..." )

Nieruchomość html zawiera kod komentarza.

Odpowiedź na błąd

( "status": 0, "errors": ( "email": "Wprowadź poprawny adres e-mail.", "body": "Wprowadź treść komentarza.", "name": "Podaj nazwę." ) )

W przypadku wystąpienia błędu jQuery przechodzi przez obiekt błędów i wyświetla komunikaty obok pól, które zawierają błędy.

Krok 3 - CSS

Teraz, gdy znacznik został poprawnie wygenerowany i wyświetlony na stronie, możemy przejść do stylizacji.

style.css - Część 1

.comment, #addCommentContainer( /* Styl komentarzy */ padding:12px; width:400px; position:relative; background-color:#fcfcfc; border:1px solid white; color:#888; margin-bottom:25px; / * CSS3 zaokrąglone rogi i cienie */ -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; -moz-box-shadow:2px 2px 0 #c2c2c2; -webkit-box- shadow:2px 2px 0 #c2c2c2;box-shadow:2px 2px 0 #c2c2c2; .comment .avatar( /* / Avatar jest pozycjonowany bezwzględnie. / Zewnętrzny offset dla komentarza div /*/ height:50px; left:- 70px; position :absolute; width:50px; background:url("img/default_avatar.gif") no-repeat #fcfcfc; /* Wyśrodkuj w pionie: */ margin-top:-25px; top:50%; -moz- box-shadow :1px 1px 0 #c2c2c2; -webkit-box-shadow:1px 1px 0 #c2c2c2;box-shadow:1px 1px 0 #c2c2c2; )

div .komentarz oraz #addPojemnik komentarzy mają ten sam styl. Kilka reguł CSS3 służy do zaokrąglania rogów i odbijania cieni.

style.css - Część 2

.comment .avatar img( display:block; ) .comment .name( font-size:20px; padding-bottom:10px; color:#ccc; ) .comment .date( font-size:10px; padding:6px 0; position:absolute; right:15px; top:10px; color:#bbb; ) .comment p, #addCommentContainer p( font-size:18px; line-height:1.5; overflow-x:hidden; ) #addCommentContainer input, # addCommentContainer textarea( /* Styl wprowadzania */ display:block; border:1px solid #ccc; margin:5px 0 5px; padding:3px; font-size:12px; color:#555; font-family:Arial, Helvetica, sans -serif; ) #addCommentContainer textarea( szerokość:300px; ) label( rozmiar-czcionki:10px; ) label span.error( color:red; position:relative; right:-10px; ) #submit( /* Przycisk "Prześlij" " */ background-color:#58B9EB; border:1px solid #40A2D4; color:#FFFFFF; cursor:pointer; font-family:"Myriad Pro",Arial,Helvetica,sans-serif; font-size:14px; font -weight:bold; padding:4px; margin-top:5px; -moz-border-radius:4px; -webkit-border-radius:4px; border-radius:4px; ) #s ubmit:hover( kolor tła:#80cdf5; kolor obramowania:#52b1e2; )

W drugiej części ustalamy style komentarzy i elementów formularzy. Zwróćmy uwagę na selektor Wejście, który podkreśla elementy w zależności od atrybutu rodzaj.

Krok 4 - jQuery

Przejdźmy teraz do jQuery.

skrypt.js

$(document).ready(function()( /* Poniższy kod jest wykonywany tylko po załadowaniu DOM */ /* Ta flaga zapobiega przesyłaniu wielu komentarzy: */ var working = false; /* Przechwytywanie formularza submit zdarzenie: */ $(" #addCommentForm").submit(function(e)( e.preventDefault(); if(working) return false; working = true; $("#submit").val("Praca.. "); $("span .error").remove(); /* Prześlij pola formularza do submit.php: */ $.post("submit.php",$(this).serialize(),function(msg )( working = false; $ ("#submit").val("Submit"); if(msg.status)( /* / Jeśli wstawienie się powiodło, dodaj komentarz / pod ostatnim na stronie z efekt slideDown /*/ $(msg.html).hide ().insertBefore("#addCommentContainer").slideDown(); $("#body").val(""); ) else ( /* / Jeśli istnieje są błędami, przejdź przez obiekt / msg.errors w pętli i wyślij je na stronę /*/ $.each(msg.errors,function(k,v)( $("label").append(" „+v+”"); )); ) ), "json"); )); ));

Używamy wywołania funkcji $(dokument).gotowy() A, który wiąże funkcję ze zdarzeniem. Zmienny pracujący działa jako flaga sygnalizująca, że ​​żądanie AJAX jest w toku (zapobiegając w ten sposób powielaniu tego samego komentarza).

W funkcji powrotu dla żądania POST AJAX sprawdzamy właściwość status aby ustalić, czy komentarz został wstawiony pomyślnie. Jeśli tak, dodamy wynikowy znacznik do strony po ostatnim komentarzu z animacją zjechać w dół.

Jeśli wystąpiły problemy, wyświetlamy komunikaty o błędach, dodając Zakres błąd do odpowiedniego elementu etykieta(atrybut elementu etykieta zawiera ID wejście, które zawiera błąd).

Gotowe!

Wniosek

Aby uruchomić skrypt na swoim serwerze, musisz utworzyć tabelę uwagi w Twojej bazie danych MySQL. Możesz to zrobić za pomocą kodu SQL z pliku tabela.sql, który należy wprowadzić na karcie SQL w phpMyAdmin. Następnie musisz ustawić w pliku parametry połączenia z bazą danych MySQL connect.php .

25.04.2017


Cześć wszystkim!
Nadal uczymy się podstaw PHP od podstaw!
W tej lekcji opowiem Ci czym jest komentarz w PHP iw praktyce postaramy się napisać Twój komentarz w kodzie. Ale to nie wszystko. Chcę również powiedzieć, jak zakomentować kod i dlaczego w ogóle należy to robić.

Co to jest komentarz wPHP
Komentarz wPHP jest wskazówką dla programistów php, umożliwiającą szybką orientację w kodzie, a także edycję.

Komentarz w PHP nie jest widoczny dla użytkownika, który otworzył stronę internetową do przeglądania. Nawet jeśli użytkownik zdecyduje się zajrzeć do kodu źródłowego strony, komentarz nadal nie będzie widoczny, ponieważ cały php.

Komentarz do kodu PHP

Istnieją 2 rodzaje komentarzy do kodu PHP:

→ jednowierszowy
→ wielowierszowy

⇒ Jednowierszowy komentarz do PHP
W komentarzu jednowierszowym użyj znaków „//” lub „#”

Po tych znakach wszystko napisane w jednej linii zostanie zignorowane i potraktowane jako komentarz.

Subskrybuj aktualizację"; # subskrybuj (to jest komentarz) ?>


Zapisz się do aktualizacji

⇒ Wielowierszowy komentarz dla PHP
Wielowierszowy komentarz dla PHP zaczyna się od "/*" i kończy na "*/".
Wszystko pomiędzy tymi znakami zostanie zignorowane i potraktowane jako komentarz.
Komentarz wielowierszowy jest używany, jeśli wpis zawiera kilka wierszy.

Na ekranie zobaczysz tylko następujący tekst:

Witajcie czytelnicy bloga - strona !!!

PS: Zawsze komentuj swój kod. Jeśli myślisz, że za 1-2 lata zapamiętasz wszystko, co zrobiłeś w kodzie, to się mylisz, szansa jest bardzo mała. Nawet jeśli pamiętasz, będziesz musiał poświęcić dużo czasu na naukę - co, gdzie i dlaczego ...
Spraw, aby przyszłość była dla Ciebie przyjemna - skomentuj kod, a wtedy powiesz sobie „DZIĘKUJĘ!!!”.
Zostaw komentarz w kodzie, zajmie to 1 minutę twojego czasu, ale zaoszczędzi ci cały dzień w przyszłości.

Skomentuj kod PHP

Powiedzmy, że napisałeś kod php, ale z jakiegoś powodu musisz usunąć 2 wiersze z kodu.
Nie spieszy mi się z usuwaniem czegoś z kodu, zwłaszcza jeśli jest to kod php, lepiej to skomentuję. I nagle trzeba będzie zwrócić kod. Łatwiej jest odkomentować niż pisać kod w nowy sposób.

Jak zakomentować kod wPHP
Przykład z komentarzem jednowierszowym:

Zapisz się do aktualizacji"; ?>

Przykład z komentarzem wielowierszowym.

Kiedyś pisałem o . Więc rozważaliśmy tylko tam ” chciwy"przedstawiciele. Jednak nie zawsze ich " chciwość„To nam pomaga, bardzo często boli. Trochę niżej pokażę przykład, na którym wyraźnie widać, co czasem robią, a także pokażę, jak zmniejszyć ich zapał i sprawić kwantyfikatory powtórzeń są „leniwe”.

Spójrzmy na prosty i już klasyczny przykład:

$str = "Mały linia C pogrubiony wybór.";
.*<\/b>
echo $result_str;
?>

Być może spodziewasz się czegoś takiego: Małe bold_highlight tutaj z bold_highlight tutaj„. Oznacza to, że wystarczy zastąpić zawartość wewnątrz tagu<b> do łańcucha, który podaliśmy wraz z samym tagiem. Nie jest to jednak do końca prawda, ponieważ tutaj „ chciwość kwantyfikatorów". W rezultacie zamiennik nie znajdował się w każdym tagu<b>, ale od pierwszego otwierającego znacznika do ostatniego zamykającego znacznika. Oto czym jest chciwość.

Oto jak napisać ten kod, aby zamiana odbyła się tak, jak chcemy:

$str = "Mały linia C pogrubiony wybór.";
$result_str = preg_replace("/ .*?<\/b>/i", "tutaj pogrubione_podświetlenie", $str);
echo $result_str;
?>

Zmieniliśmy tylko wyrażenie regularne po kwantyfikatorze powtórzeń „ .* "znak zapytania, który jest po prostu sprawia, że ​​kwantyfikator jest „leniwy”. Teraz wynik będzie następujący: „ Małe bold_highlight tutaj i bold_highlight tutaj. co staraliśmy się osiągnąć.

Naprawdę mam nadzieję, że rozumiesz problem. kwantyfikatory „chciwości” i zrozumieć, jak działają. A także zdałem sobie sprawę, jak można to naprawić za pomocą prostego znaku ” ? ". Ten temat jest naprawdę ważny, a ogromna liczba nowych użytkowników wyrażeń regularnych popełnia te same błędy związane z „chciwość” kwantyfikatorów powtórzeń, więc jeśli jeszcze nie zrozumiałeś do końca całego znaczenia, przeczytaj ponownie artykuł.

Podobał Ci się artykuł? Podziel się z przyjaciółmi!
Czy ten artykuł był pomocny?
tak
Nie
Dziekuję za odpowiedź!
Coś poszło nie tak i Twój głos nie został policzony.
Dziękuję Ci. Twoja wiadomość została wysłana
Znalazłeś błąd w tekście?
Wybierz, kliknij Ctrl+Enter a my to naprawimy!