Hoe heb je de markt bezocht: PHP of HTML – wat is beter? HTML-pagina's maken met behulp van PHP.

Terwijl ik aan website-updates werkte, merkte ik mijn oude lay-out op toen ik nog nieuw was bij PHP. Rekening houdend met de opgedane ervaring, zijn de tekortkomingen van de oude lay-outmethode zichtbaar wanneer HTML PHP framet en zich er niet in bevindt.

Helaas heb ik niets interessants gevonden over dit onderwerp om te lezen hoe je het het beste kunt opmaken. Toen ik echter naar moderne lay-outcode keek, merkte ik steeds vaker dat HTML zich bijna altijd binnen php-structuren bevindt. En daar zitten aanzienlijke voordelen aan.

Laten we eens kijken naar de voordelen van HTML in PHP met behulp van het voorbeeld van header-uitvoer in WordPress.

Hieronder staat een constructie uit het volgende type code: als er gegevens in een bepaald custom field staan, dan tonen we een header met deze gegevens. Ik heb de lay-outcode in de oorspronkelijke vorm genomen, zoals voorheen. Hij zag er zo uit:

< ! -- Title -- >

< h3 class = "archive-entry-title" itemprop = "name" > < a href = " " rel = "bladwijzer" title = " !}" > ID , "name_rus" , true ) ) : ?>ID, "naam_rus", waar); ?> < / a > < / h3 >

< ! -- Title End -- >

Er zijn verschillende nadelen aan dit codeontwerp. Ten eerste is het niet visueel: alles is op één regel geschreven. Dit is met opzet gedaan, zodat er geen lege ruimtes tussen de H1-, H2- en H3-tags staan. Er is tenslotte niets goeds aan het hebben van spaties in de title-tags. Het is onmogelijk om te voorspellen, zoals in dit geval zoekmachines, heeft dit invloed op de site. Zal er zijn extra ruimtes de kracht van de titel verminderen of niet. Aangezien er geen antwoorden zijn op een dergelijke vraag, moet men van het ergste uitgaan. En schrijf daarom samen.

Anders, in vervolg op wat er is gezegd, als we de bovenstaande code visueel maken:

< ! -- Title -- >

< h3 class = "archive-entry-title" itemprop = "name" >

< a href = " " rel = "bladwijzer" title = " !}" >

ID , "name_rus" , true ) ) : ?>

ID, "naam_rus", waar); ?>

< / a >

< / h3 >

< ! -- Title End -- >

Toen bij binnenkijken HTML-browser van de paginacode in de header van de h3-tags zien we het volgende:

We hebben ook nodig dat de code gemakkelijk te lezen is tijdens het bewerken en vervolgens ook naadloos wordt weergegeven bij het laden van de site. Namelijk, zodat het er zo uitziet:

Om dit te doen, moet je PHP gebruiken en het geheel inpakken html-code erin. En we krijgen het volgende beeld php-code voor WordPress-header:

< ! -- Title -- >

U leert hoe u een lijst kunt krijgen van alle artikelen die op een site zijn gepubliceerd.

Stap 1. Voorbereiding

Allereerst moet u de bibliotheek kopiëren simpleHTMLdom, die beschikbaar is op de website

Het downloadarchief bevat meerdere bestanden, maar u heeft er maar één nodig simple_html_dom.php. Alle andere bestanden zijn voorbeelden en documentatie.

Stap 2: Basisprincipes van parseren

Deze bibliotheek is heel gemakkelijk te gebruiken, maar er zijn een paar basiszaken die u moet leren voordat u ermee aan de slag gaat.

$html = nieuwe simple_html_dom();
// Laden uit tekenreeks
$html->laden("

Hallo wereld!

");
// Bestand uploaden
$html->load_file("http://net.tutsplus.com/");

U kunt een bronobject maken door te laden HTML uit een string of uit een bestand. Laden vanuit een bestand kan worden gedaan door op te geven URL, of vanaf uw lokale bestandssysteem.

Opmerkingen: Methode laad_bestand() afgevaardigden werken PHP-functies file_get_contents. Als allow_url_fopen niet op waarde ingesteld WAAR in uw bestand php.ini, dan kunt u mogelijk niet openen verwijderde bestanden Dus. In dit geval kunt u terugkeren naar het gebruik van de CURL-bibliotheek om te laden verwijderde pagina's en lees vervolgens met behulp van de methode laden().

Toegang tot informatie

Zodra u een DOM-object heeft, kunt u ermee aan de slag gaan met behulp van de methode vinden() en het maken van collecties. Een verzameling is een groep objecten die door een selector wordt gevonden. De syntaxis lijkt sterk op jQuery.



Hallo wereld!


Wij zijn hier.






Hierin HTML-voorbeeld We gaan uitzoeken hoe we toegang kunnen krijgen tot de informatie in de tweede paragraaf, deze kunnen wijzigen en vervolgens het resultaat van de acties kunnen afdrukken.

1. # HTML maken en laden
2. include("simple_html_dom.php");
3. $html = nieuwe simple_html_dom();
4. $html->laden(“

Hallo wereld!



“);
5. # haal het element op dat de tweede alinea vertegenwoordigt
6. $element = $html->find(“p“);
7. # wijzig het
8. $element->innertext .= “en we zijn hier om te blijven.”;
9. # Uitvoer!
10. echo $html->opslaan();

Lijnen 2-4: Laad HTML uit een string zoals hierboven uitgelegd.

Lijn 6: Vind alle tags

In HTML, en stuur ze terug naar een array. De eerste alinea heeft index 0, en daaropvolgende alinea's worden dienovereenkomstig geïndexeerd.

Lijn 8: We hebben toegang tot het tweede element in onze paragraafverzameling (index 1) en voegen tekst toe aan het innertext-attribuut. Het innertext attribuut vertegenwoordigt de inhoud tussen de tags, en het outsidetext attribuut vertegenwoordigt de inhoud inclusief de tags. We kunnen de tag volledig vervangen met behulp van het buitenstetekstattribuut.

Laten we nu één regel toevoegen en de tag-klasse van onze tweede paragraaf wijzigen.

$element->class = "klasse_naam";
echo $html->opslaan();

De uiteindelijke HTML na het opslaancommando ziet er als volgt uit:



Hallo wereld!


We zijn hier en we zijn hier om te blijven.





Andere selecteurs

Nog een paar voorbeelden van selectors. Als je jQuery hebt gebruikt, zal alles je bekend voorkomen.

# haal het eerste gevonden element op met id=“foo“
$single = $html->find("#foo", 0);
# haal alle elementen op met klasse “foo“
$collection = $html->find(".foo");
# haal alle linktags op de pagina op
$collection = $html->find("a");
# haal alle linktags op die zich in de H1-tag bevinden
$collection = $html->find("h1 a");
# alles krijgen img-tags with title="himom"!}
$collection = $html->find("img");

Het eerste voorbeeld behoeft enige uitleg. Alle query's retourneren standaard verzamelingen, zelfs de ID-query, die slechts één element mag retourneren. Door echter de tweede parameter op te geven, zeggen we: “retourneer alleen het eerste element uit de verzameling.”

Dit betekent dat $enkel- een enkel element, en niet een array van elementen met één lid.

De overige voorbeelden liggen vrij voor de hand.

Documentatie

Volledige documentatie voor de bibliotheek is beschikbaar op .

Stap 3: Voorbeeld uit de echte wereld

Om de bibliotheek in actie te demonstreren, zullen we een script schrijven om de inhoud van de site net.tutsplus.com te schrappen en een lijst met titels en beschrijvingen te genereren van artikelen die op de site worden gepresenteerd..., gewoon als voorbeeld. Scrapen is een webtruc en mag niet worden gebruikt zonder toestemming van de eigenaar van de bron.

Include("simple_html_dom.php");
$artikelen = array();
get Articles("http://net.tutsplus.com/page/76/");

Laten we beginnen met het verbinden van de bibliotheek en het aanroepen van de functie getArtikelen waarmee de pagina wordt aangegeven van waaruit we willen beginnen met paren.

We zullen ook een globale array declareren om het gemakkelijker te maken om alle informatie over artikelen op één plek te verzamelen. Laten we, voordat we beginnen met parseren, eens kijken hoe het artikel op de Nettuts+ website wordt beschreven.



...


Titel




Beschrijving



Dit is het basisformaat van een bericht op de site, inclusief reacties. broncode. Waarom zijn opmerkingen belangrijk? Ze worden door de parser als knooppunten geteld.

Stap 4: Start de parseerfunctie

functie getArtikelen($page) (
globale $artikelen;
$html = nieuwe simple_html_dom();
$html->laad_bestand($page);
// ... Verder...
}

We beginnen met het declareren van een globale array, creëren nieuw voorwerp simple_html_dom en laad vervolgens de pagina voor parsering. Deze functie wordt recursief aangeroepen, dus stellen we het in als een parameter Pagina-URL.

Stap 5. Vind de informatie die we nodig hebben

1. $items = $html->find("div");
2. foreach($items als $post) (
3. # Vergeet niet om opmerkingen als knooppunten te tellen
4. $articles = array($post->children(3)->buitentekst,
5. $post->children(6)->first_child()->buitentekst);
6. }

Dit is de essentie van de functie getArtikelen. We moeten er dieper naar kijken om te begrijpen wat er gebeurt.

Lijn 1: Maak een array van elementen - tag div met de preview-klasse. We hebben nu een verzameling artikelen opgeslagen $artikelen.

Lijn 4: $ bericht verwijst nu naar een enkele div van de preview-klasse. Als we naar de originele HTML kijken, kunnen we zien dat het derde onderliggende element een tag is H1, die de titel van het artikel bevat. Wij nemen het en eigenen het toe $artikelen.

Vergeet niet om bij 0 te beginnen en rekening te houden met broncodeopmerkingen bij het bepalen van de juiste knooppuntindex.

Lijn 5: Zesde afstammeling $ bericht- Dit

. We hebben de beschrijvende tekst ervan nodig, dus gebruiken we buitentekst- de paragraaftag wordt opgenomen in de beschrijving. Een enkele vermelding in de array artikelen ziet er ongeveer zo uit:

$articles = “Artikeltitel”;
$articles = “Dit is mijn artikelbeschrijving“

Stap 6, Werken met pagina's

De eerste stap is bepalen hoe u de volgende pagina kunt vinden. Op de Nettuts+-site is het heel gemakkelijk om het paginanummer van de URL te raden, maar we moeten de link bij het parseren krijgen.

Als je naar de HTML kijkt, zul je het volgende vinden:

»

Dit is een link naar de volgende pagina en die kunnen we makkelijk per les vinden’ volgendepostslink’. Nu kan deze informatie worden gebruikt.

If($next = $html->find("a", 0)) (
$URL = $volgende->href;
$html->clear();
niet ingesteld($html);
getArtikel($URL);
}

In de eerste regel controleren we of we een referentie bij de klasse kunnen vinden volgendepostslink. Let op het gebruik van de tweede parameter in de functie vinden(). Op deze manier geven we aan dat we het eerste element (index 0) in de geretourneerde collectie willen krijgen. $volgende bevat één enkel element, geen verzameling.

Vervolgens wijzen we de HREF-link toe aan de $URL-variabele. Dit is belangrijk omdat we vervolgens het HTML-object verwijderen. Om geheugenlekken in php5 te voorkomen, moet het huidige object simple_html_dom moet worden gewist en uitgeschakeld voordat een ander object kan worden gemaakt. Als dit niet gebeurt, dan allemaal beschikbaar geheugen kan worden geabsorbeerd.

Ten slotte roepen we de functie get Articles aan met de URL volgende pagina. De recursie wordt afgebroken wanneer er geen pagina's meer zijn om te parseren.

Stap 7. Voer de resultaten uit

Eerst gaan we enkele basisstijlen installeren. Alles is volkomen willekeurig - u kunt installeren wat u wilt.

#voornaamst (
marge: 80px automatisch;
breedte:500px;
}
h1 (
lettertype: vet 40px/38px helvetica, verdana, schreefloos;
marge:0;
}
h1 een (
kleur:#600;
tekstversiering:geen;
}
P(
achtergrond: #ECECEC;
lettertype: 10px/14px verdana, schreefloos;
marge:8px 0 15px;
rand: 1px #CCC effen;
opvulling: 15px;
}
.item(
opvulling: 10px;
}

Vervolgens schrijven we een kleine PHP-functie in de pagina om de eerder opgeslagen informatie weer te geven.

foreach($artikelen als $item) (
echo "

";
echo $item;
echo $item;
echo "
";
}
?>

Het eindresultaat is een enkele HTML-pagina met alle artikelen van de Nettuts+-pagina's, te beginnen met het artikel dat is opgegeven in de eerste oproep getArtikelen().

Stap 8. Conclusie

Als je begint te parseren grote hoeveelheid pagina's (bijvoorbeeld de hele site), dan kan dit lang duren. Op een site als Nettuts+, die meer dan 86 pagina's heeft, kan het parseerproces meer dan een minuut duren.

Deze les opent het onderwerp voor u HTML-parsering. Er zijn andere DOM-manipulatietechnieken waarmee u met de xpath-selector kunt werken om elementen te vinden. Beschreven in deze les De bibliotheek is gemakkelijk te gebruiken en geweldig voor snel begin. Vergeet niet om toestemming te vragen voordat u een site scrapt.



Ik heb veel geleerd over hoe MVC-frameworks werken door rond te kijken en bestaande te bestuderen. Het lijkt erop dat elk raamwerk dat ik zie een lay-out heeft waarin elke methode in elke controller zijn eigen lay-out heeft eigen bestand sjabloon. Er zal dus een ingangspatroon, een uitgangspatroon, een register, enz. zijn. Enz.

