Ik heb het volgende script in een pagina geplaatst. Hij werkt met het emailadres dat er nu in staat, maar als ik het adres wijzig in [email protected] geeft hij de volgende foutmelding: Why ?? :(

Ik zie dat staan in het script, maar waarom geeft hij dit als ik alleen het emailadres maar heb gewijzigd en verder niets aan het script zelf?


<?php
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;
}

// geef e-mail adres op van ontvanger
$mail_ontv = "[email protected]"; // [email protected]

// als er niet op submit is gedrukt, of als er wel op is gedrukt maar niet alles ingevoerd is
if (!$_POST['submit'])
{
echo "<form method='post' action='".$PHP_Self."#melding'>";
echo "<p>";
echo "<label for='1'><font color='#73BE44' size='5px'> Naam </font></label><br/>";
echo "<input type='text' id='1' name='naam'>";
echo "</p>";
echo "<p>";
echo "<label for='3'><font color='#73BE44' size='5'> E-mail adres </font></label><br/>";
echo "<input type='text' id='3' name='mail'>";
echo "</p>";
echo "<p>";
echo "<label for='4'><font color='#73BE44' size='5'> Reactie: </font></label><br/>";
echo "<TEXTAREA class=forms name='msggs' id='4' ROWS='8' COLS='32'>" . htmlentities($_POST['msggs']) . "</TEXTAREA>";
echo "<p>";
echo "<label>&nbsp;</label><input type='submit' name='submit' value='Verstuur' class='button'>";
echo "</p>";
echo "</form>";
}
// versturen naar
else
{

// onderwerpregel van de mail naar arieblok.nu
$onderwerp = 'Contactformulier van arieblok.nu';
$_POST['onderwerp'] = $onderwerp;

// set datum
$datum = date("d.m.Y H:i");

$from = $_POST["naam"];
$from = urldecode($from);
if (eregi("\r",$from) || eregi("\n",$from)){
die("Why ?? :(");
}
$emailadress = $_POST["mail"];
$emailadress = urldecode($emailadress);
if (eregi("\r",$emailadress) || eregi("\n",$emailadress)){
die("Why ?? :(");
}
$message = $_POST["msggs"];
$message = urldecode($message);
if (eregi("\r",$message) || eregi("\n",$message)){
die("Why ?? :(");
}

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

$inhoud_mail .= "===================================================\n";
$inhoud_mail .= "INGEVULD CONTACT FORMULIER OP ARIEBLOK.NU\n\n";
$inhoud_mail .= "===================================================\n\n";

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

$inhoud_mail .= "Verstuurd op $datum via het ip address " . $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 "<b>Bedankt voor je reactie!</b>";
}
?>
</p>

Alvast bedankt voor jullie tijd en antwoord.

Sabine
zo moet die het gaan doen waarschijnlijk;)



<?php
          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;
            }
                                  
            // geef e-mail adres op van ontvanger
            $mail_ontv = "[email protected]"; // [email protected]
            
            // als er niet op submit is gedrukt, of als er wel op is gedrukt maar niet alles ingevoerd is
            if (!$_POST['submit'])
            {  
                    echo "<form method='post' action='".$PHP_Self."#melding'>";
                    echo "<p>";
                    echo "<label for='1'><font color='#73BE44' size='5px'> Naam </font></label><br/>";
                    echo "<input type='text' id='1' name='naam'>";
                    echo "</p>";
                    echo "<p>";
                    echo "<label for='3'><font color='#73BE44' size='5'> E-mail adres </font></label><br/>";
                    echo "<input type='text' id='3' name='mail'>";
                    echo "</p>";
                    echo "<p>";
                    echo "<label for='4'><font color='#73BE44' size='5'> Reactie: </font></label><br/>";
                    echo "<TEXTAREA class=forms name='msggs' id='4' ROWS='8' COLS='32'>" . htmlentities($_POST['msggs']) . "</TEXTAREA>";
                    echo "<p>";
                    echo "<label>&nbsp;</label><input type='submit' name='submit' value='Verstuur' class='button'>";
                    echo "</p>";
                    echo "</form>";                        
    }  
    // versturen naar
    else  
    {      
            
    // onderwerpregel van de mail naar arieblok.nu
    $onderwerp = 'Contactformulier van arieblok.nu';
    $_POST['onderwerp'] = $onderwerp;

    // set datum
    $datum = date("d.m.Y H:i");
    
    $from = $_POST["naam"];
    $from = urldecode($from);
    if (eregi("\r",$from) || eregi("\n",$from)){
     die("Why ?? :(");
     }
    $emailadress = $_POST["mail"];
    $emailadress = urldecode($emailadress);

     $message = $_POST["msggs"];
    $message = urldecode($message);
    if (eregi("\r",$message) || eregi("\n",$message)){
     die("Why ?? :(");
     }
  
    // set ip
    $ip = $_SERVER['REMOTE_ADDR'];  
      
    $inhoud_mail .= "===================================================\n";
    $inhoud_mail .= "INGEVULD CONTACT FORMULIER OP ARIEBLOK.NU\n\n";  
    $inhoud_mail .= "===================================================\n\n";  
      
    $inhoud_mail .= "Naam: " . $_POST['naam'] . "\n";
    $inhoud_mail .= "E-mail adres: " . $_POST['mail'] . "\n";
    $inhoud_mail .= $_POST['msggs'] . "\n\n";  
      
    $inhoud_mail .= "Verstuurd op $datum via het ip address " . $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 "<b>Bedankt voor je reactie!</b>";      
    }
