Webdesign en zoekmachine optimalisatie. Feedbackformulier in PHP met verzending naar e-mail

Bijgewerkt 12/12/2015

Ondanks het feit dat het onderwerp van het direct vanaf de pagina's van de site versturen van e-mailberichten al behoorlijk is afgevuurd, maar afgaand op de brieven die ik ontvang van bezoekers van mijn site, concludeer ik dat velen nog kennislacunes hebben op dit gebied.

Dus in deze tutorial zullen we leren hoe te doen een formulier voor het verzenden van e-mailberichten vanaf de pagina's van de site met een controle op de juistheid van gegevensinvoer. Die. als een veld van het formulier niet is ingevuld, zal het script een foutmelding geven en de bezoeker hiervan op de hoogte stellen. U kunt een voorbeeld zien van hoe zo'n formulier werkt. Als u dit formulier invult en op de knop klikt: stuur een bericht dan ontvang ik je bericht.

Het voordeel van het verzenden van berichten op deze manier ligt voor de hand:

1. U hoeft uw postadres niet "op internet te schitteren", waardoor het niet bij spammers terechtkomt.

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

3. Met een dergelijke organisatie van feedback van bezoekers is de kans dat een bericht bij u wordt afgeleverd bijna 100%, vooral als het postadres aan uw domein is gekoppeld. Tussenliggende nodes worden immers uitgesloten van een lange mailketen. Dit betekent dat de betrouwbaarheid van de postbezorging enorm toeneemt.

Hoe maak je een formulier om berichten te verzenden?

Dergelijke scripts bestaan ​​in de regel 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 is een handlerbestand dat gegevens van het formulier (het eerste bestand) ontvangt en naar het in het script opgegeven e-mailadres verzendt. 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 nam het onder voorbehoud, je kunt dit bestand een naam geven zoals je wilt. Dit bestand kan bijvoorbeeld een andere extensie hebben: .html.

Om sitebezoekers naar 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, komt hij op een aparte pagina met een formulier waarin je gegevens (informatie) moet invullen om een ​​bericht te kunnen versturen.

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

Aanbieding 1









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



Uw naam:


Jouw email:


Jouw bericht:




Dit is de eenvoudigste vorm, bestaande uit slechts 3 velden voor gegevensinvoer. Ik noemde deze velden: uw naam, Jouw email, Jouw bericht. Indien nodig kan het aantal velden worden uitgebreid.

Eerste twee velden: uw naam, Jouw email, worden beschreven door tags:

Uw naam:

maar elk van hen krijgt zijn eigen naam, die wordt genoemd identificatie: naam = "naam" En naam = "e-mail" respectievelijk.

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: stuur een bericht En duidelijke vorm.

De gegevens (informatie) die de bezoeker in het formulier invoert, krijgen de juiste identificatiegegevens: naam, e-mail En troep Onthoud - dit is belangrijk!

Voor het gemak van het ontwerp wordt het hele formulier in een gewone tafel geplaatst, het uiterlijk, dat kan worden ontworpen met , ik heb deze klasse: class="td_border", Ik breng het hier niet, desnoods zelf toevoegen, naar uw smaak.

bestand handler.

Het tweede deel van het script bestaat uit een handlerbestand: mail2.php, waarin de methode NA alle gegevens met bijbehorende identifiers worden overgedragen: naam, e-mail En troep. Hier worden deze gegevens in variabelen geplaatst: $naam, $e-mail, $mess.

Maak een bestand mail2.php en schrijf er code naar Aanbieding 2:

Aanbieding 2

$naam = $_POST["naam"];
$email = $_POST["e-mail"];
$mess = $_POST["mess"];

$REMOTE_ADDR = $_POST["REMOTE_ADDR"];