Mijn vraag is hoe en waarom je een sjabloon voor de hele pagina in één bestand zou moeten maken. Stel dat u een inlogformulier op meer dan één pagina wilt weergeven. Zou u dan niet voor elke sjabloon die u wilt weergeven een inlogformulier moeten maken? Is dit niet in strijd met de Do Not Repeat Rules (DRY)?

De manier waarop ik het tot nu toe heb gedaan, is dat ik sjabloonletterblokken maak en deze vervolgens combineer om elke pagina te maken. Dus in plaats van zoiets als dit te doen,

$title = "Bla Bla Bla"; $user = "Jon Miller"; include "index.phtml"; !} <?php echo $title; ?>

login formulier


Ik heb het gedaan

$title = "Bla Bla Bla"; include "header.phtml"; $user = "Jon Miller"; include "user.phtml"; include "login_form.phtml"; include "footer.phtml"; header.phtml !} <?php echo $title; ?> gebruiker.phtml

login_formulier.phtml
login formulier
voettekst.phtml

Zoals altijd zou ik graag willen weten wat de juiste manier is om dit te doen, en ook het hoe en waarom... Dit lijkt in strijd te zijn met de DRY-regel.

4 antwoorden

Eén woord: organisatie. Door elk deel van de pagina te scheiden, kan elk deel afzonderlijk worden bekeken/bewerkt. Dit eenvoudige concept is erg handig. Iedereen in een team die het inlogproces wil afhandelen, kan bijvoorbeeld gemakkelijk begrijpen dat ze login_form.phtml moeten bewerken, en ze kunnen er zeker van zijn dat het bewerken van login_form.phtml minder waarschijnlijk per ongeluk andere functionaliteit zal verstoren.

De beste manier is hoe ik het doe (niet precies, maar vergelijkbaar).

$Title = "Bla Bla Bla"; $User = "Jon Miller"; $ThemeName = "MyGreenPage"; $Contents = array("User", "Login_Form"); function Include($FileName) { if (file_exists($FileName)) include $FileName; } !}

MijnGroenePagina.phtml:

<?php echo $title; ?>

Gebruiker.pcss:

/* Sommige stijlen nodig voor gebruiker */

Gebruiker.pjs:

/* Een script nodig voor de gebruiker */

Gebruiker.phtml:

Login_Form.pcss:

/* Sommige stijlen nodig voor Login_Form */

Login_Form.pjs:

/* Een script nodig voor Login_Form */

login_formulier.phtml:

login formulier

Laat me je er nogmaals aan herinneren dat dit niet is wat ik doe (dat ik OOP gebruik), dus het werkt mogelijk niet precies zoals het is en je moet het misschien bewerken.

Controleer de concepten van lay-outs en bekijk helpers. Hoewel ik gekoppeld ben aan de Zend Framework-versie van deze concepten, zouden andere MVC-frameworks (en het MVC-concept) ze ook moeten hebben.

Het basisidee is dat uw "bekijk"-pagina - bijvoorbeeld een inlogformulier - wordt opgenomen in uw site-indeling - algemene sjabloon, die op uw site wordt gebruikt. Wanneer je een andere controller aanvraagt, met een andere weergave – bijvoorbeeld een gebruikersprofiel – wordt die weergave ook in dezelfde layout opgenomen.

Om op alle pagina's zoiets als een inlogformulier op te nemen, kunt u de weergavehulp gebruiken. Deze weergavehulp kan de huidige gebruiker weergeven of een inlogformulier weergeven, afhankelijk van de inlogstatus. Weergavehelpers kunnen in de lay-out worden opgenomen of worden ingeschakeld door een specifieke controller (voorlopig MVC-structuur staat bepaalde typen weergavesegmenten toe).

De 'include'-methode in twee stappen werkt beter dan het lineair opnemen van delen (inclusief header, vervolgens inhoud en vervolgens voettekst- wat u nu doet) omdat uw sjablonen de HTML-tags niet hoeven te scheiden. De Zend-tutorial heeft een mooi visueel voorbeeld van weergavesjablonen in een lay-out.

De meest gebruikelijke manier om te creëren HTML-sjablonen Met met behulp van PHP- gebruik een van deze populaire sjablonen:

