Hallo PHP-ers,

Wie kan mij helpen ik heb dit script hieronder alleen er moet een email checker in weet iemand voor dit script de code? en de error velden moeten juist achter het veld staan wat niet is ingevuld nu zet hij het steeds boven neer.

<?php

if(function_exists('date_default_timezone_set')) { date_default_timezone_set('Europe/Amsterdam'); }
define('LF', "\n");

// Get a value from the $_POST array (case insensitive!!)
function getPost($key, $trim = false, $lowercase = false, $int = false)
{
if(isset($_POST[$key]))
{
$v = stripslashes($_POST[$key]);

if($trim)
{
$v = trim($v);
}

if($int)
{
$v = intval($v);
}
elseif($lowercase)
{
$v = strtolower($v);
}

return $v;
}

return '';
}
// Default values
$field_1 = '';
$field_2 = '';
$field_3 = '';

$sHtml = '';
$sFormError = '';

// Process form
if(empty($_POST['form']) == false)
{
$field_1 = getPost('field_1', true);
if(strlen($field_1) == 0) { $sFormError = 'Vul a.u.b. uw Naam in.'; }
$field_2 = getPost('field_2', true);
if(strlen($field_2) == 0) { $sFormError = 'Vul a.u.b. uw Emailadres in.'; }
$field_3 = getPost('field_3', true);
}

// Show form
if(empty($_POST['form']) || $sFormError)
{
$sHtml .= '<form action="" method="post">
<input name="form" type="hidden" value="form1">
' . $sFormError . '
<table border="0" cellpadding="3" cellspacing="0"><tr>
<td align="left" class="label" valign="top">* Naam</td>
<td align="left" class="input" valign="top"><input name="field_1" type="text" value="' . htmlentities($field_1) . '"></td>
</tr>
<tr>
<td align="left" class="label" valign="top">* Emailadres</td>
<td align="left" class="input" valign="top"><input name="field_2" type="text" value="' . htmlentities($field_2) . '"></td>
</tr>
<tr>
<td align="left" class="label" valign="top">Opmerking</td>
<td align="left" class="input" valign="top"><textarea name="field_3">' . htmlentities($field_3) . '</textarea></td>
</tr>
<tr>
<td align="left" class="text" valign="top">&nbsp;</td>
<td align="left" class="input" valign="top"><input type="submit" value="Verzenden"> <input type="reset" value="Wissen"></td>
</table>
</form>';
}
else // Send form
{
$mail_to = '[email protected]';
$mail_from = '[email protected]';
$mail_subject = 'Test formulier sterrengokkers.nl';
$mail_message = 'Sterrengokkers invulformulier: ' . LF . LF
. 'Naam: ' . $field_1 . LF
. 'Email: ' . $field_2 . LF
. 'Opmerking: ' . $field_3 . LF
. LF
. 'IP: ' . $_SERVER['REMOTE_ADDR'] . ', Datum: ' . date('d-m-Y') . ', Tijd: ' . date('H:i:s');

mail($mail_to, $mail_subject, $mail_message, 'From: ' . $mail_from);

$sHtml .= '<h1>Uw aanvraag is succesvol verzonden!</h1><p>Hartelijk dank voor uw aanvraag, wij nemen zo spoedig mogelijk contact met u op.</p>Met vriendelijke groet,<br>Sterrengokkers.nl';
}

echo $sHtml;

?>

alvast bedankt
En wie wilt er nu een nieuwsbrief via de mail (en niet via Twitter / RSS oid?)?

Ik zou toch echt graag de nieuwsbrief via de mail krijgen. Zowel nettuts+, als Smashing Magazine als .NET magazine doen dit en dat vind ik toch verdraaid fijn...
Laten we niet vergeten dat er ook nog mensen een website bezoeken met de juiste bedoelingen, en die kunnen ook gewoon een typo maken! Dus gewoon controleren dat emailadres.
Ger van Steenderen op 01/09/2012 11:04:19

