PHP form verstuurt niets en geeft geen foutmelding
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
error_reporting(E_ALL);
error_reporting(-1);
ini_set('error_reporting', E_ALL);
$vnaamerr = $achternaamerr = $emailerr = $uwaanboderr = "";
$vnaam = $achternaam = $email = $uwaanbod = $message = "";
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['vnaam'])) {
$vnaamerr = "Voornaam mag niet leeg zijn!";
} else {
$vnaam = test_input($_POST['vnaam']);
if (!preg_match("/^[a-zA-Z-' ]*$/",$vnaam)) {
$vnaamerr= "Een voornaam mag alleen letters en spacties bevatten";
}
}
if (empty($_POST['achternaam'])) {
$achternaamerr = "Achternaam mag niet leeg zijn!";
} else {
$achternaam = test_input($_POST['achternaam']);
if(!preg_match("/^[a-zA-Z-' ]*$/",$achternaam)) {
$achternaamerr= "Een achternaam mag alleen letters en spacties bevatten";
}
}
if (empty($_POST['email'])) {
$emailerr = "Mailadres mag niet leeg zijn!";
} else {
$email =test_input($_POST['email']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailerr = "Het format van het mailadres is niet correct!";
}
}
if (empty($_POST['uwaanbod'])) {
$uwaanboderr = "Aanbod mag niet leeg zijn!";
} else {
$uwaanbod = test_input($_POST['uwaanbod']);
}
$message =test_input($_POST['toelichting']);
mail($to,$message,$body);
}
function test_input($data){
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$to = "**knip**";
$body = "";
$body .="Van: ".$vnaam."\r\n";
$body .="Achternaam: ".$achternaam."\r\n";
$body .="Email: ".$email."\r\n";
$body .="Aanbod: ".$uwaanbod."\r\n";
$body .="Toelichting: ".$message."\r\n";
?>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/styles.css" media="all">
<title>CryptoFit</title>
</head>
<body>
<div class="container">
<h1>Dit domeinnaam staat te koop</h1>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="POST" class="form">
<div class="form-group">
<label for="vnaam" class="form-label">Voornaam</label>
<input type="text" class="form-control" id="vnaam" name="vnaam" tabindex="1" value="<?php if (isset($vnaam)) echo $vnaam; ?>">
<span class="error">* <?php echo $vnaamerr; ?></span>
</div>
<div class="form-group">
<label for="achternaam" class="form-label">Achternaam</label>
<input type="text" class="form-control" id="achternaam" name="achternaam" tabindex="2" value="<?php if (isset($achternaam)) echo $achternaam; ?>">
<span class="error">* <?php echo $achternaamerr; ?></span>
</div>
<div class="form-group">
<label for="email" class="form-label">Uw mailadres</label>
<input type="email" class="form-control" id="email" name="email" tabindex="3" value="<?php if (isset($email)) echo $email; ?>">
<span class="error">* <?php echo $emailerr; ?></span>
</div>
<div class="form-group">
<label for="uwaanbod" class="form-label">Uw aanbod</label>
<input type="number" class="form-control" id="uwaanbod" name="uwaanbod" tabindex="4" value="<?php if (isset($uwaanbod)) echo $uwaanbod; ?>">
<span class="error">* <?php echo $uwaanboderr; ?></span>
</div>
<div class="form-group">
<label for="toelichting" class="form-label">Toelichting</label>
<textarea class="form-control" id="toelichting" name="toelichting" tabindex="5" row="4" cols="50"></textarea>
</div>
<div>
<button type="submit" class="btn" value="Verzenden">Verzenden</button>
</div>
</form>
</div>
</body>
</html>
error_reporting(E_ALL);
error_reporting(-1);
ini_set('error_reporting', E_ALL);
$vnaamerr = $achternaamerr = $emailerr = $uwaanboderr = "";
$vnaam = $achternaam = $email = $uwaanbod = $message = "";
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['vnaam'])) {
$vnaamerr = "Voornaam mag niet leeg zijn!";
} else {
$vnaam = test_input($_POST['vnaam']);
if (!preg_match("/^[a-zA-Z-' ]*$/",$vnaam)) {
$vnaamerr= "Een voornaam mag alleen letters en spacties bevatten";
}
}
if (empty($_POST['achternaam'])) {
$achternaamerr = "Achternaam mag niet leeg zijn!";
} else {
$achternaam = test_input($_POST['achternaam']);
if(!preg_match("/^[a-zA-Z-' ]*$/",$achternaam)) {
$achternaamerr= "Een achternaam mag alleen letters en spacties bevatten";
}
}
if (empty($_POST['email'])) {
$emailerr = "Mailadres mag niet leeg zijn!";
} else {
$email =test_input($_POST['email']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailerr = "Het format van het mailadres is niet correct!";
}
}
if (empty($_POST['uwaanbod'])) {
$uwaanboderr = "Aanbod mag niet leeg zijn!";
} else {
$uwaanbod = test_input($_POST['uwaanbod']);
}
$message =test_input($_POST['toelichting']);
mail($to,$message,$body);
}
function test_input($data){
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$to = "**knip**";
$body = "";
$body .="Van: ".$vnaam."\r\n";
$body .="Achternaam: ".$achternaam."\r\n";
$body .="Email: ".$email."\r\n";
$body .="Aanbod: ".$uwaanbod."\r\n";
$body .="Toelichting: ".$message."\r\n";
?>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/styles.css" media="all">
<title>CryptoFit</title>
</head>
<body>
<div class="container">
<h1>Dit domeinnaam staat te koop</h1>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="POST" class="form">
<div class="form-group">
<label for="vnaam" class="form-label">Voornaam</label>
<input type="text" class="form-control" id="vnaam" name="vnaam" tabindex="1" value="<?php if (isset($vnaam)) echo $vnaam; ?>">
<span class="error">* <?php echo $vnaamerr; ?></span>
</div>
<div class="form-group">
<label for="achternaam" class="form-label">Achternaam</label>
<input type="text" class="form-control" id="achternaam" name="achternaam" tabindex="2" value="<?php if (isset($achternaam)) echo $achternaam; ?>">
<span class="error">* <?php echo $achternaamerr; ?></span>
</div>
<div class="form-group">
<label for="email" class="form-label">Uw mailadres</label>
<input type="email" class="form-control" id="email" name="email" tabindex="3" value="<?php if (isset($email)) echo $email; ?>">
<span class="error">* <?php echo $emailerr; ?></span>
</div>
<div class="form-group">
<label for="uwaanbod" class="form-label">Uw aanbod</label>
<input type="number" class="form-control" id="uwaanbod" name="uwaanbod" tabindex="4" value="<?php if (isset($uwaanbod)) echo $uwaanbod; ?>">
<span class="error">* <?php echo $uwaanboderr; ?></span>
</div>
<div class="form-group">
<label for="toelichting" class="form-label">Toelichting</label>
<textarea class="form-control" id="toelichting" name="toelichting" tabindex="5" row="4" cols="50"></textarea>
</div>
<div>
<button type="submit" class="btn" value="Verzenden">Verzenden</button>
</div>
</form>
</div>
</body>
</html>
Edit:
Mail-adres verwijderd. Je wilt vast geen spam en daarnaast niet relevant om hier te noemen.
Gewijzigd op 14/03/2022 23:31:45 door - Ariën -
Je verstuurt eerst je e-mail en daarna ga je pas $to en $body (vermoedelijk $headers) instellen.
Is dat logisch denk je?
Dat is zoiets als een brief op de post doen en pas naderhand het adres erop schrijven ... beetje lastig lijkt me ;-)
de PHP mail functie is slechts een doorgeef luik naar de sendmail applicatie die dan naast PHP op dezelfde machine moet draaien. Deze applicatie moet vervolgens geïnstalleerd zijn en op de juiste wijze geconfigureerd zijn. Echter laten meer en meer providers de mailfunctie bewust buiten werking vanwege het feit dat de functie maar al te vaak gebruikt wordt om te spammen.
Veel hosters bieden wel een SMTP server om je mail mee te versturen. Zoek eens in de FAQ van je hosting over de mogelijkheden en de configuratie.
Om emails te versturen over SMTP met PHP kun je het beste gebruik maken van library als PHPMailer
https://github.com/PHPMailer/PHPMailer
Dat lijkt me vrij logisch als er van tevoren geen ontvanger ($to) is ingesteld.
Als je de standaard mail()-functie gebruikt raad ik altijd aan om met een if-constructie om te controleren of de functie wel werkt. Het kan zijn dat de hostingprovider de functie uit heeft gezet (geeft false terug), of een false geeft vanwege een verkeerde parameter (bijv. een afwijkende domein opgegeven als afzender).
Schotel de gebruiker altijd een melding voor of de mail verstuurd is of juist niet 'vanwege technische problemen aan de serverkant'. Maar nogmaals: Met mail() kan je nooit weten of de mail aangekomen is. Met phpMailer kan je de route naar het postkantoor veel makkelijker debuggen.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if (!preg_match("/^[a-zA-Z-' ]*$/",$vnaam)) {
$vnaamerr= "Een voornaam mag alleen letters en spacties bevatten";
}
?>
if (!preg_match("/^[a-zA-Z-' ]*$/",$vnaam)) {
$vnaamerr= "Een voornaam mag alleen letters en spacties bevatten";
}
?>
Hoezo alleen "letters" en spaties? Je geeft er zelf al een ' bij en een - (waarbij de - liefst als laatste geplaatst wordt).
Maar iemand met een ö in de naam of een é, ç, ñ of een ð Die hebben pech? (En de zoon van Elon Musk helemaal natuurlijk)
Want vreemd genoeg accepteer je in het Aanbod-veld weer alle invoer. (tip: ik zou html proberen te voorkomen en daarom htmlspecialchars() gebruiken bij het opbouwen van de body van de email.
Draai het eens om: waarom wil je bepaalde tekens _niet_ in de invoer hebben, en waarom dan wel niet?
En filter dan op die tekens.