Mailformulier verzend wel, maar de tekst niet.

Status
Niet open voor verdere reacties.

Coolegino2

Gebruiker
Lid geworden
1 nov 2011
Berichten
6
Goedemiddag,

Ik heb het volgende probleem: Ik heb een contact pagina op mijn website gezet in html, en het mail script in PHP. Geen probleem, het word gewoon verzonden en ik ontvang ook een mailtje in de mailbox. Echter, de ingevulde tekstvelden worden niet meegezonden, waardoor ik een witte mail te zien krijg. Wat doet ik fout?

HTML:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Naam</title>
</head>

<body>
<form method="post" action="http://walibi.herobo.com/vergelijkdebon/formulierverzenden.php">
	<ul>
		<li>Je voornaam *</li>
		<li><input type="text" name="voornaam" /></li>
		<li>Je achternaam *</li>
		<li><input type="text" name="achternaam" /></li>
		<li>Je e-mail adres *</li>
		<li><input type="text" name="email" /></li>
		<li>Je berichtje *</li>
		<li><textarea cols="50" rows="12" name="bericht"></textarea></li>
		<li><input type="reset" value="Begin opnieuw" /> <input type="submit" name="versturen" value="Verstuur bericht" /></li>
	</ul>
	<p>Alle velden gemarkeerd met een * zijn verplicht.</p>
</form>
</body>

</html>

PHP:
<?php
$naar = 'contact@hiereenemailadres.nl'; // Waar moet het naartoe?
$onderwerp = 'Contact via Website'; // Het onderwerp van het bericht
 
// Header instellen, zodat nl2br() werkt
$headers = "MIME-version: 1.0\r\n"; 
$headers .= "content-type: text/html;charset=utf-8\r\n";
 
if(isset($_POST['versturen'])) // Als het formulier verzonden is door op de verzend knop te klikken
{
	$voornaam = trim($_POST['voornaam']); // Alle overbodige spaties uit het voornaam veld verwijderen
	$achternaam = trim($_POST['achternaam']); // Alle overbodige spaties uit het achternaam veld verwijderen
	$email = trim($_POST['email']); // Alle overbodige spaties uit het email veld verwijderen
	$bericht = trim($_POST['bericht']); // Alle overbodige spaties uit het bericht veld verwijderen
	$fout = false; // Om te kijken straks of er wat fout is
 
	}
	if(empty($email)) // Als het email veld niet is ingevuld
	{
		print '<p>Helaas, het email veld is verplicht maar is nu niet ingevuld!</p>';
		$fout = true;
	}
	if(!filter_var($email, FILTER_VALIDATE_EMAIL)) // Als het email adres niet correct is
	{
		print '<p>Helaas, het email adres is niet correct!</p>';
		$fout = true;
	}
 
	if($fout == false) // Als er niks fout is (alles is dus netjes ingevuld)
	{
		$headers .= 'From: ' . $voornaam . ' ' . $achternaam . '<' . $email . '>'; // Een afzender instellen zodat je kan reageren.
 
		if(mail($naar, $onderwerp, nl2br($bericht), $headers))
		{
			print '<p>Het bericht is succesvol verzonden!</p>';
		}
		else
		{
			print '<p>Helaas, er is wat fout gegaan tijdens het verzenden van het formulier.</p>';
		}
	}
?>
 
Druk je toevallig op enter om het formulier te verzenden i.p.v. op de knop "Verstuur bericht" te klikken? Sommige browsers sturen de naam van de knop in dat geval niet mee. Hierdoor zal de controle op regel 9 mislukken en de variabelen $voornaam, $achternaam, $email, $bericht en $fout dus geen waarde krijgen. Een betere controle is
PHP:
if ($_SERVER['REQUEST_METHOD'] == "POST")

Daarnaast lijkt de afsluitende accolade op regel 17 me niet kloppen. Deze hoort helemaal achteraan (regel 42), nu wordt de rest van de code (waaronder het versturen van een e-mail) ook uitgevoerd als er niet op de knop "Verstuur bericht" is geklikt.
 
Is er ook een simpel PHP mailscript die gewoon de hele pagina (Tussen de form tag) mailt naar mijn email adres? Aangezien het best wel een lijst is die ze in moeten vullen met van die hokjes (Checkbox) e.c.t. en dat aanpassen in het PHP bestand nogal lastig werk is voor mij.

EDIT:

Het is me al gelukt. Op de 1 of andere manier het oude script aan de praat gekregen. Alleen nog 1 vraag. Als ik op verzenden klik, wat moet er dan verandert worden in het script, om hem door te sturen naar de 'bedank' pagina?

PHP CODE:

PHP:
<?
$your_email_address="xxxxxx@gmail.com";

if(empty($_GET) && empty($_POST)) {
	die('Ongeldige actie');
}

// Emular register_globals on
if (!ini_get('register_globals')) {
	$superglobales = array($_SERVER, $_ENV, $_FILES, $_COOKIE, $_POST, $_GET);
	if (isset($_SESSION)) {
		array_unshift($superglobales, $_SESSION);
	}
	foreach ($superglobales as $superglobal) {
		extract($superglobal, EXTR_SKIP);
	}
}

// to prevent header injection
if (eregi("\r",$_POST['your_email_address']) || eregi("\n",$_POST['your_email_address'])){
     exit;
}

// kick anyone whoever tried to inject a header in the form
foreach( $_POST as $value ){
	if( strpos($value,'Content-Type:') !== FALSE ){
		exit;
	}
}


$fields = array_keys($_POST);

function headfunction($url) {
	header ("Location: $url");
}

// protect the variable $reserved_vars
if(isset($reserved_vars)) {
	unset($reserved_vars);
}
$reserved_vars = array("css_file", "background_color", "background_image", "text_color", "link_color", "visited_link_color", "active_link_color", "font_name", "font_size", "highlight_color", "required_fields", "after_url", "check_email_address", "subject", "your_email_address", "env_report", "owner_name", "autoresponse", "response_subject", "response_mail", "dodosmail_header_file", "dodosmail_footer_file");

function include_dodosmail_header($dodosmail_header_file) {
	global $reserved_vars;
	foreach($reserved_vars as $reserved_var) {
		global $$reserved_var;
	}

	if(is_file($dodosmail_header_file)) {
		include_once($dodosmail_header_file);
		return;
	} else {
		echo "<html>\n";
		echo "<head>\n";
		echo "<title>\n";
		echo "DodosMail\n";
		echo "</title>\n";
		if($css_file != "")
			echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"$css_file\">\n";
		echo "</head>\n";
		echo "<body bgcolor=\"$background_color\" background=\"$background_image\" text=\"$text_color\" link=\"$link_color\" vlink=\"$visited_link_color\" alink=\"$active_link_color\">\n";
		echo "<font face=\"$font_name\" size=\"$font_size\">\n";
	}
}

function include_dodosmail_footer($dodosmail_footer_file) {
	global $reserved_vars;
	foreach($reserved_vars as $reserved_var) {
		global $$reserved_var;
	}
	if(is_file($dodosmail_footer_file)) {
		include_once($dodosmail_footer_file);
		return;
	} else {
		echo "</font>\n</body>\n</html>";
	}
}

function dodosmail_error_handle($msg) {
	global $highlight_color;
	if(isset($highlight_color)) {
		$extra_begin = "<font color=\"".$highlight_color."\">";
		$extra_end = "</font>";
	} else {
		$extra_begin = "<span class=\"DodosMailErrorHighLight\">";
		$extra_end = "</span>";
	}

	return $extra_begin.$msg.$extra_end;
}

// checking required fields
// in case they used comma and space, replace
if(strstr($required_fields, ", ")) {
	$required_fields = str_replace(", ", ",", $required_fields);
} else {
	$required_fields = $required_fields;
}
$required_fields = explode(",", $required_fields);