if (isset($naam))
{
$naam = substr($naam,0,20); //Kan niet meer dan 20 tekens bevatten
if (leeg ($naam))
{
echo "

Geen naam opgegeven!!!

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

if (isset($email))
{
$email = substr($email,0,20); //Kan niet meer dan 20 tekens bevatten
if (leeg ($email))
{
echo "

E-mail niet gespecificeerd!!!

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

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

Bericht niet geplaatst!!!

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

$i = "niet gespecificeerd";
if ($name == $i AND $email == $i AND $mess == $i)
{
echo "Let op! Er is een fout opgetreden! U heeft de berichtvelden niet ingevuld!";
Uitgang;
}

$to=" [e-mail beveiligd] website ";
$onderwerp = " Website bericht";
$message = "Naam afzender: $name .\nE-mailadres: $email\nBericht: $mess .\nIP-adres: $_SERVER";
mail ($to,$subject,$message,"Content-type:text/plain; charset = windows-1251 ") of print "Kan geen e-mail verzenden!!!";
echo "

Bedankt voor het verzenden van uw bericht.

Het is heel belangrijk voor mij!

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

Dit bestand controleert de gegevens die door de sitebezoeker in het formulier zijn ingevuld en stuurt vervolgens een bericht naar het opgegeven e-mailadres.

Als de velden leeg of onjuist zijn 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 Een bericht verzenden doe je met de functie e-mail PHP.

En natuurlijk moet je Hosting PHP ondersteunen. Dit geldt vooral voor gratis hosting, hoewel PHP de laatste tijd bijna overal is geïnstalleerd, zelfs op gratis hosting.

in code Aanbieding 2 het is eenvoudig, corrigeer alle rood gemarkeerde waarden om aan uw vereisten te voldoen, namelijk:

  • schrijf je op E-mailadres, waarnaar berichten worden verzonden (variabele $naar);
  • corrigeer het onderwerp van het bericht (variabele $onderwerp);
  • let op codering charset=windows-1251). Schrijf de codering die op uw site wordt gebruikt. Op het Russisch sprekende internet kan de codering zijn: "utf-8" of "windows-1251". Als u een fout maakt met de codering, wordt de tekst in de brief verkeerd weergegeven (krakozyabry).

Dat is eigenlijk alles, nu moeten we nog de bestanden uploaden: mail.php En mail2.php en er verschijnt een handig formulier voor het verzenden van berichten op uw site.



Reacties op dit artikel (les):

Bedankt voor de les. Het is waar wat ze zeggen dat alles op tijd komt. Vandaag ging ik op internet zoeken hoe ik een contactformulier voor de site kon maken, en nog wel een onafhankelijk. Ik begrijp dat dit zal passen.

Goede les! Bedankt!

Bedankt Andrey, goede les.

Bedankt, ik denk dat het zal helpen

Savin Dmitry Alexandrovich (SAVIN DMITRY ALEXANDROVICH) schrijft u, ik wil alles in meer detail weten over formulieren in CSS, ik weet hier weinig van: in meer detail over de actie-eigenschap, omdat ik weet dat actie een link is naar het document waar het gegevensverzoek wordt verzonden of de gegevens zelf van het formulier, of iets dergelijks.method="post" het verwerken van gegevens in grotere formaten dan krijgen enz. Graag meer details over de formulieren, ik zit er bijna in vast.

Hallo Andrey! Met vriendelijke groet, Achmed. Dus ik wil ook "Voeg je reactie toe" op de site maken zodat bezoekers hun beoordelingen kunnen achterlaten. Welke code moet ik schrijven? Bedankt, ik vond het leuk.Ahmad

Knap! erg handige tip!

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

Nuttig, dan nuttig, maar loopt niet. Na het invullen van het formulier wordt de mail2.php-lijst weergegeven

Alles werkt goed, alleen de knoppen blijken niet volumineus te zijn zoals die van de auteur. Kan iemand mij vertellen hoe ik volumetrische knoppen kan maken? Met dank aan de auteur!

maar bij mij werkt het niet. Om precies te zijn, het werkt half. de brief stuurt, maar leeg. gegevens van mail1 gaan niet naar mail2

Komt niet naar de post Wat is het addertje? Ik begrijp niet hoe hij iets stuurt zonder login en wachtwoord. Wat is een mailserver? Eenvoudige vorm en zo

Bedankt voor het formulier! Werken! Wie werkt er niet - volg zorgvuldig elke stap. Ik kreeg het ook niet goed. André, nogmaals bedankt!

Help pliz, het formulier is ingevoegd alles lijkt in orde te zijn, maar het bericht bereikt niet de mail die ik heb aangegeven, hoewel het bericht is verzonden ...

Vertel me, hoe kan ik ervoor zorgen dat er na het versturen/vergeefs versturen van een brief geen nieuw venster wordt geopend, maar het schrift in de oude staat?

Andrej. Ik begrijp dat de handler wordt gebeld. Ik weet nog niet veel van php. Maar dit is wat ik zou willen bereiken: er is maar één pagina met het e-mailformulier, d.w.z. na het klikken op "Bericht verzenden" wordt er geen nieuw venster geopend, maar verandert de huidige pagina. Dat wil zeggen, zoals ik het begrijp, is het dynamisch. Ik weet zelf niet hoe ik dit moet doen, daarom vraag ik om advies.

Andrey, vertel me alsjeblieft, het formulier werkt prima in Chrome, maar er is een probleem met de verkenner. E-mails worden niet afgeleverd en er worden geen fout- of verzendberichten weergegeven. Wat is hier aan de hand? Dank u bij voorbaat

Coole 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 "From:" header ontbreekt in E:Roomsu362571transport-online.netwwwmail.php online 66 Kan geen e-mail verzenden!!! In - hoe het afloopt Hoe te zijn ??

Ik kan de codering niet achterhalen. Als je windows-1251 voorschrijft - de tekst van het script in het bericht is normaal, de tekst van het bericht zelf komt naar de mail met een krokodil. en als u utf-8 - de tekst van het script in het bericht in de e-mail - vraagtekens plaatst, en de tekst van het bericht uit het formulier - normaal. Hoe kan ik dit en dat normaal maken?

het werkt niet voor mij, maar de site is nog niet gehost, wanneer zal ik het plaatsen?

Alles werkt, bedankt voor het script! Vertel me alstublieft hoe ik ervoor kan zorgen dat wanneer u op de verzendknop klikt, er geen nieuwe pagina met de handler wordt geopend. Wat zou de site blijven op de pagina waar deze was voordat op de verzendknop werd geklikt?

hoe het e-mailinvoerveld groter te maken?

Als u brieven naar meerdere adressen moet sturen, voegt u de benodigde adressen toe, gescheiden door komma's, zoals dit: $to = " [e-mail beveiligd] website, [e-mail beveiligd], [e-mail beveiligd]";

Hoe kan ik het omleiden naar een andere pagina nadat ik een bericht heb verzonden?

is $ naar = " [e-mail beveiligd] site"; vraag: als het nodig is om naar 2 adressen te sturen! een van de adressen in de vorm $to = "$email"; met andere woorden, de "adviseer een vriend"-functionaliteit met duplicatie van het bericht naar mijn opgegeven e-mail . Dank u.

Om de een of andere reden werkt het feedbackformulier niet voor mij, en geen van hen werkt. Het doet alsof het bericht is verzonden, maar het komt niet op de post.

Hallo! Leg uit waarom het niet werkt op de hosting, schrijft: "Ik kan geen e-mail sturen." En op lockalhost op Denver werkt het prima. Wat is het probleem?...

waarom ik meer dan één formulier heb, maar het werkt niet schrijft

Erg bedankt. Alles is heel eenvoudig en toegankelijk. Ik heb je voorbeeld gebruikt op gosdogovor.ru. Ik heb het ontwerp een beetje aangepast voor mezelf en de samenstelling van de velden: http://www.gosdogovor.ru/easuzcon.html. Nogmaals bedankt.

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

Andrey, hoe zorg je ervoor dat wanneer je op de knop klikt, er een bericht met een bepaalde tekst naar een bepaald adres wordt gestuurd? Help me alsjeblieft: [e-mail beveiligd]

Hallo vrienden! Ik wil het universele onder uw aandacht brengen script om gegevens van formulieren naar e-mail te verzenden. Het script is ideaal voor sites zoals Bestemmingspagina, visitekaartjessites, enz. Ons feedback formulier script onderscheidt zich van de massa andere scripts op internet doordat het de mogelijkheid heeft om verbinding van een onbeperkt aantal formulieren met verschillende velden op dezelfde pagina en kan e-mails verzenden naar meerdere ontvangers.

Dus. Laten we beginnen. Laten we beginnen met de mogelijkheden van het script.

  1. Een onbeperkt aantal formulieren verbinden op één pagina.
  2. Controleren van de juistheid van het invullen van de velden.
  3. Notificatie instellingen.
  4. Mogelijkheid om letters te gebruiken voor elk formulier.
  5. Lettertype - (als html-tags worden gebruikt)
  6. Verzenden naar een onbeperkt aantal adressen.
  7. Individuele aanpassing van elk formulier.
  8. Het script draait op , zonder de pagina opnieuw te laden.
  9. Bescherming tegen spambots.

Initiële setup.


Script werkt op basis van de bibliotheek, dus het eerste wat we moeten doen is deze aansluiten. Om dit te doen, raad ik aan om Google Hosted Libraries te gebruiken.

Laten we het in meer detail hebben over andere bestanden:

feedback.js- hoofdscriptbestand, verantwoordelijk voor AJAX formulier indienen.
jquery.arcticmodal.js,
jquery arcticmodal.
- de mogelijkheid bieden om formulieren in een modaal venster weer te geven.
jquery.jgrowl.js
jquery.jgrowl.css
- hiermee kunt u meldingen op de pagina weergeven (blokken in de bovenhoek van de pagina).

HTML en vereiste attributen.


Een verplicht attribuut voor alle formulierelementen is het attribuut naam=""- is nodig voor de verdere configuratie van het formulier.
Voor een knop (type = "knop"), moet u specificeren class="feedback". Ik wil ook uw aandacht vestigen op het feit dat elke html-tag met de klasse "feedback" als een knop kan werken.

Een formulier aanroepen in een modaal venster

Om een ​​formulier in een modaal venster aan te roepen, moet u eerst een actie definiëren door op een tag te klikken, bijvoorbeeld een div met de klasse modal_btn

Aangezien het formulier alleen zichtbaar zou moeten zijn in het modale venster, moet het worden verborgen door het in een div te plaatsen met het style="display: none;" attribuut, en verpakt in een paar standaard divs om het modale venster op te maken.

Dus hebben we de basisinstellingen bedacht om ons script te koppelen voor het verzenden van formulieren naar e-mail. Laten we nu naar binnen kijken en omgaan met het instellen van velden, meldingen en al het andere dat er is.

Voorbeeldinstellingen voor één formulier

Instellingen voor alle formulieren worden opgeslagen in een bestand feedback\index.php
$form["form-1"] = array("fields" => array("name" => array("title" => "Naam", "validate" => array("preg" => "%% ", "minlength" => "3", "maxlength" => "35",), "messages" => array("preg" => "Veld [ %1$s ] kan een fout bevatten", "minlength " => "De minimale lengte van het veld [ %1$s ] is kleiner dan de toegestane lengte - %2$s", "maxlength" => "De maximale lengte van het veld [ %1$s ] is groter dan de toegestane lengte - %2$s",)), "tell " => array("title" => "Telefoon", "validate" => array("preg" => "/^((8|\+ )[\- ]?)?(\(?\d( 3)\)?[\- ]?)?[\d\- ](5,10)$/", "minlength" => "5" ,), "messages" => array("preg" => "Het veld [ %1$s ] kan een fout bevatten", "minlength" => "De minimale lengte van het veld [ %1$s ] is minder dan toegestaan ​​- %2$s")))), "cfg" => array(" charset" => "utf-8", "subject" => "Subject", "title" => "Titel in de hoofdtekst van de e-mail", "ajax" => true, "validate" => true, "from_email" = >" [e-mail beveiligd]", "from_name" => "noreply", "to_email" => " [e-mail beveiligd], [e-mail beveiligd]", "to_name" => "noreply1, noreply2", "geoip" => true, "referer" => true, "type" => "html", "tpl" => true, "antispam" => "email77 ", "antispamjs" => "address77", "okay" => "Bericht verzonden - OK", "fuck" => "Bericht verzonden - ERROR", "spam" => "Spambot", "notify" => " color-modal-textbox", "usepresuf" => false)); // Volgende formulier $form["form-2"] = array("fields" => array(.....
Om instellingen voor een nieuw formulier toe te voegen, moet u een nieuwe array $form[""] maken volgens het voorbeeld van de $form["form-1"] array

Onthoud dat ik het had over het vereiste attribuut naam=""?

Een verplicht attribuut voor alle formulierelementen is het name="" attribuut - het is noodzakelijk voor de daaropvolgende configuratie van het formulier.
Dus het is tijd om te vertellen waarom hij nog steeds nodig had.
naam="" is een alfanumerieke sleutel voor de array, moet uniek zijn voor de array $form[""]

Een voorbeeld van html-code voor de duidelijkheid

Laten we nu arrays begrijpen en waar ze voor zijn.

$form["form-1"] = array();
$form["form-2"] = array(); enzovoort.
Dit zijn de belangrijkste arrays voor elke nieuwe vorm, bevatten:

  1. "velden" => array();- Een reeks instellingen voor formulierelementen.
    • "naam" => array();- Een reeks instellingen voor formulierelementen (bijvoorbeeld: invoer naam = "naam" type = "tekst") die een aantal instellingen heeft.
      • "titel" => "Uw naam"- de naam van het formulierelement, wordt weergegeven in geval van fouten of in de sjabloon
      • "valideren" => array();- een array die de validatieregels voor het formulierelement bevat
        • "preg" => "%%"- reguliere expressie
        • "minlengte" => "3"- minimale veldgrootte
        • "maxlengte" => "35"- maximale veldgrootte
        • "substr" => "35"- trim altijd tot N tekens
      • "berichten" => array();- een array met daarin validatieberichten, namelijk:
        • "preg" => "Formulierelement komt niet overeen met reguliere expressie"
        • "minlength" => "De minimumlengte van het veld [ %1$s ] is kleiner dan de toegestane lengte - %2$s"- validatiefout, sleutel (preg) komt niet overeen met de validatiesleutel
        • "maxlength" => "De maximale lengte van het veld [ %1$s ] overschrijdt de toegestane lengte - %2$s"- validatiefout, sleutel (preg) komt niet overeen met de validatiesleutel
  2. "cfg" => reeks();- Een reeks formulierinstellingen.
    • "charset" => "utf-8"- codering
    • "onderwerp" => "Onderwerp",- Onderwerp van de brief
    • "title" => "Titel in de hoofdtekst van de e-mail",- Koptekst in de hoofdtekst van de e-mail
    • "ajax" => waar,- dit is een ajax TODO-formulier (indien niet nodig, zet - false)
    • "valideren" => waar,- (true) als we formuliervalidatie op de server willen, vervang js-validatie door "ajax" => true. Indien uitgeschakeld (false) kunt u de veldinstellingen valideren niet instellen. TE DOEN
    • "from_email" => "mijne-mail",- afzender, specificeer de veldnaam (name="myemail"), en als je geen e-mail van de gebruiker nodig hebt, dan een stub [e-mail beveiligd] com
    • "from_name" => "mijnnaam",- afzender, specificeer de veldnaam (name="myname"), en als je geen gebruikersnaam nodig hebt, dan de No-reply stub
    • "naar_e-mail" => " [e-mail beveiligd]", - Ontvanger E-mail. Scheid ze met komma's om naar meerdere adressen te verzenden. Voorbeeld ("naar_email" => " [e-mail beveiligd], [e-mail beveiligd], [e-mail beveiligd]",)
    • "to_name" => "noreply1",- Naam ontvanger. Als u naar meerdere adressen verzendt, vermeld dan de namen van de ontvangers, gescheiden door komma's. Voorbeeld ("to_name" => "noreply1, noreply2, noreply3",)
    • "geop" => waar,- ontdek de locatie op TODO-type
    • "verwijzer" => onwaar,- voeg de URL toe van de pagina van waaruit het formulier is ingediend
    • "type" => "gewoon",- lettertype - gewoon, html (indien html-tags worden gebruikt)
    • "tpl" => onwaar,- gebruik een briefsjabloon. Indien waar, dan wordt het sjabloonbestand, volgens de formuliernaam (name="form-1"), uit de map gekoppeld en wordt het bestand (feedback/tpl/form-1.tpl) verwerkt, anders wordt alles worden verzonden zoals het is, elk veld op een nieuwe regel
    • "antispam" => "email77",- Anti-spam, de methode is gebaseerd op een verborgen (display:none) veld, dat automatisch alleen door de robot wordt ingevuld, waardoor hij zichzelf imiteert.
    • "antispamjs" => "adres77",- Anti-spam, de methode is gebaseerd op een verborgen (display:none) veld, aanvankelijk ingevuld, dat javascript automatisch wist bij het laden van de pagina, zelfs een slimme robot kan dit niet voorzien, en dan wordt het geblokkeerd.
    • "oké" => "Bericht aan gebruiker",- Er wordt een bericht aan de gebruiker weergegeven als het formulier succesvol is verzonden, u kunt html-tags gebruiken.
    • "fuck" => "Bericht aan gebruiker",- Bericht aan de gebruiker, weergegeven wanneer er een fout optreedt bij het indienen van het formulier, u kunt html-tags gebruiken.
    • "spam" => "Bericht aan gebruiker",- Een bericht aan de gebruiker, weergegeven als een spamrobot wordt vermoed, u kunt html-tags gebruiken.
    • "notify" => "kleur-modaal",- welk type meldingen moet worden weergegeven, tekstvak - blokken in de bovenhoek van de pagina, kleur - kleurmarkering in het formulier, modaal - modaal venster in het midden van de pagina, geen - uitschakelen. U kunt bijvoorbeeld combineren: kleur-modaal - fouten bij het invullen van velden met markering, en de tekststatus van verzenden in het modale TODO-venster
    • "usepresuf" => false- Of er nu een aangepaste toevoeging wordt gebruikt aan het onderwerp of aan de titel van de brief, bij een kleine wijziging kunt u bijvoorbeeld %%cfg.title.suffix%% specificeren, hiervoor moet een verborgen veld zijn in de vorm, voor meer details, zie de presuf() functie

E-mailsjablonen instellen

Dus. Laten we het nu hebben over het thema van onze berichten.
Om het formulier in een sjabloon te kunnen verzenden, moet u eerst het gebruik van een sjabloonbestand inschakelen in de formulierinstellingen - "tpl" => waar,
Ten tweede moet u een sjabloonbestand maken met de extensie *.tpl in de map ( feedback/tpl/), volgens de formuliernaam ( naam = "vorm-1").

Voorbeeld: ( feedback/tpl/form-1.tpl)

Koptekst in de hoofdtekst van de e-mail
%%naam Titel%% %%naam.waarde%%
%%tell.title%% %%tell.value%%

naam, vertellen enzovoort. - Dit zijn de attributen (name="") van de velden die de gebruiker invult.
titel- De naam van het formulierelement, dat is ingesteld in de array met instellingen voor formulierelementen.
waarde- De waarde van het formulierelement.

Dat is alles voor nu, maar het script is zeker niet perfect, dus opmerkingen en bugbeschrijvingen zijn welkom en zullen in toekomstige versies worden opgelost.

PS Het script is ontwikkeld door het team

Datum toegevoegd: 2011-12-01



Overweeg een voorbeeld van het verzenden van een bericht van een website naar uw e-mailadres. Waarom is dit nodig? Stel dat u een opmerkingenveld op uw pagina heeft en dat u er snel achter moet komen dat iemand een opmerking heeft achtergelaten. U zult uw site niet elke minuut bezoeken en controleren op nieuwe reacties.

Het proces van het maken van een formulier en het verzenden van een e-mail is eenvoudig. Maar er zijn enkele momenten die de stemming voor de hele dag kunnen bederven.

De eerste moeilijkheid is de stomme en verouderde standaard voor brieven in het Russisch. Hierdoor kunnen er brieven met "krakozyabry" in uw post komen. Dit probleem is vooral merkbaar bij e-mailclients zoals Windows Mail, Outlook Express, enz. Lees je brieven via de webinterface, dan is het probleem niet zo relevant. Veel mailservers zijn slim genoeg om de e-mail correct weer te geven.

Het tweede probleem zijn ongewenste e-mails. Sommige "alternatief" hoogbegaafden kunnen eindeloos op de knop drukken om brieven te versturen (flood). Ze kunnen ook bots bevatten - speciaal geschreven programma's die zelf op knoppen drukken.

Het derde probleem is de bescherming tegen kwetsbaarheden. Als je iets op de site kunt invoeren, dan is er een mogelijkheid tot hacking. U vraagt ​​bijvoorbeeld om een ​​e-mailadres in te voeren voor registratie in het veld en een hacker om een ​​speciaal voorbereid kwaadaardig script in te voeren dat uw site kan beschadigen.

Als de beschreven problemen je niet hebben afgeschrikt en je wilt berichten van de site ontvangen, ga dan verder...

Laten we beginnen met het eenvoudigste voorbeeld zonder toeters en bellen.

Laten we het bestand formulieren.php maken, dat het formulier voor het verzenden van een bericht zal bevatten.

Uw naam:

Bericht:


"; ?>

We hebben zojuist een formulier gemaakt met twee tekstvelden en een knop. Houd er rekening mee dat we de post-methode voor het formulier hebben gedefinieerd en gespecificeerd in de parameter actie het pad naar de formulierhandler is mail.php. Uiteraard kunt u uw adres en een andere naam voor het bestand opgeven.

Laten we nu een mail.php-bestand maken (in ons voorbeeld zou het in dezelfde map moeten staan).

$len) ( exit("Fout. Bericht mag niet langer zijn dan ".$len. " tekens. "); ) // u moet hier uw e-mailadres opgeven om e-mails te ontvangen $to = " [e-mail beveiligd]"; $subject="E-mail van ".$name; // convert from windows-1251 to koi8-r $subject = convert_cyr_string($subject,"w","k"); // dit is de e-mail zelf $message ="

Nieuwe reactie:

".$message_text."

"; // convert van windows-1251 naar koi8-r $message = convert_cyr_string($message,"w","k"); // e-mailheaders $headers = "Content-Type: text/html; charset=KOI8-R\r\n"; // van wie de letter $headers is .= "Van: server\r\n\r\n"; if(mail($to,$subject,$message,$ headers) ) ( echo "E-mail succesvol verzonden."; ) else ( echo "Fout. E-mail niet verzonden.";) ?>

In principe is dit voldoende om een ​​brief te sturen. Het belangrijkste is dat uw site de functie mail () mag gebruiken, aangezien sommige hosts deze uitschakelen of verschillende limieten invoeren voor het aantal verzonden e-mails.

We versterken de verdediging

In het beschreven voorbeeld is er minimale beveiliging in de vorm van een functie htmlspecialchars. Een andere vorm van bescherming kan het gebruik van sessies zijn.

Voer helemaal aan het begin van het eerste bestand het volgende in.

// initialiseer de sessie session_start();// berichten weergeven echo $er; // vorm echo "

Uw naam:
... enzovoort

De eerste regel code initialiseert de sessie, dus we beschermen ons formulier tegen overstromingen. Het zal niet mogelijk zijn om een ​​bericht van het formulier te verzenden door het naar uw lokale host te kopiëren (meer precies, dat kan, maar u moet sleutelen). Zorg ervoor dat de regel?php onmiddellijk in uw document begint zonder spaties of inspringingen, gevolgd door de functie session_start () (opmerking telt niet). Anders wordt er een fout gegenereerd.

Let op de invoertag met het type verborgen onder de naam session_id. Dit verborgen formulier stuurt de huidige sessie-ID per POST naar de handler (mail.php) om deze te matchen met de huidige sessie op de handlerpagina. Het is dit stukje code dat het formulier tijdens een sessie beschermt tegen spam of overstromingen.

Nu moeten we een vinkje toevoegen aan mail.php:

We begonnen onze code door de sessie te initialiseren voor het script voor het verzenden van berichten. De tweede regel code controleert alleen de ID die door de POST-methode is verzonden vanaf de formulierpagina met de ID die door deze pagina is geïnitialiseerd, en als ze gelijk zijn, wordt de verdere code uitgevoerd, anders stopt de functie exit() de uitvoering van het script voor het verzenden van berichten vanaf de site en geeft een bericht weer: Het verzenden van berichten kan alleen op de site worden gebruikt.

U kunt ook captcha en andere beveiligingsmethoden plaatsen. Maar daarover de volgende keer meer.

Een van de meest voorkomende taken in de praktijk is het implementeren van een feedbackformulier. Tobish schreef zijn HTML-code, ontwierp deze in CSS, creëerde een PHP-script dat de gegevens zou verwerken die van de gebruiker werden ontvangen en naar onze e-mail zou sturen, een JS-script schreef dat het formulier zou controleren op de geschiktheid van de invoergegevens, onze bescherming zou nakomelingen van spam, zodat onze mailbox niet instortte door botaanvallen.

Alle bovenstaande punten zullen in onze beoordeling worden overwogen en in detail worden becommentarieerd.

Laten we dus beginnen met het maken van een feedbackformulier:

HTML

Allereerst schrijven we HTML-code, het stelt de velden in die de gebruiker zal invullen. Ze zullen in de toekomst worden ontwikkeld. De formuliercode ziet er als volgt uit:

< form method= "post" action= "mail.php" > < div class = "left" > < label for = "name" >Naam: < input maxlength= "30" type= "text" name= "name" /> < label for = "phone" >Telefoon: < input maxlength= "30" type= "text" name= "phone" /> < label for = "mail" >E-mail: < input maxlength= "30" type= "text" name= "mail" /> < div class = "right" > < label for = "message" >Bericht: < textarea rows= "7" cols= "50" name= "message" > < input type= "submit" value= "versturen" />

En visueel ziet het er nu zo uit:

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

Overweeg de bovenstaande code in detail:

  • < 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 code-interpreter 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 aan het pad naar het formulierhandlerbestand, namelijk in dit bestand zal een PHP-script bevatten, dat vervolgens de door de gebruiker ingevoerde waarden per e-mail naar ons verzendt, in ons geval zien we dat dit bestand mail.php heet en het ligt in dezelfde sitedirectory als de pagina die we overwegen).
  • < input maxlength= "30" type= "text" name= "name" />


    Vervolgens hebben we ingangen. Dit zijn eigenlijk de formuliervelden zelf waarin gebruikers de informatie invoeren die we nodig hebben (type = "tekst" geeft aan dat het tekst zal zijn). Het maxlength attribuut specificeert hoeveel karakters de gebruiker kan invoeren in het gegeven formulierveld. Het belangrijkste attribuut is naam - het specificeert de naam van een bepaald veld. Het is door deze namen dat het PHP-script de informatie die erin komt verder 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 probleem met de tijdelijke aanduiding is dat deze niet wordt ondersteund door sommige oudere browsers.
  • < label for = "name" >Naam:


    Gebruikt als we tijdelijke aanduidingen hebben verlaten. Het gebruikelijke veldlabel, het for-attribuut, vertelt naar welk veld het gegeven label verwijst. De waarde geeft de naam aan van het interessegebied voor ons.
  • < textarea rows= "7" cols= "50" name= "message" >


    Net als de invoer is het bedoeld voor de gebruiker om informatie in te voeren, alleen is het veld dit keer aangescherpt voor lange berichten. Rijen specificeert de grootte van het veld in regels, cols in karakters. Over het algemeen bepalen ze de hoogte en breedte van ons veld.
  • < input type= "submit" value= "versturen" />


    Type="submit" vertelt ons dat dit een knop is om het formulier in te dienen, en waarde specificeert de tekst die binnen deze knop komt te staan.
  • < div class = "right" >


    alleen gebruikt voor verdere visuele vormgeving van het formulier.

