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
|
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"]; $REMOTE_ADDR = $_POST["REMOTE_ADDR"]; if (isset($naam)) "; if (isset($email)) "; als (isset ($ puinhoop)) "; $i = "niet gespecificeerd"; $to=" [e-mail beveiligd] website "; 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.
- Een onbeperkt aantal formulieren verbinden op één pagina.
- Controleren van de juistheid van het invullen van de velden.
- Notificatie instellingen.
- Mogelijkheid om letters te gebruiken voor elk formulier.
- Lettertype - (als html-tags worden gebruikt)
- Verzenden naar een onbeperkt aantal adressen.
- Individuele aanpassing van elk formulier.
- Het script draait op , zonder de pagina opnieuw te laden.
- 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_btnAangezien 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:
- "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
- "naam" => array();- Een reeks instellingen voor formulierelementen (bijvoorbeeld: invoer naam = "naam" type = "tekst") die een aantal instellingen heeft.
- "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 "
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.