Form validatie
Ik heb een vraagje. Op een website gebruik ik javascript (jQuery) om een formulier te valideren. Werkt prima. Ik gebruik de ‘Post’ methode om de data met een php bestand te verwerken – so far so good. Alleen, als de URI van het php bestand verstuurd wordt (dus bijv door de link rechtstreeks in de browser in te vullen) dan wordt er een lege e-mail verstuurd (de javascript validatie wordt immers overgeslagen). Dit komt natuurlijk omdat ik in het php bestand geen validatie heb – mijn kennis ervan is echt nagenoeg nul, ik schaam me er ook diep voor. Dit is het script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
//we need to get our variables first
$email_to = '[email protected]'; //the address to which the email will be sent
$email = $_POST['email'];
$name = $_POST['name'];
$tel = $_POST['tel'];
$comments = $_POST['comments'];
$message = "\nNaam = $name\nE-mailadres = $email \nTelefoonnummer = $tel \nBericht = $comments";
// Echo "Name: $FirstNam . \tEmail Address: $Email " ;
/*the $header variable is for the additional headers in the mail function,
we are asigning 2 values, first one is FROM and the second one is REPLY-TO.
That way when we want to reply the email gmail(or yahoo or hotmail...) will know
who are we replying to. */
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers = "From: ".$email ."\r\n";
$headers .= "Reply-To: $email\r\n";
if(mail($email_to, $name, $message, $headers)){
echo 'ok'; // we are sending this text to the ajax request telling it that the mail is sent..
}else{
echo 'failed';// ... or this one to tell it that it wasn't sent
}
?>
//we need to get our variables first
$email_to = '[email protected]'; //the address to which the email will be sent
$email = $_POST['email'];
$name = $_POST['name'];
$tel = $_POST['tel'];
$comments = $_POST['comments'];
$message = "\nNaam = $name\nE-mailadres = $email \nTelefoonnummer = $tel \nBericht = $comments";
// Echo "Name: $FirstNam . \tEmail Address: $Email " ;
/*the $header variable is for the additional headers in the mail function,
we are asigning 2 values, first one is FROM and the second one is REPLY-TO.
That way when we want to reply the email gmail(or yahoo or hotmail...) will know
who are we replying to. */
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers = "From: ".$email ."\r\n";
$headers .= "Reply-To: $email\r\n";
if(mail($email_to, $name, $message, $headers)){
echo 'ok'; // we are sending this text to the ajax request telling it that the mail is sent..
}else{
echo 'failed';// ... or this one to tell it that it wasn't sent
}
?>
Kan iemand me uitleggen hoe ik hier een validatie op toepas? Zodat dit er geen e-mail wordt verstuurd als de link van het php bestand rechtsstreeks (om wat voor reden dan ook) gevolgd zou worden.
Gewijzigd op 17/01/2013 21:09:26 door Kev Rama
Uhm, maar wat heb ik nu precies gedaan - natuurlijk moet ik hetzelf uitpluizen, dat begrijp ik. Maar ja, ik denk ik vraag het even goed. Okay, IF dat houdt dus in ALS de volgende conditie/voorwaarde is vervult. In dit geval selecteren we de Server en dan zeggen we dat de request methode Post moet zijn. Maar wat doet dat? Als er geen datastring wordt verstuurd via de Post methode op de site dan werkt het php script niet?
Overigens dit is de site: http://risicobesef.nl
Er zit geen cms achter. Maar in de nabije toekomst wil ik van de site een Wordpress sjabloon maken - die WordPress php tags daar kan ik wel enigsinds mee overweg - de 'Loop' en zo. Misschien kan iemand eens een kijkje nemen en in de site wroeten, of hij veilig is. Want laatst had ik dus zo'n lege e-mail ontvangen. En via de site kun je volgens mij geen leeg formulier versturen (of Javascript moet uitstaan in de browser... hmm dat moet ik eens ff uitproberen). Ik wil natuurlijk niet dat de site onveilig is.
Nou ja, in ieder geval echt bedankt Nick. Ik waardeer dit echt.
Gewijzigd op 17/01/2013 21:40:20 door Kev Rama
Mijn tip is ook om in php te kijken of de velden zijn ingevuld en of het e-mailadres correct is.
Als ik letterlijk de betekening van onderstaande code zou uitschrijven dan krijg je dit:
Als de formmethode POST is dan wordt de volgende code uitgevoerd.
Bernhard Flokstra op 18/01/2013 11:50:17:
Misschien is het ook handig om validatie in php in te bouwen. Mocht er iets mis gaan in je validatie met jQuery dan word je formulier toch nog gevalideerd.
Als ik letterlijk de betekening van onderstaande code zou uitschrijven dan krijg je dit:
Als de formmethode POST is dan wordt de volgende code uitgevoerd.
Als ik letterlijk de betekening van onderstaande code zou uitschrijven dan krijg je dit:
Als de formmethode POST is dan wordt de volgende code uitgevoerd.
En de Post methode wordt alleen uitgevoerd vanuit de website. Dus als ik de URI naar het php verwerkingsformulier in de adresbalk van de browser in tik dan is er geen Post methode gebruikt? Klopt dat?
Ja, als ik Javascript in mijn browser uitzet dan werkt de validatie (en eigenlijk het hele formulier) niet. Dus een goed idee zou inderdaad zijn om terug te vallen op php. Binnenkort maar eens wat tutorials gaan doornemen.
www.domein.nl/verwerkFormulier.php gaat dan is dit geen POST. Als je dat adres bij action neer zet in de form tag dan krijg je een POST request.
Dat klopt inderdaad. POST krijg je alleen als je een formulier verstuurd (al zijn er manieren om POST na te bootsen), niet als je naar een pagina toe surft. Dus als je naar