Formulier voor het verzenden van gegevens in PHP (POST, GET). Formuliergegevens indienen

/php/php5ru.png HTTP/1.0

: www.php5.ru

Wat u zou zien als u dit zou bekijken, flitst over het scherm png-bestand in een teksteditor.

HTML-formulieren. Methoden voor het verzenden van gegevens naar de server met behulp van een formulier

Een van de meest voorkomende toepassingen van elke serverscripttaal is verwerking HTML- formulieren. Webprogrammering omvat meestal het verwerken van verschillende gebruikersinvoer.

RNR vergemakkelijkt de taak van het verwerken en parseren van formulieren ontvangen van de browser, omdat alle noodzakelijke mogelijkheden op het laagste niveau in de taal zijn ingebouwd. Daarom hoeft de programmeur niet eens na te denken over de protocolfuncties HTTP en vraag je af hoe het verzenden en ontvangen plaatsvindt

MET HTML-formulieren die je al tegenkomt bij het bestuderen van opmaaktaal HTML.

Laten we eens kijken naar een voorbeeld van het verzenden van een bericht vanuit een formulier via e-mail.

Lijst e_mail.html. Een bericht verzenden vanuit een formulier via e-mail

Het formulier per e-mail verzenden

Klik op Reset en vul de bestelling in.


Als u deze HTML-code met een browser verwerkt, wordt een webpagina weergegeven, die te zien is op het beeldscherm:

Gebruiker klikt op een knop "Resetten" en de velden krijgen hun standaardwaarden. Het formulier wordt door de gebruiker met één klik op de knop ingevuld "Bestelling verzenden" verzonden naar Dit e-mailadres is beschermd tegen spambots. Om het te zien, moet JavaScript ingeschakeld zijn. Meestal verzendt de browser het formulier niet zelf, maar vertrouwt dit werk toe aan het e-mailprogramma dat standaard op het besturingssysteem van de computer is geïnstalleerd (bijvoorbeeld Outlook). De brief wordt verzonden in de vorm:

onderwerp: Formulier ingediend vanuit Microsoft Internet Explorer

naam = Prokhorov Viktor Sergejevitsj

value= Dit e-mailadres is beschermd tegen spambots. Om deze te kunnen bekijken, moet JavaScript zijn ingeschakeld

obj = "Richtlijnen"

De brief bestaat uit paren naam=waarde, die in volgorde uit de formuliervelden worden geselecteerd.

Laten we het volgende voorbeeld eens nader bekijken.

Lijst formulier_1.html

Voer uw naam in:

Deze code opslaan in een HTML-bestand formulier_1.html en als u het bekijkt met een browser, ziet u het HTML-formulier:

Het formulier wordt geïmplementeerd door een containertag . De tag geeft met zijn attributen aan:

Adres van het script waarnaar het formulier wordt verzonden;

Wijze van verzending en kenmerken van de gegevens in het formulier. Elementair en definitief tags definiëren de grenzen van het formulier. Hun indicatie is verplicht.

Kenmerken van containertags
(
allemaal optioneel):

? actie--een attribuut waarvan de waarde is URL-adres (volledig of relatief) van de gevraagde CGI-programma's. Dit programma verwerkt de gegevens in het formulier. Het is acceptabel om de invoer te gebruiken MAILTO:URL. In dit geval wordt het formulier per e-mail verzonden. Als attribuut actie niet specificeren, de inhoud van het formulier wordt verzonden naar URL het adres van waaruit deze webpagina is geladen, dat wil zeggen ‘naar zichzelf’. Dit is een handige afkorting, maar volgens de HTML-standaard het attribuut actie vereist.

? methode-- definieert een methode HTTP, gebruikt om formuliergegevens van de browser naar de server te verzenden. Attribuut methode kan twee betekenissen hebben: krijgen of na:

¦ krijgen- formuliergegevens verzenden in de adresbalk. Het is u misschien op verschillende websites opgevallen dat er een "?" aan het einde van de URL staat. en de volgende gegevens in het formaat parameter=waarde. Hier "parameter" komt overeen met de attribuutwaarde naam formulierelementen (zie hieronder over de tag ), A "betekenis"- attribuutinhoud waarde(het bevat bijvoorbeeld gebruikersinvoer in een tekstveld met dezelfde tag ).

Probeer bijvoorbeeld iets te zoeken in Yandex en let op de adresbalk van uw browser. Dit is de manier krijgen.

¦ na- formuliergegevens worden verzonden in de hoofdtekst van het verzoek. Als het niet helemaal duidelijk (of helemaal onduidelijk) is wat dit is, hoeft u zich geen zorgen te maken. We komen binnenkort op dit onderwerp terug.

Als attribuut methode niet gespecificeerd - impliciet "krijgen".

? enctype-- optioneel attribuut. Specificeert het inhoudstype van het formulier dat wordt gebruikt om het coderingsformaat te bepalen bij het indienen ervan. IN HTML Er worden twee mogelijke waarden voor het attribuut gedefinieerd enctype:

¦ APPLICATIE/X-WWW-FORM-URLENCODEERD(standaard).

¦ MULTIPART/FORMULIERGEGEVENS.

Label Hiermee kunt u tekstreeksen, bestandsnamen, wachtwoorden, enz. maken in de invoervelden van het formulier. geen eindtag. Kenmerken en gebruiksfuncties hangt af van hoe het wordt gebruikt.

Label - specificeert het vormelement dat door het attribuut wordt gedefinieerd type:

¦ Betekenis "tekst" specificeert een tekstinvoerveld van één regel.

¦ Betekenis "indienen" specificeert een knop die, wanneer erop wordt geklikt, het formulier naar de server verzendt.

