Hallo allemaal,

De titel spreekt wel voor zich hoop ik.
in dit script staan de tekens die toegestaan zijn voor een emailadres maar toch pakt hij het lage streepje niet terwijl hij er toch tussen staat.
Hopelijk kan iemand mij ff helpen
alvast bedankt.
<?
// geef e-mail adres op van ontvanger
$mail_ontv = "[email protected]";

// is niet 100% !!!
function checkmail($mail)
{
$email_host = explode("@", $mail);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);

if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
$valid = 1;

return $valid;
}

// als er niet op submit is gedrukt, of als er wel op is gedrukt maar niet alles ingevoerd is
if (!$_POST['submit'] || $_POST['submit'] && (!$_POST['naam'] || !$_POST['mail'] || !checkmail($_POST['mail']) || !$_POST['msggs'] || !$_POST['onderwerp']))
{
if ($_POST['submit'] && (!$_POST['naam'] || !$_POST['mail'] || !checkmail($_POST['mail']) || !$_POST['msggs'] || !$_POST['onderwerp']))
{
echo "U bent uw naam, e-mail adres, onderwerp of bericht vergeten in te vullen. Ook kan het zijn ";
echo "dat u een verkeerd e-mail adres hebt ingevuld.<p>";
echo "mocht het dan niet lukken stuur een e-mail naar [email protected]";
}

// form + tabel
echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "<form method=\"POST\" ACTION=\"" . $_SERVER['PHP_SELF'] . "\">";

// naam
echo "<tr><td>Naam:</td></tr>";
echo "<tr><td><input type=\"text\" name=\"naam\" value=\"" . $_POST['naam'] . "\"></td></tr>";

// space
echo "<tr><td>&nbsp;</td></tr>";

// mail
echo "<tr><td>E-mail adres:</td></tr>";
echo "<tr><td><input type=\"text\" name=\"mail\" value=\"" . $_POST['mail'] . "\"></td></tr>";

// space
echo "<tr><td>&nbsp;</td></tr>";

// mail
echo "<tr><td>Onderwerp:</td></tr>";
echo "<tr><td><input type=\"text\" name=\"onderwerp\" value=\"" . $_POST['onderwerp'] . "\"></td></tr>";

// space
echo "<tr><td>&nbsp;</td></tr>";

// mail
echo "<tr><td>Bericht:</td></tr>";
echo "<tr><td><TEXTAREA name=\"msggs\" ROWS=\"6\" COLS=\"45\">" . htmlentities($_POST['msggs']) . "</TEXTAREA></td></tr>";

// space
echo "<tr><td>&nbsp;</td></tr>";

// button
echo "<tr><td>&nbsp;</td></tr>";
echo "<tr><td><input type=\"submit\" name=\"submit\" value=\"Versturen\"></td></tr>";

// sluit form + tabel
echo "</form>";
echo "</table>";
}
// versturen naar
else
{
// set datum
$datum = date("d.m.Y H:i");

// set ip
$ip = $_SERVER['REMOTE_ADDR'];

$inhoud_mail = "===================================================\n";
$inhoud_mail .= "Ingevulde contact formulier\n";
$inhoud_mail .= "===================================================\n\n";

$inhoud_mail .= $_SERVER['SCRIPT_URI'] . "\n\n";

$inhoud_mail .= "Naam: " . $_POST['naam'] . "\n";
$inhoud_mail .= "E-mail adres: " . $_POST['mail'] . "\n";
$inhoud_mail .= "Bericht:\n";
$inhoud_mail .= $_POST['msggs'] . "\n\n";

$inhoud_mail .= "Verstuurd op " . $datum . " via het ip " . $ip . "\n\n";

$inhoud_mail .= "===================================================\n\n";

// --------------------
// spambot protectie
// ------
// van de tutorial: http://www.phphulp.nl/php/tutorials/10/340/
// ------

$headers = "From: " . $_POST['naam'] . " <" . $_POST['mail'] . ">";

$headers = stripslashes($headers);
$headers = str_replace("\n", "", $headers); // Verwijder \n
$headers = str_replace("\r", "", $headers); // Verwijder \r
$headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes

$_POST['onderwerp'] = str_replace("\n", "", $_POST['onderwerp']); // Verwijder \n
$_POST['onderwerp'] = str_replace("\r", "", $_POST['onderwerp']); // Verwijder \r
$_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes

mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers);

echo "<h1>Je e-mail is verstuurd</h1>";

echo "<p>Bedankt voor het versturen van een e-mail. Je zult snel een antwoord ";
echo "krijgen indien dit nodig is.</p>";

echo "<p>We nemen alles serieus en zullen vertrouwelijk omgaan met de informatie ";
echo "die we binnen krijgen. Je e-mail adres zal nooit aan derden worden verstrekt.</p>";
}
?>
krijg je een error?
zet eens
error_reporting(E_ALL) boven je document
nope krijg geen page error krijg wel een error uit het script en dat is
U bent uw naam, e-mail adres, onderwerp of bericht vergeten in te vullen. Ook kan het zijn dat u een verkeerd e-mail adres hebt ingevuld.
mocht het dan niet lukken stuur een e-mail naar [email protected]
Het lijkt erop dat je e-mail adres niet door je checkmail() functie komt. Daar zul je dus eens moeten controleren waarom dat niet gebeurt. Wellicht iets met de regex?
Blanche - op 02/11/2010 22:38:02

Het lijkt erop dat je e-mail adres niet door je checkmail() functie komt. Daar zul je dus eens moeten controleren waarom dat niet gebeurt. Wellicht iets met de regex?


ja maar het rare is dat als je geen lage streepje in je email adres zet dat hij het dan wel gewoon verstuurd.
Ik heb je scriptje net getest, maar het werkt hier gewoon prima. Welk e-mail adres vul jij in dat niet werkt?
Volgens de reguliere expressie in je checkmail() functie is dat ook geen geldig e-mail adres. Wil je e-mail adres door die functie komen, dan moet er minimaal 1 alfanumeriek teken na de underscore komen...

ps. Of je moet je checkmail() functie aanpassen uiteraard.
zou je mij mischien een voorbeel kunnen geven van hoe ik dat zou kunnen doen?
Vervang je checkmail() functie eens door dit:

<?php
function checkmail($mail)
{
$email_host = explode("@", $mail);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);

if ($email_resolved != $email_host && preg_match('=^[0-9a-z]([0-9a-z_])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$=i',$mail))
$valid = 1;

return $valid;
}
?>
Ik heb enkel de reguliere expressie en de verouderde eregi() functie gewijzigd. Kijk wat er veranderd is en probeer het te snappen...
Blanche - op 02/11/2010 22:58:27

Vervang je checkmail() functie eens door dit:

<?php
function checkmail($mail)
{
$email_host = explode("@", $mail);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);

if ($email_resolved != $email_host && preg_match('=^[0-9a-z]([0-9a-z_])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$=i',$mail))
$valid = 1;

return $valid;
}
?>
Ik heb enkel de reguliere expressie en de verouderde eregi() functie gewijzigd. Kijk wat er veranderd is en probeer het te snappen...

Yes hij doet het hartelijk bedankt :D

Reageren