Probleem: mailform blijft leeg (Opgelost)
fdaanen - 31/05/2009 11:03 (laatste wijziging 31/05/2009 11:09)
Nieuw lid
Hallo allemaal,
Ik ben een beginner op het gebied van php. Ik heb voor mijn site een mailform gemaakt op basis van een ander mailform.
Als ik dit test op mijn site dan ontvang ik wel een mail, maar hier staan geen gegevens in...
Wie weet raad?
HET FORMULIER:
<form method="POST" action="mailverzenden.php" target="_top">
<table align="center">
<tr>
<td>Naam:</td>
<td><input name="naamveld" type="text" id="naamveld"></td>
</tr>
<tr>
<td>E-mail adres: </td>
<td><input name="mailadresveld" type="text" id="mailadresveld"></td>
</tr>
<tr>
<td>Telefoonnummer:</td>
<td><input name="telveld" type="text" id="mailadresveld0"></td>
</tr>
<tr>
<td>Bericht:</td>
<td><textarea name="berichtveld" id="berichtveld"></textarea></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Verzend" name="B1">
<input type="reset" value="Reset" name="B2"></td>
</tr>
</table>
</form>
<form method = "POST" action = "mailverzenden.php" target = "_top" > <td ><input name = "naamveld" type = "text" id = "naamveld" ></ td > <td ><input name = "mailadresveld" type = "text" id = "mailadresveld" ></ td > <td ><input name = "telveld" type = "text" id = "mailadresveld0" ></ td > <td ><input type = "submit" value = "Verzend" name = "B1" > <input type = "reset" value = "Reset" name = "B2" ></ td >
DE PHP:
<?
$mail = "info@blablablabla.com";
mail("$mail", "$onderwerpveld", "
Naam: $naamveld
E-mail adres: $mailadresveld
Telefoonnummer: $telveld
Bericht: $berichtveld
", "From: $naamveld<$mailadresveld>\nReturn-path: $mailadresveld");
?>
<?
$mail = "info@blablablabla.com" ;
mail ( "$mail " , "$onderwerpveld " , "
Naam: $naamveld
E-mail adres: $mailadresveld
Telefoonnummer: $telveld
Bericht: $berichtveld
" , "From: $naamveld <$mailadresveld >\n Return-path: $mailadresveld " ) ;
?>
Alvast bedankt voor jullie reacties! Koen schreef:
Code tags gebruiken aub, zo blijft je topic overzichtelijk. Lees ook even de
forumregels .
12 antwoorden
Gesponsorde links
Koen - 31/05/2009 11:14
PHP expert
Het probleem is simpel: vroeger was er een optie in PHP, PHP.net: register_globals , die standaard aanstond. Met deze optie kon je de elementen uit superglobals ($_POST, $_SERVER, $_SESSION, $_GET, ...) schrijven als een gewone variabele. Dus bijvoorbeeld:
$_POST['veldnaam']; // dit is de inhoud van het tekstveld 'veldnaam' dat via POST werd verzonden door een formulier
// werd dan
$veldnaam;
$_POST [ 'veldnaam' ] ; // dit is de inhoud van het tekstveld 'veldnaam' dat via POST werd verzonden door een formulier
// werd dan
$veldnaam ;
Deze optie staat bij de recentere versies van PHP standaard uit, en zal zelfs verwijderd worden vanaf PHP6. Dit omdat er teveel security bugs van kracht zouden zijn.
Om je probleem op te lossen pas je dus $berichtveld aan naar $_POST['berichtveld'], en dat voor alle andere velden die je via het formulier meestuurt.
Als je het jezelf toch gemakkelijk wil maken kan je nog altijd overwegen de functie PHP.net: extract te gebruiken.
fdaanen - 31/05/2009 11:29
Nieuw lid
Beste Koen,
Bedankt voor je reactie, ik heb nu het volgende in mijn PHP.
<?
$mail = "info@miljoenenverdienen.com";
mail("$mail", "$onderwerpveld", "
Naam: $_POST['naamveld']
E-mail adres: $_POST['mailadresveld']
Telefoonnummer: $_POST['telveld']
Bericht: $_POST['berichtveld']
", "From: $naamveld<$mailadresveld>\nReturn-path: $mailadresveld");
?> ]
<?
$mail = "info@miljoenenverdienen.com" ;
mail ( "$mail " , "$onderwerpveld " , "
Naam: $_POST ['naamveld']
E-mail adres: $_POST ['mailadresveld']
Telefoonnummer: $_POST ['telveld']
Bericht: $_POST ['berichtveld']
" , "From: $naamveld <$mailadresveld >\n Return-path: $mailadresveld " ) ;
?> ]
Maar nu krijg ik deze error als ik op mn site het formulier invul...
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/blablablabla.com/www/mailverzenden.php on line 9
Martijn1989 - 31/05/2009 11:34 (laatste wijziging 31/05/2009 11:34)
PHP ver gevorderde
Gebruik anders dit script, doet hetzelfde en werkt .. als je hem wilt uitbreiden (wat bij jou het geval is met telefoonnummer bijv.) kan je daar ook weer wat van leren :
<h1>Contact</h1>
U kunt altijd contact met ons opnemen, dit kan via email. Mocht u een vraag hebben kunt u dit contactformulier invullen.<br /><br />
<?php
function mailen($naam_ontvanger, $email_ontvanger, $naam_verzender, $email_verzender, $onderwerp, $bericht) {
$headers = "From: ".$naam_verzender." <".$email_verzender.">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "Return-Path: Mail-Error <". $email_verzender .">\r\n";
$headers .= "Reply-To: ".$naam_verzender." <".$email_verzender.">\r\n";
$bericht = nl2br($bericht);
mail($email_ontvanger, $onderwerp, $bericht, $headers);
}
if(isset($_POST['submit'])) {
if($_POST['naam'] != "" && $_POST['email'] != "" && $_POST['bericht'] != "") {
mailen("Hier jou naam", "Hier jou emailadres", htmlspecialchars($_POST['naam']), htmlspecialchars($_POST['email']), "Bericht uit contactformulier!", htmlspecialchars($_POST['bericht']));
echo '<b>Uw email is verzonden naar ons, wij nemen zo snel mogelijk contact op als dat nodig is.</b>';
$_POST['naam'] = ""; $_POST['email'] = ""; $_POST['bericht'] = "";
} else {
echo '<b>Vul wel alle gegevens in, anders kunnen wij geen contact met u opnemen!</b>';
}
} else {
?>
<form action="" method="post">
<table>
<tr><td>Naam :</td><td><input name="naam" type="text" value="<?php echo htmlspecialchars($_POST['naam']); ?>"></td></tr>
<tr><td>Email :</td><td><input name="email" type="text" value="<?php echo htmlspecialchars($_POST['email']); ?>"></td></tr>
<tr><td valign="top">Bericht :</td><td><textarea name="bericht" rows=5 cols=30 wrap="on"><?php echo htmlspecialchars($_POST['bericht']); ?></textarea></td></tr>
<tr><td colspan="2"><input type="submit" name="submit" value="Email bericht sturen!"></td></tr>
</table>
</form>
<?php } ?>
<h1>Contact</h1>
U kunt altijd contact met ons opnemen, dit kan via email. Mocht u een vraag hebben kunt u dit contactformulier invullen.<br /><br />
<?php
function mailen( $naam_ontvanger , $email_ontvanger , $naam_verzender , $email_verzender , $onderwerp , $bericht ) {
$headers = "From: " . $naam_verzender . " <" . $email_verzender . ">\r \n " ;
$headers .= "MIME-Version: 1.0\r \n " ;
$headers .= "Content-type: text/html; charset=iso-8859-1\r \n " ;
$headers .= "Return-Path: Mail-Error <" . $email_verzender . ">\r \n " ;
$headers .= "Reply-To: " . $naam_verzender . " <" . $email_verzender . ">\r \n " ;
$bericht = nl2br ( $bericht ) ;
mail ( $email_ontvanger , $onderwerp , $bericht , $headers ) ;
}
if ( isset ( $_POST [ 'submit' ] ) ) {
if ( $_POST [ 'naam' ] != "" && $_POST [ 'email' ] != "" && $_POST [ 'bericht' ] != "" ) {
echo '<b>Uw email is verzonden naar ons, wij nemen zo snel mogelijk contact op als dat nodig is.</b>' ;
$_POST [ 'naam' ] = "" ; $_POST [ 'email' ] = "" ; $_POST [ 'bericht' ] = "" ;
} else {
echo '<b>Vul wel alle gegevens in, anders kunnen wij geen contact met u opnemen!</b>' ;
}
} else {
?>
<form action="" method="post">
<table>
<tr><td>Naam :</td><td><input name="naam" type="text" value="
<?php echo htmlspecialchars ( $_POST [ 'naam' ] ) ; ?> "></td></tr>
<tr><td>Email :</td><td><input name="email" type="text" value="
<?php echo htmlspecialchars ( $_POST [ 'email' ] ) ; ?> "></td></tr>
<tr><td valign="top">Bericht :</td><td><textarea name="bericht" rows=5 cols=30 wrap="on">
<?php echo htmlspecialchars ( $_POST [ 'bericht' ] ) ; ?> </textarea></td></tr>
<tr><td colspan="2"><input type="submit" name="submit" value="Email bericht sturen!"></td></tr>
</table>
</form>
<?php } ?>
Koen - 31/05/2009 11:38
PHP expert
<?php
$mail = "info@miljoenenverdienen.com";
mail($mail, $_POST['onderwerpveld'], "
Naam: ".$_POST['naamveld']."
E-mail adres: ".$_POST['mailadresveld']."
Telefoonnummer: ".$_POST['telveld']."
Bericht: ".$_POST['berichtveld']."
", "From: ".$_POST['naamveld']." <".$_POST['mailadresveld'].">\r\nReturn-path: ".$_POST['mailadresveld']);
?>
<?php
$mail = "info@miljoenenverdienen.com" ;
mail ( $mail , $_POST [ 'onderwerpveld' ] , "
Naam: " . $_POST [ 'naamveld' ] . "
E-mail adres: " . $_POST [ 'mailadresveld' ] . "
Telefoonnummer: " . $_POST [ 'telveld' ] . "
Bericht: " . $_POST [ 'berichtveld' ] . "
" , "From: " . $_POST [ 'naamveld' ] . " <" . $_POST [ 'mailadresveld' ] . ">\r \n Return-path: " . $_POST [ 'mailadresveld' ] ) ;
?>
Dit zal beter werken, probeer altijd om variabelen buiten de aanhalingstekens te houden op bovenstaande manier. Op die manier weet de PHP parser dat het dat niet moet zien als letterlijke tekst en is je scriptje weer een paar microseconden sneller, bovendien voorkom je foutmeldingen zoals deze
fdaanen - 31/05/2009 11:40 (laatste wijziging 31/05/2009 11:55)
Nieuw lid
Hoi Koen,
Het werkt, harstikke bedankt.
Het enige waar ik nu nog mee zit is een terugrouting naar mijn site nadat het formulier verstuurd is.
Je krijgt nu een witte pagina te zien...
Gr,
Ferdie
Borre - 31/05/2009 11:59
Nieuw lid
Dit toevoegen als de mail is verstuurd:
header('Refresh: 3; index.php');
fdaanen - 31/05/2009 12:16
Nieuw lid
kan ik 'm dan ook naar bijvoorbeeld index.htm laten gaan?
vinTage - 31/05/2009 12:20
Nieuw lid
Borre schreef:
Dit toevoegen als de mail is verstuurd:
header('Refresh: 3; index.php');
fdaanen schreef:
kan ik 'm dan ook naar bijvoorbeeld index.htm laten gaan?
Door zelf de moeite nemen om php naar html te veranderen
fdaanen - 31/05/2009 12:24
Nieuw lid
ja, maar wat ik ook intik, hij blijft verversen op dezelfde pagina en het formulier wordt iedere drie seconden naar mijn mailbox verzonden...
vinTage - 31/05/2009 12:28
Nieuw lid
die code wel NA je mail functie gezet ?
Koen - 31/05/2009 12:42
PHP expert
header('Refresh: 3; URL=index.html');
header ( 'Refresh: 3; URL=index.html' ) ;
gaat beter werken
fdaanen - 31/05/2009 12:48
Nieuw lid
Kijk, dat werkt beter.
Thanx Koen!
Gesponsorde links
Dit onderwerp is gesloten .