Formulieren antispam maken
Pagina: « vorige 1 2 3 volgende »
@ Roos : wat wil je nu precies hebben?
Blijkbaar is de manier van formulieren maken waarop ik het tot nu toe deed niet voldoende en omdat ik niet alles tegelijk kan leren heb ik er nu voor gekozen om de (dacht ik) snelste weg te bewandelen en een (betaalde) oproep te plaatsen om het probleem op te lossen.
Ik heb de hoop wanneer ik 1 goed werkend (antispam) formulier aangeleverd krijg ik de rest van de formulieren die op die site staan (misschien) zelf kan aanpassen...
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
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
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// hier zit nog geen controle bij of er wel iets is ingevuld in de velden
// dat kun je doen met bijv: if (empty ($_POST['naam']))
$to = '[email protected]'; // zelf veranderen
$subj = 'Via contactformulier';
$msg = "
Naam: '" . $_POST['naam'] . "'
E-mail: '" . $_POST['email'] . "'
Onderwerp: '" . $_POST['onderwerp'] . "'
Bericht: '" . $_POST['bericht'] . "'
";
$headers = 'From: contactformulier website';
if (mail ($to, $subj, $msg, $headers))
{
$msg = '<p style="color: red;">De mail is verzonden</p>';
}
else
{
$msg = '<p style="color: red;">Het verzenden van de mail is mislukt</p>';
}
}
?>
Nu kun je overal waar je wilt dit doen:
<?php
echo $msg;
?>
Hier heb je er een met wat validates (o.a. e-mail validate, en iig een waarde bij naam, email en vragen etc.)
Vergeet niet het volgende te veranderen:
- De action van de form te veranderen in send.php
- Email waar het heen moet (staat nu op [email protected]).
- Succes pagina (staat nu op succes.html)
- Error pagina (staat nu op error.html)
Maak een php bestand aan met de volgende code, en noem dit bestand: send.php
<?PHP
error_reporting(7);
function check_string($value, $low, $high, $mode, $optional)
{
if ( (strlen($value) == 0) && ($optional === true) )
{
return true;
}
elseif ( (strlen($value) >= $low) && ($mode == 1) )
{
return true;
}
elseif ( (strlen($value) <= $high) && ($mode == 2) )
{
return true;
}
elseif ( (strlen($value) >= $low) && (strlen($value) <= $high) && ($mode == 3) )
{
return true;
} else {
return false;
}
}
function check_email($email, $optional)
{
if ( (strlen($email) == 0) && ($optional === true) )
{
return true;
} elseif ( eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email) )
{
return true;
}
else
{
return false;
}
}
$FTGnaam = $_POST['naam'];
$FTGemail = $_POST['email'];
$FTGonderwerp = $_POST['onderwerp'];
$FTGbericht = $_POST['bericht'];
$validationFailed = false;
if ( (! check_string($FTGnaam, 1, 0, 1, false)))
{
$validationFailed = true;
}
if ( (! check_email($FTGemail, false)))
{
$validationFailed = true;
}
if ( (! check_string($FTGbericht, 1, 0, 1, false)))
{
$validationFailed = true;
}
if ($validationFailed == true)
{
//Verander
header("Location: error.html");
exit;
}
//Verander hieronder jouwn naam en email, en het onderwerp van de email
$emailTo = '"Sabine" <[email protected]>';
$emailSubject = "Contact opgenomen via website";
//Klaar
$emailBody = "naam: $FTGnaam\n"
. "email: $FTGemail\n"
. "onderwerp: $FTGonderwerp\n"
. "bericht: $FTGbericht\n"
. "\n"
. "";
$emailHeader = "From: [email protected]\n"
. "Reply-To: [email protected]\n"
. "MIME-Version: 1.0\n"
. "Content-type: text/plain; charset=\"ISO-8859-1\"\n"
. "Content-transfer-encoding: quoted-printable\n";
mail($emailTo, $emailSubject, $emailBody, $emailHeader);
//Verander
header("Location: succes.html");
exit;
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// hier zit nog geen controle bij of er wel iets is ingevuld in de velden
// dat kun je doen met bijv: if (empty ($_POST['naam']))
$to = '[email protected]'; // zelf veranderen
$subj = 'Via contactformulier';
$msg = "
Naam: '" . $_POST['naam'] . "'
E-mail: '" . $_POST['email'] . "'
Onderwerp: '" . $_POST['onderwerp'] . "'
Bericht: '" . $_POST['bericht'] . "'
";
$headers = 'From: contactformulier website';
if (mail ($to, $subj, $msg, $headers))
{
$msg = '<p style="color: red;">De mail is verzonden</p>';
}
else
{
$msg = '<p style="color: red;">Het verzenden van de mail is mislukt</p>';
}
}
?>
Nu kun je overal waar je wilt dit doen:
<?php
echo $msg;
?>
Hier heb je er een met wat validates (o.a. e-mail validate, en iig een waarde bij naam, email en vragen etc.)
Vergeet niet het volgende te veranderen:
- De action van de form te veranderen in send.php
- Email waar het heen moet (staat nu op [email protected]).
- Succes pagina (staat nu op succes.html)
- Error pagina (staat nu op error.html)
Maak een php bestand aan met de volgende code, en noem dit bestand: send.php
<?PHP
error_reporting(7);
function check_string($value, $low, $high, $mode, $optional)
{
if ( (strlen($value) == 0) && ($optional === true) )
{
return true;
}
elseif ( (strlen($value) >= $low) && ($mode == 1) )
{
return true;
}
elseif ( (strlen($value) <= $high) && ($mode == 2) )
{
return true;
}
elseif ( (strlen($value) >= $low) && (strlen($value) <= $high) && ($mode == 3) )
{
return true;
} else {
return false;
}
}
function check_email($email, $optional)
{
if ( (strlen($email) == 0) && ($optional === true) )
{
return true;
} elseif ( eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email) )
{
return true;
}
else
{
return false;
}
}
$FTGnaam = $_POST['naam'];
$FTGemail = $_POST['email'];
$FTGonderwerp = $_POST['onderwerp'];
$FTGbericht = $_POST['bericht'];
$validationFailed = false;
if ( (! check_string($FTGnaam, 1, 0, 1, false)))
{
$validationFailed = true;
}
if ( (! check_email($FTGemail, false)))
{
$validationFailed = true;
}
if ( (! check_string($FTGbericht, 1, 0, 1, false)))
{
$validationFailed = true;
}
if ($validationFailed == true)
{
//Verander
header("Location: error.html");
exit;
}
//Verander hieronder jouwn naam en email, en het onderwerp van de email
$emailTo = '"Sabine" <[email protected]>';
$emailSubject = "Contact opgenomen via website";
//Klaar
$emailBody = "naam: $FTGnaam\n"
. "email: $FTGemail\n"
. "onderwerp: $FTGonderwerp\n"
. "bericht: $FTGbericht\n"
. "\n"
. "";
$emailHeader = "From: [email protected]\n"
. "Reply-To: [email protected]\n"
. "MIME-Version: 1.0\n"
. "Content-type: text/plain; charset=\"ISO-8859-1\"\n"
. "Content-transfer-encoding: quoted-printable\n";
mail($emailTo, $emailSubject, $emailBody, $emailHeader);
//Verander
header("Location: succes.html");
exit;
?>
Moet ik dit ook aanpassen?
$emailHeader = "From: [email protected]\n"
Gewijzigd op 01/01/1970 01:00:00 door Roos
ja dat lijkt mij wel of dit is je email adres?
Marthijn:
Haha de kindjes willen geld bijverdienen, dan moet je toch echt bij de boer gaan werken op het land:D
Als je even terug leest zie je staan in mijn post:
Dit zal niet veel meer dan 5 minuten werk zijn. En kan dus makkelijk voor niks
Ik twijfel gewoon aan alles momenteel (op php-gebied), ik dacht e.e.a. toe te kunnen passen maar het voelt momenteel of ik er helemaal niets meer van bak......
Gewijzigd op 01/01/1970 01:00:00 door Roos
PHP:
Als je even terug leest zie je staan in mijn post:
Dit zal niet veel meer dan 5 minuten werk zijn. En kan dus makkelijk voor niks
Marthijn:
Haha de kindjes willen geld bijverdienen, dan moet je toch echt bij de boer gaan werken op het land:D
Als je even terug leest zie je staan in mijn post:
Dit zal niet veel meer dan 5 minuten werk zijn. En kan dus makkelijk voor niks
Zet dan hier wat neer in plaats van te blijven zeggen.
Zo help je Roos niet echt en zoals al eerder gezegd stellen wij het niet op prijs om middels PM of mail te gaan helpen.
@ Roos : zet is neer wat je tot nu toe hebt. We kunnen dan kijken waar we nog wat kunnen aanpassen en of helpen.
In het voorbeeld, gepost door lissy, worden geen velden uit het formulier opgenomen in de header. Dit geeft altijd 100% veiligheid voor de betreffende mail() aanroep.
Wil je echter wel de waarden van velden uit het formulier opnemen, dan moet je deze waarden i.i.g checken op quotes, slashes en enters.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
function escapeHeaders($string)
{
$string = str_replace("\n", "", $string); // Verwijder \n
$string = str_replace("\r", "", $string); // Verwijder \r
$string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Escape slashes en quotes
return $string;
}
{
$string = str_replace("\n", "", $string); // Verwijder \n
$string = str_replace("\r", "", $string); // Verwijder \r
$string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Escape slashes en quotes
return $string;
}
Je header kan dan bijv. worden:
lissy:
Zet dan hier wat neer in plaats van te blijven zeggen.
Zo help je Roos niet echt en zoals al eerder gezegd stellen wij het niet op prijs om middels PM of mail te gaan helpen.
PHP:
Als je even terug leest zie je staan in mijn post:
Dit zal niet veel meer dan 5 minuten werk zijn. En kan dus makkelijk voor niks
Marthijn:
Haha de kindjes willen geld bijverdienen, dan moet je toch echt bij de boer gaan werken op het land:D
Als je even terug leest zie je staan in mijn post:
Dit zal niet veel meer dan 5 minuten werk zijn. En kan dus makkelijk voor niks
Zet dan hier wat neer in plaats van te blijven zeggen.
Zo help je Roos niet echt en zoals al eerder gezegd stellen wij het niet op prijs om middels PM of mail te gaan helpen.
Ik wilde even duidelijk maken dat het niet gaat om even snel geld verdienen.
Problemen:
From: $naam<$email>
De opgegeven naam wordt de afzender, dat gaat niet altijd goed, en hier dus ook niet. Maak hier gewoon een vast adres van. [email protected] o.i.d.
Verder zie ik geen anti-flood, wat betekend dat ik gewoon 1000 e-mails achter elkaar kan zenden.
Met een anti-flood beveiliging maak je na een succesvol verzonden bericht een sessie aan, met de tijd.
Vervolgens kijk je bij de volgende verzending, of dat de sessie bestaat, en of het al langer dan een X aantal seconden geleden is voordat de mail was verzonden.
Als je wil post ik zometeen even een voorbeeldje
Warning: Cannot modify header information - headers already sent by (output started at / etc. etc.
Gewijzigd op 01/01/1970 01:00:00 door Roos
De foutmelding wil zeggen dat er al gegevens zijn verzonden alvorens hij deze opdracht zou moeten voltooien en dat mag niet.
Zelf gebruik ik als alles is verstuurd deze:
Code (php)
1
2
3
4
2
3
4
<?php
// Dit redirect je naar een andere pagina.
echo "<meta http-equiv='refresh' content='0; url=$Link'>";
?>
// Dit redirect je naar een andere pagina.
echo "<meta http-equiv='refresh' content='0; url=$Link'>";
?>
bovenaan heb ik $Link benoemd naar waar de bezoeker naar toe moet worden gebracht dus bijv. de homepage en deze is dan: $Link=index.php
Maar goed e.e.a. is afhankelijk van jouw situatie!
Knap hoor dat je doorzet en echt dit gaat draaien vertrouw daar maar op !!!
Bedankt voor je bemoediging Lissy maar ik word er helaas niet vrolijker van want de desbetreffende site kan nog lang niet weer de lucht in en eigenlijk moet ik nog zoveel andere dingen doen......
Gewijzigd op 01/01/1970 01:00:00 door Roos
@ Roos : Zou je nu neer kunnen zetten wat je tot nu hebt gescript?
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
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
<form name="roos" method="post" action="send.php">
<table border="0" align="left" cellpadding="1" cellspacing="0" class="klservice">
<tr>
<td colspan="3"></td>
</tr>
<tr>
<td width="102"><strong>Naam:</strong></td>
<td colspan="2"><input name="naam" type="text" class="formulier" size="30">
</td>
</tr>
<tr>
<td><strong>Email:</strong></td>
<td width="195"><input name="email" type="text" class="formulier" size="30"></td>
<td width="157"> </td>
</tr>
<tr>
<td><strong>Onderwerp:</strong></td>
<td><input name="onderwerp" type="text" class="formulier" size="10"></td>
<td> </td></tr>
<tr>
<td><strong>Bericht:</strong></td>
<td><input name="bericht" type="text" class="formulier" size="30"></td>
<td> </td>
</tr>
<tr>
<td height="10" colspan="3"></td>
</tr>
<tr>
<td> </td>
<td><input name="submit" type="submit" class="formulier" value="Verzenden">
<img src="img/spacer.gif" width="30" height="5">
<input name="Reset" type="reset" class="formulier" value=" Wissen "></td>
<td> </td>
</tr>
<tr>
<td colspan="3"><br>
De eerstvolgende nieuwsbrief wordt u zo spoedig mogelijk toegezonden naar het <br>
opgegeven
e-mailadres.</td>
</tr>
</table></form>
<table border="0" align="left" cellpadding="1" cellspacing="0" class="klservice">
<tr>
<td colspan="3"></td>
</tr>
<tr>
<td width="102"><strong>Naam:</strong></td>
<td colspan="2"><input name="naam" type="text" class="formulier" size="30">
</td>
</tr>
<tr>
<td><strong>Email:</strong></td>
<td width="195"><input name="email" type="text" class="formulier" size="30"></td>
<td width="157"> </td>
</tr>
<tr>
<td><strong>Onderwerp:</strong></td>
<td><input name="onderwerp" type="text" class="formulier" size="10"></td>
<td> </td></tr>
<tr>
<td><strong>Bericht:</strong></td>
<td><input name="bericht" type="text" class="formulier" size="30"></td>
<td> </td>
</tr>
<tr>
<td height="10" colspan="3"></td>
</tr>
<tr>
<td> </td>
<td><input name="submit" type="submit" class="formulier" value="Verzenden">
<img src="img/spacer.gif" width="30" height="5">
<input name="Reset" type="reset" class="formulier" value=" Wissen "></td>
<td> </td>
</tr>
<tr>
<td colspan="3"><br>
De eerstvolgende nieuwsbrief wordt u zo spoedig mogelijk toegezonden naar het <br>
opgegeven
e-mailadres.</td>
</tr>
</table></form>
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
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
<?PHP
error_reporting(7);
function check_string($value, $low, $high, $mode, $optional)
{
if ( (strlen($value) == 0) && ($optional === true) )
{
return true;
}
elseif ( (strlen($value) >= $low) && ($mode == 1) )
{
return true;
}
elseif ( (strlen($value) <= $high) && ($mode == 2) )
{
return true;
}
elseif ( (strlen($value) >= $low) && (strlen($value) <= $high) && ($mode == 3) )
{
return true;
} else {
return false;
}
}
function check_email($email, $optional)
{
if ( (strlen($email) == 0) && ($optional === true) )
{
return true;
} elseif ( eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email) )
{
return true;
}
else
{
return false;
}
}
$FTGnaam = $_POST['naam'];
$FTGemail = $_POST['email'];
$FTGonderwerp = $_POST['onderwerp'];
$FTGbericht = $_POST['bericht'];
$validationFailed = false;
if ( (! check_string($FTGnaam, 1, 0, 1, false)))
{
$validationFailed = true;
}
if ( (! check_email($FTGemail, false)))
{
$validationFailed = true;
}
if ( (! check_string($FTGbericht, 1, 0, 1, false)))
{
$validationFailed = true;
}
if ($validationFailed == true)
{
//Verander
header("Location: error.html");
exit;
}
//Verander hieronder jouwn naam en email, en het onderwerp van de email
$emailTo = '"Roos" <[email protected]>';
$emailSubject = "Contact opgenomen via website";
//Klaar
$emailBody = "naam: $FTGnaam\n"
. "email: $FTGemail\n"
. "onderwerp: $FTGonderwerp\n"
. "bericht: $FTGbericht\n"
. "\n"
. "";
$emailHeader = "From: [email protected]\n" // dit staat als afzender in mijn postvak
. "Reply-To: [email protected]\n"
. "MIME-Version: 1.0\n"
. "Content-type: text/plain; charset=\"ISO-8859-1\"\n"
. "Content-transfer-encoding: quoted-printable\n";
mail($emailTo, $emailSubject, $emailBody, $emailHeader);
//Verander
header("Location: succes.html");
exit;
?>
error_reporting(7);
function check_string($value, $low, $high, $mode, $optional)
{
if ( (strlen($value) == 0) && ($optional === true) )
{
return true;
}
elseif ( (strlen($value) >= $low) && ($mode == 1) )
{
return true;
}
elseif ( (strlen($value) <= $high) && ($mode == 2) )
{
return true;
}
elseif ( (strlen($value) >= $low) && (strlen($value) <= $high) && ($mode == 3) )
{
return true;
} else {
return false;
}
}
function check_email($email, $optional)
{
if ( (strlen($email) == 0) && ($optional === true) )
{
return true;
} elseif ( eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email) )
{
return true;
}
else
{
return false;
}
}
$FTGnaam = $_POST['naam'];
$FTGemail = $_POST['email'];
$FTGonderwerp = $_POST['onderwerp'];
$FTGbericht = $_POST['bericht'];
$validationFailed = false;
if ( (! check_string($FTGnaam, 1, 0, 1, false)))
{
$validationFailed = true;
}
if ( (! check_email($FTGemail, false)))
{
$validationFailed = true;
}
if ( (! check_string($FTGbericht, 1, 0, 1, false)))
{
$validationFailed = true;
}
if ($validationFailed == true)
{
//Verander
header("Location: error.html");
exit;
}
//Verander hieronder jouwn naam en email, en het onderwerp van de email
$emailTo = '"Roos" <[email protected]>';
$emailSubject = "Contact opgenomen via website";
//Klaar
$emailBody = "naam: $FTGnaam\n"
. "email: $FTGemail\n"
. "onderwerp: $FTGonderwerp\n"
. "bericht: $FTGbericht\n"
. "\n"
. "";
$emailHeader = "From: [email protected]\n" // dit staat als afzender in mijn postvak
. "Reply-To: [email protected]\n"
. "MIME-Version: 1.0\n"
. "Content-type: text/plain; charset=\"ISO-8859-1\"\n"
. "Content-transfer-encoding: quoted-printable\n";
mail($emailTo, $emailSubject, $emailBody, $emailHeader);
//Verander
header("Location: succes.html");
exit;
?>
En als voorbeeld: error.html
Wanneer ik je goed begrijp wens je nadat iemand het formulier al dan niet volledig heeft ingevuld het form weer terug krijgt met al dan niet hetgeen ingevuld wat hij heeft gedaan en nog wat hij niet heeft gedaan daarvoor de foutmelding?
Bij het versturen van het bericht ziet de bezoeker op de site zelf een melding dat het bericht is verzonden en ontvangt in zijn mailbox daarvan een bevestiging.
Wat betreft de site op zich: na het versturen ziet de bezoeker de melding dat de mail is verzonden en kan daarna weer verder navigeren op de pagina.
Heb ook nog even het eerste opzetje van je geprobeerd maar krijg dan niet de melding in beeld
: $msg = '<p style="color: black;">De mail is verzonden</p>';
Hoe dat dan weer kan??
Ik ga nu nog 'even' proberen om alles op 1 pagina te zetten.......?