Andere waarden zijn mogelijk (en (niet de enige tag die een formulierelement definieert), maar we zullen ze in de volgende hoofdstukken bekijken.

Dus wat gebeurt er als op de OK-knop wordt geklikt?

1. De browser kijkt naar de elementen in het formulier en maakt op basis van hun attributen naam En waarde formulier gegevens. Stel dat de naam is ingevoerd Vasya. In dit geval zijn de formuliergegevens: naam=Vasya&okbutton=OK.

2. De browser brengt een verbinding tot stand met de server en stuurt een verzoek naar de server voor het document dat in het attribuut is opgegeven actie label , met behulp van de gegevensverzendmethode die is opgegeven in het kenmerk methode(in dit geval - KRIJGEN), waarbij de formuliergegevens in het verzoek worden doorgegeven.

3. De server analyseert het ontvangen verzoek, genereert een antwoord, stuurt dit naar de browser en verbreekt de verbinding.

4. De browser geeft het document weer dat is ontvangen van de server.

Hetzelfde verzoek handmatig verzenden (met behulp van telnet) ziet er zo uit (ervan uitgaande dat de domeinnaam van de site www.voorbeeld.com).

Om de overdracht van gegevens naar de server met behulp van een formulier te organiseren, moet u een HTML-formulier implementeren waarin sitebezoekers hun informatie en PHP-code invoeren, met als doel de ontvangen gegevens op de server te accepteren en te verwerken.

Formulier voor het indienen van HTML-gegevens

Het formulier op de pagina wordt gevormd door tags ..., waarbinnen tags voor velden voor het invoeren van tekstinformatie, tags voor speciale componenten (bijvoorbeeld een keuzelijst met invoervak), tags voor een selectieveld en bestandsupload worden geplaatst.

* Voor HTML5 is het ook mogelijk om formulierveldtags niet in formuliertags te plaatsen, maar overal op de pagina. In dit geval moet u voor elk dergelijk veld het attribuut “form” specificeren om te bepalen met welk indieningsformulier het moet communiceren.

Het eenvoudigste indieningsformulier kan dus de volgende code bevatten:


Waarde A:
Waarde B:

Vormelementen en hun parameters:

action="mijnformulier.php"– het “action” attribuut bepaalt welk php-bestand de verzonden gegevens zal verwerken. In dit voorbeeld worden de gegevens naar het bestand "mijnformulier.php" verzonden, dat zich in dezelfde map bevindt als de pagina met het formulier. Als dit attribuut niet expliciet wordt opgegeven, worden de formuliergegevens naar het paginaadres van het formulier zelf verzonden.

methode = "post"– de methodeparameter bepaalt de POST- of GET-gegevensoverdrachtmethode. Meer details hierover vindt u in het artikel "Verschillen tussen de POST- en GET-methoden". Als u het attribuut niet expliciet opgeeft, wordt standaard de GET-methode gebruikt.

Tekst "Waarde A:" En "Waarde B:" alleen toegevoegd met het oog op de vormgeving en duidelijkheid van het formulier voor de gebruiker. Het is niet nodig om dit toe te voegen om gegevens over te dragen, maar om de gebruiker duidelijk te maken wat hij moet invoeren, is het de moeite waard om dit aan te geven.

Labels worden gebruikt om verschillende formulierbesturingselementen te vormen.

type=”tekst”– het attribuut "type" bepaalt het type veld. Afhankelijk van welk type is gespecificeerd, veranderen zowel het uiterlijk van het element als het doel ervan. De waarde van het attribuut "text" geeft aan dat het element in de browser wordt weergegeven als een tekstveld van één regel, waarin de gebruiker zijn eigen tekenreeks kan invoeren.

naam = "gegevens1"– het attribuut “name” geeft de naam aan, of beter gezegd de index van de gegevens in de array die door de server worden ontvangen. Dit is een vereiste parameter, waarmee de PHP-handler vervolgens toegang kan krijgen tot de doorgegeven waarde. De naam kan willekeurig worden gekozen, maar het is handiger als deze waarde een duidelijke betekenis heeft.

type = "verzenden"– label waarbij deze waarde van de parameter "type" als een knop op de pagina wordt weergegeven. In feite kunt u het doen zonder een knop op het formulier. Als het formulier bijvoorbeeld tekstvelden bevat, kunt u het formulier indienen door simpelweg op "Enter" op het toetsenbord te drukken. Maar het hebben van een knop maakt het formulier begrijpelijker.

value="Verzenden" !}– in dit geval (voor type="submit") definieert het alleen het label op de knop. Voor type="text" is dit bijvoorbeeld de tekst die in het tekstveld wordt weergegeven.

Als gevolg hiervan zal deze code er op de pagina ongeveer zo uitzien:

Waarde A:
Waarde B:

Door op de knop te klikken, worden de gegevens naar de opgegeven pagina gestuurd en als deze bestaat en correct werkt, worden de gegevens verwerkt.

Verwerking van gegevens verzonden door HTML-formulier in PHP

De op de beschreven manier verzonden gegevens worden in de superglobal arrays $_POST, $_GET en $_REQUEST geplaatst. $_POST of $_GET zal gegevens bevatten, afhankelijk van de methode die wordt gebruikt om het te verzenden. $_REQUEST bevat gegevens die via een van de opgegeven methoden zijn verzonden.

$_POST, $_GET en $_REQUEST zijn associatieve arrays waarvan de indexvelden samenvallen met de “name”-attributen van de tags . Om met gegevens in het myform.php-bestand te werken, kunt u dienovereenkomstig de waarden van de elementen van een dergelijke array aan variabelen toewijzen door de veldnaam als index op te geven:

// voor de GET-methode
$a = $_GET[ "gegevens1" ];
$b = $_GET[ "gegevens2"];

