PHP code voor formulier correct?
Ik heb met HTML5 (Bootstrap3) een contactformulier gemaakt.
Omdat ik de server taal PHP niet beheers ben ik opzoek gegaan naar een veilige code. Via w3schools.com kwam ik
een uitgebreid PHP script tegen voor formulieren.
https://www.w3schools.com/php/showphp.asp?filename=demo_form_validation_complete
Omdat ik het ingevulde formulier graag naar een e-mail adres wil laten sturen ben ik weer opzoek gegaan. Via phphulp.nl en PHPwiki heb ik stukjes code gevonden en vervolgens geprobeerd die stukjes script aan de code van w3schools.com toe te voegen. Klopt de code nu nog wel? Wellicht de volgorde?
Ik zie door de bomen het bos niet meer. Kan iemand mij alstublieft helpen?
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<?php
if(isset($_POST['emailadres']))
{
$email_from = "[email protected]";
$email_to = "[email protected]";
$email_subject = "Contactform";
$emailadres = filter_input(INPUT_POST,'emailadres', FILTER_VALIDATE_EMAIL);
$naam = $_POST['naam'];
$plaats = $_POST['plaats'];
$email = $_POST['email'];
$geslacht = $_POST['geslacht'];
$comment = $_POST['comment'];
$html = true;
$email_message = nl2br;
$headers .= "From:". $email_from . "\r\n";
$headers .= "To:". $email_to . "\r\n";
$headers .= "X-Mailer: PHP/".phpversion(). "\r\n";
$headers .= ($html) ? "MIME-Version: 1.0" . "\r\n";
$headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n";
@mail($email_to,$email_subject,$email_message,$headers);
}
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["naam"])) {
$naamErr = "Typ uw naam in";
} else {
$naam = test_input($_POST["naam"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$naam)) {
$naamErr = "Alleen letters en spaties";
}
}
if (empty($_POST["plaats"])) {
$plaatsErr = "Typ uw woonplaats in";
} else {
$plaats = test_input($_POST["plaats"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
if (empty($_POST["email"])) {
$emailErr = "Typ geldig email adres";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Ongeldige email";
}
}
if (empty($_POST["geslacht"])) {
$geslachtErr = "Maak geslachts keuze";
} else {
$geslacht = test_input($_POST["geslacht"]);
}
}
if (empty($_POST["comment"])) {
$comment = "Typ uw opmerking of vraag";
} else {
$comment = test_input($_POST["comment"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form class="form-horizontal" method="post" name="contactform" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<h6>* Verplichte velden</h6><br />
<div class="form-group row">
<label for="naam" class="col-sm-2 col-form-label">naam*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="naam" id="naam" placeholder="voor en achternaam" required>
<span class="error"><?php echo $naamErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="plaats" class="col-sm-2 col-form-label">Woonplaats*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="plaats" id="plaats" required>
<span class="error"><?php echo $plaatsErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">E-mail*</label>
<div class="col-sm-3">
<input class="form-control" type="email" name="email" placeholder="[email protected]" id="email" required>
<span class="error"><?php echo $emailErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="geslacht" class="col-sm-2">Geslacht*</label>
<div class="col-sm-2">
<select class="form-control" name="geslacht" id="geslacht">
<option>Man</option>
<option>Vrouw</option>
</select>
<span class="error"><?php echo $geslachtErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="comment" class="col-sm-2">Opmerking*</label>
<div class="col-sm-5">
<textarea class="form-control" rows="3" name="comment" id="comment"></textarea>
<span class="error"><?php echo $commentErr;?></span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-2"></div>
<div class="col-sm-2">
<button type="submit" class="btn btn-primary" value="sent">Verzend</button>
</div>
</div>
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $naam;
echo "<br />";
echo $plaats;
echo "br />"
echo $email;
echo "<br />";
echo $geslacht;
echo "<br />";
echo $comment;
echo "<br />";
?>
if(isset($_POST['emailadres']))
{
$email_from = "[email protected]";
$email_to = "[email protected]";
$email_subject = "Contactform";
$emailadres = filter_input(INPUT_POST,'emailadres', FILTER_VALIDATE_EMAIL);
$naam = $_POST['naam'];
$plaats = $_POST['plaats'];
$email = $_POST['email'];
$geslacht = $_POST['geslacht'];
$comment = $_POST['comment'];
$html = true;
$email_message = nl2br;
$headers .= "From:". $email_from . "\r\n";
$headers .= "To:". $email_to . "\r\n";
$headers .= "X-Mailer: PHP/".phpversion(). "\r\n";
$headers .= ($html) ? "MIME-Version: 1.0" . "\r\n";
$headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n";
@mail($email_to,$email_subject,$email_message,$headers);
}
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["naam"])) {
$naamErr = "Typ uw naam in";
} else {
$naam = test_input($_POST["naam"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$naam)) {
$naamErr = "Alleen letters en spaties";
}
}
if (empty($_POST["plaats"])) {
$plaatsErr = "Typ uw woonplaats in";
} else {
$plaats = test_input($_POST["plaats"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
if (empty($_POST["email"])) {
$emailErr = "Typ geldig email adres";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Ongeldige email";
}
}
if (empty($_POST["geslacht"])) {
$geslachtErr = "Maak geslachts keuze";
} else {
$geslacht = test_input($_POST["geslacht"]);
}
}
if (empty($_POST["comment"])) {
$comment = "Typ uw opmerking of vraag";
} else {
$comment = test_input($_POST["comment"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form class="form-horizontal" method="post" name="contactform" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<h6>* Verplichte velden</h6><br />
<div class="form-group row">
<label for="naam" class="col-sm-2 col-form-label">naam*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="naam" id="naam" placeholder="voor en achternaam" required>
<span class="error"><?php echo $naamErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="plaats" class="col-sm-2 col-form-label">Woonplaats*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="plaats" id="plaats" required>
<span class="error"><?php echo $plaatsErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">E-mail*</label>
<div class="col-sm-3">
<input class="form-control" type="email" name="email" placeholder="[email protected]" id="email" required>
<span class="error"><?php echo $emailErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="geslacht" class="col-sm-2">Geslacht*</label>
<div class="col-sm-2">
<select class="form-control" name="geslacht" id="geslacht">
<option>Man</option>
<option>Vrouw</option>
</select>
<span class="error"><?php echo $geslachtErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="comment" class="col-sm-2">Opmerking*</label>
<div class="col-sm-5">
<textarea class="form-control" rows="3" name="comment" id="comment"></textarea>
<span class="error"><?php echo $commentErr;?></span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-2"></div>
<div class="col-sm-2">
<button type="submit" class="btn btn-primary" value="sent">Verzend</button>
</div>
</div>
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $naam;
echo "<br />";
echo $plaats;
echo "br />"
echo $email;
echo "<br />";
echo $geslacht;
echo "<br />";
echo $comment;
echo "<br />";
?>
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 16/01/2018 16:26:54 door - Ariën -
Uiteindelijk krijg je een aansluitend geheel en steekt de puzzel in elkaar.
Ik zal vanavond (mits iemand anders mij voor is) een voorbeeldje maken, zodra ik gegeten heb ;-)
Gewijzigd op 16/01/2018 16:29:24 door - Ariën -
Waar komt die idiote test_input functie vandaan? Ik zie hem vaker voorbij komen, de bedenker daarvan moet serieus een schop onder zijn/haar kont hebben.
W3schools. Ze begrijpen niet dat je output moet beveiligen, en juist niet de input.
Dan mis je op regel 18 waarschijnlijk een verwijzing naar $comment, dit moet mogelijk zoiets zijn als:
Verder ziet het er in de gauwigheid wel ok uit, afgezien van enkele technische keuzes misschien *kuch* :).
Maar kun je concreet aangeven of/wat er precies misgaat? Als de bestemming klopt ($email_to) zou je -indien alles verder ok is- op den duur een e-mailbericht moeten ontvangen. Indien daar geen sprake van is kunnen we verder op zoek gaan naar mogelijke oorzaken.
Dus parkeer het script in een tijdelijke directory en probeer het eens uit :). Mogelijk wil je op den duur wel een soort van controle inbouwen tegen spam, maar dat is stap 2 of 3, voor nu heb je in principe genoeg code om snel te testen of dit werkt.
Voor ontwikkeling zou je bovenaan de code nog tijdelijk het volgende kunnen toevoegen:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
// voor ontwikkeling
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>
// voor ontwikkeling
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>
Dit zorgt ervoor dat je code "mondig" is in het melden van fouten, deze worden dan op je scherm gedumpt, dit kan een handig geheugensteuntje zijn voor als je ergens iets vergeten bent en/of ergens een typefout hebt gemaakt ofzo.
script van hun is om te janken.
Ik dacht dat W3schools best hoog staat aangeschreven, maar dat Is het logisch om eerst te controleren of emailadres is ingevuld en en zo ja een e-mail te versturen en daarna pas controleren of alle (verplichte) velden wel ingevuld zijn?
Je zou ook nog iets kunnen doen tegen ongewenst formuliergebruik door bots (captcha) of ander ongewenst gebruik (unique id) als waarborg dat enkel formulieren in behandeling worden genomen, die binnen bepaalde tijdspanne zijn uitgegeven door jouw server.
PS welke values horen bij de respectievelijke geslachten?
Gewijzigd op 16/01/2018 19:57:04 door Nick Vledder
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?php
if (isset($_POST['emailadres'])) {
$email_from = "[email protected]";
$email_to = "[email protected]";
$email_subject = "Contactform";
$emailadres = filter_input(INPUT_POST, 'emailadres', FILTER_VALIDATE_EMAIL);
$naam = $_POST['naam'];
$plaats = $_POST['plaats'];
$email = $_POST['email'];
$geslacht = $_POST['geslacht'];
$comment = $_POST['comment'];
$html = true;
$email_message = nl2br($comment);
$headers .= "From:" . $email_from . "\r\n";
$headers .= "To:" . $email_to . "\r\n";
$headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
$headers .= ($html) ? "MIME-Version: 1.0" . "\r\n" : '';
$headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n" : '';
@mail($email_to, $email_subject, $email_message, $headers);
}
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr = "";
$naam = $plaats = $email = $geslacht = $comment = "";
if ("POST" == $_SERVER["REQUEST_METHOD"]) {
if (empty($_POST["naam"])) {
$naamErr = "Typ uw naam in";
} else {
$naam = test_input($_POST["naam"]);
// check if name only contains letters and whitespace
if ( ! preg_match("/^[a-zA-Z ]*$/", $naam)) {
$naamErr = "Alleen letters en spaties";
}
}
if (empty($_POST["plaats"])) {
$plaatsErr = "Typ uw woonplaats in";
} else {
$plaats = test_input($_POST["plaats"]);
// check if name only contains letters and whitespace
if ( ! preg_match("/^[a-zA-Z ]*$/", $plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
if (empty($_POST["email"])) {
$emailErr = "Typ geldig email adres";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if ( ! filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Ongeldige email";
}
}
if (empty($_POST["geslacht"])) {
$geslachtErr = "Maak geslachts keuze";
} else {
$geslacht = test_input($_POST["geslacht"]);
}
}
if (empty($_POST["comment"])) {
$comment = "Typ uw opmerking of vraag";
} else {
$comment = test_input($_POST["comment"]);
// check if name only contains letters and whitespace
if ( ! preg_match("/^[a-zA-Z ]*$/", $plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form class="form-horizontal" method="post" name="contactform">
<h6>* Verplichte velden</h6>
<div class="form-group row">
<label for="naam" class="col-sm-2 col-form-label">naam*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="naam" id="naam" placeholder="voor en achternaam" required>
<span class="error"><?php echo $naamErr; ?></span>
</div>
</div>
<div class="form-group row">
<label for="plaats" class="col-sm-2 col-form-label">Woonplaats*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="plaats" id="plaats" required>
<span class="error"><?php echo $plaatsErr; ?></span>
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">E-mail*</label>
<div class="col-sm-3">
<input class="form-control" type="email" name="email" placeholder="[email protected]" id="email" required>
<span class="error"><?php echo $emailErr; ?></span>
</div>
</div>
<div class="form-group row">
<label for="geslacht" class="col-sm-2">Geslacht*</label>
<div class="col-sm-2">
<select class="form-control" name="geslacht" id="geslacht">
<option>Man</option>
<option>Vrouw</option>
</select>
<span class="error"><?php echo $geslachtErr; ?></span>
</div>
</div>
<div class="form-group row">
<label for="comment" class="col-sm-2">Opmerking*</label>
<div class="col-sm-5">
<textarea class="form-control" rows="3" name="comment" id="comment"></textarea>
<span class="error"><?php echo $commentErr; ?></span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-2"></div>
<div class="col-sm-2">
<button type="submit" class="btn btn-primary" value="sent">Verzend</button>
</div>
</div>
</form>
</body>
</html>
if (isset($_POST['emailadres'])) {
$email_from = "[email protected]";
$email_to = "[email protected]";
$email_subject = "Contactform";
$emailadres = filter_input(INPUT_POST, 'emailadres', FILTER_VALIDATE_EMAIL);
$naam = $_POST['naam'];
$plaats = $_POST['plaats'];
$email = $_POST['email'];
$geslacht = $_POST['geslacht'];
$comment = $_POST['comment'];
$html = true;
$email_message = nl2br($comment);
$headers .= "From:" . $email_from . "\r\n";
$headers .= "To:" . $email_to . "\r\n";
$headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
$headers .= ($html) ? "MIME-Version: 1.0" . "\r\n" : '';
$headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n" : '';
@mail($email_to, $email_subject, $email_message, $headers);
}
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr = "";
$naam = $plaats = $email = $geslacht = $comment = "";
if ("POST" == $_SERVER["REQUEST_METHOD"]) {
if (empty($_POST["naam"])) {
$naamErr = "Typ uw naam in";
} else {
$naam = test_input($_POST["naam"]);
// check if name only contains letters and whitespace
if ( ! preg_match("/^[a-zA-Z ]*$/", $naam)) {
$naamErr = "Alleen letters en spaties";
}
}
if (empty($_POST["plaats"])) {
$plaatsErr = "Typ uw woonplaats in";
} else {
$plaats = test_input($_POST["plaats"]);
// check if name only contains letters and whitespace
if ( ! preg_match("/^[a-zA-Z ]*$/", $plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
if (empty($_POST["email"])) {
$emailErr = "Typ geldig email adres";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if ( ! filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Ongeldige email";
}
}
if (empty($_POST["geslacht"])) {
$geslachtErr = "Maak geslachts keuze";
} else {
$geslacht = test_input($_POST["geslacht"]);
}
}
if (empty($_POST["comment"])) {
$comment = "Typ uw opmerking of vraag";
} else {
$comment = test_input($_POST["comment"]);
// check if name only contains letters and whitespace
if ( ! preg_match("/^[a-zA-Z ]*$/", $plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form class="form-horizontal" method="post" name="contactform">
<h6>* Verplichte velden</h6>
<div class="form-group row">
<label for="naam" class="col-sm-2 col-form-label">naam*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="naam" id="naam" placeholder="voor en achternaam" required>
<span class="error"><?php echo $naamErr; ?></span>
</div>
</div>
<div class="form-group row">
<label for="plaats" class="col-sm-2 col-form-label">Woonplaats*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="plaats" id="plaats" required>
<span class="error"><?php echo $plaatsErr; ?></span>
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">E-mail*</label>
<div class="col-sm-3">
<input class="form-control" type="email" name="email" placeholder="[email protected]" id="email" required>
<span class="error"><?php echo $emailErr; ?></span>
</div>
</div>
<div class="form-group row">
<label for="geslacht" class="col-sm-2">Geslacht*</label>
<div class="col-sm-2">
<select class="form-control" name="geslacht" id="geslacht">
<option>Man</option>
<option>Vrouw</option>
</select>
<span class="error"><?php echo $geslachtErr; ?></span>
</div>
</div>
<div class="form-group row">
<label for="comment" class="col-sm-2">Opmerking*</label>
<div class="col-sm-5">
<textarea class="form-control" rows="3" name="comment" id="comment"></textarea>
<span class="error"><?php echo $commentErr; ?></span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-2"></div>
<div class="col-sm-2">
<button type="submit" class="btn btn-primary" value="sent">Verzend</button>
</div>
</div>
</form>
</body>
</html>
Mocht je mail() functie om vreemde redenen niet werken, dan krijgt de bezoeker netjes een foutmelding.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php // kleurtjes tonen
if(mail($email_to, $email_subject, $email_message, $headers)) {
// Alles is oké! We stturen de gebruiker nu door naar bedankt.php waar een bedankje op vermeld staat.
header("Location: bedankt.php");
exit();
} else {
echo "Er is een technische fout aan onze kant. Gelieve ons een mail te sturen op: ".$email_to;
}
?>
if(mail($email_to, $email_subject, $email_message, $headers)) {
// Alles is oké! We stturen de gebruiker nu door naar bedankt.php waar een bedankje op vermeld staat.
header("Location: bedankt.php");
exit();
} else {
echo "Er is een technische fout aan onze kant. Gelieve ons een mail te sturen op: ".$email_to;
}
?>
regel 72: er zijn zat namen waarin andere tekens dan de letters A-Z of een spatie staan:
Willem-Alexander en Máxima: een - voor de koning, en de á van de koningin vallen niet onder jouw filter!
Idem voor de plaatsnaam: 's-Hertogenbosch komt op 2 punten niet door het filter.
de functie test_input()
dat suggereert dat je iets test, maar je verandert daar een invoer. Trim() kan ik nog vatten, maar stripslashes? Dat is iets wat hooguit voorkomt uit de "magic-quotes" settings in PHP. Maar die staat al jaaaren default uit, en kán tegenwoordig niet eens meer aan. Dus je stript hooguit slashes die er wel horen te staan.
en htmlspecialchars() heeft alleen nut in html. Nu pas je dat inderdaad toe op deze mail(), maar als je de setting op regel 12 verandert, veranderen je headers mee, maar htmlspecialchars blijft actief...
En je textarea "comment". Die mag vreemd genoeg alleen letters en spaties bevatten. Geen interpunctie, geen enters, geen cijfers. Vreemd genoeg verwacht je op regel 14 wel dat er enters voor kunnen komen.
NB de accolade op regel 65 zou naar 76 moeten, lijkt me
-------
qua opbouw:
ik zou beginnen met het blok dat op regel 29 begint:
je wilt eerst weten of er fouten zijn.
Zo nee, (dus als alle $xxxErr leeg zijn) ga je de mail sturen
Zo ja, dan toon je het form opnieuw met de melding(en).
Bedankt Ariën voor de code om een bezoeker door te sturen naar een bedankt pagina, dat was inderdaad nog een vraag die ik nog wilde stellen.
Nick Vledder, Anti spam en captcha is zeker belangrijk is deze tijd, als deze code werkt ga ik daar zeker naar opzoek. De values voor het geslacht zijn man of vrouw.
Het idee erachter is dat bij een voornaam het soms niet helemaal duidelijk is of het een man of vrouw betreft. Als men een bericht terug schrijft is het wel fijn om die persoon aan te kunnen schrijven met heer, of mevrouw,
Ivo P ik begrijp je reactie. Ik had zelf al gezien dat je bij het invul veld ‘comment’ geen punt mag gebruiken. Wat denk ik heel frustrerend is voor iemand die een bericht probeert te typen. Maar ik weet helaas niet hoe ik dit kan aanpassen.
De website waar deze pagina uiteindelijk opkomt is voorzien van SSL https://. Dat is denk ik altijd wel belangrijk als men formulieren moet kunnen invullen.
De code ziet er na jullie suggesties zo uit:
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?php
// voor ontwikkeling
error_resporting(E-ALL);
ini_set('display_errors', 'stdout');
if(isset($_POST['emailadres'])){
$email_from = "[email protected]";
$email_to = "[email protected]";
$email_subject = "Contactform";
$emailadres = filter_input(INPUT_POST,'emailadres', FILTER_VALIDATE_EMAIL);
$naam = $_POST['naam'];
$plaats = $_POST['plaats'];
$email = $_POST['email'];
$geslacht = $_POST['geslacht'];
$comment = $_POST['comment'];
$html = true;
$email_message = nl2br($comment);
$headers .= "From:". $email_from . "\r\n";
$headers .= "To:". $email_to . "\r\n";
$headers .= "X-Mailer: PHP/".phpversion(). "\r\n";
$headers .= ($html) ? "MIME-Version: 1.0" . "\r\n";
$headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n";
if(mail($email_to,$email_subject,$email_message,$headers)) {
//Alles Oké? we sturen de gebruiken door naar de bedankt pagina.
header("location: bedankt.php");
exit();
} else {
echo "Er is een technische fout aan onze kant. Gelieve ons een mail te sturen op: ".$email_to;
}
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["naam"])) {
$naamErr = "Typ uw naam in";
} else {
$naam = test_input($_POST["naam"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$naam)) {
$naamErr = "Alleen letters en spaties";
}
}
if (empty($_POST["plaats"])) {
$plaatsErr = "Typ uw woonplaats in";
} else {
$plaats = test_input($_POST["plaats"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
if (empty($_POST["email"])) {
$emailErr = "Typ geldig email adres";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Ongeldige email";
}
}
if (empty($_POST["geslacht"])) {
$geslachtErr = "Maak geslachts keuze";
} else {
$geslacht = test_input($_POST["geslacht"]);
}
}
if (empty($_POST["comment"])) {
$comment = "Typ uw opmerking of vraag";
} else {
$comment = test_input($_POST["comment"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form class="form-horizontal" method="post" name="contactform" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<h6>* Verplichte velden</h6><br />
<div class="form-group row">
<label for="naam" class="col-sm-2 col-form-label">naam*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="naam" id="naam" placeholder="voor en achternaam" required>
<span class="error"><?php echo $naamErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="plaats" class="col-sm-2 col-form-label">Woonplaats*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="plaats" id="plaats" required>
<span class="error"><?php echo $plaatsErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">E-mail*</label>
<div class="col-sm-3">
<input class="form-control" type="email" name="email" placeholder="[email protected]" id="email" required>
<span class="error"><?php echo $emailErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="geslacht" class="col-sm-2">Geslacht*</label>
<div class="col-sm-2">
<select class="form-control" name="geslacht" id="geslacht">
<option>Man</option>
<option>Vrouw</option>
</select>
<span class="error"><?php echo $geslachtErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="comment" class="col-sm-2">Opmerking*</label>
<div class="col-sm-5">
<textarea class="form-control" rows="3" name="comment" id="comment"></textarea>
<span class="error"><?php echo $commentErr;?></span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-2"></div>
<div class="col-sm-2">
<button type="submit" class="btn btn-primary" value="sent">Verzend</button>
</div>
</div>
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $naam;
echo "<br />";
echo $plaats;
echo "br />"
echo $email;
echo "<br />";
echo $geslacht;
echo "<br />";
echo $comment;
echo "<br />";
?>
// voor ontwikkeling
error_resporting(E-ALL);
ini_set('display_errors', 'stdout');
if(isset($_POST['emailadres'])){
$email_from = "[email protected]";
$email_to = "[email protected]";
$email_subject = "Contactform";
$emailadres = filter_input(INPUT_POST,'emailadres', FILTER_VALIDATE_EMAIL);
$naam = $_POST['naam'];
$plaats = $_POST['plaats'];
$email = $_POST['email'];
$geslacht = $_POST['geslacht'];
$comment = $_POST['comment'];
$html = true;
$email_message = nl2br($comment);
$headers .= "From:". $email_from . "\r\n";
$headers .= "To:". $email_to . "\r\n";
$headers .= "X-Mailer: PHP/".phpversion(). "\r\n";
$headers .= ($html) ? "MIME-Version: 1.0" . "\r\n";
$headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n";
if(mail($email_to,$email_subject,$email_message,$headers)) {
//Alles Oké? we sturen de gebruiken door naar de bedankt pagina.
header("location: bedankt.php");
exit();
} else {
echo "Er is een technische fout aan onze kant. Gelieve ons een mail te sturen op: ".$email_to;
}
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["naam"])) {
$naamErr = "Typ uw naam in";
} else {
$naam = test_input($_POST["naam"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$naam)) {
$naamErr = "Alleen letters en spaties";
}
}
if (empty($_POST["plaats"])) {
$plaatsErr = "Typ uw woonplaats in";
} else {
$plaats = test_input($_POST["plaats"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
if (empty($_POST["email"])) {
$emailErr = "Typ geldig email adres";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Ongeldige email";
}
}
if (empty($_POST["geslacht"])) {
$geslachtErr = "Maak geslachts keuze";
} else {
$geslacht = test_input($_POST["geslacht"]);
}
}
if (empty($_POST["comment"])) {
$comment = "Typ uw opmerking of vraag";
} else {
$comment = test_input($_POST["comment"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$plaats)) {
$plaatsErr = "Alleen letters en spaties";
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form class="form-horizontal" method="post" name="contactform" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<h6>* Verplichte velden</h6><br />
<div class="form-group row">
<label for="naam" class="col-sm-2 col-form-label">naam*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="naam" id="naam" placeholder="voor en achternaam" required>
<span class="error"><?php echo $naamErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="plaats" class="col-sm-2 col-form-label">Woonplaats*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="plaats" id="plaats" required>
<span class="error"><?php echo $plaatsErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">E-mail*</label>
<div class="col-sm-3">
<input class="form-control" type="email" name="email" placeholder="[email protected]" id="email" required>
<span class="error"><?php echo $emailErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="geslacht" class="col-sm-2">Geslacht*</label>
<div class="col-sm-2">
<select class="form-control" name="geslacht" id="geslacht">
<option>Man</option>
<option>Vrouw</option>
</select>
<span class="error"><?php echo $geslachtErr;?></span>
</div>
</div>
<div class="form-group row">
<label for="comment" class="col-sm-2">Opmerking*</label>
<div class="col-sm-5">
<textarea class="form-control" rows="3" name="comment" id="comment"></textarea>
<span class="error"><?php echo $commentErr;?></span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-2"></div>
<div class="col-sm-2">
<button type="submit" class="btn btn-primary" value="sent">Verzend</button>
</div>
</div>
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $naam;
echo "<br />";
echo $plaats;
echo "br />"
echo $email;
echo "<br />";
echo $geslacht;
echo "<br />";
echo $comment;
echo "<br />";
?>
Ik heb de php pagina geupload naar de server.
Ik krijg de pagina niet te zien alleen deze foutmeldingen:
Parse error: syntax error, unexpected ';' in /public/sites/www.domeinnaam.nl/testform.php on line 70
$headers .= ($html) ? "MIME-Version: 1.0" . "\r\n";
$headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n";
Gewijzigd op 17/01/2018 16:04:28 door Anja v
Code (php)
1
2
3
4
2
3
4
<?php
$headers .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers .= ($html) ? 'Content-type: text/html; charset=UTF-8' . "\r\n" : '';
?>
$headers .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers .= ($html) ? 'Content-type: text/html; charset=UTF-8' . "\r\n" : '';
?>
In deze code laat je die twee waardes leeg als HTML uit staat. Je hebt dan geen MIME en Content-Type nodig.
De opbouw is:
Zie ook: https://davidwalsh.name/php-shorthand-if-else-ternary-operators
maar je code is nog steeds verre van netjes. Om even een eerdere bericht aan te halen uit een ander gelijkwaardig topic:
- Ariën - op 17/01/2018 14:58:24:
Persoonlijk zou ik er één script van maken in een enkel bestand. Je wilt immers ook invoer-validatie toevoegen, en het netste is dat je hierbij een melding bij de velden toont die niet of incompleet ingevuld zijn.
Het belangrijkste hierbij is dat je in je script als eerste de PHP-scripting uitvoert, en controleert of er een formulier verstuurd is:
Het belangrijkste hierbij is dat je in je script als eerste de PHP-scripting uitvoert, en controleert of er een formulier verstuurd is:
Code (php)
In dat topic staan nog een hoop tips hierover.
Gewijzigd op 17/01/2018 16:09:43 door - Ariën -
Parse error: syntax error, unexpected '""' (T_CONSTANT_ENCAPSED_STRING) in /public/sites/www.websitenaam.nl/testform.php on line 75
Wat betrekking heeft op:
Code (php)
1
2
3
4
2
3
4
<?php
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
?>
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
?>
Als ik dit zou veranderen, geen idee hoe en waarom, maar dan zou de laatste foutmelding zijn:
Want mijn HTML editor geeft namelijk precies dezelfde foutmeldingen aan. De regel nummer staat in het rood aangegeven, als je de cursor er boven houdt krijg je die foutmeldingen.
Gewijzigd op 17/01/2018 16:29:58 door Anja v
@Anja: heb je mijn bericht wel gelezen? Daar zijn de fouten uit waar je nu last van hebt.
in plaat van
in plaats van:
wordt:
dit veroorzaakt weer een extra foutmelding = syntac error unexpected '?'
Ik zal de desbetreffende pagina gaan doorlezen, dankjewel.
Het blijft lastig omdat ik php niet beheerst. Ik probeer door het script de bekijken de logica ervan in de zien en indien mogelijk een beetje aan te passen, maar zonder het besef te hebben of het een veilig script is of, of de opbouw ervan goed is. Het is heel fijn omdat hier te kunnen vragen aan forum leden die wel weten hoe de vork in de steel zit.
Gewijzigd op 17/01/2018 16:30:54 door Anja v
Lees anders mijn post nog eens goed.
Jan Koehoorn op 17/01/2018 16:23:02:
@Anja: heb je mijn bericht wel gelezen? Daar zijn de fouten uit waar je nu last van hebt.
Jazeker, ik heb het PHP script zelfs geprint. En het script aangepast.
Ik zag o.a. dat de echo's onderaan verwijderd waren. Ik wist niet zeker of dat de bedoeling was of dat het per ongeluk niet mee gekopieerd was.
Het kan tevens een mooie beginners-les zijn als je PHP onder de knie wilt krijgen.
Anja v op 17/01/2018 16:27:32:
Jazeker, ik heb het PHP script zelfs geprint. En het script aangepast.
Ik zag o.a. dat de echo's onderaan verwijderd waren. Ik wist niet zeker of dat de bedoeling was of dat het per ongeluk niet mee gekopieerd was.
Jan Koehoorn op 17/01/2018 16:23:02:
@Anja: heb je mijn bericht wel gelezen? Daar zijn de fouten uit waar je nu last van hebt.
Jazeker, ik heb het PHP script zelfs geprint. En het script aangepast.
Ik zag o.a. dat de echo's onderaan verwijderd waren. Ik wist niet zeker of dat de bedoeling was of dat het per ongeluk niet mee gekopieerd was.
In mijn code staat bijvoorbeeld dit:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr = "";
$naam = $plaats = $email = $geslacht = $comment = "";
?>
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr = "";
$naam = $plaats = $email = $geslacht = $comment = "";
?>
Dit ziet er anders uit dan in jouw laatste post ;-)
edit:
Daar staat namelijk:
Code (php)
1
2
3
4
2
3
4
<?php
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
?>
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
?>
(let op het laatste = teken bij mij)
En er zijn nog meer verschillen, waar ik uit opmaak dat je het niet integraal overgenomen hebt.
Gewijzigd op 17/01/2018 19:11:05 door Jan Koehoorn
Ja, ik zie het.
Ik heb de code naar MS Word gekopieerd en uitgeprint om het vervolgens aan te passen. Door het kopiëren naar Word zijn sommige code tekst verplaatst van positie.
Ik heb het nu gekopieerd naar een php bestand. En zal de code nu opnieuw gaan vergelijken. Dankjewel.
Edit:
Het is niet nodig het voorgaande en voorlaatste bericht integraal te quoten.
Gewijzigd op 18/01/2018 14:04:14 door - Ariën -