formulier emailen

  • Onderwerp starter Onderwerp starter SKILL
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

SKILL

Gebruiker
Lid geworden
9 apr 2009
Berichten
41
Hallo,

ik heb het volgende "kleine" contact formulier opgesteld in htmlcode:
Code:
<form method="post" action="testmailform.php">

<input type="hidden" name="to" value="mijnemailadres" />
<input type="hidden" name="subject" value="reactie van website" />

Voornaam: <input type="text" name="Voornaam" /><br />
Achternaam: <input type="text" name="Achternaam" /><br />

<input type="submit" value="verzenden" />

</form>

Ik controleer dit formulier niet en ik wil alle key's en value's tegelijk ophalen en kunnen versturen. Dit doe ik met het volgende php script:
Code:
<?php

//email instellingen
ini_set("smtp", "smtpserver");
ini_set("smtp_port", 25);
ini_set("sendmail_from", "emailadres");

//ophalen ontvanger en onderwerp
$to = $_POST["to"];
$subject = $_POST["subject"];

//superglobal $_POST resetten van het ophalen van ontvanger en onderwerp
reset($_POST);

//ophalen key's en values en één variabele van maken
while($postvar = each($_POST)){
        $varkey = $postvar["key"];
        $varvalue = $postvar["value"];
        $body = $varkey." =  ".$varvalue."\n";
}

//verzend email
mail($to, $subject, $body);

//pagina afhandeling
echo "bedankt!<br />";
echo "<a href=\"http://localhost:8080/testform.php\">klik hier om terug te gaan</a>";

?>

De email komt binnen (ik gebruik dan natuurlijk de juiste instellingen), maar alleen de laatste key met bijbehorende value wordt in $body opgenomen. Ik krijg in mijn email dus alleen te zien:

Achternaam = wat er dan ook is ingevuld.

En de Voornaam wordt niet getoond. Hoeveel invulvelden ik ook maak, alleen de laatste wordt maar getoond in de email. Volgens mij moet ik met de functie each() toch alle keys en values in het formulier af gaan? Hoe zit dit precies? Wat doe ik verkeerd?

Alvast bedankt voor de hulp.
 
Oke, ik ben iets verder nu.

In de php code moet op regel 24 niet staan:
Code:
$body = $varkey." = ".$varvalue."\n";
Er moet wel staan:
Code:
$body .= $varkey." = ".$varvalue."\n";

Het verschil zit hem dus in een puntje. Dan krijg ik de email met alle variabelen en keys onderelkaar toegestuurd. Het probleem op dit moment is alleen dan wanneer ik op verzenden klik, de volgende foutmelding in het scherm verschijnt...terwijl alles toch goed binnen komt. Hoe kan ik dit opvangen?

Notice: Undefined variable: body in Q:\UsbWebserver\UsbWebserver\Root\testmailform.php on line 24
 
$body .= betekent de huidige variabele + wat erna komt.

Declareer boven in onder:
$to = $_POST["to"];
$subject = $_POST["subject"];

ook de variabele body:
PHP:
$body = "";
 
$body .= betekent de huidige variabele + wat erna komt.

Declareer boven in onder:
$to = $_POST["to"];
$subject = $_POST["subject"];

ook de variabele body:
PHP:
$body = "";

Moet ik dan bovenin het volgende noteren?
PHP:
$to = $_POST["to"];
$subject = $_POST["subject"];
$body = $varkey." = ".$varvalue."\n";
Of met de punt, dus:
PHP:
$to = $_POST["to"];
$subject = $_POST["subject"];
$body .= $varkey." = ".$varvalue."\n";

Het vreemde is dat wanneer ik er gelijk een redirect pagina achteraan gooi, dan krijg ik de foutmelding niet meer te zien. Hij linkt dan gelijk door naar de pagina waar ik hem naar toe stuur. Het mail script ziet er nu zo uit:
PHP:
<?php

