Captcha script - Functioneert niet naar behoren!
Ik had een vraag over mijn script. Ik ben al even bezig om mijn
formulier spam vrij te houden door middel van een captcha nu werkt de captcha alleen de afhandeling niet van het verzenden kan iemand mij helpen?
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
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
<?php
$maand = array(1 => "Januari", "Februari", "Maart",
"April", "Mei", "Juni",
"Juli", "Augustus", "September",
"Oktober", "November", "December");
require 'includes/mail.php';
$userErrors = Array();
function checkmail($email)
{
$email_host = explode("@", $email);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);
if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
$valid = 1;
return $valid;
}
if(isset($_POST['Verzenden'])){
$naam = htmlentities($_POST['naam']);
$adres = htmlentities($_POST['adres']);
$postcode = htmlentities($_POST['postcode']);
$plaats = htmlentities($_POST['plaats']);
$telefoon = htmlentities($_POST['telefoon']);
$email = htmlentities($_POST['email']);
$norobot = $_POST['norobot'];
if( !isset($naam) || $naam == '' )
{
$userErrors[] = 'U heeft geen naam ingevuld';
}
if( $_POST['gd'] == '' || $_POST['gm'] == '' || $_POST['gj'] == '' )
{
$userErrors[] = 'U heeft uw geboortedatum niet juist ingevult';
}
if( !isset($adres) || $adres == '' )
{
$userErrors[] = 'U heeft geen adres ingevuld';
}
if( !isset($postcode) || $postcode == '' )
{
$userErrors[] = 'U heeft geen postcode ingevuld';
}
if( !isset($plaats) || $plaats == '' )
{
$userErrors[] = 'U heeft geen plaats ingevuld';
}
if( !isset($telefoon) || $telefoon == '' )
{
$userErrors[] = 'U heeft geen telefoonnummer ingevuld';
}
if( !isset($email) || $email == '' )
{
$userErrors[] = 'U heeft geen e-mailadres ingevuld';
}
elseif(checkmail($email) == 0)
{
$userErrors[] = 'Vul een correct e-mailadres in';
unset($email);
}
if( !isset($_POST['opleidingen']) || $_POST['opleidingen'] == '' )
{
$userErrors[] = 'U heeft geen opleiding ingevuld';
}
if (md5($norobot) != $_SESSION['randomnr2']) {
$userErrors[] = 'Beveiligingscode verkeerd ingevoerd';
}
if( count($userErrors) == 0 )
{
$msg = "Beste Chris,<br><br>";
$msg .= "".$naam." zou graag ".$_POST['radio']." voor: ".$_POST['opleidingen']."<br><br>";
$msg .= "De volgende gegevens waren achter gelaten op de website:<br><br>";
$msg .= "<b>Naam: </b>".$naam."<br>";
$msg .= "<b>Geboortedatum: </b>".$_POST['gd']."-".$_POST['gm']."-".$_POST['gj']."<br>";
$msg .= "<b>Adres: </b>".$adres."<br>";
$msg .= "<b>Postcode: </b>".$postcode."<br>";
$msg .= "<b>Woonplaats: </b>".$plaats."<br>";
$msg .= "<b>Telefoon: </b>".$telefoon."<br>";
$msg .= "<b>E-mailadres: </b>".$email."<br><br>";
$msg .= "Direct reageren klik hier om hem te mailen: <b><a href=mailto:".$email.">".$email."</a></b><br><br><br>";
$msg .= "<b><u>Overige gegevens:</u></b><br>";
$msg .= "Datum: " . date("d.m.Y") . "<br>";
$msg .= "Tijd: " . date("H:i") . "<br>";
$msg .= "Ip addr: " . $_SERVER['REMOTE_ADDR'] . "<br><br>";
$msg .= "Met vriendelijke groeten,<br><br>Webmaster ---";
if(mail($to, $subject, $msg, $headers)) {
$resultMessage = 'Uw bericht is succesvol verstuurd! U hoort zo snel mogelijk van ons!';
}
else
{
$userError[] = 'Uw bericht kon niet verstuurd worden, probeer het later nog eens.';
}
}
}
?>
<style type="text/css">
.verplicht {
color: #F00;
}
</style>
<table width="580" border="0" cellspacing="0" cellpadding="0">
<tr>
<td> <h2>Vul hieronder uw gegevens in en wij nemen zo snel mogelijk contact met u op.</h2>
<?php
if( count($errors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $errors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<?php if( count($userErrors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $userErrors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<?php if( isset($resultMessage) ) echo $resultMessage; ?>
<form name="Inschrijven" method="POST" action="<? $_SERVER['PHP_SELF']; ?>">
<p><br />
Volledige naam <span class="verplicht">*</span><br />
<input name="naam" type="text" id="naam" size="30" /></p>
<p>Geboortedatum <span class="verplicht">*</span><br />
<select id="gd" name="gd" size="1">
<option value="">(Dag)</option>
<?php
for ($dag = 1; $dag <= 31; $dag++) {
echo "<option>" . $dag . "</option>\n";
}
?>
</select>
<select name="gm" size="1">
<option value="">(Maand)</option>
<?php
foreach ($maand as $maandnummer => $maandnaam) {
echo "<option value=\"" . $maandnummer . "\">" . $maandnaam . "</option>\n";
}
?>
</select>
<select name="gj" size="1">
<option value="">(Jaar)</option>
<?php
for ($jaar = (int) date("Y"); $jaar >= 1900; $jaar--) {
echo "<option>" . $jaar . "</option>\n";
}
?>
</select></p>
<p>Adres + Huisnummer <span class="verplicht">*</span><br />
<input name="adres" type="text" id="textfield" size="30" /></p>
<p>Postcode <span class="verplicht">*</span><br />
<input name="postcode" type="text" id="textfield" size="30" /></p>
<p>Woonplaats <span class="verplicht">*</span><br />
<input name="plaats" type="text" id="textfield" size="30" /></p>
<p>Telefoonnummer <span class="verplicht">*</span><br />
<input name="telefoon" type="text" id="textfield" size="30" /></p>
<p>E-mailadres <span class="verplicht">*</span><br />
<input name="email" type="text" id="textfield" size="30" /></p>
<p>
<input type="radio" name="radio" id="radio2" value="informatie willen hebben" />
Informatie |
<input name="radio" type="radio" id="radio" value="willen inschrijven" checked="checked" />
Inschrijven voor <span class="verplicht">*</span><br />
<select name="opleidingen" id="select2">
<option value="" selected="selected">Selecteer Opleiding</option>
<optgroup label="Snorkelen">
<option value="Snorkel Training">Snorkel Training</option>
</optgroup>
</select></p>
<p>Beveiligingscode <span class="verplicht">*</span><br />
<img src="includes/captcha.php"><br /><input name="norobot" type="text" class="input" size="30" placeholder="Voer bovengenoemde code in!"></p>
<br /><input name="Verzenden" type="submit" value="Verzenden"> <input name="Reset" type="reset" value="Opnieuw" />
</form>
</td>
</tr>
</table>
$maand = array(1 => "Januari", "Februari", "Maart",
"April", "Mei", "Juni",
"Juli", "Augustus", "September",
"Oktober", "November", "December");
require 'includes/mail.php';
$userErrors = Array();
function checkmail($email)
{
$email_host = explode("@", $email);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);
if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
$valid = 1;
return $valid;
}
if(isset($_POST['Verzenden'])){
$naam = htmlentities($_POST['naam']);
$adres = htmlentities($_POST['adres']);
$postcode = htmlentities($_POST['postcode']);
$plaats = htmlentities($_POST['plaats']);
$telefoon = htmlentities($_POST['telefoon']);
$email = htmlentities($_POST['email']);
$norobot = $_POST['norobot'];
if( !isset($naam) || $naam == '' )
{
$userErrors[] = 'U heeft geen naam ingevuld';
}
if( $_POST['gd'] == '' || $_POST['gm'] == '' || $_POST['gj'] == '' )
{
$userErrors[] = 'U heeft uw geboortedatum niet juist ingevult';
}
if( !isset($adres) || $adres == '' )
{
$userErrors[] = 'U heeft geen adres ingevuld';
}
if( !isset($postcode) || $postcode == '' )
{
$userErrors[] = 'U heeft geen postcode ingevuld';
}
if( !isset($plaats) || $plaats == '' )
{
$userErrors[] = 'U heeft geen plaats ingevuld';
}
if( !isset($telefoon) || $telefoon == '' )
{
$userErrors[] = 'U heeft geen telefoonnummer ingevuld';
}
if( !isset($email) || $email == '' )
{
$userErrors[] = 'U heeft geen e-mailadres ingevuld';
}
elseif(checkmail($email) == 0)
{
$userErrors[] = 'Vul een correct e-mailadres in';
unset($email);
}
if( !isset($_POST['opleidingen']) || $_POST['opleidingen'] == '' )
{
$userErrors[] = 'U heeft geen opleiding ingevuld';
}
if (md5($norobot) != $_SESSION['randomnr2']) {
$userErrors[] = 'Beveiligingscode verkeerd ingevoerd';
}
if( count($userErrors) == 0 )
{
$msg = "Beste Chris,<br><br>";
$msg .= "".$naam." zou graag ".$_POST['radio']." voor: ".$_POST['opleidingen']."<br><br>";
$msg .= "De volgende gegevens waren achter gelaten op de website:<br><br>";
$msg .= "<b>Naam: </b>".$naam."<br>";
$msg .= "<b>Geboortedatum: </b>".$_POST['gd']."-".$_POST['gm']."-".$_POST['gj']."<br>";
$msg .= "<b>Adres: </b>".$adres."<br>";
$msg .= "<b>Postcode: </b>".$postcode."<br>";
$msg .= "<b>Woonplaats: </b>".$plaats."<br>";
$msg .= "<b>Telefoon: </b>".$telefoon."<br>";
$msg .= "<b>E-mailadres: </b>".$email."<br><br>";
$msg .= "Direct reageren klik hier om hem te mailen: <b><a href=mailto:".$email.">".$email."</a></b><br><br><br>";
$msg .= "<b><u>Overige gegevens:</u></b><br>";
$msg .= "Datum: " . date("d.m.Y") . "<br>";
$msg .= "Tijd: " . date("H:i") . "<br>";
$msg .= "Ip addr: " . $_SERVER['REMOTE_ADDR'] . "<br><br>";
$msg .= "Met vriendelijke groeten,<br><br>Webmaster ---";
if(mail($to, $subject, $msg, $headers)) {
$resultMessage = 'Uw bericht is succesvol verstuurd! U hoort zo snel mogelijk van ons!';
}
else
{
$userError[] = 'Uw bericht kon niet verstuurd worden, probeer het later nog eens.';
}
}
}
?>
<style type="text/css">
.verplicht {
color: #F00;
}
</style>
<table width="580" border="0" cellspacing="0" cellpadding="0">
<tr>
<td> <h2>Vul hieronder uw gegevens in en wij nemen zo snel mogelijk contact met u op.</h2>
<?php
if( count($errors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $errors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<?php if( count($userErrors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $userErrors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<?php if( isset($resultMessage) ) echo $resultMessage; ?>
<form name="Inschrijven" method="POST" action="<? $_SERVER['PHP_SELF']; ?>">
<p><br />
Volledige naam <span class="verplicht">*</span><br />
<input name="naam" type="text" id="naam" size="30" /></p>
<p>Geboortedatum <span class="verplicht">*</span><br />
<select id="gd" name="gd" size="1">
<option value="">(Dag)</option>
<?php
for ($dag = 1; $dag <= 31; $dag++) {
echo "<option>" . $dag . "</option>\n";
}
?>
</select>
<select name="gm" size="1">
<option value="">(Maand)</option>
<?php
foreach ($maand as $maandnummer => $maandnaam) {
echo "<option value=\"" . $maandnummer . "\">" . $maandnaam . "</option>\n";
}
?>
</select>
<select name="gj" size="1">
<option value="">(Jaar)</option>
<?php
for ($jaar = (int) date("Y"); $jaar >= 1900; $jaar--) {
echo "<option>" . $jaar . "</option>\n";
}
?>
</select></p>
<p>Adres + Huisnummer <span class="verplicht">*</span><br />
<input name="adres" type="text" id="textfield" size="30" /></p>
<p>Postcode <span class="verplicht">*</span><br />
<input name="postcode" type="text" id="textfield" size="30" /></p>
<p>Woonplaats <span class="verplicht">*</span><br />
<input name="plaats" type="text" id="textfield" size="30" /></p>
<p>Telefoonnummer <span class="verplicht">*</span><br />
<input name="telefoon" type="text" id="textfield" size="30" /></p>
<p>E-mailadres <span class="verplicht">*</span><br />
<input name="email" type="text" id="textfield" size="30" /></p>
<p>
<input type="radio" name="radio" id="radio2" value="informatie willen hebben" />
Informatie |
<input name="radio" type="radio" id="radio" value="willen inschrijven" checked="checked" />
Inschrijven voor <span class="verplicht">*</span><br />
<select name="opleidingen" id="select2">
<option value="" selected="selected">Selecteer Opleiding</option>
<optgroup label="Snorkelen">
<option value="Snorkel Training">Snorkel Training</option>
</optgroup>
</select></p>
<p>Beveiligingscode <span class="verplicht">*</span><br />
<img src="includes/captcha.php"><br /><input name="norobot" type="text" class="input" size="30" placeholder="Voer bovengenoemde code in!"></p>
<br /><input name="Verzenden" type="submit" value="Verzenden"> <input name="Reset" type="reset" value="Opnieuw" />
</form>
</td>
</tr>
</table>
Heb even wat weggehaald bij opleidingen anders zijn jullie nog wel even aan het lezen..
mijn captcha bestand is:
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
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
<?php
// het random nr. aanmaken en gecodeerd opslaan in php sessie
session_start();
$randomnr = rand(1000, 9999);
$_SESSION['randomnr2'] = md5($randomnr);
// captcha plaatje met nummer maken - afmetingen kun je aanpassen gebruikte font
$im = imagecreatetruecolor(100, 38);
// Kleurenbepaling
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
// zwarte rechthoek tekenen - afmetingen kun je aanpassen aan verschillende fonts
imagefilledrectangle($im, 0, 0, 200, 35, $black);
// hier - font.ttf' vervangen met de locatie van je eigen font bestand
$font = 'verdana.ttf';
// schaduw toevoegen
imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr);
// randomnr. toevoegen
imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr);
// voorkomen dat afbeelding ge-cached wordt
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// plaatje verzenden naar browser
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>
// het random nr. aanmaken en gecodeerd opslaan in php sessie
session_start();
$randomnr = rand(1000, 9999);
$_SESSION['randomnr2'] = md5($randomnr);
// captcha plaatje met nummer maken - afmetingen kun je aanpassen gebruikte font
$im = imagecreatetruecolor(100, 38);
// Kleurenbepaling
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
// zwarte rechthoek tekenen - afmetingen kun je aanpassen aan verschillende fonts
imagefilledrectangle($im, 0, 0, 200, 35, $black);
// hier - font.ttf' vervangen met de locatie van je eigen font bestand
$font = 'verdana.ttf';
// schaduw toevoegen
imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr);
// randomnr. toevoegen
imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr);
// voorkomen dat afbeelding ge-cached wordt
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// plaatje verzenden naar browser
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>
Wat is nu het probleem het maakt niet uit of ik de code nou wel of niet goed invul hij blijft weergeven "Beveiligingscode verkeerd ingevoerd"
kan iemand uit mijn script halen wat ik verkeerd doe?
Alvast bedankt!
En voor iedereen een fijne jaarwisseling en een gelukkig 2013 toegewenst!
Ik verwacht het niet, omdat je geen session_start bovenaan de pagina hebt staan; een sessie bestaat dan niet.
t.a.v. je code:
Controleren of een formulier verzonden is doe je met
Regel 25 t/m 31 is (zinloos) kopiëren van variabelen; je hebt de $_POST-waarden immers al.
Je gaat daarnaast eerst kopiëren en pas _daarna_ controleren of ze wel bestaan. Lijkt me sowieso de verkeerde volgorde.
Waarom inconsequent scripten? $userErrors[] gebruik je ' en bij $msg gebruik je " Op regel 175 breekt het gebruik van " voor PHP je op --> je moet escapen. Gebruik daarom in PHP ' en in HTML "
Op regel 93 is "" niet zo zinvol; je doet er niets.
eregi (in je functie) is verouderd/vervallen.
Om een formulier op te nemen in een table is niet van deze tijd. Als je dan toch een tabel gebruikt, zet dan in ieder geval niet alles in 1 td.
In mijn captcha staat session_start en als ik deze ook aan mij formulier toevoeg krijg ik de foutmelding dat headers already sent.
Regel 25 t/m 31 had ik gedaan voor de htmlentities dit is mij ooi geleerd vanwege veiligheid want ik had het eerst op deze manier allemaal:
Code (php)
1
2
3
4
5
2
3
4
5
if( !isset($_POST['opleidingen']) || $_POST['opleidingen'] == '' )
{
$userErrors[] = 'U heeft geen opleiding ingevuld';
}
{
$userErrors[] = 'U heeft geen opleiding ingevuld';
}
$msg is voor mijn e-mail die verzonden word jij bedoelt zeker $resultMessage
die heb ik later toegevoegd want als ik $userErrors[] die gebruikte op hetzelfde punt gaf hij niet die reactie en nu wel.. Graag hoor ik van je hoe ik dat anders aan kan pakken.
regel 93 heb ik veranderd.
hoe zou ik eregi of mijn e-mail op een andere manier kunnen controleren?
En inderdaad tabel is verouderd daarom is mijn layout ook gemaakt met div's ik gebruik alleen enkel die tabel zodat degene die hem gaat gebruiken straks niet buiten zijn kaders kan typen en metteen ziet hoe het eruit komt te zien. dus eigenlijk nutteloos maar puur voor hem als gebruiksgemak...
Graag hoor ik van je hoe ik die andere dingen kan aanpakken en natuurlijk hoe ik mijn captcha probleem kan oplossen?
Sonic GFX op 31/12/2012 09:04:06:
En inderdaad tabel is verouderd daarom is mijn layout ook gemaakt met div's
..... dus eigenlijk nutteloos.
..... dus eigenlijk nutteloos.
Doe het dan niet. Je maakt het voor iemand anders begrijp ik. Doe het dan goed en niet 2x half.
Al eens geprobeerd om de session_start uit je captcha-bestand te gooien en (alleen) op te nemen in je 1e script? ;-)
De controle die je eerst had was goed. Het advies om htmlentities te gebruiken is ook goed, maar dan op een andere manier/plek.
Begin met de goede volgorde te hanteren; eerst controleren of de variabele bestaat, dan pas bewerken. verigens kun je ook prima in je mail werken met htmlentities; je hoeft er geen nieuwe variabele(n) voor aan te maken.
Sonic GFX op 31/12/2012 09:04:06:
want als ik $userErrors[] die gebruikte op hetzelfde punt
Begrijp niet wat daar staat.
$userErrors[] is een array en bevat foutmeldingen.
Ik bedoel $msg (regel (92 t/m 107). Daar gebruik je "
Waar komt op regel 136 $errors vandaan? Je stopt alle foutmeldingen namelijk in $userErrors[].
Zet error-reporting eens aan.
eregi is vervangen door preg_match.
Open en sluit je echt zo vaak php?
Op regel 145/146 is het in ieder geval niet nodig.
Daarnaast kun je in php prima werken met echo.
Op regel 157 gebruik je overigens een short-tag.
$_SERVER['PHP_SELF']; wordt als onveilig gezien; het zou mensen in de gelegenheid stellen om je formulier te misbruiken. Laat dan liever leeg (of gebruik ook daar htmlentities).
Tabel => in Div gedaan
Session_start => veranderd krijg ik alleen nog dezelfde fout:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Atlantic/home.php:82) in /Atlantic/pagina/Inschrijven.php on line 2
Htmlentities => Aangepast op de oude manier die ik eerst hanteerde en dan aangepast in de mail.
$msg => Snap ik nog niet echt wat daar fout aan is..
Regel 136 => Verwijderd is inderdaad een script die er niet hoort.
eregi => veranderd
Regel 157 => Veranderd
$_Server => ook veranderd
Dat is al een aardig lijstje afgewerkt zo zit alleen nogsteeds met mijn session_start fout.
Obelix in ieder geval alvast bedankt voor de huidige aanpassingen om mijn script beter te maken.
Sonic GFX op 31/12/2012 09:52:53:
Session_start => veranderd krijg ik alleen nog dezelfde fout:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Atlantic/home.php:82) in /Atlantic/pagina/Inschrijven.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Atlantic/home.php:82) in /Atlantic/pagina/Inschrijven.php on line 2
Waar plaats je de session_start()? Dit doe je het beste direct na boven aan de pagina.
Wordt deze pagina opgeroepen in een andere pagina?
Als je het helemaal bovenaan plaatst en het niet wordt opgeroepen in een ander bestand, dan heb je mogelijk te maken met BOM (http://en.wikipedia.org/wiki/Byte_order_mark).
Gewijzigd op 31/12/2012 09:59:47 door Obelix Idefix
wel nogsteeds beveiligingscode onjuist...
Toevoeging op 31/12/2012 14:40:21:
Ik heb hier en daar wat lopen proberen heb nu alleen een nieuw probleem eerst de scripts:
Code (php)
1
2
3
2
3
if (md5($norobot) != $_SESSION['randomnr2']) {
$userErrors[] = 'Beveiligingscode verkeerd ingevoerd';
}
$userErrors[] = 'Beveiligingscode verkeerd ingevoerd';
}
nu is het:
Code (php)
1
2
3
2
3
if ($_POST['norobot'] == $_SESSION['randomnr2']) {
$userErrors[] = 'Beveiligingscode verkeerd ingevoerd';
}
$userErrors[] = 'Beveiligingscode verkeerd ingevoerd';
}
En dit werkt als ze niks invullen doet hij het goed maar als je iets willekeurigs invult klopt hij ook?
Dus dat is me nieuwe probleem..
De nieuwe code kan/mag dan nooit werken, omdat je nog met md5 aan de gang moet.
Wordt het debuggen:
Controleer de waarde in de sessie door deze te echo-en naar het scherm.
Controleer wat er zit in $_POST['norobot'].
Wat komt er uit md5($_POST['norobot'])?
Geen response
En daar kreeg ik een hele lange md5 code bijv: d41d8cd98f00b204e9800998ecf8427e
nu alleen het geen wat ik vreemd vind is dat hij dat direct al geeft en niet nadat ik pas wat in met norobot input heb gezet...
Waar heb je die twee regels neergezet in je code?
Wat zit er in $_POST['norobot']?
Gebruik van short-tag kan problemen geven, gebruik daarom < ? php (zonder de spaties).
Code (php)
1
2
3
4
2
3
4
<div style="width:580">
<h2>Vul hieronder uw gegevens in en wij nemen zo snel mogelijk contact met u op.</h2>
<?php echo $_POST['norobot']; ?>
<h2>Vul hieronder uw gegevens in en wij nemen zo snel mogelijk contact met u op.</h2>
<?php echo $_POST['norobot']; ?>
Dit geeft als resultaat hetgene wat ik ook heb ingevoerd.
Zal even de hele code weer posten:
Formulier:
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
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
<?php
$maand = array(1 => "Januari", "Februari", "Maart",
"April", "Mei", "Juni",
"Juli", "Augustus", "September",
"Oktober", "November", "December");
require 'includes/mail.php';
$userErrors = Array();
function checkmail($email)
{
$email_host = explode("@", $email);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);
if ($email_resolved != $email_host && preg_match("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
$valid = 1;
return $valid;
}
if(isset($_POST['Verzenden'])){
$email = $_POST['email'];
if( !isset($_POST['naam']) || $_POST['naam'] == '' )
{
$userErrors[] = 'U heeft geen naam ingevuld';
}
if( $_POST['gd'] == '' || $_POST['gm'] == '' || $_POST['gj'] == '' )
{
$userErrors[] = 'U heeft uw geboortedatum niet juist ingevult';
}
if( !isset($_POST['adres']) || $_POST['adres'] == '' )
{
$userErrors[] = 'U heeft geen adres ingevuld';
}
if( !isset($_POST['postcode']) || $_POST['postcode'] == '' )
{
$userErrors[] = 'U heeft geen postcode ingevuld';
}
if( !isset($_POST['plaats']) || $_POST['plaats'] == '' )
{
$userErrors[] = 'U heeft geen plaats ingevuld';
}
if( !isset($_POST['telefoon']) || $_POST['telefoon'] == '' )
{
$userErrors[] = 'U heeft geen telefoonnummer ingevuld';
}
if( !isset($email) || $email == '' )
{
$userErrors[] = 'U heeft geen e-mailadres ingevuld';
}
elseif(checkmail($email) == 0)
{
$userErrors[] = 'Vul een correct e-mailadres in';
unset($email);
}
if( !isset($_POST['opleidingen']) || $_POST['opleidingen'] == '' )
{
$userErrors[] = 'U heeft geen opleiding ingevuld';
}
if (md5($_POST['norobot']) != $_SESSION['randomnr2']) {
$userErrors[] = 'Beveiligingscode verkeerd ingevoerd';
}
if( count($userErrors) == 0 )
{
$msg = "Beste Chris,<br><br>";
$msg .= htmlentities($_POST['naam'])." zou graag ".$_POST['radio']." voor: ".$_POST['opleidingen']."<br><br>";
$msg .= "De volgende gegevens waren achter gelaten op de website:<br><br>";
$msg .= "<b>Naam: </b>".htmlentities($_POST['naam'])."<br>";
$msg .= "<b>Geboortedatum: </b>".$_POST['gd']."-".$_POST['gm']."-".$_POST['gj']."<br>";
$msg .= "<b>Adres: </b>".htmlentities($_POST['adres'])."<br>";
$msg .= "<b>Postcode: </b>".htmlentities($_POST['postcode'])."<br>";
$msg .= "<b>Woonplaats: </b>".htmlentities($_POST['plaats'])."<br>";
$msg .= "<b>Telefoon: </b>".htmlentities($_POST['telefoon'])."<br>";
$msg .= "<b>E-mailadres: </b>".htmlentities($email)."<br><br>";
$msg .= "Direct reageren klik hier om hem te mailen: <b><a href=mailto:".htmlentities($email).">".htmlentities($email)."</a></b><br><br><br>";
$msg .= "<b><u>Overige gegevens:</u></b><br>";
$msg .= "Datum: " . date("d.m.Y") . "<br>";
$msg .= "Tijd: " . date("H:i") . "<br>";
$msg .= "Ip addr: " . $_SERVER['REMOTE_ADDR'] . "<br><br>";
$msg .= "Met vriendelijke groeten,<br><br>Webmaster Atlantic Duikcentrum";
if(mail($to, $subject, $msg, $headers)) {
$resultMessage = 'Uw bericht is succesvol verstuurd! U hoort zo snel mogelijk van ons!';
}
else
{
$userError[] = 'Uw bericht kon niet verstuurd worden, probeer het later nog eens.';
}
}
}
?>
<style type="text/css">
.verplicht {
color: #F00;
}
</style>
<div style="width:580">
<h2>Vul hieronder uw gegevens in en wij nemen zo snel mogelijk contact met u op.</h2>
<?php echo $_POST['norobot']; ?>
<?php if( count($userErrors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $userErrors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<?php if( isset($resultMessage) ) echo $resultMessage; ?>
<form name="Inschrijven" method="POST" action="<? htmlentities($_SERVER['PHP_SELF']); ?>">
<p><br />
Volledige naam <span class="verplicht">*</span><br />
<input name="naam" type="text" id="naam" size="30" /></p>
<p>Geboortedatum <span class="verplicht">*</span><br />
<select id="gd" name="gd" size="1">
<option value="">(Dag)</option>
<?php
for ($dag = 1; $dag <= 31; $dag++) {
echo "<option>" . $dag . "</option>";
}
?>
</select>
<select name="gm" size="1">
<option value="">(Maand)</option>
<?php
foreach ($maand as $maandnummer => $maandnaam) {
echo "<option value=\"" . $maandnummer . "\">" . $maandnaam . "</option>";
}
?>
</select>
<select name="gj" size="1">
<option value="">(Jaar)</option>
<?php
for ($jaar = (int) date("Y"); $jaar >= 1900; $jaar--) {
echo "<option>" . $jaar . "</option>";
}
?>
</select></p>
<p>Adres + Huisnummer <span class="verplicht">*</span><br />
<input name="adres" type="text" id="textfield" size="30" /></p>
<p>Postcode <span class="verplicht">*</span><br />
<input name="postcode" type="text" id="textfield" size="30" /></p>
<p>Woonplaats <span class="verplicht">*</span><br />
<input name="plaats" type="text" id="textfield" size="30" /></p>
<p>Telefoonnummer <span class="verplicht">*</span><br />
<input name="telefoon" type="text" id="textfield" size="30" /></p>
<p>E-mailadres <span class="verplicht">*</span><br />
<input name="email" type="text" id="textfield" size="30" /></p>
<p>
<input type="radio" name="radio" id="radio2" value="informatie willen hebben" />
Informatie |
<input name="radio" type="radio" id="radio" value="willen inschrijven" checked="checked" />
Inschrijven voor <span class="verplicht">*</span><br />
<select name="opleidingen" id="select2">
<option value="" selected="selected">Selecteer Opleiding</option>
<optgroup label="Snorkelen">
<option value="Snorkel Training">Snorkel Training</option>
</optgroup>
<optgroup label="Duiken voor kinderen">
<option value="Kinderen Introductie Duik">Introductie Duik</option>
<option value="Bubble Maker">Bubble Maker</option>
<option value="Sealteam">Sealteam</option>
<option value="Master Sealteam">Master Sealteam</option>
<option value="Junior Open Water Diver">Junior Open Water Diver</option></optgroup>
</select></p>
<p>Beveiligingscode <span class="verplicht">*</span><br />
<img src="includes/captcha.php"><br /><input name="norobot" type="text" class="input" size="30" placeholder="Voer bovengenoemde code in!"></p>
<br /><input name="Verzenden" type="submit" value="Verzenden"> <input name="Reset" type="reset" value="Opnieuw" />
</form>
</div>
$maand = array(1 => "Januari", "Februari", "Maart",
"April", "Mei", "Juni",
"Juli", "Augustus", "September",
"Oktober", "November", "December");
require 'includes/mail.php';
$userErrors = Array();
function checkmail($email)
{
$email_host = explode("@", $email);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);
if ($email_resolved != $email_host && preg_match("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
$valid = 1;
return $valid;
}
if(isset($_POST['Verzenden'])){
$email = $_POST['email'];
if( !isset($_POST['naam']) || $_POST['naam'] == '' )
{
$userErrors[] = 'U heeft geen naam ingevuld';
}
if( $_POST['gd'] == '' || $_POST['gm'] == '' || $_POST['gj'] == '' )
{
$userErrors[] = 'U heeft uw geboortedatum niet juist ingevult';
}
if( !isset($_POST['adres']) || $_POST['adres'] == '' )
{
$userErrors[] = 'U heeft geen adres ingevuld';
}
if( !isset($_POST['postcode']) || $_POST['postcode'] == '' )
{
$userErrors[] = 'U heeft geen postcode ingevuld';
}
if( !isset($_POST['plaats']) || $_POST['plaats'] == '' )
{
$userErrors[] = 'U heeft geen plaats ingevuld';
}
if( !isset($_POST['telefoon']) || $_POST['telefoon'] == '' )
{
$userErrors[] = 'U heeft geen telefoonnummer ingevuld';
}
if( !isset($email) || $email == '' )
{
$userErrors[] = 'U heeft geen e-mailadres ingevuld';
}
elseif(checkmail($email) == 0)
{
$userErrors[] = 'Vul een correct e-mailadres in';
unset($email);
}
if( !isset($_POST['opleidingen']) || $_POST['opleidingen'] == '' )
{
$userErrors[] = 'U heeft geen opleiding ingevuld';
}
if (md5($_POST['norobot']) != $_SESSION['randomnr2']) {
$userErrors[] = 'Beveiligingscode verkeerd ingevoerd';
}
if( count($userErrors) == 0 )
{
$msg = "Beste Chris,<br><br>";
$msg .= htmlentities($_POST['naam'])." zou graag ".$_POST['radio']." voor: ".$_POST['opleidingen']."<br><br>";
$msg .= "De volgende gegevens waren achter gelaten op de website:<br><br>";
$msg .= "<b>Naam: </b>".htmlentities($_POST['naam'])."<br>";
$msg .= "<b>Geboortedatum: </b>".$_POST['gd']."-".$_POST['gm']."-".$_POST['gj']."<br>";
$msg .= "<b>Adres: </b>".htmlentities($_POST['adres'])."<br>";
$msg .= "<b>Postcode: </b>".htmlentities($_POST['postcode'])."<br>";
$msg .= "<b>Woonplaats: </b>".htmlentities($_POST['plaats'])."<br>";
$msg .= "<b>Telefoon: </b>".htmlentities($_POST['telefoon'])."<br>";
$msg .= "<b>E-mailadres: </b>".htmlentities($email)."<br><br>";
$msg .= "Direct reageren klik hier om hem te mailen: <b><a href=mailto:".htmlentities($email).">".htmlentities($email)."</a></b><br><br><br>";
$msg .= "<b><u>Overige gegevens:</u></b><br>";
$msg .= "Datum: " . date("d.m.Y") . "<br>";
$msg .= "Tijd: " . date("H:i") . "<br>";
$msg .= "Ip addr: " . $_SERVER['REMOTE_ADDR'] . "<br><br>";
$msg .= "Met vriendelijke groeten,<br><br>Webmaster Atlantic Duikcentrum";
if(mail($to, $subject, $msg, $headers)) {
$resultMessage = 'Uw bericht is succesvol verstuurd! U hoort zo snel mogelijk van ons!';
}
else
{
$userError[] = 'Uw bericht kon niet verstuurd worden, probeer het later nog eens.';
}
}
}
?>
<style type="text/css">
.verplicht {
color: #F00;
}
</style>
<div style="width:580">
<h2>Vul hieronder uw gegevens in en wij nemen zo snel mogelijk contact met u op.</h2>
<?php echo $_POST['norobot']; ?>
<?php if( count($userErrors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $userErrors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<?php if( isset($resultMessage) ) echo $resultMessage; ?>
<form name="Inschrijven" method="POST" action="<? htmlentities($_SERVER['PHP_SELF']); ?>">
<p><br />
Volledige naam <span class="verplicht">*</span><br />
<input name="naam" type="text" id="naam" size="30" /></p>
<p>Geboortedatum <span class="verplicht">*</span><br />
<select id="gd" name="gd" size="1">
<option value="">(Dag)</option>
<?php
for ($dag = 1; $dag <= 31; $dag++) {
echo "<option>" . $dag . "</option>";
}
?>
</select>
<select name="gm" size="1">
<option value="">(Maand)</option>
<?php
foreach ($maand as $maandnummer => $maandnaam) {
echo "<option value=\"" . $maandnummer . "\">" . $maandnaam . "</option>";
}
?>
</select>
<select name="gj" size="1">
<option value="">(Jaar)</option>
<?php
for ($jaar = (int) date("Y"); $jaar >= 1900; $jaar--) {
echo "<option>" . $jaar . "</option>";
}
?>
</select></p>
<p>Adres + Huisnummer <span class="verplicht">*</span><br />
<input name="adres" type="text" id="textfield" size="30" /></p>
<p>Postcode <span class="verplicht">*</span><br />
<input name="postcode" type="text" id="textfield" size="30" /></p>
<p>Woonplaats <span class="verplicht">*</span><br />
<input name="plaats" type="text" id="textfield" size="30" /></p>
<p>Telefoonnummer <span class="verplicht">*</span><br />
<input name="telefoon" type="text" id="textfield" size="30" /></p>
<p>E-mailadres <span class="verplicht">*</span><br />
<input name="email" type="text" id="textfield" size="30" /></p>
<p>
<input type="radio" name="radio" id="radio2" value="informatie willen hebben" />
Informatie |
<input name="radio" type="radio" id="radio" value="willen inschrijven" checked="checked" />
Inschrijven voor <span class="verplicht">*</span><br />
<select name="opleidingen" id="select2">
<option value="" selected="selected">Selecteer Opleiding</option>
<optgroup label="Snorkelen">
<option value="Snorkel Training">Snorkel Training</option>
</optgroup>
<optgroup label="Duiken voor kinderen">
<option value="Kinderen Introductie Duik">Introductie Duik</option>
<option value="Bubble Maker">Bubble Maker</option>
<option value="Sealteam">Sealteam</option>
<option value="Master Sealteam">Master Sealteam</option>
<option value="Junior Open Water Diver">Junior Open Water Diver</option></optgroup>
</select></p>
<p>Beveiligingscode <span class="verplicht">*</span><br />
<img src="includes/captcha.php"><br /><input name="norobot" type="text" class="input" size="30" placeholder="Voer bovengenoemde code in!"></p>
<br /><input name="Verzenden" type="submit" value="Verzenden"> <input name="Reset" type="reset" value="Opnieuw" />
</form>
</div>
captcha.php
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
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
<?php
// het random nr. aanmaken en gecodeerd opslaan in php sessie
session_start();
$randomnr = rand(1000, 9999);
$_SESSION['randomnr2'] = md5($randomnr);
// captcha plaatje met nummer maken - afmetingen kun je aanpassen gebruikte font
$im = imagecreatetruecolor(100, 38);
// Kleurenbepaling
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
// zwarte rechthoek tekenen - afmetingen kun je aanpassen aan verschillende fonts
imagefilledrectangle($im, 0, 0, 200, 35, $black);
// hier - font.ttf' vervangen met de locatie van je eigen font bestand
$font = 'verdana.ttf';
// schaduw toevoegen
imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr);
// randomnr. toevoegen
imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr);
// voorkomen dat afbeelding ge-cached wordt
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// plaatje verzenden naar browser
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>
// het random nr. aanmaken en gecodeerd opslaan in php sessie
session_start();
$randomnr = rand(1000, 9999);
$_SESSION['randomnr2'] = md5($randomnr);
// captcha plaatje met nummer maken - afmetingen kun je aanpassen gebruikte font
$im = imagecreatetruecolor(100, 38);
// Kleurenbepaling
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
// zwarte rechthoek tekenen - afmetingen kun je aanpassen aan verschillende fonts
imagefilledrectangle($im, 0, 0, 200, 35, $black);
// hier - font.ttf' vervangen met de locatie van je eigen font bestand
$font = 'verdana.ttf';
// schaduw toevoegen
imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr);
// randomnr. toevoegen
imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr);
// voorkomen dat afbeelding ge-cached wordt
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// plaatje verzenden naar browser
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>
en ik heb ook een session_start in de hoofdpagina
Heb jij anders evt. een ander script of idee hoe ik hem kan beveiligen tegen spam?
Gewijzigd op 31/12/2012 18:13:57 door Mark van den Brink