// voor de POST-methode
$a = $_POST[ "gegevens1" ];
$b = $_POST[ "gegevens2"];

// voor elke methode
$a = $_VERZOEK[ "gegevens1" ];
$b = $_VERZOEK[ "gegevens2"];

Het controleren van de invulling van formuliervelden

Soms moet u bij het ontvangen van gegevens controleren of de gebruiker een leeg formulier heeft ingediend. Je kunt hiervoor de lege functie gebruiken.

if (leeg ($_REQUEST["data1" ])) (
echo "Het veld is niet gevuld";
} anders(
echo "Het veld is gevuld";
$a = $_VERZOEK[ "gegevens1" ];
}

Meestal is deze oplossing voldoende. Als u tekst moet invoeren, is het duidelijk of deze is ingevoerd of niet. Als de gebruiker echter opzettelijk nul invoert voor berekeningsdoeleinden, zal de lege functie aangeven dat er geen waarde is. Daarom is het voor dergelijke situaties beter om de isset-functie te gebruiken. Er wordt expliciet gecontroleerd of de waarde wordt opgegeven of niet.

if (isset ($_REQUEST["data1" ])) (
echo "Het veld is gevuld";
$a = $_VERZOEK[ "gegevens1" ];
} anders(
echo "Het veld is niet gevuld";
}

HTML-formulieren. $_POST- en $_GET-arrays

HTML-formulieren. Methoden voor het verzenden van gegevens naar de server

U bent waarschijnlijk al HTML-formulieren tegengekomen:

Voer uw naam in:

Door deze code op te slaan in een HTML-bestand en deze te bekijken met uw favoriete browser, ziet u een bekend HTML-formulier:

Voer uw naam in:

Label
, met een gepaarde eindtag, stelt feitelijk het formulier in. De attributen zijn beide optioneel:

  • actie - specificeert de URL (volledig of relatief) waarnaar het formulier wordt verzonden.
  • Als dit kenmerk niet is opgegeven, sturen de meeste browsers (meer precies, alle bij mij bekende browsers) het formulier naar het huidige document, dat wil zeggen 'naar zichzelf'. Dit is een handige afkorting, maar volgens de HTML-standaard is het action-attribuut vereist.
    • methode - methode voor het indienen van het formulier. Er zijn er twee.
      GET - formuliergegevens verzenden in de adresbalk. Mogelijk hebt u op verschillende websites de aanwezigheid van een "?" aan het einde van de URL opgemerkt. en de volgende gegevens in het formaat parameter=waarde. Hier komt de “parameter” overeen met de waarde van het name-attribuut van de formulierelementen (zie hieronder over de tag ).
      ), en 'waarde' is de inhoud van het waarde-attribuut (het bevat bijvoorbeeld de invoer van de gebruiker in het tekstveld van dezelfde tag
    • Probeer bijvoorbeeld iets te zoeken in Yandex en let op de adresbalk van uw browser.
    Dit is de GET-methode.

Label POST - formuliergegevens worden verzonden in de hoofdtekst van het verzoek. Als het niet helemaal duidelijk (of helemaal onduidelijk) is wat dit is, hoeft u zich geen zorgen te maken. We komen binnenkort op dit onderwerp terug.

  • Als het method-attribuut niet is gespecificeerd, wordt uitgegaan van GET.
  • - specificeert een vormelement gedefinieerd door het type attribuut:

Andere waarden zijn mogelijk (en De waarde "tekst" specificeert een tekstinvoerveld van één regel

De waarde "verzenden" specificeert een knop die, wanneer erop wordt geklikt, het formulier naar de server verzendt

  1. (niet de enige tag die een formulierelement specificeert).
  2. Dus wat gebeurt er als we op "OK" klikken?
    De browser kijkt naar de elementen in het formulier en construeert formuliergegevens op basis van hun naam en waarde-attributen.
  3. Laten we zeggen dat de naam Vasya is ingevoerd. In dit geval zijn de formuliergegevens naam=Vasya&okbutton=OK
  4. De browser brengt een verbinding tot stand met de server en stuurt een verzoek naar de server voor het document dat is opgegeven in het actiekenmerk van de tag

, met behulp van de gegevensverzendmethode die is opgegeven in het method-attribuut (in dit geval - GET), waarbij de formuliergegevens in het verzoek worden doorgegeven.

Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n Host: www.example.com\r\n \r\n

Zoals u waarschijnlijk al geraden heeft, is het klikken op de knop Verzenden op een formulier met de verzendmethode "GET" hetzelfde als het typen van de overeenkomstige URL (met een vraagteken en formuliergegevens aan het einde) in de adresbalk van de browser:

Http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK

In feite wordt de GET-methode gebruikt wanneer u een document opvraagt ​​bij de server door simpelweg de URL in te voeren of op een link te klikken. Bij gebruik , wordt de URL eenvoudigweg toegevoegd met een vraagteken en formuliergegevens.

Misschien lijken al deze technische details en oefeningen met telnet je ongelooflijk saai en zelfs onnodig (“wat heeft PHP ermee te maken?”). Maar tevergeefs. :) Dit zijn de basisprincipes van het werken met het HTTP-protocol, die elke webprogrammeur uit zijn hoofd moet kennen, en dit is geen theoretische kennis - dit alles zal in de praktijk nuttig zijn.

Laten we nu de eerste regel van ons formulier vervangen door het volgende:

We hebben de verzendmethode opgegeven als "POST". In dit geval worden de gegevens op een iets andere manier naar de server verzonden:

Telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n Host: www.example.com\r\n Inhoudstype: application/x-www-form-urlencoded\r\ n Inhoudslengte: 41263\r\n \r\n naam=Vasya&okbutton=OK

Bij gebruik van de POST-methode worden de formuliergegevens verzonden na “twee Enters” - in de hoofdtekst van het verzoek. Alles hierboven is eigenlijk de verzoekheader (en toen we de GET-methode gebruikten, werden de formuliergegevens in de header verzonden). Om ervoor te zorgen dat de server weet bij welke byte hij moet stoppen met het lezen van de hoofdtekst van het verzoek, bevat de header de regel Content-Length; dat de formuliergegevens worden verzonden in de vorm parameter1=value1¶meter2=value2... en dat de waarden worden verzonden in de vorm van urlencode - dat wil zeggen precies hetzelfde als het gebruik van de GET-methode, maar dan in de hoofdtekst van de request - de Content-header informeert de server -Type: application/x-www-form-urlencoded .

Het voordeel van de POST-methode is dat er geen limiet is aan de lengte van de formuliergegevensregel.

Wanneer u de POST-methode gebruikt, is het niet mogelijk om het formulier te verzenden door eenvoudigweg "een link te volgen" zoals u dat met GET zou kunnen doen.

Wanneer u een POST-formulier gebruikt, kunt u in het action-attribuut na het vraagteken de parameters van het GET-formulier opgeven. De POST-methode omvat dus de GET-methode.

$_GET- en $_POST-arrays

Formulieren zijn dus de belangrijkste manier om gegevens uit te wisselen tussen een webserver en een browser, dat wil zeggen dat ze gebruikersinteractie bieden - in feite waar webprogrammering voor is.

Laten we een eenvoudig voorbeeld bekijken:



if ($_SERVER [ "REQUEST_METHOD" ] == "POST" ) (
echo "

Hallo, " . $_POST [ "naam" ] . "

!" ;
}
?>
">
Voer uw naam in:






Het formulier op de regels 8-12 bevat twee elementen: naam en okknop. Het method-attribuut specificeert de POST-methode voor het indienen van formulieren, terwijl het action-attribuut de URL specificeert waarnaar het formulier wordt verzonden, en is gevuld met de waarde van de PHP_SELF-servervariabele - het adres van het script dat momenteel wordt uitgevoerd.

- verkorte vorm voor .

Stel dat we de waarde Vasya in het naamveld hebben ingevoerd en op de knop OK hebben geklikt. In dit geval stuurt de browser een POST-verzoek naar de server. Verzoektekst: naam=Vasya&okbutton=OK . PHP vult automatisch de $_POST array in:

$_POST ["naam" ] = "Vasya"
$_POST ["okknop" ] = "OK"

In werkelijkheid wordt de waarde "Vasya" door de browser verzonden in urlencode-vorm; voor Windows-1251-codering ziet deze waarde eruit als %C2%E0%F1%FF . Maar omdat PHP automatisch de noodzakelijke decodering afhandelt, kunnen we deze functie "vergeten" - totdat we HTTP-verzoeken handmatig moeten afhandelen.

Omdat de hoofdtekst van het verzoek alleen namen en waarden specificeert, maar geen typen formulierelementen, heeft PHP geen idee of $_POST["naam"] overeenkomt met een invoerreeks, een knop of een keuzelijst. Maar over het algemeen hebben we deze informatie helemaal niet nodig. :)