Als alternatief kunt u eenvoudig tijdelijke aanduidingen in uw HTML plaatsen die er zo uitzien<% variablename %>. Upload gewoon uw HTML-code en voer het uit reguliere expressie, zoek alle tijdelijke aanduidingen en vervang ze door de juiste variabelen.

Als alternatief kunt u uw HTML laden, parseren zoals DOM-document en verander vervolgens uw DOM. Ik heb een bibliotheek gemaakt

Kortom, methoden worden gebruikt om parameters door te geven NA En KRIJGEN.
Het belangrijkste verschil tussen de methoden NA En KRIJGEN ligt in de manier waarop informatie wordt overgedragen. In methode KRIJGEN parameters worden doorgegeven via de adresbalk ( URL), d.w.z. V HTTP-request header, terwijl je in de methode bent NA parameters worden door het lichaam doorgegeven HTTP-verzoek en worden op geen enkele manier weerspiegeld in adresbalk.

1. Knoppen – Label

Label vereist.
Parameters:
gehandicapt– blokkeert de toegang en wijziging van een element.
type– knoptype
waarde– De waarde van de knop die naar de server wordt verzonden of wordt gelezen met sprips.


Parameter GEHANDICAPT
Blokkeert de toegang en wijziging van de knop. In dit geval wordt het grijs weergegeven en kan het niet door de gebruiker worden geactiveerd. Bovendien kan een dergelijke knop niet worden gefocust door op de toets te drukken Tab, muis of andere methode. Deze knopstatus kan echter via scripts worden gewijzigd.

Parameter TYPE
Definieert het knoptype, dat het gedrag ervan op het formulier bepaalt. Door verschijning knoppen verschillende soorten verschillen op geen enkele manier, maar elke knop heeft zijn eigen functies. Standaardwaarde: knop.
Argumenten:
knopNormale knop.
opnieuw instellen– Een knop om de ingevoerde formuliergegevens te wissen en de waarden terug te zetten naar hun oorspronkelijke staat.

Verzenden – Knop voor het verzenden van formuliergegevens naar de server.

Parameter WAARDE Definieert de knopwaarde die naar de server wordt verzonden. Een paar " naam=waarde", waarbij de naam wordt gespecificeerd door de naamparameter van de tag

1.1. Knop (invoertype=knop)
1.2. Knop met afbeelding (invoertype=afbeelding)

Knoppen met afbeeldingen lijken qua werking op een knop Indienen, maar vertegenwoordigen een tekening. Om dit te doen, zetten we type=afbeelding En src="afbeelding.gif".

Wanneer de gebruiker ergens op de afbeelding klikt, wordt het bijbehorende formulier met twee extra variabelen naar de server verzonden sub_x En sub_y. Ze bevatten de coördinaten van de gebruiker die op de afbeelding klikt. Ervaren programmeurs zullen misschien opmerken dat de namen van variabelen die door de browser worden verzonden eigenlijk een punt bevatten in plaats van een onderstrepingsteken, maar PHP converteert de punt automatisch naar een onderstrepingsteken.

1.3. Knop Formulier indienen (invoertype=verzenden)

Dient om het formulier bij het script in te dienen. Wanneer u een knop maakt om een ​​formulier in te dienen, moet u 2 kenmerken opgeven: type = "verzenden" En value="Knoptekst" !}. Het naamattribuut is vereist als er niet één knop is, maar meerdere, en deze allemaal zijn gemaakt voor verschillende bewerkingen, bijvoorbeeld de knoppen “Opslaan”, “Verwijderen”, “Bewerken”, enz. Nadat u op de knop hebt geklikt, wordt aan het script de tekenreeks naam=knoptekst doorgegeven.


Geen PHP-script vereist.

1.4. Een reeks knoppen (verzenden) voor het selecteren van een actieoptie
2. Resetknop

Wanneer u op de resetknop drukt ( opnieuw instellen), worden alle formulierelementen ingesteld op de staat die is opgegeven in de standaardattributen, en wordt het formulier niet verzonden.


Geen PHP-script vereist.

3. Selectievakje

Selectievakjes bieden de gebruiker een aantal opties en maken willekeurige selectie mogelijk (geen, één of meer).

Wit
Groente
Blauw
Rood
Zwart
$go) ( echo $index." - > ".$go."
"; }; };

4. Schakelaar (radio)

Radioschakelaars bieden de gebruiker een aantal opties, maar laten er slechts één selecteren.
Voorbeeld 1.

Wit
Groente
Blauw
Rood
Zwart

Voorbeeld 2.
// eerste set knoppen
// tweede set knoppen
// derde set knoppen
\n"; ?>

5. Tekstveld (tekst)

Bij het maken van een regulier tekstveld maat maat en maximaal toegestane lengte maximale lengte karakters, type attribuut neemt de waarde over tekst. Als de parameter is opgegeven waarde, waarna het veld de waarde weergeeft die in de variabele is opgegeven. Vergeet bij het aanmaken van een veld niet de veldnaam op te geven, want... dit attribuut is vereist.

6. Wachtwoordveld

Precies hetzelfde als een tekstveld, behalve dat de door de gebruiker getypte tekens niet op het scherm worden weergegeven.

7. Verborgen tekstveld (verborgen)

Hiermee kunt u bepaalde service-informatie aan het script doorgeven zonder deze op de pagina weer te geven.

8. Dropdownlijst (selecteren)

Label . Labels Hiermee kunt u de inhoud van de lijst en de parameter bepalen waarde definieert de waarde van de tekenreeks. Indien in een label opgegeven parameter gekozen, dan wordt de rij in eerste instantie geselecteerd. De parameter size geeft aan hoeveel regels de lijst zal beslaan. Als maat gelijk aan 1 , dan is de lijst een vervolgkeuzelijst. Als attribuut is opgegeven meerdere, dan mag u meerdere elementen uit de lijst selecteren. Maar dit schema wordt praktisch niet gebruikt, en wanneer maat = 1 heeft geen zin.

Als u een vervolgkeuzelijst met een voorspelbare volgorde wilt maken. Bijvoorbeeld een lijst met jaren van 2000 tot en met 2050. Vervolgens wordt de volgende techniek gebruikt.

9. Meerregelig tekstinvoerveld (tekstgebied)

Met een tekstinvoerveld met meerdere regels kunt u niet slechts één regel, maar meerdere regels tegelijk verzenden. Indien nodig kunt u het attribuut opgeven alleen-lezen, dat het bewerken, verwijderen en wijzigen van tekst verbiedt, d.w.z. de tekst is alleen-lezen. Als het nodig is dat de tekst in eerste instantie in een meerregelig invoerveld wordt weergegeven, moet deze tussen de tags worden geplaatst .
Er is een parameter wrap– taak van regeleinden. Mogelijke waarden:
uit– schakelt regelterugloop uit;
virtueel– toont regeleinden, maar verzendt de tekst zoals deze is ingevoerd;
fysiek– regeleinden blijven in hun oorspronkelijke vorm.
Standaardtag

Om ervoor te zorgen dat een tekstveld met meerdere regels voldoet aan de HTML-opmaak (regelomloop met behulp van de tag
of
), gebruik dan de functie nl2br():

10. Knop voor het uploaden van bestanden (bladeren)

Dient voor het implementeren van het uploaden van bestanden naar de server. Wanneer u een tekstveld maakt, moet u ook het veldtype opgeven type Hoe "bestand".

Bestand uploaden:

Manieren waarop de browser met de server communiceert

Methoden geboden door het protocol HTTP, Een beetje. Dit belangrijke informatie. Er zijn geen andere manieren. In de praktijk worden er twee gebruikt:
KRIJGEN– dit is wanneer gegevens worden overgedragen in de adresbalk, bijvoorbeeld wanneer de gebruiker op een link klikt.
NA– wanneer hij op een knop op het formulier drukt.

GET-methode

Om gegevens door te geven met behulp van de methode KRIJGEN het is niet nodig om een ​​formulier op de HTML-pagina te maken (gebruik formulieren voor verzoeken met behulp van de KRIJGEN niemand houdt je tegen) - alleen een link naar het document met de toevoeging van een queryreeks, die eruit kan zien als variabele=waarde. Paren worden aaneengeschakeld met behulp van het ampersand &, en de tekenreeks wordt aan de pagina-URL toegevoegd met behulp van een vraagteken " ? ».
Maar u hoeft geen sleutel=waarde-paren te gebruiken als u slechts één variabele moet doorgeven. Om dit te doen, moet u de WAARDE (niet de naam) van de variabele na het vraagteken schrijven.
Voordeel Het op deze manier doorgeven van parameters is dat clients die de methode niet kunnen gebruiken NA(Bijvoorbeeld, zoekmachines), kunnen ze nog steeds eenvoudigweg de link volgen, parameters aan het script doorgeven en de inhoud ontvangen.
Gebrek is dat de gebruiker simpelweg door de parameters in de adresbalk te wijzigen het script op een onvoorspelbare manier kan omdraaien en dit creëert een enorm beveiligingslek, gecombineerd met ongedefinieerde variabelen en register_globals aan of iemand kan de waarde van een belangrijke variabele achterhalen (bijvoorbeeld Identiteitskaart-sessies), gewoon door naar het beeldscherm te kijken.
:
- om toegang te krijgen tot openbare pagina's met passerende parameters (verhoogde functionaliteit)
- overdracht van informatie die geen invloed heeft op het beveiligingsniveau
:
- voor toegang tot beveiligde pagina's met parameteroverdracht
- het doorgeven van informatie die van invloed is op het veiligheidsniveau
- om informatie te verzenden die niet door de gebruiker kan worden gewijzigd (sommige verzenden de tekst van SQL-query's).

POST-methode

Geef gegevens door met behulp van de methode NA Dit is alleen mogelijk via een formulier op een HTML-pagina. Belangrijkste verschil NA van KRIJGEN het feit dat de gegevens niet in de verzoekheader maar in de hoofdtekst worden verzonden, waardoor de gebruiker deze niet ziet. U kunt het alleen wijzigen door het formulier zelf te wijzigen.
Voordeel:
- grotere veiligheid en functionaliteit van aanvragen via formulieren POST-methode.
Gebrek:
- minder beschikbaarheid.
Waar moet je het voor gebruiken?:
- voor het verzenden van een grote hoeveelheid informatie (tekst, bestanden..);
- om belangrijke informatie door te geven;
- om de toegang te beperken (gebruik bijvoorbeeld alleen het formulier voor navigatie - een optie die niet voor alle robotprogramma's of contentgrabbers beschikbaar is).
Waar het niet voor gebruikt mag worden:

PHP kan een bestand accepteren dat met elke browser is gedownload. Hierdoor is het mogelijk om zowel tekst als binaire bestanden. Samen met PHP-authenticatie en functies om mee te werken bestandssysteem, je krijgt volledige controle over wie bestanden mag uploaden en over wat er met het bestand moet gebeuren nadat het is geüpload.
De bestandsuploadpagina kan worden geïmplementeerd met behulp van een speciaal formulier dat er ongeveer zo uitziet:

//Formulier voor het uploaden van bestanden

Stuur dit bestand:

In het bovenstaande voorbeeld "URL" moet worden vervangen door een link naar een PHP-script. Verborgen veld MAX_FILE_SIZE(de waarde moet worden opgegeven in bytes) moet vóór het bestandsselectieveld staan ​​en de waarde ervan is het maximum toegestane maat ontvangen bestand. Zorg er ook voor dat u in het formulier de attributen opgeeft enctype=”multipart/form-data”, anders worden de bestanden niet naar de server geüpload.
Aandacht
Optie MAX_FILE_SIZE is een browseraanbeveling, zelfs als PHP ook op deze voorwaarde zou controleren. Het omzeilen van deze beperking aan de browserzijde is vrij eenvoudig, dus u moet niet op alle bestanden vertrouwen groter formaat wordt geblokkeerd als u deze functie gebruikt. Hoe dan ook, PHP-beperking met betrekking tot maximale grootte onmogelijk om rond te komen. Voeg in ieder geval toe vormvariabele MAX_FILE_SIZE, omdat het voorkomt dat gebruikers angstig wachten tijdens het overbrengen van grote bestanden, om er vervolgens achter te komen dat het bestand te groot is en dat de overdracht feitelijk is mislukt.

Hoe definieer ik een verzoekmethode?

Direct:

Getenv("REQUEST_METHOD");

zal terugkeren KRIJGEN of NA.

Welke methode moet worden gebruikt?

Als het formulier wordt gebruikt om bepaalde informatie op te vragen, bijvoorbeeld tijdens een zoekopdracht, moet het via deze methode worden verzonden KRIJGEN. Om de pagina up-to-date te houden, kunt u er een bladwijzer voor maken en/of de link naar een vriend sturen.
Als er als gevolg van het indienen van een formulier gegevens op de server worden geschreven of gewijzigd, moet u deze via deze methode verzenden NA, en het is absoluut noodzakelijk om, na verwerking van het formulier, de browser om te leiden met behulp van de methode KRIJGEN. Ook, NA kan nodig zijn als u naar de server moet overbrengen groot volume gegevens (van KRIJGEN dit is zeer beperkt), evenals of de verzonden gegevens niet in de adresbalk mogen worden “getoond” (bijvoorbeeld bij het invoeren van een login en wachtwoord).
In ieder geval na verwerking NA U moet de browser altijd omleiden naar een pagina, zelfs dezelfde, maar zonder de formuliergegevens, zodat deze niet opnieuw worden geregistreerd wanneer de pagina wordt vernieuwd.

Hoe u gegevens rechtstreeks vanuit de hoofdtekst van een PHP-programma naar een ander bestand kunt doorgeven GET-methode en POST?

Een voorbeeld om te demonstreren dat gegevens gelijktijdig worden verzonden met behulp van de POST- en GET-methoden en een antwoord ontvangen van de server.

In dit artikel ga ik je niet vertellen waarom websites nodig zijn en wat voor geld je ermee kunt verdienen. Hier wilde ik het alleen hebben over de verschillen tussen sites die met verschillende tools zijn gemaakt.

Overweeg een gewone HTML-website

Aan de ene kant nemen we een gewone HTML-site, die in wezen statisch is. Simpel gezegd: er zijn een bepaald aantal pagina's met informatie die met elkaar zijn verbonden door links. Meestal zijn er niet heel veel pagina's op zo'n site, hoewel er uitzonderingen zijn.


En er zijn maar weinig pagina's op dergelijke sites, want wanneer zo'n site begint te groeien, wordt het erg lastig om deze te beheren. Om deze reden stopt iemand helemaal met het monitoren van de site of probeert hij een soort contentmanagementsysteem (CMS) te gebruiken. Er zijn ook mensen die programmeertalen voor WEB proberen te leren om hun website geautomatiseerd en daardoor gemakkelijker te beheren te maken.

Maar zoals de ervaring leert, kunnen slechts enkelen deze taak aan, en hun sites blijven groeien en ontwikkelen.

Hoe zit het met alle anderen?

Sommige mensen surfen op internet, anderen proberen papieren boeken te kopen. Maar zonder basiskennis van de structuur van dergelijke programmeertalen, zonder de basisprincipes van het bouwen van websites te begrijpen, eindigen dergelijke pogingen meestal op niets.

Laten we aan de andere kant eens kijken naar een site die is gemaakt met een combinatie van gewone HTML- en eenvoudige taal programmeren voor web - PHP.

Het belangrijkste verschil tussen deze site en de vorige is dat zo'n site als constructor uit blokken kan worden gemaakt. We hebben een siteheader gemaakt - deze in een apart bestand geplaatst, een linkerblok gemaakt met sitenavigatie - deze erin geplaatst apart bestand enz.

Wat levert dit ons op?

Het geeft je vrijheid. Die. Nu kunnen we deze blokken verbinden met het hoofdframework, en zelfs als we na verloop van tijd 10.000 pagina's op de site hebben en we plotseling een navigatie-element moeten veranderen, dan zal er niets ingewikkelds aan zijn. Het bestand geopend met het benodigde blok, bewerkt en dat is alles! Op alle 10.000 pagina's vond deze verandering in een oogwenk plaats.

Daarnaast allemaal nuttige informatie(artikelen, beschrijvingen van goederen en diensten, lessen, notities, enz.) van een dergelijke site kunnen worden opgeslagen in een database, die meer informatie geeft meer voordelen:

— De site neemt minder ruimte in beslag;
— Vereenvoudigd back-up gegevens;
— Het maakt het gemakkelijker om gegevens te wijzigen;
— Het wordt mogelijk om alle informatie te tellen (hoe vaak een pagina is bekeken, een bestand is gedownload, opmerkingen zijn toegevoegd, enz.);
— Je kunt er veel op de site gebruiken kant-en-klare PHP scripts;
- enz.

HTML of PHP

Als we een analogie trekken tussen HTML- en PHP-websites met auto's, dan net zoals moderne auto's comfortabeler, krachtiger en functioneler zijn geworden en tegelijkertijd minder brandstof begonnen te verbruiken dan hun tegenhangers van 50 jaar geleden, zo ook de PHP-website is lichter, functioneler, gemakkelijker te beheren en mobieler geworden dan zijn HTML-tegenstander.

Helaas is het onmogelijk om dit onderwerp volledig te behandelen in het kader van één artikel, maar ik denk dat je zelfs op basis van de punten die ik hier heb beschreven een conclusie kunt trekken over welke website je beter kunt maken om op de hoogte te blijven de tijd en krijg een fatsoenlijk rendement op de investering in de inspanningen voor het maken van sites.

Jevgeni Popov– Auteur van een 22,5 uur durende videocursus “Alle technische momenten van online zakendoen in videoformaat 2 of PHP + MySQL voor beginners”, waarin het hele proces met gesproken uitleg direct op het scherm van uw computer wordt weergegeven PHP-creatie site helemaal opnieuw.