?>
Je zou ten eerste een wat specifiekere foutmelding kunnen inbouwen. Verder lijkt mij dat je bij check_mail() een fout maakt. Je gebruikt een integer als index in je array, maar daar zet je vervolgens quotes omheen alsof het een string is. Verder snap ik niet geheel waar die functie voor is. De functie [php]eregi[/php] raakt verouderd, gebruik liever [php]preg[/php]. Als laatst adviseer ik je om een class als Swiftmailer te gebruiker voor een mail script, in plaats van [php]mail[/php].
Kijken of er gesubmit is doe je met:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
	// Ontvanger
	$aan = '[email protected]';
	
	// Fouten opzoeken.
	$errors[] = (isset($_POST['naam'])) ? 'naam';
	$errors[] = (isset($_POST['email'])) ? 'e-mail';
	$errors[] = (isset($_POST['onderwerp'])) ? 'onderwerp';
	$errors[] = (isset($_POST['bericht'])) ? 'bericht';
	
	// Er zijn errors dus fouten weergeven.
	if(!empty($errors))
	{
		echo 'De volgende fouten zijn gevonden: <br /><br />';
		
		foreach($errors as $error)
		{
			echo 'U bent vergeten een geldige '.$error.' in te vullen. <br />';
		}
	}
	else
	{
		// Opmaak van het bericht maken.
		$bericht = '===================================================\n';
		$bericht .= 'Contact formulier Arieblok.nu \n\n';  
		$bericht .= '===================================================\n\n';  
			  
		$bericht .= 'Naam: '.$_POST['naam'].'\n';
		$bericht .= 'E-Mail: '.$_POST['email'].'\n';
		$bericht .= 'Bericht: '.$_POST['bericht'].'\n\n';
		
		$bericht .= 'Verstuurd op: '.date('d-m-Y H:i').'\n';
		$bericht .= 'Verstuurd via het ip address: '.$_SERVER['REMOTE_ADDR'].'\n\n';
		$bericht .= '===================================================\n\n';  
		
		// Headers aanmaken
		$headers = 'From: '.$_POST['naam'].' <'.$_POST['email'].'>';
		$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
		
		// Bericht zenden en opvangen.
		$msg = mail($aan, $_POST['onderwerp'], $bericht, $headers);
		
		if($msg)
		{
			echo 'Het bericht is verzonden.';
		}
		else
		{
			echo 'Er is een fout opgetreden bij het verzenden van het bericht.';
		}
	}
}
else
{
	echo '<form action="" method="POST">';
		// Naam
		echo '<label for="1">Naam:</label>';
		echo '<input id="1" name="naam" type="text" />';
		
		// E-mail
		echo '<label for="2">E-mail:</label>';
		echo '<input id="2" name="email" type="text" />';
		
		// Onderwerp
		echo '<label for="3">Onderwerp:</label>';
		echo '<input id="3" name="onderwerp" type="text" />';
		
		// Bericht
		echo '<label for="4">Bericht</label>';
		echo '<textarea id="4" name="bericht"></textarea>';
		
		//Knoppen
		echo '<label></label>';
		echo '<input type="submit" value="Verstuur" />';
	echo '</form>';
}
?>
Tjonge, wat zijn jullie snel! Dank je wel voor alle antwoorden.

@ Dennis; wat heb je nu aangepast? Dan kan ik het de volgende keer zelf oplossen misschien. Het was iets doms zeker.....
@Ivo; dank je voor jouw tips. Het was een bestaand scriptje op een bestaande website, en het werkte eerst, dus ik dacht het kan nog wel. Zal jouw opmerkingen meenemen.
@Milo Dank je wel voor je moeite van het herschrijven. Ik ben dus duidelijk niet echt thuis in php. Dus ik zal proberen of ie het doet, maar het uitbreiden van de beveiliging zit er niet in. Of kan ik dan gebruiken wat er in het oude script stond?

Allemaal bedankt tot zover!
Sabine
@Dennis: ik heb jouw script erin geplakt, maar dezelfde fout.
Zet error_reporting(E_ALL) aan en maak duidelijke foutmeldingen.
Hoi San,

Kun je me daarmee helpen, want zoals ik al eerder schreef was dit bestaand op een bestaande website en weet ik eigenlijk nog niet half wat er staat?
Wat je doet is elke foutmelding "Why ?? :(" maken en daarna meteen je script afsluiten. Dat is niet erg overzichtelijk. Beter is "Error: Opdracht X ging mis op regel 1".

Verder geeft SanThe nog de error reporting die al standaard in PHP zit:

<?php
ini_set("display_errors",1);
error_reporting(E_ALL);

#| HIER PAS DE CODE VAN DE SITE. DIT MOET HELEMAAL BOVENAAN.
?>

Reageren