Hallo,

Zou iemand mij kunnen helpen om onderstaand script spamsafe te krijgen? Ik heb natuurlijk al wel op de site gekeken naar de spam vrij contact formulier, maar ik weet niet waar ik die tussen moet voegen.

<?php
// Vul hier uw eigen e-mail adres in.
$ontvanger = "[email protected]";
// Deze code haalt de informatie uit het formulier.
$naam = $_POST['naam'];
$email = $_POST['email'];
$onderwerp = $_POST['onderwerp'];
$bericht = $_POST['bericht'];
// Dit is voor het e-mail programma dat je kunt zie van wie de mail afkomstig is en dat
// je kunt re- playen op de mail.
$verzender = "From: ".$naam." <".$email.">";
// Dit stukje code verzend het script
mail($ontvanger,$onderwerp,$bericht,$verzender);
// Vul je de link in.
$link = "index.html";
// Dit redirect je naar een andere pagina.
echo "<meta http-equiv='refresh' content='0; url=$link'>";
?>

En de juiste oplossing, maar waar hoortie? Ik zou je erg dankbaar zijn om mij te leren op welke plek ik het moet tussenvoegen!

<?
$name = stripslashes($_POST["name"]);
$email = stripslashes($_POST["email"]);

if(isEmail($email)) // Merk op dat een 'goed' emailadres zowiezo nooit een [enter] of quote kan bevatten
{
$header = "From: \"" . protectMailHeaders($name) . "\" <" . $email . ">";
}
else // Fout afhandelen
{
exit("Ongeldig emailadres");
}

function protectMailHeaders($string)
{
$string = str_replace("\n", "", $string); // Verwijder \n
$string = str_replace("\r", "", $string); // Verwijder \r
$string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Slashes van quotes

return $string;
}

function isEmail($string)
{
$result = false;

if($string != "")
{
$expr = "/^([a-zA-Z0-9]){1,}(([a-zA-Z0-9\-_])|(([\.]){1,1}
-opmaakbreak-
([a-zA-Z0-9]){1,})){0,}([@]){1,1}([a-zA-Z0-9]){1,}
-opmaakbreak-
(([a-zA-Z0-9\-_])|(([\.]){1,1}([a-zA-Z0-9]){1,})){0,}
-opmaakbreak-
([\.]){1,1}([a-zA-Z0-9]){2,4}$/";
if(preg_match($expr, $string)) // voldoet aan expressie
{
$result = true;
}
}

return $result;
}

?>
Lastig en wat betreft mijn vraag wat is hierop het antwoord?

Voor wat betreft het veld onderwerp een OR erin zetten.
Dus wanneer het ene of het andere wordt gedaan?
Mijn korte antwoord:
Ik zou de preg_match die je bij $_POST['email'] uitvoert ook doen bij $_POST['onderwerp'].

Mijn langere antwoord:
Alhoewel het volgens RFC-822 toegestaan is om een onderwerp te hebben dat bestaat uit meerdere regels (mits de vervolgregels beginnen met whitespace) vind ik het meestal niet nodig om daadwerkelijk meerdere regels toe te staan. En als je het toch wilt, moet je consequent zijn en het ook bij het To-veld toelaten, want volgens de officiƫle standaard mag elk veld newlines bevatten (mits gevolgd door whitespace).

Als je toch newlines wilt toestaan, zou je een preg_replace kunnen doen waarbij je elke \n omzet naar \n\t (let op: wees niet te actief door ook tussen een \r en een \n een \t te zetten, want dan vraag je om moeilijkheden).
@ Willem_vp : Dit bedoelde ik ook alleen weet ik niet hoe je dit dan hier neerschrijft:

if (preg_match(' /[\r\n,;\'"]/ ', $_POST['email'])) OR
{
Ik zou gewoon de hele if-then-else kopieren, omdat iktoch een andere foutmelding zou willen geven.

Maar als je het in 1 if-then-else wilt doen, kan dat als volgt:

if (preg_match(blabla_voor_email) or preg_match(blabla_voor_onderwerp))
{
exit("foutmelding");
}

De else is eigenlijk niet eens nodig, omdat het script hardhandig wordt afgebroken (door de exit) als aan de conditie wordt voldaan. Door de sendmail-code niet in de else op te nemen, maar gewoon "los" in het script te zetten, is het gemakkelijker om te testen in meerdere if-condities, waardoor je code wellicht iets overzichtelijker blijft.
Helder en dit ga ik vandaag proberen (wordt later op de dag heb verplichtingen elders...)
Dank je wel Willen_vp voor wederom deze heldere uiteenzetting en heb ik wat draaien meld ik me zeker!!
Hij werkt bij mij niet bij 2 verschillende providers.
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
//kijk of de variabelen bestaan, zo ja geef ik daar een naam aan
if(isset($_POST['Naam'])) { $Naam = $_POST['Naam']; }
if(isset($_POST['Email'])) { $Email = $_POST['Email']; }
if(isset($_POST['Adres'])) { $Adres = $_POST['Adres']; }
if(isset($_POST['Postcode'])) { $Postcode = $_POST['Postcode']; }
if(isset($_POST['Woonplaats'])) { $Woonplaats = $_POST['Woonplaats']; }
if(isset($_POST['Tel'])) { $Tel = $_POST['Tel']; }
if(isset($_POST['Bericht'])) { $Bericht = $_POST['Bericht']; }
if(isset($_POST['To'])) { $To = $_POST['To']; }
if(isset($_POST['Subject'])) { $Subject = $_POST['Subject']; }
// Toon het ip adres van de bezoeker
if(isset($_POST['IP'])) { $IP = $_SERVER['REMOTE_ADDR']; }

// een anti-emailinjection oplossing
if (preg_match(' /[\r\n,;\'"]/ ', $_POST['Email']) or preg_match(' /[\r\n,;\'"]/ ', $_POST['Bericht']))
{ exit('U ben niet bevoegd deze handeling te verrichten vul AUB een correct email adres in!'); }
//if (preg_match(' /[\r\n,;\'"]/ ', $_POST['Email']))
// { exit('Invalid email address'); }
//else
// {
?>

zoals je kan zien heb met de else geprobeerd en zonder en bij beide werkt het niet :(
<?php
// zonder spaties
if (preg_match('/[\r\n,;\'"]/', $_POST['Email']) or preg_match('/[\r\n,;\'"]/', $_POST['Bericht']))
?>

probeer hem zo eens, Lissy?
YESSSSS!!!
Deze werkt op server 1 :)))))))))))))))))))))))))))))
Enig idee hoe je deze twee scripts weer tot 1 script bakt?

Script 1

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
//kijk of de variabelen bestaan, zo ja geef ik daar een naam aan
if(isset($_POST['Naam'])) { $Naam = $_POST['Naam']; }
if(isset($_POST['Email'])) { $Email = $_POST['Email']; }
if(isset($_POST['Adres'])) { $Adres = $_POST['Adres']; }
if(isset($_POST['Postcode'])) { $Postcode = $_POST['Postcode']; }
if(isset($_POST['Woonplaats'])) { $Woonplaats = $_POST['Woonplaats']; }
if(isset($_POST['Tel'])) { $Tel = $_POST['Tel']; }
if(isset($_POST['Bericht'])) { $Bericht = $_POST['Bericht']; }
if(isset($_POST['To'])) { $To = $_POST['To']; }
if(isset($_POST['Subject'])) { $Subject = $_POST['Subject']; }
// Toon het ip adres van de bezoeker
if(isset($_POST['IP'])) { $IP = $_SERVER['REMOTE_ADDR']; }

// een anti-emailinjection oplossing
if (preg_match('/[\r\n,;\'"]/', $_POST['Email']) or preg_match('/[\r\n,;\'"]/', $_POST['Bericht']))
{ exit('U ben niet bevoegd deze handeling te verrichten vul AUB een correct email adres in!'); }
//if (preg_match(' /[\r\n,;\'"]/ ', $_POST['Email']))
// { exit('Invalid email address'); }
//else
// {
?>

Script 2

<?php
// Vul hier uw eigen e-mail adres in.
$ontvanger = "[email protected]";
// Deze code haalt de informatie uit het formulier.
} $onderwerp = $_POST['onderwerp'];
$bericht = $_POST['bericht'];
// Dit is voor het e-mail programma dat je kunt zie van wie de mail afkomstig is en dat
// je kunt re- playen op de mail.
$verzender = "From: " . $naam . " <" . $email . ">";
// Dit stukje code verzend het script
mail($ontvanger, $onderwerp, $bericht, $verzender);
// Vul je de link in.
$link = "index.html";
?>

Reageren