Omdat we niet hoeven te weten wat de verzendknop zegt, kunnen we het naamattribuut op regel 11 verwijderen, waardoor de knopbeschrijving wordt ingekort tot . In dit geval verzendt de browser een POST-verzoek naam=Vasya.

En nu hetzelfde, maar dan voor het GET-formulier:



if (isset($_GET [ "naam" ])) (
echo "

Hallo, " . $_GET [ "naam" ] . "

!" ;
}
?>
">
Voer uw naam in:







Op regel 8 zou je net zo gemakkelijk kunnen schrijven
: GET is de standaardmethode. Deze keer verzendt de browser een GET-verzoek, wat overeenkomt met het invoeren van het adres in de adresbalk: http://site-address/script-name.php?name=Vasya.

PHP doet hetzelfde met GET-formulieren als met POST, met het verschil dat de $_GET-array is gevuld.

Het belangrijkste verschil zit in regel 4. Omdat het simpelweg invoeren van het adres in de browserregel een GET-verzoek is, is de controle of ($_SERVER["REQUEST_METHOD"] == "GET") zinloos. Daarom nemen we onze toevlucht tot de isset()-constructie, die true retourneert als de variabele is gedefinieerd (dat wil zeggen: er is een waarde aan toegewezen), en false als de variabele niet is gedefinieerd. Als het formulier is ingevuld, zoals u al heeft begrepen, kent PHP automatisch $_GET["naam"] de juiste waarde toe.

De verificatiemethode die isset() gebruikt, is universeel; deze kan ook worden gebruikt voor een POST-formulier. Bovendien heeft het de voorkeur omdat u zo kunt zien welke formuliervelden zijn ingevuld.

Een iets complexer voorbeeld.




echo "Voer een naam in!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
echo
"
;
) anders (

" ;

echo "Voor jou". $leeftijd. "jaren
" ;
}
echo "


" ;
}
?>
">
Voer uw naam in:


Vul uw geboortejaar in:







Er worden hier geen nieuwe technieken gebruikt. Zoek het uit, voer de code uit, probeer het aan te passen...

Laten we het laatste voorbeeld wijzigen, zodat de gebruiker de velden niet opnieuw hoeft in te vullen. Om dit te doen, vult u de waardekenmerken van de formulierelementen met de waarden die we zojuist hebben ingevoerd.



$name = isset($_POST ["naam"]) ? $_POST ["naam"]: "";
$year = isset($_POST [ "jaar" ]) ? $_POST ["jaar"]: "";

