Juiste manier van versturen formulier!
Dit is mijn vraag.\r\nDit is mijn opmerkingen.\r\nIk heet Kees van \'t Hek.
Alleen wil ik die \r\n niet zien en die \ voor 't. Hoe kan ik dit oplossen. In mijn script gebruik ik de post:
$message = mysqli_real_escape_string($conn, $_POST['message']);
Hoe kan ik dit oplossen?
Het feit dat je in je query een \ voor de apostrof ziet is juist. Maar die zou je nooit in je output mogen zien.
Ook die \r\n zou je niet mogen zien.
Dus wat doe je nog meer? Ergens lijkt daar iets fout te gaan.
Deze waarde worden in een html mail verstuurt. Daarbij gebruik ik dan '.$message.'.
mysqli_real_escape_string gebruik je om data op te slaan in een database. Niet om mails te versturen.
Gewijzigd op 19/01/2023 17:12:50 door - Ariën -
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
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
<?php
if(!empty($_POST['name']) && !empty($_POST['email'])){
$name = mysqli_real_escape_string($conn, $_POST['name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$message = mysqli_real_escape_string($conn, $_POST['message']);
// Onderwerp van je bericht
$subject = 'Je aanvraag is goed ontvangen! Aanvraag: #'.$aanvraag_id.'';
// Een korte benaming voor jouw website
$website_naam = 'Het Sprekersburo';
// Jouw eigen geldige emailadres
$eigen_emailadres = '[email protected]';
// Een geldig emailadres of helemaal leeg laten
$naam_verzender = $name;
// Het geldige emailadres van de afzender
$email_verzender = $email;
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = '[email protected]';
// Een geldig emailadres voor errors
$error_emailadres = '[email protected]';
// TO
$to = '[email protected]';
// De headers samenstellen
$headers = 'From: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers .= 'Bcc: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
/*
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . PHP_EOL : ' . "\r\n";
*/
// To send HTML mail, the Content-type header must be set
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= 'X-Priority: Normal' . "\r\n";
$body = '<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="x-apple-disable-message-reformatting">
<title></title>
<!--[if mso]>
<noscript>
<xml>
<o:OfficeDocumentSettings>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
</noscript>
<![endif]-->
<style>
table, td, div, h1, p, a {font-family: Tahoma, Verdana, Segoe, sans-serif; font-size: 14px;line-height: 22px; color: #000000;}
</style>
</head>
<body>
<p>Naam: '.$name.'<br />
E-mailadres: '.$email.'<br />
Bericht: '.$message.'</p>
</body>
</html>';
// Send email to Admin
@mail($to, $subject, $body, $headers);
?>
if(!empty($_POST['name']) && !empty($_POST['email'])){
$name = mysqli_real_escape_string($conn, $_POST['name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$message = mysqli_real_escape_string($conn, $_POST['message']);
// Onderwerp van je bericht
$subject = 'Je aanvraag is goed ontvangen! Aanvraag: #'.$aanvraag_id.'';
// Een korte benaming voor jouw website
$website_naam = 'Het Sprekersburo';
// Jouw eigen geldige emailadres
$eigen_emailadres = '[email protected]';
// Een geldig emailadres of helemaal leeg laten
$naam_verzender = $name;
// Het geldige emailadres van de afzender
$email_verzender = $email;
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = '[email protected]';
// Een geldig emailadres voor errors
$error_emailadres = '[email protected]';
// TO
$to = '[email protected]';
// De headers samenstellen
$headers = 'From: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers .= 'Bcc: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
/*
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . PHP_EOL : ' . "\r\n";
*/
// To send HTML mail, the Content-type header must be set
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= 'X-Priority: Normal' . "\r\n";
$body = '<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="x-apple-disable-message-reformatting">
<title></title>
<!--[if mso]>
<noscript>
<xml>
<o:OfficeDocumentSettings>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
</noscript>
<![endif]-->
<style>
table, td, div, h1, p, a {font-family: Tahoma, Verdana, Segoe, sans-serif; font-size: 14px;line-height: 22px; color: #000000;}
</style>
</head>
<body>
<p>Naam: '.$name.'<br />
E-mailadres: '.$email.'<br />
Bericht: '.$message.'</p>
</body>
</html>';
// Send email to Admin
@mail($to, $subject, $body, $headers);
?>
En je query?
en je moet natuurlijk een controle inbouwen of het opgegeven emailadres wel iets bevat dat lijkt op een emailadres.
Toevoeging op 19/01/2023 21:25:12:
en het fromadres moet iets zijn dat bij jouw website hoort. Dat is de afzender. Replyto klopt wel.
Toevoeging op 20/01/2023 09:32:59:
bovenaan kun je gebruiken:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$name = filter_input(INPUT_POST, 'name');
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$message = filter_input(INPUT_POST, 'message');
?>
$name = filter_input(INPUT_POST, 'name');
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$message = filter_input(INPUT_POST, 'message');
?>
Daarmee weet je zeker dan $email alleen maar 1 mailadres bevat (of niets). En dat daar vooral niet 400 adressen om te spammen. en zeker geen extra emailheaders.
Een controle " if($email) " is op zijn plaats uiteraard, aangezien je anders geen mail kunt versturen.
Onderaan in je mailbericht moet je nog volgende aanpassen:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$body = '.....
<p>Naam: '. htmlspecialchars($name).'<br />
E-mailadres: '.htmlspecialchars($email).'<br />
Bericht: '. nl2br(htmlspecialchars($message)).'</p>
....';
?>
$body = '.....
<p>Naam: '. htmlspecialchars($name).'<br />
E-mailadres: '.htmlspecialchars($email).'<br />
Bericht: '. nl2br(htmlspecialchars($message)).'</p>
....';
?>
Gewijzigd op 20/01/2023 09:33:52 door Ivo P