Laten we niet vergeten dat er ook nog mensen een website bezoeken met de juiste bedoelingen, en die kunnen ook gewoon een typo maken! Dus gewoon controleren dat emailadres.


Dat vind ik dit topic nu is de enige goede reden. Mijn standpunt is, als een gebruiker echt interesse heeft, dan zal hij wel zijn echt e-mailadres opgeven. Anders geeft hij iets nutteloos op.

Uiteraard is er niets mis mee met een wachtwoord-vergeten-e-mail, een nieuwsbrief, account activatie, ... Alleen wil je dit niet altijd. Daarom vind ik het zinloos extreme controle op een e-mailadres te gaan doen.
Ger, met regexen of de PHP filters controleer je ook niet de typo's. Als ik [email protected] i.p.v. contact@phphulp.nl doe zullen die controles echt niet gaan klagen.
Daarom zou ik een email veld en daarna een herhaling email veld maken, je voorkomt dan deze typo's en heb je al deze checks niet meer nodig.
Wouter J op 01/09/2012 11:22:12

Als ik [email protected] i.p.v. contact@phphulp.nl doe zullen die controles echt niet gaan klagen.

Het scriptje van mij zal dit adres afkeuren.

Wouter J op 01/09/2012 11:22:12

Daarom zou ik een email veld en daarna een herhaling email veld maken, je voorkomt dan deze typo's en heb je al deze checks niet meer nodig.


Eigenlijk best een logisch standpunt.
- SanThe - op 01/09/2012 11:31:59

[quote="Wouter J op 01/09/2012 11:22:12"]
Als ik [email protected] i.p.v. contact@phphulp.nl doe zullen die controles echt niet gaan klagen.

Het scriptje van mij zal dit adres afkeuren.
[/quote]

Ja, en onnodig veel overhead veroorzaken. Want stel nu is dat phhulp.nl bestaat, dan heb je alsnog niets gewonnen. Een simpele controle volstaat, al de rest is onnodige overhead als je het mij vraagt.

Veld herhalen is dan een veel betere oplossing.

[size=xsmall]Toevoeging op 01/09/2012 11:51:27:[/size]

Als kan ik ook daar nog een kanttekening bij maken. Ik ben soms nog wel is lui, en copy paste mijn e-mailadres / laat het auto invullen.
Wouter J op 31/08/2012 16:56:15

Tevens kun je met HTML5 een check uitvoeren:
<input type=email ...>



Dat is nogal useless aangezien een hacker ook gewoon een POST request naar die pagina kan sturen zonder die form. Maar wel leuk als bijkomende check.
Wouter J op 01/09/2012 11:22:12

Daarom zou ik een email veld en daarna een herhaling email veld maken, je voorkomt dan deze typo's.

Wat ik vaak doe is 1x intypen, selecteren, kopiƫren en dan plakken in het 2e veld.
Als dan in de 1e een tiepfaut zit, ben ik in ieder geval consequent....

Edit: zie net dat ik niet de enige ben met deze werkwijze.
@Wouter, ik bedoelde eigenlijk de komma ipv punt e.a typo's.
Ik zelf heb de gewoonte om die herhalings velden te copy-pasten, dus dan streeft het middel ook het doel voorbij.
Daarnaast heb je met een controle het voordeel dat je niet meer hoeft te escapen of met een parameter te werken.
Het scriptje van mij zal dit adres afkeuren.

En als ik [email protected] i.p.v. [email protected]? Kortom: Je zal nooit alles kunnen controleren. Misschien een hele simpele check doen en dat is genoeg:
<?php
function check_email($email)
{
$email = explode('@', $email);

if (2 == count($email)) {
return false !== strpos($email[1], '.');
}
}
?>

Of met een regex:
<?php
function check_email($email)
{
return preg_match('|[^@]+@[^.]+\.\w+|', $email);
}
?>

Reageren