footer verdwijnt na die-functie (contactscript)
Ik heb een contactformuliertje ingebouwd in mijn website. Dit scriptje controleert of de velden juist zijn ingevuld en zo niet worden er errorberichten getoond. Wanneer deze errorberichten verschijnen, verdwijnt mijn footer. Ik denk dat dit komt door de die() functie die ik gebruik. Hoe kan ik dit anders doen?
Hier is mijn code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if(isset($_POST['email']))
{
$to = "[email protected]";
$subject = "Mail van lucbax.be";
function died($error) {
// your error code can go here
echo "Het formulier is niet correct ingevuld:";
echo "<br>".$error."<br><br>";
die();
}
//Velden Contactform
$name = $_POST['name']; // required
$address = $_POST['address']; //not required
$email = $_POST['email']; // required
$telephone = $_POST['telephone']; // required
$message = $_POST['message']; // required
}
?>
if(isset($_POST['email']))
{
$to = "[email protected]";
$subject = "Mail van lucbax.be";
function died($error) {
// your error code can go here
echo "Het formulier is niet correct ingevuld:";
echo "<br>".$error."<br><br>";
die();
}
//Velden Contactform
$name = $_POST['name']; // required
$address = $_POST['address']; //not required
$email = $_POST['email']; // required
$telephone = $_POST['telephone']; // required
$message = $_POST['message']; // required
}
?>
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
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
<?php
//Controle op de velden
$error_message = "";
//Controle naam
$name_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($name_exp,$name)) {
$error_message .= "<p>De ingevoerde naam is onjuist</p>";
}
//////////////////////
//Adres not required//
//////////////////////
//Controle telefoonnummer
$phone_exp = "/^\d[\d ]*\d$/";
if(!preg_match($phone_exp,$telephone)) {
$error_message .= "<p>Het ingevoerde telefoonnummer is onjuist</p>";
}
//Controle email
$email_exp = "/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/";
if(!preg_match($email_exp,$email))
{
$error_message .= "<p>Het ingevoerde emailadres is onjuist</p>";
}
//Controlebericht
if(strlen($message) < 10) {
$error_message .= "<p>Het ingevoerde bericht is te kort</p>";
}
//Als er errors zijn, mail niet versturen --> die(errors)
if(strlen($error_message) > 0)
{
echo "<div id='error'>";
died($error_message);
echo "</div>";
}
else
{
echo "bericht verstuurd";
}
//Mail message
$email_message = "Naam: ".$name."\n";
$email_message .= "Adres: ".$address."\n";
$email_message .= "Telefoon: ".$telephone."\n";
$email_message .= "Email: ".$email."\n"."\n";
$email_message .= "Bericht: ".$message."\n";
mail($to, $subject, $email_message);
?>
//Controle op de velden
$error_message = "";
//Controle naam
$name_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($name_exp,$name)) {
$error_message .= "<p>De ingevoerde naam is onjuist</p>";
}
//////////////////////
//Adres not required//
//////////////////////
//Controle telefoonnummer
$phone_exp = "/^\d[\d ]*\d$/";
if(!preg_match($phone_exp,$telephone)) {
$error_message .= "<p>Het ingevoerde telefoonnummer is onjuist</p>";
}
//Controle email
$email_exp = "/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/";
if(!preg_match($email_exp,$email))
{
$error_message .= "<p>Het ingevoerde emailadres is onjuist</p>";
}
//Controlebericht
if(strlen($message) < 10) {
$error_message .= "<p>Het ingevoerde bericht is te kort</p>";
}
//Als er errors zijn, mail niet versturen --> die(errors)
if(strlen($error_message) > 0)
{
echo "<div id='error'>";
died($error_message);
echo "</div>";
}
else
{
echo "bericht verstuurd";
}
//Mail message
$email_message = "Naam: ".$name."\n";
$email_message .= "Adres: ".$address."\n";
$email_message .= "Telefoon: ".$telephone."\n";
$email_message .= "Email: ".$email."\n"."\n";
$email_message .= "Bericht: ".$message."\n";
mail($to, $subject, $email_message);
?>
Gewijzigd op 09/12/2012 14:10:43 door Jos Vermassen
Disclaimer: er zijn momenten waarop die() wel nuttig is, zoals na een redirect. Dan wil je juist dat executie stopt.
Erwin H op 09/12/2012 14:14:18:
Dat is dus precies waarom je NOOIT die() moet gebruiken. Het script gaat namelijk helemaal niet dood zoals je zelf ook merkt. Zeker in dit geval is er ook helemaal geen reden om het script te laten stoppen.
Disclaimer: er zijn momenten waarop die() wel nuttig is, zoals na een redirect. Dan wil je juist dat executie stopt.
Disclaimer: er zijn momenten waarop die() wel nuttig is, zoals na een redirect. Dan wil je juist dat executie stopt.
Maar als ik de die() wegdoe en mijn errorberichten gewoon toon via een echo, dan komen deze er al te staan vooraleer het formulier is ingevuld
Code (php)
Gewijzigd op 09/12/2012 14:17:19 door Jos Vermassen
Wat is nou de rede dat je die gebruikt? Als ik een contact formulier invul en ik maak een foutje hoeft het script toch niet dood te gaan?
Neen, inderdaad. Het is al opgelost.
Zonder die krijg je gewoon een foutmelding. Als het goed is wordt er verder niks gedaan en dat lijkt mij voldoende.
Ten aanzien van je code:
Haal het mailadres even weg. Handig voor spambots.
Je kopieert variabelen (15 t/m 19). Doorgaans niet zinvol. Daarnaast controleer je niet (vooraf) of ze wel bestaan.
Je toont een melding dat de mail verstuurd is (regel 43), terwijl je pas verstuurd op regel 53. Daar controleer je nergens of de mail verstuurd is. Er missen volgens mij nog wat headers. Om te voorkomen dat je het e-mail wiel opnieuw uitvindt, wordt daarom doorgaans swiftmailer of phpmailer geadviseerd.