captcha plaatje doet raar
ik heb een gastenboek en op de pagina waar bezoekers in het gastenboek kunnen reageren heb ik een simpele captcha
de captcha wordt zonder problemen weergeven en de link voor een nieuw plaatje werkt ook.
Maar als ik de reactie verzend en alle velden ingevuld heb en de captcha code is goed geeft hij de foutmelding dat de code fout is.
ik heb al verschillende dingen geprobeerd.
ik denk dat het probleem in de session zit.
Hier de 2 scripts:
reacties.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
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
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
<br /><br />
<div id="reactie">
<h3>Reactie plaatsen</h3><br />
<?php
session_start();
// Foutmeldingen + reactie plaatsen:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Als er een veld niet ingevuld is
if (empty($_POST['naam']) || empty($_POST['security_code']) || empty($_POST['bericht']) || empty($_POST['email'])) {
echo '<div class="fout">Niet alle velden zijn ingevuld.</div><br />';
}
// session_start();
if (!empty($_POST)) {
if(($_SESSION['security_code'] == $_POST['security_code']) && (!empty($_SESSION['security_code'])) && (mysql_query("INSERT INTO gastenboek (naam, email, bericht, datum, ip) VALUES ('".trim(mysql_real_escape_string($_POST['naam']))."', '".trim(mysql_real_escape_string($_POST['email']))."', '".trim(mysql_real_escape_string($_POST['bericht']))."', NOW(), '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."')")) ) {
$code = $_SESSION['security_code'];
$mycode= $_POST['security_code'];
echo '<div id="succesvolgeplaatst">Je reactie is succesvol geplaatst! <a href="'. $_SERVER["PHP_SELF"] .'">Bekijk je reactie</a></div><br />';
unset($_SESSION['security_code']);
} else {
$code = $_SESSION['security_code'];
$mycode= $_POST['security_code'];
echo '<div class="fout">De code die je overtypte was incorrect.</div><br /><br />';
unset($_SESSION['security_code']);
}
} else {
echo '<div class="fout">Er is iets fout gegaan en je reactie is niet toegevoegd. Probeer het later opnieuw.</div>';
}
}
?>
<br />
<html>
<head>
<title>Gastenboek (Lolbroeck)</title>
<link href="style.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" language="javascript">
function showHide(shID) {
if (document.getElementById(shID)) {
if (document.getElementById(shID+'-show').style.display != 'none') {
document.getElementById(shID+'-show').style.display = 'none';
document.getElementById(shID).style.display = 'block';
}
else {
document.getElementById(shID+'-show').style.display = 'inline';
document.getElementById(shID).style.display = 'none';
}
}
}
</script>
<script type="text/javascript">
function reloadImg(id) {
var obj = document.getElementById(id);
var src = obj.src;
var pos = src.indexOf('?');
if (pos >= 0) {
src = src.substr(0, pos);
}
var date = new Date();
obj.src = src + '?v=' + date.getTime();
return false;
}
</script>
</head>
<body>
<form method="post" action="" name="form1">
Naam:*<br />
<input type="text" name="naam" maxlength="50" /><br /><br />
Emailadres (niet gepubliceerd):*<br />
<input type="text" name="email" maxlength="50" type="email" /><br /><br />
Code overtypen:*<br />
<img src="captcha.php" name="vertimg" id="vertimg"><br />
<div class="newafb">
<a href="#" onclick="return reloadImg('vertimg');">Nieuwe afbeelding</a>
</div><br />
<input type="text" name="security_code" /><br /><br />
Bericht:*<br />
<textarea name="bericht" id="tekst" rows="6" cols="37" maxlength="500"></textarea><br />
UBB-codes zijn toegestaan
<a href="#" id="example-show" class="showLink" onclick="showHide('example');return false;">
<div class="what">Wat is dit?</a>
<div id="example" class="show-hide">
<br />
Met UBB-codes kan je de volgende dingen doen:<br /><br />
<b>tekst</b> » <b>tekst</b><br />
<u>tekst</u> » <u>tekst</u><br />
<i>tekst</i> » <i>tekst</i><br />
[s]tekst[/s] » <s>tekst</s><br /><br />
<a href="#" id="example-hide" class="hideLink" onclick="showHide('example');return false;">(Verbergen)</a>
</div>
</div>
<br /><br />
<input type="submit" value="Reactie toevoegen" onclick="this.value='Reactie wordt geplaatst...';" />
</form>
</div>
</body>
</html>
<div id="reactie">
<h3>Reactie plaatsen</h3><br />
<?php
session_start();
// Foutmeldingen + reactie plaatsen:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Als er een veld niet ingevuld is
if (empty($_POST['naam']) || empty($_POST['security_code']) || empty($_POST['bericht']) || empty($_POST['email'])) {
echo '<div class="fout">Niet alle velden zijn ingevuld.</div><br />';
}
// session_start();
if (!empty($_POST)) {
if(($_SESSION['security_code'] == $_POST['security_code']) && (!empty($_SESSION['security_code'])) && (mysql_query("INSERT INTO gastenboek (naam, email, bericht, datum, ip) VALUES ('".trim(mysql_real_escape_string($_POST['naam']))."', '".trim(mysql_real_escape_string($_POST['email']))."', '".trim(mysql_real_escape_string($_POST['bericht']))."', NOW(), '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."')")) ) {
$code = $_SESSION['security_code'];
$mycode= $_POST['security_code'];
echo '<div id="succesvolgeplaatst">Je reactie is succesvol geplaatst! <a href="'. $_SERVER["PHP_SELF"] .'">Bekijk je reactie</a></div><br />';
unset($_SESSION['security_code']);
} else {
$code = $_SESSION['security_code'];
$mycode= $_POST['security_code'];
echo '<div class="fout">De code die je overtypte was incorrect.</div><br /><br />';
unset($_SESSION['security_code']);
}
} else {
echo '<div class="fout">Er is iets fout gegaan en je reactie is niet toegevoegd. Probeer het later opnieuw.</div>';
}
}
?>
<br />
<html>
<head>
<title>Gastenboek (Lolbroeck)</title>
<link href="style.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" language="javascript">
function showHide(shID) {
if (document.getElementById(shID)) {
if (document.getElementById(shID+'-show').style.display != 'none') {
document.getElementById(shID+'-show').style.display = 'none';
document.getElementById(shID).style.display = 'block';
}
else {
document.getElementById(shID+'-show').style.display = 'inline';
document.getElementById(shID).style.display = 'none';
}
}
}
</script>
<script type="text/javascript">
function reloadImg(id) {
var obj = document.getElementById(id);
var src = obj.src;
var pos = src.indexOf('?');
if (pos >= 0) {
src = src.substr(0, pos);
}
var date = new Date();
obj.src = src + '?v=' + date.getTime();
return false;
}
</script>
</head>
<body>
<form method="post" action="" name="form1">
Naam:*<br />
<input type="text" name="naam" maxlength="50" /><br /><br />
Emailadres (niet gepubliceerd):*<br />
<input type="text" name="email" maxlength="50" type="email" /><br /><br />
Code overtypen:*<br />
<img src="captcha.php" name="vertimg" id="vertimg"><br />
<div class="newafb">
<a href="#" onclick="return reloadImg('vertimg');">Nieuwe afbeelding</a>
</div><br />
<input type="text" name="security_code" /><br /><br />
Bericht:*<br />
<textarea name="bericht" id="tekst" rows="6" cols="37" maxlength="500"></textarea><br />
UBB-codes zijn toegestaan
<a href="#" id="example-show" class="showLink" onclick="showHide('example');return false;">
<div class="what">Wat is dit?</a>
<div id="example" class="show-hide">
<br />
Met UBB-codes kan je de volgende dingen doen:<br /><br />
<b>tekst</b> » <b>tekst</b><br />
<u>tekst</u> » <u>tekst</u><br />
<i>tekst</i> » <i>tekst</i><br />
[s]tekst[/s] » <s>tekst</s><br /><br />
<a href="#" id="example-hide" class="hideLink" onclick="showHide('example');return false;">(Verbergen)</a>
</div>
</div>
<br /><br />
<input type="submit" value="Reactie toevoegen" onclick="this.value='Reactie wordt geplaatst...';" />
</form>
</div>
</body>
</html>
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
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
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
<?php
$aant = "5"; // Kan een waarde zijn tussen de 2 en 40 in
$height = "30"; // Hoogte van de afbeelding
$SQUARE = "1"; // De waarde kan zijn: 1 = ON, 0 = OFF
$possible = 'BCDFGHJKLMNPQRSTUVWXYZ'; // Karakters die gebruikt worden in de captcha code
$Background = "Auto"; // De achtergrond instellen, kan de volgende waardes zijn: AUTO, WHITE, RED, GREEN, BLUE
$LINES = "1"; // Achtegrond lijnen tekenen? De waarde kan zijn: 1 = ON, 0 = OFF
$LINES_OVER = "1"; // Lijnen over de tekst heen tekenen? De waarde kan zijn: 1 = ON, 0 = OFF
### Hieronder hoef je niks meer aan te passen ###
function generateCode($characters,$possible) {
$code = '';
$i = 0;
while ($i < $characters) {
$code[] = substr($possible, mt_rand(0, strlen($possible)-1), 1);
$codestr.=substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}
// Maak 't plaatje
$width= $aant * 25;
$im = imagecreate($width, $height);
//Achtergrond kleur
$Background = strtoupper ($Background);
if ($Background=="AUTO"){
$bg = imagecolorallocate($im, rand(190,255), rand(190,255), rand(190,255));
}elseif($Background=="WHITE"){
$bg = imagecolorallocate($im, 255, 255, 255);
}elseif($Background=="RED"){
$bg = imagecolorallocate($im, 255 , 0, 0);
}elseif($Background=="GREEN"){
$bg = imagecolorallocate($im, 0, 255, 0);
}elseif($Background=="BLUE"){
$bg = imagecolorallocate($im, 0, 0, 255);
}else{
$bg = imagecolorallocate($im, 255, 255, 255);
}
// Genereer de code
$code= generateCode($aant,$possible);
if($LINES=="1" ){
// Teken variabele lijnen
$i=0;
while( $i<($width*$height)/150) {
$noise_color = imagecolorallocate($im, rand(150,255), rand(150,255), rand(150,255));
imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $noise_color);
$i++;
}
}
if($SQUARE=="1" ){
// Teken een vierkant van 2 punten
$vierkant = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
imageline($im, 0, 0, $width, 0, $vierkant);
imageline($im, 0, 1, $width, 1, $vierkant);
imageline($im, $width-1, 0, $width-1, $height, $vierkant);
imageline($im, $width-2, 0, $width-2, $height, $vierkant);
imageline($im, $width-1, $height-1, 0, $height-1, $vierkant);
imageline($im, $width-1, $height-2, 0, $height-2, $vierkant);
imageline($im, 0, $height, 0, 0, $vierkant);
imageline($im, 1, $height, 1, 0, $vierkant);
}
$widthpercar= 25;
// Zorg er voor dat de text niet over elkaar gaat staan
$i = 0;
while ($i < $aant) {
$min=($widthpercar*$i) - 1;
$max=$widthpercar*$i;
$textcolor = imagecolorallocate($im, rand(0,150), rand(0,150), rand(0,150));
if ($i == 0){
imagestring($im, 28, rand(0,$widthpercar), rand(0,$height-14), $code[$i], $textcolor);
}elseif ($i==$aant){
imagestring($im, 28, rand($min+8,$max), rand(0,$height-14), $code[$i], $textcolor);
}else{
imagestring($im, 28, rand($min+8,$max), rand(0,$height-14), $code[$i], $textcolor);
}
$codestr = $codestr . $code[$i];
$i++;
}
if($LINES_OVER=="1" ){
// Teken voor de zekerheid nog ff 2 lijnen OVER de text heen
$i=0;
while( $i<2) {
$noise_color = imagecolorallocate($im, rand(230,255), rand(230,255), rand(230,255));
imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $noise_color);
$i++;
}
}
$_SESSION['security_code'] = $codestr;
// Print het plaatje
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
$aant = "5"; // Kan een waarde zijn tussen de 2 en 40 in
$height = "30"; // Hoogte van de afbeelding
$SQUARE = "1"; // De waarde kan zijn: 1 = ON, 0 = OFF
$possible = 'BCDFGHJKLMNPQRSTUVWXYZ'; // Karakters die gebruikt worden in de captcha code
$Background = "Auto"; // De achtergrond instellen, kan de volgende waardes zijn: AUTO, WHITE, RED, GREEN, BLUE
$LINES = "1"; // Achtegrond lijnen tekenen? De waarde kan zijn: 1 = ON, 0 = OFF
$LINES_OVER = "1"; // Lijnen over de tekst heen tekenen? De waarde kan zijn: 1 = ON, 0 = OFF
### Hieronder hoef je niks meer aan te passen ###
function generateCode($characters,$possible) {
$code = '';
$i = 0;
while ($i < $characters) {
$code[] = substr($possible, mt_rand(0, strlen($possible)-1), 1);
$codestr.=substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}
// Maak 't plaatje
$width= $aant * 25;
$im = imagecreate($width, $height);
//Achtergrond kleur
$Background = strtoupper ($Background);
if ($Background=="AUTO"){
$bg = imagecolorallocate($im, rand(190,255), rand(190,255), rand(190,255));
}elseif($Background=="WHITE"){
$bg = imagecolorallocate($im, 255, 255, 255);
}elseif($Background=="RED"){
$bg = imagecolorallocate($im, 255 , 0, 0);
}elseif($Background=="GREEN"){
$bg = imagecolorallocate($im, 0, 255, 0);
}elseif($Background=="BLUE"){
$bg = imagecolorallocate($im, 0, 0, 255);
}else{
$bg = imagecolorallocate($im, 255, 255, 255);
}
// Genereer de code
$code= generateCode($aant,$possible);
if($LINES=="1" ){
// Teken variabele lijnen
$i=0;
while( $i<($width*$height)/150) {
$noise_color = imagecolorallocate($im, rand(150,255), rand(150,255), rand(150,255));
imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $noise_color);
$i++;
}
}
if($SQUARE=="1" ){
// Teken een vierkant van 2 punten
$vierkant = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
imageline($im, 0, 0, $width, 0, $vierkant);
imageline($im, 0, 1, $width, 1, $vierkant);
imageline($im, $width-1, 0, $width-1, $height, $vierkant);
imageline($im, $width-2, 0, $width-2, $height, $vierkant);
imageline($im, $width-1, $height-1, 0, $height-1, $vierkant);
imageline($im, $width-1, $height-2, 0, $height-2, $vierkant);
imageline($im, 0, $height, 0, 0, $vierkant);
imageline($im, 1, $height, 1, 0, $vierkant);
}
$widthpercar= 25;
// Zorg er voor dat de text niet over elkaar gaat staan
$i = 0;
while ($i < $aant) {
$min=($widthpercar*$i) - 1;
$max=$widthpercar*$i;
$textcolor = imagecolorallocate($im, rand(0,150), rand(0,150), rand(0,150));
if ($i == 0){
imagestring($im, 28, rand(0,$widthpercar), rand(0,$height-14), $code[$i], $textcolor);
}elseif ($i==$aant){
imagestring($im, 28, rand($min+8,$max), rand(0,$height-14), $code[$i], $textcolor);
}else{
imagestring($im, 28, rand($min+8,$max), rand(0,$height-14), $code[$i], $textcolor);
}
$codestr = $codestr . $code[$i];
$i++;
}
if($LINES_OVER=="1" ){
// Teken voor de zekerheid nog ff 2 lijnen OVER de text heen
$i=0;
while( $i<2) {
$noise_color = imagecolorallocate($im, rand(230,255), rand(230,255), rand(230,255));
imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $noise_color);
$i++;
}
}
$_SESSION['security_code'] = $codestr;
// Print het plaatje
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
reacties.php is een rommeltje, je hebt alles door elkaar staan. Er mag tevens geen output voor session_start(); staan. Je zult nu inderdaad geen $_SESSION gegevens hebben.
weet je zeker dat een vorige captcha code niet nog in je sessie staat?
Toevoeging op 19/12/2011 15:47:22:
Marijke Hakvoort op 19/12/2011 15:41:13:
Hij slaat dus de captcha code op in een sessie,
weet je zeker dat een vorige captcha code niet nog in je sessie staat?
weet je zeker dat een vorige captcha code niet nog in je sessie staat?
heb net getest: code overgeschreven en bij volgende plaatje ingetypt
helaas werkt het nog steeds niet.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
ik denk dat ik gewoon een ander captcha of reactie script ga gebruiken