If (isset($_POST [ "naam" ], $_POST [ "jaar" ])) (
if ($_POST [ "naam" ] == "" ) (
echo "Voer een naam in!
" ;
) else if ($_POST [ "jaar" ]< 1900 || $_POST [ "year" ] > 2004 ) {
echo "Geef het geboortejaar op! Geldig waardenbereik: 1900..2004
"
;
) anders (
echo 'Hallo'. $_POST ["naam"] . "!
" ;
$leeftijd = 2004 - $_POST [ "jaar" ];
echo "Voor jou". $leeftijd. "jaren
" ;
}
echo "


" ;
}
?>
">
Voer uw naam in:


Vul uw geboortejaar in:







Regels 4 en 5 kunnen enigszins verwarrend zijn. Alles is heel eenvoudig: regel 4 zou als volgt kunnen worden geschreven:

if (isset($_POST ["naam"]))
$naam = $_POST ["naam"];
anders
$naam = "" ;

De vraag kan rijzen: waarom gooi je de regels 4-5 niet weg en schrijf je:

Voer uw naam in: ">

Vul uw geboortejaar in: ">

Het punt is dat als deze POST-variabelen niet zijn gedefinieerd - en dit zal het geval zijn als het formulier nog niet is ingevuld - PHP waarschuwingen zal geven over het gebruik van niet-geïnitialiseerde variabelen (en heel redelijk: met zo'n bericht kun je snel moeilijk te detecteren typefouten in de namen van variabelen vinden, en waarschuwt ook voor mogelijke “gaten” op de site). Je kunt de isset-code natuurlijk rechtstreeks in het formulier plaatsen, maar dat zal te omslachtig zijn.

Heb je het? Probeer nu de fout in de gegeven code te vinden. Nou ja, niet bepaald een vergissing, maar een fout.

htmlspecialchars()

Niet gevonden? Ik zal je een hint geven. Voer bijvoorbeeld in het veld "naam" een dubbel aanhalingsteken in en wat tekst, bijvoorbeeld "Va". Verzend het formulier en bekijk de broncode van de resulterende pagina. De vierde regel zal er ongeveer als volgt uitzien:

Voer uw naam in:

Dat wil zeggen, niets goeds. Wat als een sluwe gebruiker JavaScript-code invoert?

Om dit probleem op te lossen, moet je de functie htmlspecialchars() gebruiken, die de speciale tekens vervangt door hun HTML-weergave (bijvoorbeeld een aanhalingsteken met "):



$name = isset($_POST ["naam"]) ? htmlspecialchars ($_POST ["naam"]) : "" ;
$year = isset($_POST [ "jaar" ]) ? htmlspecialchars ($_POST ["jaar"]) : "" ;

If (isset($_POST [ "naam" ], $_POST [ "jaar" ])) (
if ($_POST [ "naam" ] == "" ) (
echo "Voer een naam in!
" ;
) else if ($_POST [ "jaar" ]< 1900 || $_POST [ "year" ] > 2004 ) {
echo "Geef het geboortejaar op! Geldig waardenbereik: 1900..2004
"
;
) anders (
echo 'Hallo'. $naam . "!
" ;
$leeftijd = 2004 - $_POST [ "jaar" ];
echo "Voor jou". $leeftijd. "jaren
" ;
}
echo "


" ;
}
?>
">
Voer uw naam in:


Vul uw geboortejaar in:







Herhaal het experiment en zorg ervoor dat de HTML-code nu correct is.

Onthoud: de functie htmlspecialchars() moet worden gebruikt wanneer de inhoud wordt weergegeven van een variabele die speciale HTML-tekens kan bevatten.

phpinfo()

De phpinfo()-functie is een van de belangrijkste in PHP. Het geeft informatie weer over PHP-instellingen, de waarden van verschillende configuratievariabelen...

Waarom vermeld ik dit in een artikel over formulieren? phpinfo() is een handig debugprogramma. phpinfo() drukt onder andere de waarden af ​​van alle $_GET-, $_POST- en $_SERVER-variabelen. Dus als een formuliervariabele verloren gaat, is de eenvoudigste manier om erachter te komen wat er mis is het gebruik van de functie phpinfo(). Om ervoor te zorgen dat de functie alleen de waarden van variabelen weergeeft (en zonder dat je door tientallen pagina's hoeft te scrollen), moet deze als volgt worden aangeroepen: phpinfo(INFO_VARIABLES); , of - wat absoluut hetzelfde is - phpinfo(32) ;.



">
Voer uw naam in:


phpinfo(32);
?>



Of bijvoorbeeld deze situatie: je wilt het IP-adres van een bezoeker achterhalen. Je herinnert je dat de corresponderende variabele is opgeslagen in de array $_SERVER, maar - pech - je bent vergeten hoe de variabele precies heet. Roep opnieuw phpinfo(32); , zoek naar uw IP-adres in het bord en vind het in de regel $_SERVER["REMOTE_ADDR"] .

Bijgewerkt 12/12/2015

Ondanks het feit dat het onderwerp van het rechtstreeks verzenden van e-mailberichten vanaf de pagina's van een site al behoorlijk afgezaagd is, concludeer ik, afgaande op de brieven die ik ontvang van bezoekers van mijn site, dat velen nog steeds kennislacunes hebben op dit gebied.

Dus in deze tutorial zullen we leren hoe we dat moeten doen formulier voor het verzenden van e-mailberichten vanaf webpagina's met controle op correcte gegevensinvoer. Die. Als een formulierveld niet is ingevuld, genereert het script een fout en wordt de bezoeker hiervan op de hoogte gesteld. U kunt een voorbeeld zien van hoe dit formulier werkt. Als u dit formulier invult en op de knop klikt: Bericht verzenden, dan ontvang ik uw bericht.

De voordelen van het op deze manier verzenden van berichten liggen voor de hand:

1. U hoeft uw e-mailadres niet op internet te 'schijnen', wat betekent dat het niet bij spammers terechtkomt.

2. Als een bezoeker u een vraag wil stellen of hem iets wil vragen, hoeft hij niet het e-mailadres te kopiëren, zijn e-mailclient te openen, een bericht te schrijven, enz. De bezoeker vult snel de benodigde gegevens in het formulier in en stuurt je een bericht.

3. Met een dergelijke organisatie van feedback van bezoekers is de kans dat het bericht bij u wordt afgeleverd bijna 100%, vooral als het e-mailadres aan uw domein is gekoppeld. Tussenliggende knooppunten zijn immers uitgesloten van een lange mailketen. Dit betekent dat de betrouwbaarheid van de postbezorging dramatisch toeneemt.

Hoe maak ik een formulier voor het verzenden van berichten?

Dergelijke scripts bestaan ​​doorgaans uit twee delen en de code bevindt zich in twee verschillende bestanden:

  • Eerste bestand- dit is het formulier zelf waarin de berichtgegevens worden ingevuld.
  • Tweede bestand- dit is een afhandelingsbestand dat gegevens ontvangt van het formulier (het eerste bestand) en deze verzendt naar het e-mailadres dat in het script is opgegeven. Maar deze delen van het script werken altijd in paren.

We plaatsen het eerste deel van het script in een apart bestand en noemen het: mail.php. Dit bestand bevat het gegevensinvoerformulier. Bestandsnaam mail.php Ik heb het voorwaardelijk opgevat, je kunt dit bestand noemen hoe je maar wilt. Dit bestand kan bijvoorbeeld een andere extensie hebben .html.

Om sitebezoekers met dit bestand te contacteren, maken ze meestal een eenvoudige link: schrijf naar de auteur van de site, stuur een bericht of iets dergelijks. Wanneer een bezoeker op zo’n link klikt, wordt hij naar een aparte pagina geleid met een formulier waarin hij gegevens (informatie) moet invullen om een ​​bericht te kunnen versturen.

Maak dus een nieuw bestand en geef het een naam: mail.php of mail.html en plak de code erin Lijst 1.

Lijst 1

Jouw naam: Uw adres: Versturen:









Gebruik het volgende formulier om een ​​bericht naar de auteur van de site te sturen:



Jouw naam:


Uw e-mail:


Jouw bericht:




Dit is het eenvoudigste formulier, bestaande uit slechts 3 velden voor gegevensinvoer. Ik heb deze velden genoemd: jouw naam, Uw e-mail, jouw bericht. Indien nodig kan het aantal velden worden vergroot.

De eerste twee velden: jouw naam, Uw e-mail, worden beschreven door tags:

Jouw naam:

maar elk van hen krijgt zijn eigen naam toegewezen, die zichzelf noemt identificatie: naam = "naam" En naam = "e-mail" overeenkomstig.

Het derde veld voor het invoeren van een bericht wordt beschreven door tags:

Jouw bericht:

Dit veld heeft een ID: naam = "puinhoop".

En natuurlijk zijn er twee knoppen: Bericht verzenden En Duidelijke vorm.

Aan de gegevens (informatie) die de bezoeker in het formulier invoert, worden de juiste identificatiegegevens toegewezen: naam, e-mail En troep, onthoud - dit is belangrijk!

Voor het ontwerpgemak is het hele formulier in een gewone tabel geplaatst, waarvan het uiterlijk kan worden ontworpen met behulp van , voor mij is dit een klasse: class="td_border", Ik presenteer het hier niet nodig, voeg het zelf toe, naar jouw smaak.

Bestandsbehandelaar.

Het tweede deel van het script bestaat uit een handlerbestand: mail2.php, op welke manier NA Alle gegevens met de bijbehorende identificatiegegevens worden verzonden: naam, e-mail En troep. Hier worden deze gegevens in variabelen geplaatst: $naam, $ e-mail, $ puinhoop.

Maak een bestand mail2.php en schrijf de code erin Lijst 2:

Lijst 2

$naam = $_POST["naam"];
$e-mail = $_POST["e-mail"];
$puinhoop = $_POST["puinhoop"];

$REMOTE_ADDR = $_POST["REMOTE_ADDR"];

if (isset ($naam))
{
$naam = substr($naam,0,20); //Mag niet meer dan 20 tekens lang zijn
als (leeg($naam))
{
echo "

Naam niet gespecificeerd!!!

";
echo "";
Uitgang;
}
}
anders
{
$naam = "niet gespecificeerd";
}

if (isset ($e-mail))
{
$e-mail = substr($e-mail,0,20); //Mag niet meer dan 20 tekens lang zijn
als (leeg($email))
{
echo "

E-mail niet gespecificeerd!!!

";
echo " Ga terug en vul het formulier correct in.";
Uitgang;
}
}
anders
{
$email = "niet gespecificeerd";
}

als (isset ($rommel))
{
$mess = substr($mess,0,1000); //Mag niet meer dan 1000 tekens bevatten
als (leeg($mess))
{
echo "

Bericht niet geschreven!!!

";
echo " Ga terug en vul het formulier correct in.";
Uitgang;
}
}
anders
{
$mess = "niet gespecificeerd";
}

$i = "niet gespecificeerd";
if ($naam == $i EN $e-mail == $i EN $mess == $i)
{
echo "Let op! Er is een fout opgetreden! Je hebt de berichtvelden niet ingevuld!";
Uitgang;
}

$to = "beheerder@site";
$onderwerp = " Bericht van de sitesite";
$message = "Naam van afzender: $naam .\nE-mailadres: $email\nBericht: $mess .\nIP-adres: $_SERVER";
mail ($to,$subject,$message,"Content-type:text/plain; charset = windows-1251 ") of print "Ik kan geen brief sturen!!!";
echo "

Bedankt voor het verzenden van uw bericht.

Dit is heel belangrijk voor mij!

Je krijgt zeker snel antwoord.";
Uitgang;
?>

Dit bestand controleert de gegevens die de bezoeker van de site in het formulier heeft ingevoerd en stuurt vervolgens een bericht naar het opgegeven e-mailadres.

Als velden leeg worden gelaten of onjuist worden ingevuld, stuurt het script een bericht terug naar de bezoeker met de specifieke reden.

Houd er rekening mee dat het bestand: mail2.php moet een extensie hebben .php , omdat het verzenden van een bericht gebeurt met behulp van de functie mail PHP.

En uiteraard moet je Hosting PHP ondersteunen. Dit geldt vooral voor gratis hosting, hoewel sinds kort ook voor gratis hosting bijna overal PHP is geïnstalleerd.

In code Lijst 2 Het is eenvoudig: corrigeer alle rood gemarkeerde waarden om aan uw wensen te voldoen, namelijk:

  • registreer de jouwe e-mailadres, waarnaar berichten worden verzonden (variabel $aan);
  • corrigeer het onderwerp van het bericht (variabel $onderwerp);
  • let op de codering ( tekenset=windows-1251). Voer de codering in die op uw site wordt gebruikt. Op het Russischtalige internet kan de codering zijn: "utf-8" of "windows-1251". Als je een fout maakt met de codering, wordt de tekst in de brief verkeerd weergegeven (gek).

Dat is alles, het enige wat u nu nog hoeft te doen is de bestanden uploaden: mail.php En mail2.php en er verschijnt een handig formulier voor het verzenden van berichten op uw website.



Reacties op dit artikel (les):

Bedankt voor de les. Het is waar wat ze zeggen: alles komt op tijd. Vandaag ging ik op internet zoeken hoe ik een contactformulier voor een website kon maken, en een onafhankelijk formulier. Ik begrijp dat deze het zal doen.

Goede les! Bedankt!

Bedankt Andrey, goede les.

Bedankt, ik denk dat het nuttig zal zijn

Savin Dmitry Aleksandrovich (SAVIN DMITRY ALEXANDROVICH) schrijft je, ik wil alles in meer detail weten over formulieren in CSS, ik weet hier weinig van: in meer detail over de actie-eigenschap, zoals ik weet, is actie een link naar het document waar het gegevensverzoek wordt verzonden of de gegevens zelf uit het formulier, of iets dergelijks.method="post" verwerkt gegevens in grotere formaten dan get, enz. Alsjeblieft, meer over de formulieren, ik heb er bijna geen idee van.

Hallo Andrey! Wat jou betreft, Ahmad.

Ik wil dus ook een “Voeg uw commentaar toe” op de site zodat bezoekers hun beoordelingen kunnen achterlaten. Welke code moet ik schrijven? Bedankt, ik vond het leuk

Knap! zeer nuttige informatie!

Het is nuttig, het is nuttig, maar het werkt niet. Na het invullen van het formulier wordt de mail2.php-lijst weergegeven

Het is nuttig, het is nuttig, maar het werkt niet. Na het invullen van het formulier wordt de mail2.php-lijst weergegeven

Alles werkt goed, alleen de knoppen zijn niet volumineus zoals die van de auteur. Kan iemand mij vertellen hoe ik volumineuze knoppen kan maken? Dank aan de auteur!

maar het werkt niet voor mij. Om precies te zijn, het werkt met de helft. De brief is verzonden, maar leeg. gegevens van mail1 gaan niet naar mail2

Komt niet naar e-mail. Wat is het addertje onder het gras? Ik begrijp niet hoe hij iets kan verzenden zonder login en wachtwoord. Is dit een mailserver? Eenvoudig formulier en dat is alles

Bedankt voor het formulier! Werken! Als het voor u niet werkt, volgt u elke stap zorgvuldig. Bij mij lukte het ook niet meteen. André, nogmaals bedankt!

Help alstublieft, ik heb het formulier ingevoegd en alles lijkt in orde te zijn, maar het bericht bereikt niet het e-mailadres dat ik heb opgegeven, hoewel er staat dat het bericht is verzonden...

Vertel me eens, hoe kan ik ervoor zorgen dat na het versturen/mislukt versturen van een brief er geen nieuw venster wordt geopend en het schrijven in het oude venster wordt gedaan?

Andrej. Ik begrijp dat de handler wordt gebeld. Ik weet nog niet zoveel van PHP. Maar dit is wat ik graag zou willen bereiken: er is maar één pagina met het e-mailformulier, namelijk Na het klikken op "Bericht verzenden" wordt er geen nieuw venster geopend, maar verandert de huidige pagina. Dat wil zeggen, zoals ik het begrijp, het is dynamisch. Ik ben er zelf nog niet achter hoe ik dit moet doen, dus vraag ik om advies.

Toffe les! Bedankt!

Bedankt. Alles werkt prima)

Er zijn geen afsluitende /p-tags in de code. Waarom?

Waarschuwing: mail(): "sendmail_from" niet ingesteld in php.ini of aangepaste header "From:" ontbreekt in E:Roomsu362571transport-online.netwwwmail.php op regel 66 Ik kan geen brief verzenden!!! Wauw - hoe wordt het?

Ik kan de codering niet achterhalen. Als u Windows-1251 invoert, is de tekst van het script in het bericht normaal, maar de tekst van het bericht zelf wordt in krokodillen naar de e-mail verzonden. en als je utf-8 plaatst - de tekst van het script in het bericht in de mail - vraagtekens, en de tekst van het bericht uit het formulier - normaal. Hoe kan ik ervoor zorgen dat beide normaal zijn?

Het werkt niet voor mij, maar de site wordt nog niet gehost. Wanneer zal ik het posten?

Alles werkt, bedankt voor het script! Vertel me alstublieft hoe ik ervoor kan zorgen dat wanneer u op de knop Verzenden klikt, er geen nieuwe pagina met een handler wordt geopend. Zodat de site op de pagina blijft waar hij was voordat hij op de verzendknop drukte?

hoe kan ik het e-mailinvoerveld hoger maken?

Als u brieven naar meerdere adressen moet sturen, voegt u eenvoudigweg de vereiste adressen toe, gescheiden door komma's, zoals deze: $to = "admin@site, [e-mailadres beveiligd], [e-mailadres beveiligd]";

Hoe kan ik ervoor zorgen dat er na het verzenden van een bericht een doorverwijzing naar een andere pagina plaatsvindt?

er is $to = "admin@site"; Vraag: of het nodig is om naar 2 adressen te sturen! een van de adressen in de vorm $to = "$email"; met andere woorden, de functionaliteit “aanbevelen aan een vriend” met duplicatie van het bericht naar mijn opgegeven e-mailadres. Bedankt.

Om de een of andere reden werkt het feedbackformulier niet voor mij, en niets ervan werkt. Doet alsof het bericht is verzonden, maar het komt niet per post aan.

Hallo! Leg eens uit waarom het niet werkt op de hosting, er staat: “Ik kan geen brief sturen.” En op localhost in Denver werkt het prima. Wat is het probleem?...

waarom werken meer dan één van mijn formulieren niet?

Hartelijk dank. Alles is heel eenvoudig en toegankelijk. Ik heb je voorbeeld gebruikt op de website gosdogovor.ru. Ik heb het ontwerp een beetje aangepast om bij mezelf en de samenstelling van de velden te passen: http://www.gosdogovor.ru/easuzcon.html. Nogmaals bedankt.

Jongens, als je een bericht probeert te verzenden vanaf je lokale server, dat wil zeggen vanaf een site die nog niet op internet is geplaatst, zal niets werken. Plaats het op een hosting, en je zult blij zijn)

Andrey, hoe kan ik ervoor zorgen dat wanneer ik op een knop druk, er een bericht met een specifieke tekst naar een specifiek adres wordt verzonden? Hulp alstublieft: [e-mailadres beveiligd]

Vrienden dus. Dit is de laatste video in het gedeelte over het leren van HTML-formulieren.

In de laatste videoles hebben we gekeken naar de verschillen tussen de GET- en POST-methoden voor het verzenden van gegevens. En we hebben een bestand gemaakt dat is ontworpen om gegevens uit een HTML-formulier te verwerken. En om uiteindelijk de studie van formulieren te voltooien, hoeven we alleen maar te leren hoe we gegevens uit het formulier kunnen verzamelen en verzenden.

In deze video zullen we het hebben over de formuliergegevenshandler, wat precies is wat nodig is om gegevens uit formuliervelden te verzamelen en deze vervolgens te verwerken. In deze video leren we niet alleen hoe u gegevens uit velden kunt verzamelen, maar ook hoe u deze per e-mail kunt verzenden. Er zullen geen speciale kenmerken zijn van gegevensverwerking en dergelijke. Voor het verzamelen en verzenden van gegevens gebruiken wij eenvoudigweg de eenvoudigste optie. Wij sturen de gegevens naar de e-mail die wij in de handler zullen aangeven. Het is de moeite waard om te onthouden dat de handler een bestand in php-indeling is. En aangezien we HTML bestuderen, zullen we het heel kort over PHP hebben. En denk eens aan een specifiek voorbeeld van het verzenden van gegevens per e-mail.

Formulierbehandelaar.

Zoals ik hierboven al zei, is dit een bestand in PHP-formaat, dat met behulp van verschillende functies, variabelen en globale arrays gegevens uit het formulier kan verzamelen en naar onze mailbox kan sturen. We zullen de eenvoudigste en meest primitieve versie van de formulierhandler beschouwen. Er wordt geen veldcontrole of iets dergelijks uitgevoerd. Het enige dat we in deze videoles gaan controleren, is of de brief met de formuliergegevens naar onze e-mail is verzonden of dat er iets mis is gegaan.

Gegevens verzenden per e-mail.

De gegevensverwerker is een vrij kleine PHP-code die alle gegevens uit de formuliervelden ontvangt, verwerkt en per e-mail naar ons verzendt.

Om formuliergegevens naar e-mail te verzenden, gebruiken we de mailfunctie. Met behulp van de functie kunnen we de e-mail specificeren waarnaar alle gegevens moeten worden verzonden, het onderwerp van de brief en het bericht zelf, dat zal bestaan ​​uit de verzamelde gegevens uit het formulier.

In eenvoudige bewoordingen. Dat staat in deze videoles. We zullen bekijken hoe u een feedbackformulier op een website kunt maken en laten werken. En wanneer een bezoeker ons iets wil schrijven, ontvangen wij zijn bericht per e-mail. Het is eigenlijk allemaal heel simpel. Ga gewoon door het gedeelte over het leren van HTML-formulieren en bekijk deze video om erachter te komen hoe u dit allemaal op uw website kunt doen.

Videoles: Formulierhandler. Gegevens verzenden per e-mail.

De HTML-map en ander materiaal kunnen en moeten worden gedownload!

In de volgende video-tutorial starten we een nieuwe sectie over het maken van tabellen in HTML. En we zullen het ontdekken