Probleem met contactformulier
Hoop dat ik dit op de juiste plek zet.
Ik ben bezig met een nieuw contactformulier voor de website van het werk van mijn vrouw, omdat de vorige pagina met Recaptha V3 niet goed werkte.
De nieuwe versie heb ik wel werkend, maar er duikt een probleem op met de optie "Stuur kopie".
Deze wordt wel afgehandeld, maar bij de bedanktekst blijft de optie (incl. verzenden / wis knoppen staan).
Van alles geprobeerd, maar ik zie het niet. Script heb ik niet zelf geschreven. Zo ervaren ben ik nu ook weer niet.
Of de Recaptcha nu wel werkt blijft even afwachten.
Hopelijk zien jullie het probleem. P.s. Testen mag... https://boefjesenelfjes.nl/contact_test6_-page.php
Mails zal ik verwijderen en zeker niet (mis)gebruiken.
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
<?php
define('SITE_KEY', '__SITEKEY__');
define('SECRET_KEY', '__SECRETKEY__');
?>
//in de head
<title>ReCaptcha V3</title>
<script src='https://www.google.com/recaptcha/api.js?render=<?php echo SITE_KEY; ?>'></script>
<script>
function myFunction(x) { document.getElementById("mySidenav").classList.toggle("open");
x.classList.toggle("change");
}
</script>
</header>
<?php
// Config Gedeelte
$cfg['url'] = "www.boefjesenelfjes.nl";// Site waarnaar je terug gaat als je een bericht hebt achtergelaten
$cfg['naam'] = "Rob"; // Webmaster naam
$cfg['email'] = "__mijn e-mail__"; // Webmaster E-mail
$cfg['spam'] = 0; // Anti Spam Tijd in Minuten ( Voer "0" om de Spam Beveiliging uit te zetten )
$cfg['text'] = TRUE; // Bij Fout Text Rood maken ( TRUE voor aan, FALSE voor uit )
$cfg['input'] = TRUE; // Bij Fout Border om Vakje Rood maken ( TRUE voor aan, FALSE voor uit )
$cfg['HTML'] = TRUE; // Een HTML email ( TRUE voor aan, FALSE voor uit )
// Hieronder niks meer veranderen
// E-mail Checker / Validator
function checkmail($email)
{
if(preg_match("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$", $email))
{
return TRUE;
}
return FALSE;
}
$formulier = TRUE;
if(!isset($_COOKIE['formulier']))
{
if(isset($_POST['wis']) && ($_SERVER['REQUEST_METHOD'] == "POST"))
{
foreach($_POST as $key => $value)
{
unset($value);
}
header("Location: ".$_SERVER['PHP_SELF']."");
}
if(isset($_POST['verzenden']) && ($_SERVER['REQUEST_METHOD'] == "POST"))
{
$aFout = array();
$naam = trim($_POST['naam']);
$email = trim($_POST['email']);
$onderwerp = trim($_POST['onderwerp']);
$bericht = trim($_POST['bericht']);
if(empty($naam) || (strlen($naam) < 3) || ( preg_match("[<>]", $naam) ) )
{
$aFout[] = "Er is geen naam ingevuld.";
unset($naam);
$fout['text']['naam'] = TRUE;
$fout['input']['naam'] = TRUE;
}
if(empty($email))
{
$aFout[] = "Er is geen e-mail adres ingevuld.";
unset($email);
$fout['text']['email'] = TRUE;
$fout['input']['email'] = TRUE;
}
elseif(!filter_var($email, FILTER_VALIDATE_EMAIL))
{
$aFout[] = "Er is geen correct e-mail adres ingevuld.";
unset($email);
$fout['text']['email'] = TRUE;
$fout['input']['email'] = TRUE;
}
if(empty($onderwerp))
{
$aFout[] = "Er is geen onderwerp ingevuld.";
unset($onderwerp);
$fout['text']['onderwerp'] = TRUE;
$fout['input']['onderwerp'] = TRUE;
}
if(empty($bericht))
{
$aFout[] = "Er is geen bericht ingevuld.";
unset($bericht);
$fout['text']['bericht'] = TRUE;
$fout['input']['bericht'] = TRUE;
}
if(!$cfg['text'])
{
unset($fout['text']);
}
if(!$cfg['input'])
{
unset($fout['input']);
}
if(!empty( $aFout ))
{
$errors = '
<div id="errors">
<ul>';
foreach($aFout as $sFout)
{
$errors .= " <li>".$sFout."</li>\n";
}
$errors .= "</ul>
</div>";
}
else
{
$formulier = FALSE;
if($cfg['HTML'])
{
// Headers
$headers = "From: \"Contact Formulier\" <".$cfg['email'].">\r\n";
$headers .= "Reply-To: \"".$naam."\" <".$email.">\n";
$headers .= "Return-Path: Mail-Error <".$cfg['email'].">\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$bericht = '
<br />
<b>Naam:</b> '.$naam.'<br />
<b>Email:</b> <a href=\"mailto:'.$email.'\">'.$email.'</a><br />
<br />
<b>Bericht:</b><br />
'.$bericht.'
<br />
<br />
<br />
--------------------------------------------------------------------------<br />
<b>Datum:</b> '.date("d-m-Y @ H:i:s").'<br />
<b>IP:</b> <a href=\"http://sunny.nic.com/cgi-bin/whois?domain='.$_SERVER['REMOTE_ADDR'].'\">'.$_SERVER['REMOTE_ADDR'].'</a><br />
<b>Host:</b> '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'<br />
</body>
</html>';
}
else
{
$bericht_wrap = wordwrap ($bericht, 40, "\n", 1);
// Headers
//tijdelijk uit $headers = "From: \"Contact Formulier\" <".$cfg['email'].">\n";
// $headers .= "MIME-Version: 1.0\n";
// $headers .= "Content-type: text/plain; charset='iso-8859-1'\n";
// Bericht
$message = "Naam: ".$naam." \n";
$message .= "E-mail: ".$email." \n";
$message .= "Bericht:\n".$bericht_wrap." \n ";
$message .= " \n ";
$message .= "Datum: ".date("d-m-Y H:i:s")." \n";
$message .= "------------------------------------------------------- \n ";
$message .= "IP: ".$_SERVER['REMOTE_ADDR']." \n ";
$message .= "Host: ".gethostbyaddr($_SERVER['REMOTE_ADDR'])." \n ";
}
if(mail($cfg['email'], "[Contact] ".$onderwerp, $bericht, $headers))
{
if(isset($_POST['stuurkopie']))
{
//tijdelijk uit $headers = "From: \"Contact Formulier\" <".$email.">\r\n";
// $headers .= "Reply-To: \"".$naam."\" <".$email.">\n";
// $headers .= "Return-Path: Mail-Error <".$email.">\n";
// $headers .= "MIME-Version: 1.0\n";
// $headers .= "Content-Transfer-Encoding: 8bit\n";
// $headers .= "Content-type: text/html; charset=iso-8859-1\n";
mail($email, "[Contact] ".$onderwerp, $bericht, $headers );
}
unset($naam, $email, $onderwerp, $bericht);
//tijdelijk uit setcookie("formulier", 1, time() + ( $cfg['spam'] * 60 ) );
echo "
<p>
Uw bericht is succesvol verzonden, er word zo snel mogelijk gereageerd.<br />
<br />
Met vriendelijke groeten,<br />
<b>".$cfg['naam']."</b>
</p>
";
}
else
{
echo "Er is een fout opgetreden bij het verzenden van de email";
}
//tijdelijk uit header("refresh:3;url=".$cfg['url']."");
}
}
if($formulier)
{
?>
<body>
<div id="container">
<?php
if(isset($errors)) {
echo $errors;
}
?>
<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
<p>
<label <?php if(isset($fout['text']['naam'])) { echo 'class="fout"'; } ?>>Naam:</label>
<input type="text" id="naam" name="naam" maxlength="30" <?php if(isset($fout['input']['naam'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($naam)) { echo stripslashes($naam); } ?>" /><b>
<label <?php if(isset($fout['text']['email'])) { echo 'class="fout"'; } ?>>Email:</label>
<input type="text" id="email" name="email" maxlength="255" <?php if(isset($fout['input']['email'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($email)) { echo stripslashes($email); } ?>" /><br />
<label <?php if(isset($fout['text']['onderwerp'])) { echo 'class="fout"'; } ?>>Onderwerp:</label>
<input type="text" id="onderwerp" name="onderwerp" maxlength="40" <?php if(isset($fout['input']['onderwerp'])) { echo 'class="fout'; } ?> value="<?php if (!empty($onderwerp)) { echo stripslashes($onderwerp); } ?>" /><br />
<label <?php if(isset($fout['text']['bericht'])) { echo 'class="fout"'; } ?>>Bericht:</label>
<textarea id="bericht" name="bericht" <?php if(isset($fout['input']['bericht'])) { echo 'class="fout"'; } ?> cols="35" rows="6"><?php if (!empty($bericht)) { echo stripslashes($bericht); } ?></textarea><br />
<?php
}
?>
<label for="stuurkopie">Stuur mij een kopie</label><input type="checkbox" id="stuurkopie" name="stuurkopie" value="1" /><br />
<label></label>
<input type="submit" id="verzenden" name="verzenden" value="verzenden" />
<input type="submit" id="wis" name="wis" value="Wis velden" />
</p>
</form>
</div>
<?php
}
else
{
echo "
<p>
U kunt maar eens in de ".$cfg['spam']." minuten een e-mail versturen!<br />
U wordt nu automatisch doorgestuurd.
</p>";
header("refresh:3;url=".$cfg['url']."");
}
?>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('<?php echo SITE_KEY; ?>', {action: 'homepage'})
.then(function(token) {
//console.log(token);
document.getElementById('g-recaptcha-response').value=token;
});
});
</script>
<?php
if($_POST){
function getCaptcha($SecretKey){
$Response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".SECRET_KEY."&response={$SecretKey}");
$Return = json_decode($Response);
return $Return;
}
$Return = getCaptcha($_POST['g-recaptcha-response']);
//var_dump($Return);
if($Return->success == true && $Return->score > 0.5){
echo "Succes!";
}else{
echo "You are a Robot!!";
}
}
?>
</body>
</html>
define('SITE_KEY', '__SITEKEY__');
define('SECRET_KEY', '__SECRETKEY__');
?>
//in de head
<title>ReCaptcha V3</title>
<script src='https://www.google.com/recaptcha/api.js?render=<?php echo SITE_KEY; ?>'></script>
<script>
function myFunction(x) { document.getElementById("mySidenav").classList.toggle("open");
x.classList.toggle("change");
}
</script>
</header>
<?php
// Config Gedeelte
$cfg['url'] = "www.boefjesenelfjes.nl";// Site waarnaar je terug gaat als je een bericht hebt achtergelaten
$cfg['naam'] = "Rob"; // Webmaster naam
$cfg['email'] = "__mijn e-mail__"; // Webmaster E-mail
$cfg['spam'] = 0; // Anti Spam Tijd in Minuten ( Voer "0" om de Spam Beveiliging uit te zetten )
$cfg['text'] = TRUE; // Bij Fout Text Rood maken ( TRUE voor aan, FALSE voor uit )
$cfg['input'] = TRUE; // Bij Fout Border om Vakje Rood maken ( TRUE voor aan, FALSE voor uit )
$cfg['HTML'] = TRUE; // Een HTML email ( TRUE voor aan, FALSE voor uit )
// Hieronder niks meer veranderen
// E-mail Checker / Validator
function checkmail($email)
{
if(preg_match("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$", $email))
{
return TRUE;
}
return FALSE;
}
$formulier = TRUE;
if(!isset($_COOKIE['formulier']))
{
if(isset($_POST['wis']) && ($_SERVER['REQUEST_METHOD'] == "POST"))
{
foreach($_POST as $key => $value)
{
unset($value);
}
header("Location: ".$_SERVER['PHP_SELF']."");
}
if(isset($_POST['verzenden']) && ($_SERVER['REQUEST_METHOD'] == "POST"))
{
$aFout = array();
$naam = trim($_POST['naam']);
$email = trim($_POST['email']);
$onderwerp = trim($_POST['onderwerp']);
$bericht = trim($_POST['bericht']);
if(empty($naam) || (strlen($naam) < 3) || ( preg_match("[<>]", $naam) ) )
{
$aFout[] = "Er is geen naam ingevuld.";
unset($naam);
$fout['text']['naam'] = TRUE;
$fout['input']['naam'] = TRUE;
}
if(empty($email))
{
$aFout[] = "Er is geen e-mail adres ingevuld.";
unset($email);
$fout['text']['email'] = TRUE;
$fout['input']['email'] = TRUE;
}
elseif(!filter_var($email, FILTER_VALIDATE_EMAIL))
{
$aFout[] = "Er is geen correct e-mail adres ingevuld.";
unset($email);
$fout['text']['email'] = TRUE;
$fout['input']['email'] = TRUE;
}
if(empty($onderwerp))
{
$aFout[] = "Er is geen onderwerp ingevuld.";
unset($onderwerp);
$fout['text']['onderwerp'] = TRUE;
$fout['input']['onderwerp'] = TRUE;
}
if(empty($bericht))
{
$aFout[] = "Er is geen bericht ingevuld.";
unset($bericht);
$fout['text']['bericht'] = TRUE;
$fout['input']['bericht'] = TRUE;
}
if(!$cfg['text'])
{
unset($fout['text']);
}
if(!$cfg['input'])
{
unset($fout['input']);
}
if(!empty( $aFout ))
{
$errors = '
<div id="errors">
<ul>';
foreach($aFout as $sFout)
{
$errors .= " <li>".$sFout."</li>\n";
}
$errors .= "</ul>
</div>";
}
else
{
$formulier = FALSE;
if($cfg['HTML'])
{
// Headers
$headers = "From: \"Contact Formulier\" <".$cfg['email'].">\r\n";
$headers .= "Reply-To: \"".$naam."\" <".$email.">\n";
$headers .= "Return-Path: Mail-Error <".$cfg['email'].">\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$bericht = '
<br />
<b>Naam:</b> '.$naam.'<br />
<b>Email:</b> <a href=\"mailto:'.$email.'\">'.$email.'</a><br />
<br />
<b>Bericht:</b><br />
'.$bericht.'
<br />
<br />
<br />
--------------------------------------------------------------------------<br />
<b>Datum:</b> '.date("d-m-Y @ H:i:s").'<br />
<b>IP:</b> <a href=\"http://sunny.nic.com/cgi-bin/whois?domain='.$_SERVER['REMOTE_ADDR'].'\">'.$_SERVER['REMOTE_ADDR'].'</a><br />
<b>Host:</b> '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'<br />
</body>
</html>';
}
else
{
$bericht_wrap = wordwrap ($bericht, 40, "\n", 1);
// Headers
//tijdelijk uit $headers = "From: \"Contact Formulier\" <".$cfg['email'].">\n";
// $headers .= "MIME-Version: 1.0\n";
// $headers .= "Content-type: text/plain; charset='iso-8859-1'\n";
// Bericht
$message = "Naam: ".$naam." \n";
$message .= "E-mail: ".$email." \n";
$message .= "Bericht:\n".$bericht_wrap." \n ";
$message .= " \n ";
$message .= "Datum: ".date("d-m-Y H:i:s")." \n";
$message .= "------------------------------------------------------- \n ";
$message .= "IP: ".$_SERVER['REMOTE_ADDR']." \n ";
$message .= "Host: ".gethostbyaddr($_SERVER['REMOTE_ADDR'])." \n ";
}
if(mail($cfg['email'], "[Contact] ".$onderwerp, $bericht, $headers))
{
if(isset($_POST['stuurkopie']))
{
//tijdelijk uit $headers = "From: \"Contact Formulier\" <".$email.">\r\n";
// $headers .= "Reply-To: \"".$naam."\" <".$email.">\n";
// $headers .= "Return-Path: Mail-Error <".$email.">\n";
// $headers .= "MIME-Version: 1.0\n";
// $headers .= "Content-Transfer-Encoding: 8bit\n";
// $headers .= "Content-type: text/html; charset=iso-8859-1\n";
mail($email, "[Contact] ".$onderwerp, $bericht, $headers );
}
unset($naam, $email, $onderwerp, $bericht);
//tijdelijk uit setcookie("formulier", 1, time() + ( $cfg['spam'] * 60 ) );
echo "
<p>
Uw bericht is succesvol verzonden, er word zo snel mogelijk gereageerd.<br />
<br />
Met vriendelijke groeten,<br />
<b>".$cfg['naam']."</b>
</p>
";
}
else
{
echo "Er is een fout opgetreden bij het verzenden van de email";
}
//tijdelijk uit header("refresh:3;url=".$cfg['url']."");
}
}
if($formulier)
{
?>
<body>
<div id="container">
<?php
if(isset($errors)) {
echo $errors;
}
?>
<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
<p>
<label <?php if(isset($fout['text']['naam'])) { echo 'class="fout"'; } ?>>Naam:</label>
<input type="text" id="naam" name="naam" maxlength="30" <?php if(isset($fout['input']['naam'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($naam)) { echo stripslashes($naam); } ?>" /><b>
<label <?php if(isset($fout['text']['email'])) { echo 'class="fout"'; } ?>>Email:</label>
<input type="text" id="email" name="email" maxlength="255" <?php if(isset($fout['input']['email'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($email)) { echo stripslashes($email); } ?>" /><br />
<label <?php if(isset($fout['text']['onderwerp'])) { echo 'class="fout"'; } ?>>Onderwerp:</label>
<input type="text" id="onderwerp" name="onderwerp" maxlength="40" <?php if(isset($fout['input']['onderwerp'])) { echo 'class="fout'; } ?> value="<?php if (!empty($onderwerp)) { echo stripslashes($onderwerp); } ?>" /><br />
<label <?php if(isset($fout['text']['bericht'])) { echo 'class="fout"'; } ?>>Bericht:</label>
<textarea id="bericht" name="bericht" <?php if(isset($fout['input']['bericht'])) { echo 'class="fout"'; } ?> cols="35" rows="6"><?php if (!empty($bericht)) { echo stripslashes($bericht); } ?></textarea><br />
<?php
}
?>
<label for="stuurkopie">Stuur mij een kopie</label><input type="checkbox" id="stuurkopie" name="stuurkopie" value="1" /><br />
<label></label>
<input type="submit" id="verzenden" name="verzenden" value="verzenden" />
<input type="submit" id="wis" name="wis" value="Wis velden" />
</p>
</form>
</div>
<?php
}
else
{
echo "
<p>
U kunt maar eens in de ".$cfg['spam']." minuten een e-mail versturen!<br />
U wordt nu automatisch doorgestuurd.
</p>";
header("refresh:3;url=".$cfg['url']."");
}
?>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('<?php echo SITE_KEY; ?>', {action: 'homepage'})
.then(function(token) {
//console.log(token);
document.getElementById('g-recaptcha-response').value=token;
});
});
</script>
<?php
if($_POST){
function getCaptcha($SecretKey){
$Response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".SECRET_KEY."&response={$SecretKey}");
$Return = json_decode($Response);
return $Return;
}
$Return = getCaptcha($_POST['g-recaptcha-response']);
//var_dump($Return);
if($Return->success == true && $Return->score > 0.5){
echo "Succes!";
}else{
echo "You are a Robot!!";
}
}
?>
</body>
</html>
Gewijzigd op 20/10/2019 15:39:06 door - Ariën -
Gewijzigd op 20/10/2019 15:13:58 door - Ariën -
- Ariën - op 20/10/2019 15:11:57:
Kan je het script beperken tot relevante code, en deze tussen code-tags zetten? Zie ook de Veelgestelde Vragen.
Ik zie dat mijn code niet helemaal overgekomen zoals ik wilde. Excuus.
@ariën : Had het hele script tussen code en /code tags gezet, echter alle ?php automatisch gescheiden. Hoe pas ik dit aan?
Gewijzigd op 20/10/2019 15:35:20 door Rob Valkenburg
Oplossing voor je probleem:
Zet die formuliervelden in het if-statement erboven, waar ook de andere velden staan.
Toevoeging op 21/10/2019 13:28:02:
Nog iets: Ik zie net dat de mail die ik kreeg in mijn spambox terecht is gekomen. Blijkbaar omdat je headers uitstaan, als dat ook in je code zo is?
Veder kan je het beste met filter_var controleren of een mail-adres correct is. Nu sluit je lange extenties, zoals bijvoorbeeld: [email protected] al uit.
Ook raad ik aan om bij location-headers een exit() erna te plaatsen. Je wilt immers je script stoppen.
Gewijzigd op 20/10/2019 15:47:15 door - Ariën -
- Ariën - op 20/10/2019 15:39:32:
Oplossing voor je probleem:
Zet die formuliervelden in het if-statement erboven, waar ook de andere velden staan.
Zet die formuliervelden in het if-statement erboven, waar ook de andere velden staan.
Opgelost.
- Ariën - op 20/10/2019 15:39:32:
Nog iets: Ik zie net dat de mail die ik kreeg in mijn spambox terecht is gekomen. Blijkbaar omdat je headers uitstaan, als dat ook in je code zo is?
Headers stonden uit, vanwege foutmeldingen. Kwam erachter dat het formulier zich voordeed dat de mail via je eigen adres werd verzonden. Script aangepast en headers weer aangezet.
- Ariën - op 20/10/2019 15:39:32:
Veder kan je het beste met filter_var controleren of een mail-adres correct is. Nu sluit je lange extenties, zoals bijvoorbeeld: [email protected] al uit.
Neem aan dat de meeste gewoon met een .nl, .com adres mailen.
Volgens mij zijn adressen met een lange extentie niet echt meer van deze tijd of is dat nog steeds hip?
- Ariën - op 20/10/2019 15:39:32:
Ook raad ik aan om bij location-headers een exit() erna te plaatsen. Je wilt immers je script stoppen.
Opgelost. Location headers verwijderd.
Bedankt voor de hulp.
De testpagina is offline.
Toevoeging op 24/10/2019 21:41:46:
Rob Valkenburg op 20/10/2019 14:55:02:
Testen mag... https://boefjesenelfjes.nl/contact_test6_-page.php
Testpagina bestaat inmiddels niet meer.
je hebt ook .musea, .website .hosting en nog een hele hoop.
Gewijzigd op 26/10/2019 15:09:28 door - Ariën -
- Ariën - op 24/10/2019 21:50:00:
Mailadressen met lange extenties (TLS's) zie je niet vaak, maar ze zijn er wel. Dus het is een kleine moeite om er rekening mee te houden :-)
je hebt ook .musea, .website .hosting en nog een hele hoop.
je hebt ook .musea, .website .hosting en nog een hele hoop.
Hoe zou ik dit eventueel kunnen aanpassen?
Deze zal per PHP-versie wel een update krijgen als het nodig is. Dan hoef je niet steeds zelf een reg-ex te zoeken of te maken die in de meeste gevallen niet voldoet aan de voorgeschreven RFC :-P
Gewijzigd op 25/10/2019 20:02:13 door - Ariën -
Dat gezegd hebbende, misschien is een alternatieve of aanvullende controle misschien ook interessant: je zou kunnen controleren of het domein een MX record heeft. Een e-mail adres kan namelijk volgens filter_var() wel een syntactisch valide e-mailadres zijn, maar deze kan nog steeds onzin bevatten.
filter_var() kan dus nog steeds "false positives" opleveren, maar met een extra check wordt de kans dat iemand een onzin-adres invult weer kleiner.
Bijvoorbeeld dus zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// @note have to add a dot at the end to make it a Fully Qualified Domain Name, otherwise it might check a relative domain?
// @see https://www.php.net/manual/en/function.checkdnsrr.php#119969
$domain = substr($emailAddress, strpos($emailAddress, '@') + 1).'.'; // @todo UTF-8 compatibiliteit
$test = checkdnsrr($domain, 'MX');
if ($test === false) {
// verzamel foutmeldingen op een of andere manier
$errors[] = 'no MX record found for domain of e-mail address';
}
?>
// @note have to add a dot at the end to make it a Fully Qualified Domain Name, otherwise it might check a relative domain?
// @see https://www.php.net/manual/en/function.checkdnsrr.php#119969
$domain = substr($emailAddress, strpos($emailAddress, '@') + 1).'.'; // @todo UTF-8 compatibiliteit
$test = checkdnsrr($domain, 'MX');
if ($test === false) {
// verzamel foutmeldingen op een of andere manier
$errors[] = 'no MX record found for domain of e-mail address';
}
?>
En de ultieme check is natuurlijk een bevestigingsconstructie via het desbetreffende e-mailadres.
Gewijzigd op 25/10/2019 21:31:20 door Thomas van den Heuvel
Ga erna kijken. :)
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$domain = idn_to_ascii(mb_substr($emailAddress, mb_strpos($emailAddress, '@') + 1).'.');
$test = checkdnsrr($domain, 'MX');
if ($test === false) {
$errors[] = 'no MX record found for domain of e-mail address';
}
?>
$domain = idn_to_ascii(mb_substr($emailAddress, mb_strpos($emailAddress, '@') + 1).'.');
$test = checkdnsrr($domain, 'MX');
if ($test === false) {
$errors[] = 'no MX record found for domain of e-mail address';
}
?>
Gewijzigd op 27/10/2019 22:31:29 door Thomas van den Heuvel
Is was slordiger qua dns-beheer, maar wel een standaard.
In dat geval zou je de test wat kunnen versoepelen door aan $test een case toe te voegen. Ingeval de MX-check slaagt dan zal de A-check niet uitgevoerd worden als je een logische OR (||) gebruikt vanwege lazy evaluation.
Of enkel op een A-record controleren? Of zijn er ook domeinen die wel een MX-record hebben maar geen A-record? Dat zou misschien theoretisch ook kunnen?
Deze test is specifiek bedoeld om (verder) aannemelijk te maken dat een e-mailadres valide is. Idealiter is dit een controle die alles of ten minste zoveel mogelijk gevallen dekt. En de ultieme test is nog steeds een bevestiging per mail natuurlijk.