mailscript fail :(
Ik ben sinds enige tijd bezig met een relatief groot project voor mij, echter heeft dit het gevolg dat er problemen bij komen kijken... nu zit ik met iets waar ik echt niet meer mee uit kwam maar toch een beginners probleempje is, en anders alvast me excuses voor het verkeert posten... het gaat om een website waarbij ik laatst een mailformulier heb, echter wordt de controle uitgevoerd, de mail wordt niet verstuurd en er zijn geen meldingen dat het bericht verstuurd word... ik heb de host via een vorig project waar we ook een mail systeem hadden, daar werkte het echter wel, helaas ben ik door omstandigheden de bestanden en wachtwoorden kwijt waardoor ik het niet meer op kan halen...
dan nu de codes die hiervoor moeten zorgen:
het mailformulier:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Carsten PT</title>
<link href="/include/style.css" rel="stylesheet" type="text/css" >
<script>
function validateForm()
{
var x = document.forms["contact"]["email"].value;
var y = document.forms["contact"]["voornaam"].value;
var z = document.forms["contact"]["onderwerp"].value;
var q = document.forms["contact"]["bericht"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (y == null || y == "") {
alert("Je hebt je naam nog niet ingevuld.");
return false;
}
if (z == null || z == "") {
alert("Je hebt geen onderwerp ingevuld.");
return false;
}
if (q == null || q == "") {
alert("Je hebt nog geen bericht meeverstuurd.");
return false;
}
if (atpos < 1 || dotpos<atpos+2 || dotpos+2>x.length) {
alert("Je hebt geen geldig e-mailadres ingevoerd.");
return false;
}
}
</script>
</head>
<body>
<div id="ctleft">
<h2>
Contact
</h2>
</div>
<div id="ctright">
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if (isset($_REQUEST['email'])) { // als e-mail ingevuld is,
$signature = $_REQUEST['voornaam'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['onderwerp'];
$message = $_REQUEST['bericht'];
$receiver = "[email protected]";
mail($receiver, $subject, $message, "From:" . $signature . " <" . $email . ">");
echo "Bericht is succesvol verzonden.";
} else {
?>
if (isset($_REQUEST['email'])) { // als e-mail ingevuld is,
$signature = $_REQUEST['voornaam'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['onderwerp'];
$message = $_REQUEST['bericht'];
$receiver = "[email protected]";
mail($receiver, $subject, $message, "From:" . $signature . " <" . $email . ">");
echo "Bericht is succesvol verzonden.";
} else {
?>
<div style="margin-top:30px;">
<form name="contact" onSubmit="return validateForm()" action= method="POST" >
<table border="0">
<tr>
<td>Voornaam:</td>
<td><input type="text" name="voornaam" placeholder="Voornaam" /></td>
</tr>
<tr>
<td>E-mailadres:</td>
<td><input type="text" name="email" placeholder="[email protected]" /> </td>
</tr>
<tr>
<td>Onderwerp:</td>
<td><input type="text" name="onderwerp" placeholder="Onderwerp" /></td>
</tr>
<tr>
<td>Bericht:</td>
<td><textarea name="bericht" placeholder="type hier jouw bericht..." rows="10" cols="30" >
</textarea></td>
</tr>
<tr>
<td>
<input name="Submit" type="submit" value="verzenden" />
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
bij voorbaat dank
met vriendelijke groet,
Gewijzigd op 24/12/2012 01:15:31 door C -
Gebruik ipv
Op mijn server werkt het script dan wel, anders ook niet
Vraag: heb je een host waar het bestand op staat of draai je een eigen webserver?
In geval van eigen webserver zou je even de instellingen in php.ini moeten nakijken of die goed staan
Gewijzigd op 24/12/2012 02:13:30 door jack maessen
k heb hem net getest en kom tot de conclusie dat ik rechtstreeks doorgestuurd wordt naar de homepage, zonder dat ik de melding krijg van bericht is verzonden of dat me bericht wordt verstuurt... wel krijg ik als ik daarna me pagina vernieuw nog de melding van dat de gegevens opnieuw worden verzonden van chrome...
* Ik heb gister nog ergens hier op het forum gelezen dat PHP_SELF niet veilig is, maar waarom zou je action niet gewoon helemaal weglaten?
* je moet ook controleren of de mail wel is verzonden, gooi hem gewoon ff in een if-statement.
* Je bent vatbaar voor een mail-injection.
* Zoals hier ongeveer 10x per dag wordt verteld, maak je niet gebruik van de juiste mailheaders, neem hier is een kijkje: http://phpwiki.santhe.nl/index.php/De_juiste_mailheaders
Gewijzigd op 24/12/2012 11:10:07 door Bo Ter Ham
en voor het emailen kun je beter gebruik maken van PHPmailer. geen gesodemieter met mailheaders, dat wordt allemaal voor je geregeld...
controle en me headers was ik nog mee bezig, me eerste zorg was dat het niet werkte terwijl hij dat wel zou moeten...
in iedergeval bedankt iedereen :)
Cyvan Oort op 24/12/2012 01:13:32:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if (isset($_REQUEST['email'])) { // als e-mail ingevuld is,
$signature = $_REQUEST['voornaam'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['onderwerp'];
$message = $_REQUEST['bericht'];
$receiver = "[email protected]";
mail($receiver, $subject, $message, "From:" . $signature . " <" . $email . ">");
echo "Bericht is succesvol verzonden.";
?>
if (isset($_REQUEST['email'])) { // als e-mail ingevuld is,
$signature = $_REQUEST['voornaam'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['onderwerp'];
$message = $_REQUEST['bericht'];
$receiver = "[email protected]";
mail($receiver, $subject, $message, "From:" . $signature . " <" . $email . ">");
echo "Bericht is succesvol verzonden.";
?>
Waarom gebruik je $_REQUEST? Je formulier heb je $_POST staan.
Waarom kopieer je eigenlijk de gegevens? Gezien je verdere script is dat overbodig.