for($i = 0; $i < count($required_fields); $i++) {
	$required_var_name = $required_fields[$i];
	if(empty($$required_var_name)) {
		include_dodosmail_header($dodosmail_header_file);
		echo "<p class=\"DodosMailError\">Fout! - het verplichte veld ".dodosmail_error_handle($required_var_name)." is niet ingevuld.\n";
		echo "<br /><br /><a href=\"javascript:history.back(1)\">Terug</a>\n";
		echo "</p>\n";
		include_dodosmail_footer($dodosmail_footer_file);
		exit;
	}
}
if($check_email_address == "yes" && !empty($email)) {
	if(!check_email($email)) {
		include_dodosmail_header($dodosmail_header_file);
		echo "<p class=\"DodosMailError\">Fout - het adres ".dodosmail_error_handle($email)." is niet geldig.\n";
		echo "<br /><br /><a href=\"javascript:history.back(1)\">Terug</a>\n";
		echo "</p>\n";
		include_dodosmail_footer($dodosmail_footer_file);
		exit;
	}
}


for($i = 0; $i < count($fields); $i++) {
	$actual_var = $fields[$i];
	if(in_array($actual_var, $reserved_vars)) {
		$inside_mail = $inside_mail;
	} else {
		if(is_array($$actual_var)) {
			$inside_mail.= "$actual_var: ";
			foreach($$actual_var as $actual_val) {
				$inside_mail.= "$actual_val ";
			}
			$inside_mail.= "\n";
		} else {
			$actual_val = stripslashes($$actual_var);
			$inside_mail.= "$actual_var: $actual_val\n";
		}
	}
}

// getting other information from the form
$cname = gethostbyaddr($_SERVER[REMOTE_ADDR]);
$inside_mail.=
"
-----------------------------------------------------------------------
 SENDER INFO:
 IP: $_SERVER[REMOTE_ADDR]
 Computer Name: $cname
 Browser Type: $_SERVER[HTTP_USER_AGENT]
 Page Referer: $_SERVER[HTTP_REFERER]
-----------------------------------------------------------------------
";






$headers .= "MIME-Version: 1.0\r\n";
$headers .= "X-Priority: 3\r\n";
$headers .= "X-MSMail-Priority: Normal\r\n";
$headers .= "X-Mailer: DodosMail 2.0 http://regretless.com/scripts/\r\n";
$headers .= "Content-type: text/plain; charset=\"iso-8859-1\"\r\n";
//$headers .= "Date: ".date("R")."\r\n";
$headers .= "From: $name <$email>\r\n";



$success = mail($your_email_address, $subject, $inside_mail, $headers);
if($success) {
	if($autoresponse == "yes") {
		$response_subject = stripslashes($response_subject);
		$response_mail = stripslashes($response_mail);
		mail($email, $response_subject, $response_mail, "From: $owner_name <$your_email_address>");
	}
	if($after_url == "") {
		// out put send info
		include_dodosmail_header($dodosmail_header_file);


		echo "<p>\n";
		
		echo header('Location: http://members.quicknet.nl/albertheijn/vergelijkdebon/confirmation.htm');
		for($i = 0; $i < count($fields); $i++) {
			$actual_var = $fields[$i];
			if(in_array($actual_var, $reserved_vars))
				echo "";
			else {
				if(is_array($$actual_var)) {
					echo "<li>$actual_var: ";
					foreach($$actual_var as $actual_val) {
						echo "$actual_val ";
					}
					echo "</li>\n";
				} else {
					$actual_val = stripslashes($$actual_var);
					echo "<li>$actual_var: $actual_val</li>\n";
				}
			}
		}
		echo "</ul>\n<p></p>";
		include_dodosmail_footer($dodosmail_footer_file);
		exit;
	} else {
	headfunction($after_url);
	}
} else {
	include_dodosmail_header($dodosmail_header_file);
	echo "<p class=\"DodosMailError\">Fout - Het formulier is tijdelijk niet bruikbaar, gebruik ".dodosmail_error_handle($your_email_address)." om contact op te nemen.\n";
	echo "<br /><br /><a href=\"javascript:history.back(1)\">Terug</a>\n";
	echo "</p>\n";
	include_dodosmail_footer($dodosmail_footer_file);
	exit;
}



function check_email($email) {
	if( (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) ||
		(preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) {
		return true;
	}
	return false;
}



?>


Staat deze verkeerd?
PHP:
echo header('Location: http://members.quicknet.nl/albertheijn/vergelijkdebon/confirmation.htm')
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan