Wat is beter?
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
<form method="POST" action="--WEBBOT-SELF--">
<p>Naam:<br>
<input type="text" name="T1" size="20"><br>
Email:<br>
<input type="text" name="T2" size="20"><br>
Wat je wilt zeggen<br>
<textarea rows="2" name="S1" cols="20"></textarea><br>
<input type="submit" value="Verzenden" name="POST"></p>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
header("location: http://www.tg4a.nl.tt/verzend.php");
}
?>
<p>Naam:<br>
<input type="text" name="T1" size="20"><br>
Email:<br>
<input type="text" name="T2" size="20"><br>
Wat je wilt zeggen<br>
<textarea rows="2" name="S1" cols="20"></textarea><br>
<input type="submit" value="Verzenden" name="POST"></p>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
header("location: http://www.tg4a.nl.tt/verzend.php");
}
?>
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<form action="verzend.php" method="post">
Naam: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
Tekst: <textarea name="comments"></textarea><br>
<input type="submit" value="Verzenden">
</form>
Naam: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
Tekst: <textarea name="comments"></textarea><br>
<input type="submit" value="Verzenden">
</form>
Welke is beter te gebruiken voor een mailscript?
Gewijzigd op 01/01/1970 01:00:00 door Ruben Kok
Daarbij is de tweede beter want die is simpeler en doet precies hetzelfde. Simpeler is altijd beter. En leesbaarder.
Maar de hamvraag die pas echt bepaald of het goed of niet is, is de inhoud van verzend.php. Hoe ziet die broncode eruit? Want een goed formulier heeft de nodige controles en filters om ervoor te zorgen dat mensen niet al dan niet per ongeluk onzin opsturen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// je email
$youremail = "[email protected]";
if ($email=="" || $comments=="" || $name=="")
{
print ("Je moet alles invullen, ga terug alsjeblieft.");
}
// email verzenden
$headers = "Van: \"$name\" <$email>\n";
$subject = "Vraagje";
$message = "$comments";
mail ("$youremail", "$subject", $message, $headers);
print ("Bedankt $name, je email is verzonden.");
}
?>
// je email
$youremail = "[email protected]";
if ($email=="" || $comments=="" || $name=="")
{
print ("Je moet alles invullen, ga terug alsjeblieft.");
}
// email verzenden
$headers = "Van: \"$name\" <$email>\n";
$subject = "Vraagje";
$message = "$comments";
mail ("$youremail", "$subject", $message, $headers);
print ("Bedankt $name, je email is verzonden.");
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Ruben Kok
Echter, er zijn een paar dingen vatbaar voor betering:
- Je gebruikt zo te zien geen superglobals, en die zijn wel nodig wanneer je wilt dat je script op de gemiddelde webhost werkt. Deze tutorial van PHPerik legt uit.
- Je verzend-scriptje is nog wel vatbaar voor misbruik. Deze tutorial van Pholeron kan je de details uitleggen.
Welke voordelen heeft het boven $message = $comments ?
Oja, nog een belangerijk detail,
Gebruik bij een post natuurlijk $_POST['name'] ipv $name, dit ivm de veiligheid!
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
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
<?php
$name = stripslashes($_POST["name"]);
$email = stripslashes($_POST["email"]);
$comments = stripslashes($_POST["comments"]);
if(isEmail($email)) // Merk op dat een 'goed' emailadres zowiezo nooit een [enter] of quote kan bevatten
{
$header = "From: \"" . protectMailHeaders($name) . "\" <" . $email . ">";
}
else // Fout afhandelen
{
exit("Ongeldig emailadres");
}
function protectMailHeaders($string)
{
$string = str_replace("", "", $string);
$string = str_replace("", "", $string);
$string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Slashes van quotes
return $string;
}
function isEmail($string)
{
$result = false;
if($string != "")
{
$expr = "/^([a-zA-Z0-9]){1,}(([a-zA-Z0-9\-_])|(([\.]){1,1}
-opmaakbreak-
([a-zA-Z0-9]){1,})){0,}([@]){1,1}([a-zA-Z0-9]){1,}
-opmaakbreak-
(([a-zA-Z0-9\-_])|(([\.]){1,1}([a-zA-Z0-9]){1,})){0,}
-opmaakbreak-
([\.]){1,1}([a-zA-Z0-9]){2,4}$/";
if(preg_match($expr, $string)) // voldoet aan expressie
{
$result = true;
}
}
return $result;
}
// je email
$youremail = "[email protected]";
if ($email="" || $comments="" || $name="")
{
print ("Je moet alles invullen, ga terug alsjeblieft.");
}
// email verzenden
$headers = "Van: \"$_POST['name']\" $_POST['email']\n";
$subject = "Vraagje";
$message = 'Dit is de comment: '.$comment;
mail ("$youremail", "$subject", $message, $headers);
print ("Bedankt $name, je email is verzonden.");
}
?>
$name = stripslashes($_POST["name"]);
$email = stripslashes($_POST["email"]);
$comments = stripslashes($_POST["comments"]);
if(isEmail($email)) // Merk op dat een 'goed' emailadres zowiezo nooit een [enter] of quote kan bevatten
{
$header = "From: \"" . protectMailHeaders($name) . "\" <" . $email . ">";
}
else // Fout afhandelen
{
exit("Ongeldig emailadres");
}
function protectMailHeaders($string)
{
$string = str_replace("", "", $string);
$string = str_replace("", "", $string);
$string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Slashes van quotes
return $string;
}
function isEmail($string)
{
$result = false;
if($string != "")
{
$expr = "/^([a-zA-Z0-9]){1,}(([a-zA-Z0-9\-_])|(([\.]){1,1}
-opmaakbreak-
([a-zA-Z0-9]){1,})){0,}([@]){1,1}([a-zA-Z0-9]){1,}
-opmaakbreak-
(([a-zA-Z0-9\-_])|(([\.]){1,1}([a-zA-Z0-9]){1,})){0,}
-opmaakbreak-
([\.]){1,1}([a-zA-Z0-9]){2,4}$/";
if(preg_match($expr, $string)) // voldoet aan expressie
{
$result = true;
}
}
return $result;
}
// je email
$youremail = "[email protected]";
if ($email="" || $comments="" || $name="")
{
print ("Je moet alles invullen, ga terug alsjeblieft.");
}
// email verzenden
$headers = "Van: \"$_POST['name']\" $_POST['email']\n";
$subject = "Vraagje";
$message = 'Dit is de comment: '.$comment;
mail ("$youremail", "$subject", $message, $headers);
print ("Bedankt $name, je email is verzonden.");
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Ruben Kok
@Hipska: dezelfde redenen waarom hij eerst in mail() "$youremail" en "$subject" zet en daarna gewoon $message en $headers.....
@Ruben:
Waarom doe jij $message = "$comments" als ik vragen mag?
Welke voordelen heeft het boven $message = $comments ?
gewoon? het is maar een naamverschil. Dus ik snap het probleem er van niet
Het probleem is dat php bij "$var" veel extra werk heeft..
Hij moet eerst $var (die al een string is) nog eens in een lege string plakken en dan pas die string kopieren naar die andere variabele.
Komt er dan nog eens bij dat als je "$var['key']" doet, dat dit niet zal werken. hij zal $var en "['key']" in een lege string plakken en niet de inhoud va $var['key'].
Daarom is het aan te raden om altijd voor strings ' te gebruiken en variabelen buiten de " te houden. Bijkomend voordeel is nog eens dat php ' strings sneller verwerkt dan " strings omdat hij die niet zo moet verwerken zoals in het begin vermeldt..
Dus $message = 'Dit is de comment: '.$comment;
oke, bedankt voor de hulp. Ik kan het vanaf hier wel zelf weer ;)