Beste PHP'ers,

Ik ben bezig met een mailing form voor een website waarbij ik PHP gebruik.
Ik dacht dat ik klaar was met mijn script, het bleek echter niet te werken :(.
wie kan mij helpen?

Dit is mijn totale script:

HTML, pagina contact.html:

<html>
<head>
<title></title>
<style type="text/css">
label{
display: block;
}
</style>
</head>

<body background="BodyBg.png">
<form name="personalia" form action="contact.php" method="POST">

<fieldset>
<legend>Contact</legend>

<label for="voornaam">Voornaam:</label>
<input type="text" name="voornaam" id="voornaam" />

<label for="achternaam">Achternaam:</label>
<input type="text" name="achternaam" id="achternaam" />

<label for="e-mail">e-mail:</label>
<input type="text" name="e-mail" id="e-mail">

<label for="telefoonnummer">Telefoonnummer:</label>
<input type="text" name="telefoonnummer" id="telefoonnummer" />

<br>

<label for="vraag">Uw vraag?:</label>
<textarea name="Uw vraag?" rows="15" cols="40"></textarea><br>

<input type="submit" name="submit" value="Versturen"/>

<input type="reset" name="reset" value="Wissen"/>

</fieldset>

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


PHP pagina, contact.php:


<?php
$to = $_REQUEST['[email protected]'] ;
$from = $_REQUEST['e-mail'] ;
$name = $_REQUEST['Voornaam'] ;
$headers = "From: $from";
$subject = "mindfulness vraag";

$fields = array();
$fields{"voornaam"} = "voornaam";
$fields{"achternaam"} = "achternaam";
$fields{"e-mail"} = "e-mail";
$fields{"telefoonnummer"} = "telefoonnummer";
$fields{"vraag"} = "vraag";

$body = "We have received the following information:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); }

$headers2 = "From: [email protected]";
$subject2 = "Bedankt voor uw reactie!";
$autoreply = "Bedankt voor uw reactie, ik zal zo snel mogelijk reageren!";

$send = mail($to, $subject, $body, $headers);
$send2 = mail($from, $subject2, $autoreply, $headers2);
if($send)
{header( "Location: http://www.eenopgegevenpagina.nl" );}
else
{print "Er is iet misgegaan bij het mailen.";}
?> 
<?php
error_reporting(E_ALL);
ini_set("display_errors",1);
?>

Bovenaan je script graag, en kijk wat die geven.

Edit: Regel 9 t/m 13: Het is toch echt $array["key"] = $value;
Pas je post even aan en gebruik [ignore]
 en 
[/ignore] tags om je code heen. Om php code zet je uiteraard dit:<?php en ?>Gebruik je knop om dit te doen.

SanThe.
dank je SanThe! dat ziet er inderdaad een stuk beter uit ;)

@Jezpur:
ik ga even uitleggen wat er precies gebeurd als ik mijn script test.

het verstuurd wel de mail naar degene die het form heeft ingevuld.
het verstuurd geen mail naar degene die de informatie uit het form nodig heeft.
en het geeft de opgegeven foutmelding "Er is iet misgegaan bij het mailen."

ik had geen tijd om dit erbij te zetten in mijn eerste bericht, wellicht heeft het nog nut ;).

bedankt voor de reacties tot nu toe, ik ga eerst even de suggestie van Jezpur bewerkstelligen!

edit: een vraagje Jezpur, moet ik dan dit:


<?php
$fields = array();
$fields{"voornaam"} = "voornaam";
$fields{"achternaam"} = "achternaam";
$fields{"e-mail"} = "e-mail";
$fields{"telefoonnummer"} = "telefoonnummer";
$fields{"vraag"} = "vraag";
?>


vervangen voor dit:


<?php
$array["key"] = $value;
?>


of voor dit:

<?php
$array["key"] = $value;
$fields{"voornaam"} = "voornaam";
$fields{"achternaam"} = "achternaam";
$fields{"e-mail"} = "e-mail";
$fields{"telefoonnummer"} = "telefoonnummer";
$fields{"vraag"} = "vraag";
?>


of ben ik nu helemaal scheef bezig?

~Robert
Ik ga nog maar wat meer informatie geven.

Wat het script hoort te doen:

1. Het moet een mailtje sturen naar degene die het formulier heeft ingevuld.

2. Het moet een mailtje sturen naar mij, met de informatie die is ingevuld.

3. Als het niet goed is gegaan moet er komen te staan dat het niet is gelukt.

4. Als het formulier succesvol is verzonden moet dat er ook komen te staan.


Later ga ik er nog voor zorgen dat het formulier eerst de velden checkt, eerst maar even dit probleempje oplossen. Ik kom er echter zelf echt niet uit :(

~Robert
gebruik

if (isset($_POST['submit'])) {


dan kun je daar die PHP code schrijven.
Maar bouw het wel een beetje om ;)
@Mitchell: waag het niet om daar ooit nog eens mee aan te komen. Gebruik if($_SERVER['REQUEST_METHOD'] == "POST") {.

@Robert: Ik heb je script nu verbeterd. Analyseer het, en kijk wat jij fout deed en/of verbeterd is.

<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(!empty($_POST['e-mail'])
&& !empty($_POST['voornaam'])
&& !empty($_POST['achternaam'])
&& !empty($_POST['telefoonnummer'])
&& !empty($_POST['vraag'])) {
$to = "[email protected]";
$headers = "From: ".$_POST['voornaam']." ".$_POST['achternaam']." <".$_POST['email'].">"."\n";
$subject = "mindfulness vraag";

$body = "We have received the following information:\n\n";
foreach($_POST as $key => $value) {
$body .= sprintf("%20s: %s"."\n", $key, $value);
}

// is een scriptelijke autoreply wel nodig? Kun je die niet gewoon instellen op je mailaccount?
$headers2 = "From: [email protected]";
$subject2 = "Bedankt voor uw reactie!";
$sReply = "Bedankt voor uw reactie, ik zal zo snel mogelijk reageren!";
$autoMail = mail($from, $subject2, $sReply, $headers2);

if(mail($to, $subject, $body, $headers)) {
header("Location: http://www.eenopgegevenpagina.nl";);
} else {
echo "Er is iets misgegaan bij het mailen.";
}
} else {
echo 'Niet alle velden zijn ingevuld. Probeer het nogmaals.';
}
} else {
header("Location: http://www.jouwdomein.nl/het-formulier.html";); // even aanpassen!
}
?>

Overigens moet je bij je formulier de textarea een andere name geven, nl: "vraag". "Uw vraag?" is niet verstandig om als name te nemen ;-).
Hartstikke bedankt Jezpur! Ik ga zeker een analyse doen. Zodra ik weet wat ik fout heb gedaan zal ik het even posten!
je deed $fields{"voornaam"} = "voornaam";

die {} moeten [] zijn. dus:

$fields["voornaam"] = "voornaam";

das alles...
Ik heb de laatste problemen opgelost, dank jullie wel voor de hulp!

Reageren