css

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

We hebben deze code gebruikt:

formulier ( achtergrond: #f4f5f7; opvulling: 20px; ) formulier . links, vorm. rechts (display: inline-block; vertical-align: top; width: 458px; ) form . right ( padding- left: 20px; ) label ( display: block; font- size: 18px; text- align: center; margin: 10px 0px 0px 0px; ) input, textarea ( border: 1px solid #82858D; padding: 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 er niet van in om CSS in detail te beschrijven, ik vestig alleen je aandacht op de belangrijkste punten:

  1. Het is niet nodig om voor elke tag in het formulier een ontwerp te schrijven. Probeer je selectors zo te bouwen dat je alle elementen die je nodig hebt in een paar regels code kunt stylen.
  2. Gebruik geen extra tags per type om regels te breken en inspringingen te maken < br>, < p> enzovoort, deze taken worden perfect afgehandeld door CSS met de eigenschapweergave: blok en marge met opvulling. Meer over waarom je het niet zou moeten gebruiken < br> in lay-out kun je over het algemeen de br-tag in het artikel lezen, maar is het echt nodig? .
  3. Gebruik geen tabelindeling voor formulieren. Dit druist in tegen de semantiek van deze tag en zoekmachines houden van semantische code. Om de visuele structuur van het document te vormen, zijn div-tags voldoende voor ons, en de weergave: inline-blokeigenschappen ingesteld in CSS (rangschikt blokken op een rij) en vertical-align: top (laat ze niet over het scherm), we stellen ze op de gewenste hoogte en voila, niets overbodigs en alles is geregeld zoals we nodig hebben.

Voor degenen die tijd willen besparen bij het ontwerpen van sites, kan ik je aanraden om CSS-frameworks te gebruiken bij het maken van sites, vooral zelfgeschreven. Mijn keuze in dit opzicht is Twitter Bootstrap. Een les over het ontwerpen van formulieren met het kan worden bekeken.

PHP

Het is tijd om ons formulier werkbaar te maken.

We gaan naar onze hoofdmap van de site en maken daar het bestand mail.php aan, waarnaar we eerder het pad hebben gespecificeerd in het actieattribuut van de formuliertag.

Uiteindelijk zal zijn code er als volgt uitzien:

Uw bericht is succesvol verzonden \" javascript: history.back()\" >Ga terug

" ; if (! leeg ($_POST [ "naam" ] ) en ! leeg ($_POST [ "telefoon" ] ) en ! leeg ($_POST [ "mail" ] ) en ! leeg ($_POST [ "bericht" ] ) ) ($name = trim (strip_tags ($_POST ["naam"])) ); $phone = trim (strip_tags ($_POST ["phone"]) ); $mail = trim (strip_tags ($_POST ["mail"] ) ) ); $message = trim (strip_tags ($_POST ["message" ]) ); mail (, , "Naar jou verzonden: " . $name ."
Zijn nummer: " . $telefoon ."
Zijn mail: " . $mail . "
Zijn boodschap: "
. $bericht , ); echo "Je bericht is succesvol verzonden!
Je krijgt zo snel mogelijk antwoord
$terug"
; Uitgang; ) else ( echo ; exit ; ) ?>

U kunt de bespreking van de HTML- en CSS-gedeelten van dit document overslaan. In de kern is dit een gewone pagina van de site, die u kunt ontwerpen zoals u wilt en nodig heeft. Laten we eens kijken naar het belangrijkste onderdeel ervan - het PHP-script voor het verwerken van het formulier:

$terug = "

\" javascript: history.back()\" >Ga terug

" ;

Met deze regel creëren we een link om terug te keren naar de vorige pagina. Omdat we niet van tevoren weten vanaf welke pagina de gebruiker op deze pagina komt, gebeurt dit met een kleine JS-functie. In de toekomst zullen we gewoon naar deze variabele verwijzen 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) anders (echo "Vul alle velden in om een ​​bericht te sturen! $terug "; Uitgang; )

Hier bevestigen we de formuliercontrole voor de volheid van de velden. Zoals je al geraden hebt, schrijven we in het $_POST["name"]-gedeelte de waarde van het name-attribuut van onze invoer tussen aanhalingstekens.

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 op het scherm van de gebruiker weergegeven met het verzoek om alle velden in te vullen van het formulier echo "Om een ​​bericht te verzenden, vul alle velden in! $back" en een link om terug te keren naar de vorige pagina die we met de allereerste regel hebben gemaakt.

Plak het vervolgens in de binnenkant van de formulierhandler:

$name = trim (strip_tags ($_POST ["naam"])); $phone = trim (strip_tags ($_POST ["telefoon"]) ; $mail = trim (strip_tags ($_POST ["mail"]) ; $message = trim (strip_tags ($_POST ["bericht"]) ;

Zo hebben we gebruikersinvoer gewist van html-tags en extra spaties. Hierdoor kunnen we onszelf beschermen tegen het ontvangen van kwaadaardige code in berichten die naar ons worden verzonden.

Controles kunnen ingewikkeld zijn, maar het is aan jou. We hebben de minimale beveiliging al ingesteld aan de serverzijde. De rest doen we aan de clientzijde met JS.

Ik raad niet aan om formulierbeveiliging aan de serverkant volledig te verlaten ten gunste van JS, want hoewel het uiterst zeldzaam is, zijn er unieke mensen met JS uitgeschakeld in de browser.

Voeg na het opschonen van de tags het bericht toe dat wordt verzonden:

post ( "[email protected]", "E-mail vanaf uw_site_adres", "Schreef je: ". $naam . "
Zijn nummer: " . $telefoon ."
Zijn mail: " . $mail . "
Zijn boodschap: "
. $bericht , "Content-type:text/html;charset=windows-1251") ;

Het is deze lijn die zich bezighoudt met het vormen en verzenden van een bericht naar ons. Het wordt als volgt ingevuld:

  1. "[email protected]" - plaats hier uw e-mail tussen aanhalingstekens
  2. "E-mail van uw_site_adres" is het onderwerp van het bericht dat naar de e-mail wordt verzonden. Je kunt hier alles schrijven.
  3. "Schreef je: ".$naam." < br /> Zijn nummer is: ".$phone." < br /> Zijn mail: ".$mail." < br /> Het bericht is: ".$message - we vormen de tekst van het bericht zelf. $name - we voegen de informatie in die door de gebruiker is ingevuld door de velden van de vorige stap te openen, tussen aanhalingstekens beschrijven we wat dit veld betekent, met de label < br /> we doen een regeleinde zodat het bericht als geheel leesbaar is.
  4. 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 "kop" van het document ( < meta http- equiv= "Content-Type" content= "tekst/html; charset=windows-1251" /> ), de codering van het bericht Content-type:text/html;charset=windows-1251 en in het algemeen de codering van het PHP-bestand moet overeenkomen, anders in de berichten die per e-mail worden ontvangen, in plaats van Russische of Engelse letters, "gekke woorden " zullen worden tentoongesteld.

Veel mensen geven niet expliciet de codering van het bericht dat wordt verzonden aan, maar dit kan in de toekomst problemen veroorzaken op sommige e-mailclients (onleesbare brieven komen in de e-mail), dus ik raad u aan dit toch op te geven.

Het formulier controleren op de juistheid van de invoergegevens

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

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

De scriptcode wordt ingevoegd in hetzelfde bestand als waar we het HTML-gedeelte van het formulier hebben. Voor ons geval ziet het er als volgt uit:

< script>function checkForm(form) ( var name = form. name. value; var n = name. match(/ ^[ A- Za- zA- Za-z] * [ A- Za- zA- Za-z] + $/ ) ; als (! n) ( alert( "De naam is verkeerd ingevoerd, corrigeer de fout a.u.b.") ; retourneer onwaar ; ) var telefoon = formulier. telefoon. waarde; var p = telefoon. match(/ ^[ 0 - 9 + ] [ 0 - 9 - ] * [ 0 - 9 - ] + $/ ); if (! p) ( alert( "Telefoon verkeerd ingevoerd") ; retourneer onwaar ; ) var mail = formulier. mail. waarde; var m = e-mail. match(/ ^[ 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] + $/ ); als (! m) ( alert( "Ingevoerde e-mail is onjuist, corrigeer de fout") ; retourneer onwaar ; ) retourneer waar; )

Nou, nu de gebruikelijke analyse:

Daarom, zodat wanneer u op de verzendknop van het formulier klikt, we het hebben gevalideerd we hangen de lancering van ons script op de formuliertag:

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

Nu nemen we punt voor punt de samenstelling van de cheque:


Zoals u kunt zien, wordt voor elk van onze velden zo'n minicheque geschreven. 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 je een veld moet toevoegen of verwijderen, kun je dat nu eenvoudig doen.

In deze les leren we over de functie mail(), op het voorbeeld van het maken feedbackformulieren in PHP met de daaropvolgende verzending van de ontvangen gegevens per post.

Om dit te doen, zullen we twee bestanden maken - format.php En mail.php. Het eerste bestand bevat alleen een formulier met velden voor gebruikersinvoer. Binnen de tag formulier- knop "Versturen" en attribuut actie, die verwijst naar de handler - mail.php, het is de bedoeling dat de gegevens van het formulier worden geopend wanneer op de knop wordt gedrukt "Versturen". In ons voorbeeld worden formuliergegevens verzonden naar een webpagina met de naam "/mail.php". Deze pagina bevat een script voor PHP die de formuliergegevens verwerkt:


De formuliergegevens worden verzonden door de methode NA(verwerkt als $_POST). $_POST is een array van variabelen die via de methode aan het huidige script wordt doorgegeven NA.

Hieronder ziet u de inhoud van het bestand format.php, waarvan de velden op sommige websites door de gebruiker zelf worden ingevuld. Alle gegevensinvoervelden moeten het attribuut . hebben naam, schrijven we de waarden zelf voor, op basis van logica.




Feedbackformulier in PHP met verzending per mail


Feedbackformulier in PHP







Laat een bericht achter:
Uw naam:



E-mail:

Telefoonnummer:

Bericht:

Het tekstgebied kan een onbeperkt aantal tekens bevatten -->









Zo ziet het formulier er visueel uit in de browser.

Schrijf vervolgens de code voor het bestand mail.php. We bedenken de namen voor de variabelen zelf. IN PHP variabele begint met teken $ , gevolgd door de naam van de variabele. De tekstwaarde van de variabele staat tussen aanhalingstekens. Met behulp van variabelen wordt de inhoud van het formulier naar de e-mail van de beheerder gestuurd, simpelweg door de naam van het formulierelement te vervangen - waarde tussen vierkante haken naam.

$to=" [e-mail beveiligd]"; // e-mail van de ontvanger van de gegevens van het formulier
$tema = "PHP-contactformulier"; // onderwerp van de ontvangen e-mail
$message = "Uw naam: ".$_POST["naam"]."
";//wijs de waarde verkregen uit het formulier naam=naam toe aan de variabele
$message .= "E-mail: ".$_POST["e-mail"]."
"; // verkregen uit het formulier naam=e-mail
$message .= "Telefoonnummer: ".$_POST["phone"]."
"; // verkregen uit het formulier naam=telefoon
$message .= "Bericht: ".$_POST["bericht"]."
"; // verkregen uit het formulier naam=bericht
$headers = "MIME-versie: 1.0" . "\r\n"; // koptekst komt overeen met formaat plus teken voor nieuwe regel
$headers .= "Inhoudstype: text/html; charset=utf-8" . "\r\n"; // geeft het type inhoud aan dat wordt verzonden
mail($to, $tema, $message, $headers); // stuurt de waarden van de variabelen naar de e-mail van de ontvanger
?>

Dus de gegevens uit de array $_POST wordt doorgegeven aan de overeenkomstige variabelen en naar de e-mail verzonden met behulp van de functie mail. Laten we ons formulier invullen en op de verzendknop drukken. Vergeet niet uw e-mailadres te vermelden. De brief kwam meteen aan.