//controle vorige pagina
$prevurl = getenv("HTTP_REFERER");
if ($prevurl != "http://localhost:8080/testform.php"){
	echo "Dit script is niet aan te roepen vanaf de door u gebruikte locatie.";
	exit;
}

//email instellingen
ini_set("smtp", "xxx");
ini_set("smtp_port", 25);
ini_set("sendmail_from", "xxx");

//ophalen ontvanger, onderwerp en redirectpagina
$to = $_POST["to"];
$subject = $_POST["subject"];
$redirect = $_POST["redirect"];


//superglobal $_POST resetten van het ophalen van ontvanger en onderwerp
reset($_POST);

//ophalen key's en values en één variabele van maken
while($postvar = each($_POST)){
	$varkey = $postvar["key"];
	$varvalue = $postvar["value"];
	$body .= $varkey." = ".$varvalue."\n";
}
	
//verzend email
mail($to, $subject, $body);

//pagina afhandeling
header("location: $redirect");
	
?>
 
Moet ik dan bovenin het volgende noteren?
PHP:
$to = $_POST["to"];
$subject = $_POST["subject"];
$body = $varkey." = ".$varvalue."\n";
Of met de punt, dus:
PHP:
$to = $_POST["to"];
$subject = $_POST["subject"];
$body .= $varkey." = ".$varvalue."\n";

Het vreemde is dat wanneer ik er gelijk een redirect pagina achteraan gooi, dan krijg ik de foutmelding niet meer te zien. Hij linkt dan gelijk door naar de pagina waar ik hem naar toe stuur. Het mail script ziet er nu zo uit:
PHP:
<?php

//controle vorige pagina
$prevurl = getenv("HTTP_REFERER");
if ($prevurl != "http://localhost:8080/testform.php"){
	echo "Dit script is niet aan te roepen vanaf de door u gebruikte locatie.";
	exit;
}

//email instellingen
ini_set("smtp", "xxx");
ini_set("smtp_port", 25);
ini_set("sendmail_from", "xxx");

//ophalen ontvanger, onderwerp en redirectpagina
$to = $_POST["to"];
$subject = $_POST["subject"];
$redirect = $_POST["redirect"];


//superglobal $_POST resetten van het ophalen van ontvanger en onderwerp
reset($_POST);

//ophalen key's en values en één variabele van maken
while($postvar = each($_POST)){
	$varkey = $postvar["key"];
	$varvalue = $postvar["value"];
	$body .= $varkey." = ".$varvalue."\n";
}
	
//verzend email
mail($to, $subject, $body);

//pagina afhandeling
header("location: $redirect");
	
?>

Bovenin $body ="";

en in de while loop zoals het nu staat.
 
Wat maakt
PHP:
$body ="";
voor verschil? Wat betekent die regel extra?
 
Waarom moet ik hem daar declareren?
In principe declareer ik hem toch op het moment dat ik schrijf:
PHP:
$body .= $varkey." = ".$varvalue."\n";

Ik declareer hem met ander met niets toch?
 
hmm

Ik heb beide scripts overgenomen en ik krijg de email gewoon binnen en zonder error
kreeg jij nog steeds een error?
 
hmm

Ik heb beide scripts overgenomen en ik krijg de email gewoon binnen en zonder error
kreeg jij nog steeds een error?

Nee, nu niet meer. Maar de melding is weg gegaan toen ik een redirect pagina had toegevoegd. Wanneer je dit niet doet, maar je echo'd gewoon iets van bedankt!..dan staat die fout melding er wel.
 
ik heb dit in map.php:
HTML:
<form method="post" action="testmailform.php">

<input type="hidden" name="to" value="mijnemail@hotmail.com" />
<input type="hidden" name="subject" value="reactie van website" />

Voornaam: <input type="text" name="Voornaam" /><br />
Achternaam: <input type="text" name="Achternaam" /><br />

<input type="submit" value="verzenden" />

</form>

en in testmailform.php:
PHP:
<?php

//email instellingen
ini_set("smtp", "smtpserver");
ini_set("smtp_port", 25);
ini_set("sendmail_from", "emailadres");

//ophalen ontvanger en onderwerp
$to = $_POST["to"];
$subject = $_POST["subject"];

//superglobal $_POST resetten van het ophalen van ontvanger en onderwerp
reset($_POST);

//ophalen key's en values en één variabele van maken
while($postvar = each($_POST)){
        $varkey = $postvar["key"];
        $varvalue = $postvar["value"];
        $body .= $varkey." =  ".$varvalue."\n";
}

//verzend email
mail($to, $subject, $body);

//pagina afhandeling
echo "bedankt!<br />";
echo "<a href=\"http://localhost:8080/testform.php\">klik hier om terug te gaan</a>";

?>

en dat werkt
 
thnx voor je bovenstaande reactie...ik lees hem net...we waren tegelijk aan het posten denk ik.

Ik heb een zelfde soort probleem met zo melding met het volgende script. Het gaat nog steeds over dat formulier. Ik heb het formulier en het mailscript in hetzelfde bestand staan nu. Op deze manier kan ik restricties maken.

Ik wil nu controleren of het formulier verzonden is of niet. Als het verzonden is dan moet het mailscript draaien. Als het formulier niet verzonden is maar de pagina wordt opgeroepen om het formulier in te gaan vullen dan wil ik dat het script nog niet draait en de pagina getoond wordt.

De code:
PHP:
<html>
<head>
	<title></title>
</head>
<body>
<html>
<head>
	<title>Formulier</title>
	<link rel="stylesheet" type="text/css" href="appdata/stylesheets/form.css" media="screen" />
</head>
<body>

<?php
include "header.php"; //header invoegen
?>

<?php
//email instellingen
ini_set("smtp", "xxx");
ini_set("smtp_port", 25);
ini_set("sendmail_from", "xxx");
?>

<?php
//controleren of het formulier verzonden is en het script moet draaien 
//of dat het formulier moet worden getoond
if ($_POST["Verzendbutton"] != "Verzenden"){
?>

<!--formulier begin-->
<form method="post" action="scriptform.php">
<table>
<input type="hidden" name="to" value="xxx" />
<input type="hidden" name="subject" value="Reactie website." />
<input type="hidden" name="redirect" value="http://localhost:8080/bedankt.php" />
<tr>
<td>Voornaam:</td>
<td><input type="text" name="Voornaam" size="20" maxlength="10" /> (vb. Martine)</td>
</tr>
<tr>
<td>Achternaam:</td>
<td><input type="text" name="Achternaam" size="20" maxlength="15" /> (vb. Franse)</td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="Email" size="20" maxlength="30" /> (vb. martine.franse@zeeland.net</td>
</tr>
<tr>
<td>Telefoonnummer:</td>
<td><input type="text" name="Telnr" size="20" maxlength="10" /> (vb. 0164660706)</td>
</tr>
<tr>
<td>Opmerking:</td>
<td><textarea cols="50" rows="10" name="Opmerking">Typ hier uw opmerking.</textarea></td>
</tr>
<tr>
<td><input type="reset" value="Reset" /></td>
<td><input type="submit" name="Verzendbutton" value="Verzenden" /></td>
</table>
</form>
<!--formulier einde-->

<?php
} else {
	//ophalen ontvanger, onderwerp en redirectpagina
$to = $_POST["to"];
$subject = $_POST["subject"];
$redirect = $_POST["redirect"];

//superglobal $_POST resetten
reset($_POST);

//invoer ophalen en omzetten in variabelen
$voornaam = "Voornaam: ".$_POST["Voornaam"]."\n";
$achternaam = "Achternaam: ".$_POST["Achternaam"]."\n";
$email = "Emailadres: ".$_POST["Email"]."\n";
$telnr = "Telefoonnummer: ".$_POST["Telnr"]."\n";
$opmerking = "Opmerking : ".$_POST["Opmerking"]."\n";

//mailbody samenstellen uit opgehaalde invoer
$mailbody = $voornaam;
$mailbody .= $achternaam;
$mailbody .= $email;
$mailbody .= $telnr;
$mailbody .= $opmerking;

//email versturen
mail($to, $subject, $mailbody);

//afhandeling pagina
if (isset($redirect)){
	header("location: $redirect");
}
}
?>

<?php
include "footer.php"; //footer invoegen
?>

</body>
</html>
</body>
</html>

Volgens mij werkt dit script wel (kan niet 100% zeker controleren omdat ziggo ff geen mail aflevert, storing ofzo) maar ik krijg steeds de volgende foutmelding:

Notice: Undefined index: Verzendbutton in Q:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 27


Hoe los ik dit op!?
 
Laatst bewerkt:
thnx voor je bovenstaande reactie...ik lees hem net...we waren tegelijk aan het posten denk ik.

Ik heb een zelfde soort probleem met zo melding met het volgende script. Het gaat nog steeds over dat formulier. Ik heb het formulier en het mailscript in hetzelfde bestand staan nu. Op deze manier kan ik restricties maken.

Ik wil nu controleren of het formulier verzonden is of niet. Als het verzonden is dan moet het mailscript draaien. Als het formulier niet verzonden is maar de pagina wordt opgeroepen om het formulier in te gaan vullen dan wil ik dat het script nog niet draait en de pagina getoond wordt.

De code:
PHP:
<html>
<head>
	<title></title>
</head>
<body>
<html>
<head>
	<title>Formulier</title>
	<link rel="stylesheet" type="text/css" href="appdata/stylesheets/form.css" media="screen" />
</head>
<body>

<?php
include "header.php"; //header invoegen
?>

<?php
//email instellingen
ini_set("smtp", "xxx");
ini_set("smtp_port", 25);
ini_set("sendmail_from", "xxx");
?>

<?php
//controleren of het formulier verzonden is en het script moet draaien 
//of dat het formulier moet worden getoond
if ($_POST["Verzendbutton"] != "Verzenden"){
?>

<!--formulier begin-->
<form method="post" action="scriptform.php">
<table>
<input type="hidden" name="to" value="xxx" />
<input type="hidden" name="subject" value="Reactie website." />
<input type="hidden" name="redirect" value="http://localhost:8080/bedankt.php" />
<tr>
<td>Voornaam:</td>
<td><input type="text" name="Voornaam" size="20" maxlength="10" /> (vb. Martine)</td>
</tr>
<tr>
<td>Achternaam:</td>
<td><input type="text" name="Achternaam" size="20" maxlength="15" /> (vb. Franse)</td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="Email" size="20" maxlength="30" /> (vb. martine.franse@zeeland.net</td>
</tr>
<tr>
<td>Telefoonnummer:</td>
<td><input type="text" name="Telnr" size="20" maxlength="10" /> (vb. 0164660706)</td>
</tr>
<tr>
<td>Opmerking:</td>
<td><textarea cols="50" rows="10" name="Opmerking">Typ hier uw opmerking.</textarea></td>
</tr>
<tr>
<td><input type="reset" value="Reset" /></td>
<td><input type="submit" name="Verzendbutton" value="Verzenden" /></td>
</table>
</form>
<!--formulier einde-->

<?php
} else {
	//ophalen ontvanger, onderwerp en redirectpagina
$to = $_POST["to"];
$subject = $_POST["subject"];
$redirect = $_POST["redirect"];

//superglobal $_POST resetten
reset($_POST);

//invoer ophalen en omzetten in variabelen
$voornaam = "Voornaam: ".$_POST["Voornaam"]."\n";
$achternaam = "Achternaam: ".$_POST["Achternaam"]."\n";
$email = "Emailadres: ".$_POST["Email"]."\n";
$telnr = "Telefoonnummer: ".$_POST["Telnr"]."\n";
$opmerking = "Opmerking : ".$_POST["Opmerking"]."\n";

//mailbody samenstellen uit opgehaalde invoer
$mailbody = $voornaam;
$mailbody .= $achternaam;
$mailbody .= $email;
$mailbody .= $telnr;
$mailbody .= $opmerking;

//email versturen
mail($to, $subject, $mailbody);

//afhandeling pagina
if (isset($redirect)){
	header("location: $redirect");
}
}
?>

<?php
include "footer.php"; //footer invoegen
?>

</body>
</html>
</body>
</html>

Volgens mij werkt dit script wel (kan niet 100% zeker controleren omdat ziggo ff geen mail aflevert, storing ofzo) maar ik krijg steeds de volgende foutmelding:

Notice: Undefined index: Verzendbutton in Q:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 27


Hoe los ik dit op!?

De $_POST['verzendbutton'] bestaat nog niet als er niet op verzenden geklikt is.
vervang:
PHP:
if ($_POST["Verzendbutton"] != "Verzenden"){
eens door:
PHP:
if (isset($_POST['Verzendbutton'])({
 
Ik heb er dit van gemaakt:
PHP:
if (isset($_POST["Verzendbutton"])){

Dit levert de volgende foutmeldingen op als ik het de pagina op zoek:

Notice: Undefined index: to in F:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 66

Notice: Undefined index: subject in F:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 67

Notice: Undefined index: redirect in F:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 68

Notice: Undefined index: Voornaam in F:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 74

Notice: Undefined index: Achternaam in F:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 75

Notice: Undefined index: Email in F:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 76

Notice: Undefined index: Telnr in F:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 77

Notice: Undefined index: Opmerking in F:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 78

Warning: mail() [function.mail]: SMTP server response: 503 No recipient(s). in F:\UsbWebserver\UsbWebserver\Root\scriptform.php on line 88

Het lijkt er op dat hij dan verder met else niet verder kan.
 
Laatst bewerkt:
jah sorry zag iets over het hoofd. Als er geen post is moet het formulier weergegeven worden dus:

PHP:
if (!isset($_POST["Verzendbutton"])){
met uitroep teken ervoor
 
jah sorry zag iets over het hoofd. Als er geen post is moet het formulier weergegeven worden dus:

PHP:
if (!isset($_POST["Verzendbutton"])){
met uitroep teken ervoor

goed dat je dat zegt...wat betekent dat uitroepteken ervoor?

(dat boek dat ik naast me heb, daar heb ik ook niet veel aan...er staat gewoon echt soms foute code in...en niet alle tekens staan uitgelegd)
 
Dat staat voor NOT ofwel het tegenovergestelde.

dus isset wordt notset eigenlijk
 
Dat staat voor NOT ofwel het tegenovergestelde.

dus isset wordt notset eigenlijk

Owkee,

dus isset controleert of een waarde leeg is. Met het uitroepteken controleert hij dus of een waarde niet leeg is.

dus als er wel een waarde is laat hij het formulier zien...als er geen waarde is dan laat hij het mail script..das toch precies verkeerd om?

De foutmeldingen zijn overigens wel weg. Ik kan alleen niet controleren of de emails aankomen om dat begin van de middag al mijn mail van ziggo te laat of niet aankomt. Ik heb dit met 3 andere emailadressen gecontroleerd.
 
Bijna correct.
ISSET kijkt of de variabele uberhaupt aangemaakt is.
als een variabele als $test = "" die is dus wel leeg, maar wel aangemaakt.

Dus als er geen $_POST waarde is (!isset($_POST["Verzendbutton")) ) dan moet het formulier weergegeven worden lijkt me toch?
 
jaaaaaja,

het begint te dagen. isset kijkt of er een waarde is aangemaakt.

Die is er in principe wel..want die staat onder aan mn formulier. Maar die geldt pas als er op de knop verzenden is gedrukt want dat voert hij dezelfde pagina uit waarna ik naar de "bedankt.php" pagina wordt geleid.

Sweet...ik wou dat ik nu die emails een binnen kreeg want dat wil nog voor geen meter lukken!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan