Ik heb een website waarop mensen zich kunnen inschrijven voor een nieuwsbrief. Dit moet zo laagdrempelig mogelijk zijn, dus liefst zonder teveel handelingen (captcha of iets dergelijks). Nu las ik online een methode waarbij je sommige bots kon omzeilen door een extra veld (met bijvoorbeeld de naam: "name") aan te maken. Dit veld maak je dan met css onzichtbaar voor de menselijke bezoekers van je site (display:none). De bots zien dit veld echter wel en zullen het automatisch invullen. Nu wil ik mijn PHP code zo aanpassen dat de aanvraag alleen wordt doorgestuurd als het betreffende veld dus leeg is... Ik heb al het een en ander geprobeerd, maar kom er als PHP beginneling nog niet uit. Dit is mijn PHP file:

<?php
$email = htmlspecialchars($_POST["email"]);
$naam = htmlspecialchars($_POST["naam"]);

if (!$email) {
echo "U heeft geen emailadres ingevuld!";
exit; }


else {

$tijd = time();
$datum = strftime("%d/%m/%y %H:%M", $tijd);
$ip = getenv("REMOTE_ADDR");
$message = " IP adres $ip met e-mailadres " . $email . " wil zich inschrijven voor de nieuwsbrief";

$mailadres = "*****@chello.nl, webreply@*******.nl";
$message = str_replace ("<br>","\n", $message);
mail("$mailadres", "Bericht van formulier op Fitpointhelmond.nl",
$message, "From: " . $email . "");

echo header ("Location: /bedankt_inschrijven_nieuwsbrief.shtml");

}
?>

Hoe kan ik hem aanpassen dat de informatie alleen wordt doorgespeeld als het veld $naam leeg is?

Bij voorbaat dank :-)
Je kan hiervoor empty gebruiken denk ik.
<?php
if(empty($naam)) {
// verstuur email
}
?>
Dankjewel Martin V. dat heb ik inderdaad ook al geprobeerd. Ik heb hem op verschillende plekken in de code proberen toe te passen, maar kreeg elke keer foutmeldingen. Ik ben ook nog niet echt handig met de syntax van PHP, met name wanneer er meerdere stukken code door elkaar gaan lopen...
Probeer dan eens
<?php
If($name == '') { //hier je code }


<?php
if(trim($naam)=='') {
// leeg
} else {
// bevat inhoud
}
?>

Als je mailadres wilt controleren:
<?php
if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
echo "E-mailadres is ongeldig");
} else {
echo "E-mail is geldig."; }
?>
Dankjewel Martin en Aar voor jullie snelle oplossingen! Ik heb het zo voor elkaar gekregen:
<?php
$email = htmlspecialchars($_POST["email"]);
$naam = htmlspecialchars($_POST["naam"]);

if (!$email) {
echo "U heeft geen emailadres ingevuld!";
exit; }


if(empty($naam)) {

$tijd = time();
$datum = strftime("%d/%m/%y %H:%M", $tijd);
$ip = getenv("REMOTE_ADDR");
$message = " IP adres $ip met e-mailadres " . $email . " wil zich inschrijven voor de nieuwsbrief";

$mailadres = "******@chello.nl, *******@********.nl";
$message = str_replace ("<br>","\n", $message);
mail("$mailadres", "Bericht van formulier op Fitpointhelmond.nl",
$message, "From: " . $email . "");

echo header ("Location: /bedankt_inschrijven_nieuwsbrief.shtml");
}

else {
echo "Er is iets mis gegaan!";

}
?>

:-)

Tnx again!!!
Waar controleer je of de $_POST-variabelen bestaan?

Waarom maak je al die variabelen (regel 2/3 en 12-14, 15) aan?
Je headers van je mail zijn onvoldoende. Kan tot gevolg hebben dat mail in de spambox komt of niet aankomt.
Moet er een echo staan voor header op regel 22?
Dat zijn hele goede vragen Obelix en Idefix, waarop ik je voorlopig het antwoord schuldig moet blijven. Ik ben echt nieuw op het gebied van PHP, dus deze code is voor het grootste gedeelte overgenomen uit online voorbeelden die ik heb aangepast aan mijn eigen 'behoeften'. Ik neem dus graag van je aan dat er overbodige code in staat.

Wat je precies bedoelt met "Je headers van je mail zijn onvoldoende." weet ik helaas niet. Vooralsnog komt de mail tijdens het testen op het juiste adres aan...

In ieder geval bedankt voor het checken en voor de tips om de code op te schonen. Daar zal ik zeker mee aan de slag gaan!
Christian van Lierop op 11/08/2014 16:49:35

Wat je precies bedoelt met "Je headers van je mail zijn onvoldoende." weet ik helaas niet. Vooralsnog komt de mail tijdens het testen op het juiste adres aan...

Door een onjuiste header kan een mail als spam worden aangemerkt of niet worden bezorgd, omdat er 'onderweg' het idee bestaat dat jouw mail niet voldoet aan standaard'eisen'.
Kijk eens op http://phpwiki.santhe.nl/index.php?title=De_juiste_mailheaders
Of kies voor eenvoud en gebruik de class phpmailer of swiftmailer.
Kijk toch ook even naar Aars filter functie

Je kijkt namelijk helemaal niet of $_posr[email] een (1) adres bevat
Stel er wordt aangeleverd

[email protected]
Cc:[email protected], [email protected]

dus met een enter.
Dan schiet jij dat zo de header in.
Dus piet en kees krijgen die mail ook.

Boeie, denk je?
Gaan we verder: subject kun je ook opnemen na bcc, gevolgd door 2 enters en een nieywe content

En voila een nieuwe server die spam vrrstuurt

Reageren