We maken een feedbackformulier in PHP. PHP _SELF in het actiekenmerk van het formulier

Deze PHP-les behandelt de basisconcepten van de taal: het verwerken van formulieren met het verzenden van een verzoek naar webpagina's, eenvoudige PHP-besturingsconstructies bij het verwerken van formulieren, het schrijven van gegevens van een PHP-formulier naar een bestand, de datumfunctie in PHP date().

1. Laten we u eraan herinneren dat alle PHP-bestanden alleen worden getest als Denver actief is en alleen vanuit de adresbalk van de browser. Je kunt geen PHP-bestanden uitvoeren door te dubbelklikken!

2. Start Denver.

Oefening 1: Een eenvoudig formulier verwerken

In deze PHP-les gaan we kijken naar het verwerken van een formulier op een HTML-pagina en het maken van PHP-variabelen voor formuliervelden.

1. Maak een vorm zoals weergegeven in Afb. 3.1. Het is duidelijk dat wanneer u op de knop Bestelling verzenden klikt, de gegevens van het formulier worden overgedragen aan de beheerder en dat de klant het antwoord Bestelling verwerkt op het scherm ziet. Als u het moeilijk vindt om een ​​formulier te schrijven, implementeer dan de code onder de afbeelding en sla deze op in de map php_2 onder de naam forma_bob.html. We herinneren u eraan dat het adres van de formulierbehandelaar is geschreven in het action-attribuut van de formuliertag .

Figuur 3.1

2. Om ervoor te zorgen dat de gebruiker een antwoord ontvangt na het indienen van gegevens, is het noodzakelijk om een ​​formulierhandler in PHP te maken. Maak de onderstaande code aan en sla deze op in de map php_2 als zakaz.php

3. Controleer de functionaliteit van de handler. Om dit te doen, voert u het bestand forma_bob.html uit via een browser door http://localhost/php_2/forma_bob.html in de adresbalk van de browser te typen

4. Voer eventuele cijfers in de formuliervelden in en klik op de knop Bestelling verzenden. Het resultaat in afb. 3.2.

Figuur 3.2

Vormvariabelen

Het hele punt van het gebruik van een bestelformulier is om de bestelinformatie van de klant te verkrijgen die hij of zij op het toetsenbord heeft ingevoerd. Binnen een PHP-script is elk formulierveld toegankelijk als een variabele die dezelfde naam heeft als het formulierveld. In PHP zijn variabelen gemakkelijk te herkennen omdat ze beginnen met een dollarteken $.

U kunt op de volgende manieren toegang krijgen tot de inhoud van het veld TireQty:

$tireqty //korte stijl

$_POST[‘tireqty’] // medium stijl

$HTTP_POST_VARS[‘tireqty’] // lange stijl

We gebruiken de lange stijl om naar formuliervariabelen te verwijzen, maar voor het gebruiksgemak bouwen we korte versies van de applicatie. Dit is een handige en veilige manier om gegevens te manipuleren die effectief werkt in alle systemen, ongeacht de geselecteerde versies en instellingen.

Bij het kopiëren van de inhoud van de ene variabele naar de andere gebruiken we de toewijzingsoperator, die in PHP wordt aangegeven met het gelijkteken (=). De volgende coderegel maakt een nieuwe variabele aan met de naam $tireqty en verpakt de inhoud van $_POST['tireqty'] in deze nieuwe variabele:

$tireqty=$_POST['tireqty']

Omdat dit script geen uitvoer genereert, maakt het geen verschil of het boven of onder het . Meestal wordt dit blok aan het begin van het script geplaatst.

5. Wijzig in het zakaz.php-bestand de code als volgt en controleer de functionaliteit van het formulier. Het resultaat in afb. 3.3. De cijfers kunnen verschillen, afhankelijk van welke gegevens u heeft ingevoerd.

Figuur 3.3

Oefening 2: Maak een rekenmachine voor het formulier Bob's auto-onderdelen

In deze PHP-tutorial bekijken we de basis rekenkundige functies van PHP voor berekeningen.

1. Sla het bestand forma_bob.html op onder de naam forma_bob_2.html

2. Sla het bestand zakaz.php op onder de naam zakaz_2.php

3. Wijzig in het bestand forma_bob_2.html de vorm "Auto-onderdelen van Bob" zodat het er uitziet als in Fig. 3.4. Vergeet niet de handlernaam te veranderen in zakaz_2.php. Als u geen idee heeft, kunt u de onderstaande code implementeren.

Figuur 3.4

4. Maak een nieuwe formulierverwerking aan in het zakaz_2.php-bestand, gebruik makend van de kennis die is opgedaan uit eerdere lessen. De verwerking moet de volgende uitvoergegevens en voorwaarden bevatten:

1. De kosten van elk product worden bepaald door een constante. Een constante in PHP wordt gespecificeerd door de functie definiëren. Voorbeeld definiëren("POKRPRICE",10); De eerste parameter van de functie is de naam van de constante, die in hoofdletters wordt geschreven, de tweede parameter is de waarde van de constante.

2. De logische OR-bewerking wordt aangegeven met ||

3. De logische AND-bewerking wordt aangegeven met && .

4. Vergelijkingsbewerkingen: groter dan >, kleiner< , больше или равно >= , kleiner dan of gelijk

Taak: Stel dat u een vervolgkeuzelijst moet maken met de jaren van 2000 tot 2050.
Oplossing: U moet een HTML-formulier maken met een SELECT-element en een PHP-script voor het verwerken van het formulier.

Discussie:

Laten we eerst twee bestanden maken: form.html en action.php. Het form.html-bestand bevat een HTML-formulier met een vervolgkeuzelijst. Bovendien kunnen de waarden in de lijst op twee manieren worden gespecificeerd:

I. Handmatige gegevensinvoer:


2000
2001
2002
……………………………………………
2050

II. Gegevens invoeren via een lus:



Zoals je kunt zien, is het tweede voorbeeld met een lus compacter. Ik denk dat het niet nodig is om het handler-script voor dit formulier aan te bieden, omdat het op precies dezelfde manier wordt verwerkt als een tekstveld, d.w.z. lijstwaarden kunnen worden opgehaald uit een superglobale array.

$_POST

Beschrijving:




Dit html-formulier bevat een element bladeren, waarmee een dialoogvenster wordt geopend waarin u een bestand kunt selecteren dat u naar de server wilt uploaden. Wanneer u op de knop drukt"Bestand overbrengen"

, wordt het bestand doorgegeven aan het handlerscript.

Vervolgens moet u de handler action.php scripten. Voordat we de handler schrijven, moeten we beslissen in welke map we het bestand zullen kopiëren:

Opmerking

Als u erop vertrouwt dat gebruikers bestanden naar uw server uploaden, moet u uiterst voorzichtig zijn. Aanvallers kunnen ‘slechte’ code insluiten in een afbeelding of bestand en deze naar de server sturen. In dergelijke gevallen moet u het downloaden van bestanden strikt controleren.

Dit voorbeeld demonstreert het maken van een map en het kopiëren van een bestand naar die map op de server. Ik wil ook graag een voorbeeld demonstreren met het element selectievakje Ik wil ook graag een voorbeeld demonstreren met het element. Dit element verschilt enigszins van andere elementen doordat het niet een van de elementen is Ik denk dat het niet nodig is om het handler-script voor dit formulier aan te bieden, omdat het op precies dezelfde manier wordt verwerkt als een tekstveld, d.w.z. lijstwaarden kunnen worden opgehaald uit een superglobale array’a niet is geselecteerd, dan is de superglobale variabele


zal een lege waarde retourneren:
Blauw
Zwart




Wit

Als u nog andere vragen heeft of iets niet duidelijk is, welkom bij ons

Eén van de meest voorkomende taken in de praktijk is het implementeren van een feedbackformulier. Je bedoelt het schrijven van de HTML-code, het ontwerpen ervan in CSS, het creëren van een PHP-script dat de van de gebruiker ontvangen gegevens verwerkt en naar onze mail stuurt, het schrijven van een JS-script dat het formulier controleert op de geschiktheid van de ingevoerde gegevens, het beschermen ons geesteskind tegen spam, zodat onze mailbox niet instort door botaanvallen.

Alle bovenstaande punten zullen in onze review worden besproken en in detail worden becommentarieerd.

Laten we dus beginnen met het maken van een feedbackformulier:

HTML

< form method= "post" action= "mail.php" > < div class = "left" > < label for = "name" >Allereerst schrijven we HTML-code, waarin de velden worden gespecificeerd die de gebruiker zal invullen. Ze zullen in de toekomst worden geformaliseerd. De formuliercode ziet er als volgt uit:< input maxlength= "30" type= "text" name= "name" /> < label for = "phone" >Naam:< input maxlength= "30" type= "text" name= "phone" /> < label for = "mail" >Telefoon:< input maxlength= "30" type= "text" name= "mail" /> < div class = "right" > < label for = "message" >E-mail:< textarea rows= "7" cols= "50" name= "message" > < input type= "submit" value= "Bericht:" />

Versturen

En visueel ziet het er nu zo uit:

Ik ben het ermee eens, tot nu toe is alles lelijk en niets duidelijk, maar we zijn nog maar net begonnen.

  • < form method= "post" action= "mail.php" > …


    Om een ​​formulier te maken, moet u de formuliertag gebruiken. Hij is het die het begin en einde van het formulier voor de codetolk bepaalt. Het heeft, zoals elke tag, een hele reeks attributen, maar er zijn er maar twee nodig om het formulier te laten werken, dit zijn methode (de methode om een ​​verzoek naar de server te sturen, post wordt standaard gebruikt voor formulieren) en actie ( geeft het pad naar het formulierhandlerbestand aan, namelijk in Dit bestand zal een PHP-script bevatten, dat vervolgens de door de gebruiker ingevoerde waarden per e-mail naar ons stuurt. In ons geval zien we dat dit bestand mail.php heet deze bevindt zich in dezelfde sitemap als de pagina die we overwegen).
  • < input maxlength= "30" type= "text" name= "name" />


    Vervolgens hebben we input. Dit zijn eigenlijk de formuliervelden zelf waarin gebruikers de informatie zullen invoeren die we nodig hebben (type = "text" geeft aan dat dit tekst zal zijn). Het attribuut maxlength specificeert hoeveel tekens de gebruiker in een bepaald formulierveld kan invoeren. Het belangrijkste attribuut is naam: het specificeert de naam van een specifiek veld. Het is onder deze namen dat het PHP-script vervolgens de ingevoerde informatie verwerkt. Indien gewenst kunt u ook het placeholder-attribuut instellen, dat tekst in het veld weergeeft die verdwijnt wanneer de cursor erin wordt geplaatst. Een van de problemen met tijdelijke aanduiding is dat deze niet door sommige oudere browsers wordt ondersteund.
  • < label for = "name" >Naam:


    Wordt gebruikt als we tijdelijke aanduidingen hebben opgegeven. Een reguliere veldhandtekening, het for-attribuut vertelt naar welk specifiek veld deze handtekening verwijst. De waarde geeft de naam aan van het veld waarin we geïnteresseerd zijn.
  • < textarea rows= "7" cols= "50" name= "message" >


    Het is net als invoer bedoeld dat de gebruiker informatie invoert, alleen is het veld dit keer afgestemd op lange berichten. Rijen specificeert de veldgrootte in rijen, kolommen in tekens. Over het algemeen bepalen ze de hoogte en breedte van ons veld.
  • < input type= "submit" value= "Bericht:" />


    Type="submit" vertelt ons dat dit een knop is voor het indienen van een formulier, en value specificeert de tekst die in deze knop zal staan.
  • < div class = "right" >


    worden alleen gebruikt voor het verdere visuele ontwerp van het formulier.
CSS

Om ervoor te zorgen dat ons feedbackformulier er representatief uitziet, moet het worden opgemaakt. Om het volgende resultaat te krijgen:

Wij hebben deze code gebruikt:

formulier ( achtergrond: #f4f5f7; opvulling: 20px; ) formulier . links, vorm. rechts (weergave: inline-blok; verticaal uitlijnen: boven; breedte: 458px; ) formulier. rechts (opvulling-links: 20px;) label (weergave: blok; lettergrootte: 18px; tekst-uitlijning: midden; marge: 10px 0px 0px 0px; ) invoer, tekstgebied (rand: 1px effen #82858D; opvulling: 10px; lettergrootte: 16px; breedte: 436px; ) tekstgebied (hoogte: 98px; marge-onder: 32px;) input[type= "submit" ] (breedte: 200px; zwevend: rechts; rand: geen; achtergrond: #595B5F; kleur: #fff; teksttransformatie: hoofdletters;

Ik zie het nut niet in van het gedetailleerd beschrijven van CSS; ik vestig alleen uw aandacht op de belangrijkste punten:

  • Het is niet nodig om voor elke tag in het formulier een ontwerp te schrijven. Probeer uw selectors zo te bouwen dat u alle benodigde elementen in een paar regels code kunt ontwerpen.
  • Gebruik geen onnodige typetags om lijnen af ​​te breken en inkepingen te maken< br>, < p>enz. CSS met de weergave: blok en marge met opvuleigenschappen kunnen deze taken goed aan. Meer over waarom u het niet zou moeten gebruiken< br>in lay-out in het algemeen kun je lezen in het artikel Tag br, maar is het echt nodig? .
  • Gebruik geen tabellarische indeling voor formulieren. Dit is in tegenspraak met de semantiek van deze tag, en zoekmachines zijn dol op semantische code. Om de visuele structuur van het document te vormen, hebben we alleen div-tags nodig, en de weergave-eigenschappen gespecificeerd in CSS: inline-block (rangschikt blokken op een rij) en verticaal uitlijnen: top (voorkomt dat ze over het scherm verspreid worden) , zet ze op de gewenste hoogte en voila, niets overbodigs en alles bevindt zich zoals we nodig hebben.
  • Voor degenen die tijd willen besparen op het ontwerpen van websites, kan ik het gebruik van CSS-frameworks aanbevelen bij het maken van websites, vooral zelfgeschreven websites. Mijn keuze in dit opzicht is Twitter Bootstrap. U kunt een les bekijken over hoe u hiermee formulieren kunt ontwerpen.

    PHP

    Welnu, het is tijd om ons formulier te laten werken.

    We gaan naar onze hoofdmap van de site en maken daar het mail.php-bestand, waarnaar we eerder het pad hebben opgegeven in het action-attribuut van de formuliertag.

    Uiteindelijk zal zijn code er als volgt uitzien:

    Uw bericht is succesvol verzonden

    U kunt de bespreking van de HTML- en CSS-gedeelten van dit document overslaan. In de kern is dit een reguliere websitepagina die u kunt ontwerpen volgens uw wensen en behoeften. Laten we eens kijken naar het belangrijkste onderdeel: het PHP-script voor het verwerken van het formulier:

    $terug = "

    Ga terug

    " ;

    Met deze regel creëren we een link om terug te keren naar de vorige pagina. Omdat we op voorhand niet weten vanaf welke pagina de gebruiker op deze pagina komt, gebeurt dit met behulp van een kleine JS-functie. In de toekomst zullen we eenvoudigweg toegang krijgen tot deze variabele om deze weer te geven op de plaatsen die we nodig hebben.

    if (! leeg ($_POST [ "naam" ] ) en ! leeg ($_POST [ "telefoon" ] ) en ! leeg ($_POST [ "mail" ] ) en ! leeg ($_POST [ "bericht" ] ) ) ( //intern deel van de handler ) else ( echo "Om een ​​bericht te verzenden, vult u alle velden in! $back "; exit; )

    Hier voegen we een formuliercontrole toe om er zeker van te zijn dat de velden vol zijn. Zoals je al geraden hebt, schrijven we in het $_POST["name"]-gedeelte tussen aanhalingstekens de waarde van het naamattribuut van onze invoer.

    Als alle velden zijn ingevuld, begint het script de gegevens in het interne gedeelte te verwerken, maar als ten minste één veld niet is ingevuld, wordt er een bericht weergegeven op het scherm van de gebruiker waarin wordt gevraagd alle velden in te vullen. velden van het formulier echo "Om een ​​bericht te verzenden, vult u alle velden in $back" en een link om terug te keren naar de vorige pagina, die we met de allereerste regel hebben gemaakt.

    Vervolgens plakken we in het interne deel van de formulierhandler:

    $name = trim(strip_tags($_POST["naam"]));

    $phone = trim(strip_tags($_POST["telefoon"]));

    $mail = trim(strip_tags($_POST["mail"]));

    $bericht = trim(strip_tags($_POST["bericht"]));

    Daarom hebben we de door de gebruiker ingevoerde gegevens verwijderd van html-tags en extra spaties. Hierdoor kunnen we onszelf beschermen tegen het ontvangen van kwaadaardige code in berichten die naar ons worden verzonden.

    De controles kunnen ingewikkelder worden gemaakt, maar dit is naar eigen goeddunken. We hebben al minimale bescherming aan de serverzijde geïnstalleerd. De rest doen we aan de clientzijde met behulp van JS.
    Ik raad niet aan om de formulierbeveiliging aan de serverkant volledig op te geven ten gunste van JS, aangezien er, hoewel uiterst zeldzaam, unieke zijn waarbij JS is uitgeschakeld in de browser.
    Voeg na het opschonen van de tags het verzenden van een bericht toe:
    mail ("[email protected]" , "Brief van_uw_site_adres" , "Ik schreef je: " . $name . "

    Zijn nummer: " . $phone ."

  • Zijn e-mail: " . $mail ."
  • Zijn bericht: " . $message, "Content-type:text/html;charset=windows-1251" );
  • Het is deze lijn die verantwoordelijk is voor het genereren en verzenden van het bericht naar ons. Het wordt als volgt ingevuld:< br />Zijn nummer: ".$phone."< br />Zijn e-mail: ".$mail."< br />Zijn bericht: ".$message – we vormen de tekst van het bericht zelf. $name – we voegen de informatie in die de gebruiker heeft ingevuld door de velden uit de vorige stap te openen, tussen aanhalingstekens beschrijven we wat dit veld betekent, met de tag< br />We breken de lijn zodat het bericht als geheel leesbaar is.
  • Content-type:text/html;charset=windows-1251 - aan het einde is er een expliciete indicatie van het gegevenstype dat in het bericht wordt verzonden en de codering ervan.
  • BELANGRIJK!

    De codering gespecificeerd in de “head” van het document (< meta http- equiv= "Content-Type" content= "text/html; charset=windows-1251" />), moet de codering van het bericht Content-type:text/html;charset=windows-1251 en de codering van het PHP-bestand in het algemeen overeenkomen, anders worden in berichten die per e-mail worden ontvangen "gekke woorden" weergegeven in plaats van Russisch of Engelse brieven.

    Veel mensen geven niet expliciet de codering aan van het bericht dat wordt verzonden, maar bij sommige e-mailclients kan dit in de toekomst problemen veroorzaken (onleesbare e-mails worden naar de mail verzonden), dus ik raad aan om dit toch te specificeren.

    Het controleren van het formulier op de juistheid van de ingevulde gegevens

    Om ervoor te zorgen dat gebruikers niet per ongeluk velden missen en alles correct invullen, is het de moeite waard om de ingevoerde gegevens te controleren.

    Dit kan zowel in PHP aan de serverzijde als in JS aan de clientzijde. Ik gebruik de tweede optie, omdat iemand op deze manier onmiddellijk kan achterhalen wat hij verkeerd heeft gedaan en de fout kan corrigeren zonder extra pagina-overgangen te maken.

    We plakken de scriptcode in hetzelfde bestand waar we het HTML-gedeelte van het formulier hebben. Voor ons geval zal het er als volgt uitzien:

    < script>function checkForm(form) ( var naam = formulier. naam. waarde; var n = naam. match(/ ^[ A- Za- zA- Jaa- z ] * [ A- Za- zA- Ja- z ] + $/ ) ; if (! n) ( alert("De naam is verkeerd ingevoerd, corrigeer de fout" ); return false ; ) var phone = form phone(/ ^[ 0 - 9 + ] [ 0 - 9 - ] * [ 0 - 9 - ] + $/ ); (! p) ( alert("Telefoon verkeerd ingevoerd"); return false ; ) var mail = form. A- Za- z0- 9 ] [ A- Za- z0- 9 \ _- ] * [ A- Za- z0- 9 _] *@ ([ A- Za- z0- 9 ] + ([ A- Za - z0- 9 - ] * [ A- Za- z0- 9 ] + ) * \. ) + [ A- Za- z] + $/ ); , corrigeer de fout" ); return false ; ) return true ; )

    Nou, nu de gebruikelijke analyse:

    Om ervoor te zorgen dat we het formulier kunnen controleren wanneer we op de knop Verzenden klikken, voegen we de lancering van ons script toe aan de formuliertag:

    < form method= "post" action= "mail.php" onSubmit= "return checkForm(this)" >

    Laten we nu de checklist punt voor punt bekijken:


    Zoals u kunt zien, wordt voor elk van onze velden zo'n mini-cheque uitgeschreven. Ik heb de controle voor één veld in de schermafbeelding gemarkeerd met een rood vierkant; voor andere velden heeft het een vergelijkbare structuur en als het nodig is een veld toe te voegen of te verwijderen, kun je dit nu eenvoudig doen.

    Dit artikel gaat gedetailleerd in op het gebruik van de PHP _SELF-variabele.

    Wat is de PHP _SELF-variabele?

    De PHP _SELF-variabele retourneert de naam en het pad van het huidige bestand (ten opzichte van de documentroot). U kunt deze variabele gebruiken in het action-attribuut van het formulier. Er zijn ook enkele nuances die u moet kennen. Natuurlijk kunnen we deze nuances niet negeren.

    Laten we een paar voorbeelden bekijken.

    Echo $_SERVER["PHP_SELF"];

    1) Laten we aannemen dat uw php-bestand zich op het volgende adres bevindt:

    Http://www.uwserver.com/form-action.php

    In dit geval zal de PHP _SELF-variabele het volgende bevatten:

    "/form-action.php"

    2) Laten we aannemen dat uw PHP-bestand zich op dit adres bevindt:

    Http://www.uwserver.com/dir1/form-action.php

    PHP_SELF wordt:

    "/dir1/form-action.php"

    PHP _SELF in het actiekenmerk van het formulier. Waarom was ze daar nodig?

    Normaal gesproken wordt de PHP _SELF-variabele gebruikt in het action-attribuut van de formuliertag. Het actieattribuut specificeert het adres waarnaar de inhoud van het formulier na bevestiging wordt verzonden (de gebruiker klikt op de knop met type = "verzenden"). In de regel is dit dezelfde pagina waar het formulier vandaan kwam.

    Als u echter de naam van het bestand waarnaar in het formulier wordt verwezen, hernoemt, moet u de bestandsnaam in het action-attribuut hernoemen, anders zal het formulier niet werken.

    De PHP _SELF-variabele bespaart u onnodige correcties, omdat het pagina-adres automatisch wordt gegenereerd op basis van de bestandsnaam.

    Stel dat u een formulierbestand heeft met de naam form-action.php en u wilt dat het formulier na bevestiging naar hetzelfde bestand wordt verzonden. Meestal schrijven ze zo:

    Maar u kunt de PHP _SELF-variabele gebruiken in plaats van form-action.php. In dit geval ziet de code er als volgt uit: