Jamen det er en kode man skal skrive ind i en formular før man kan skrive eller sende noget fra hjemmesiden. Den gør at man ikke kan blive spammet.
Hjemmesiden er her:
http://www.eksperten.dk/artikler/1019men jeg har en fejl i linie 67. Nogle der kan hjælpe?
<?php session_start(); function outputImage() {
// Denne funktion skriver et billede til browseren
header( 'Content-Type: image/png' );
$im = imagecreate( 60, 20 );
// Baggrundsfarven
$bgcol = imagecolorallocate( $im, 255, 255, 255 );
// Rammen
$bordercol = imagecolorallocate( $im, 0, 0, 0 );
// Tekstfarce
$textcol = imagecolorallocate( $im, 100, 100, 220 );
// Fyld med baggrundsfarven
imagefill( $im, 1, 1, $bgcol );
for ( $i = 0; $i
< 4; $i++ )
{
// Tilfældig farve til linjerne
$tmpCol = imagecolorallocate(
$im, mt_rand( 100, 230), mt_rand( 100, 230), mt_rand( 100, 230) );
// Tegn linje
imageline( $im, 0, mt_rand( 0, 19 ), 59, mt_rand( 0, 19 ), $tmpCol );
}
// Skriv CAPTCHA-teksten
imagestring( $im, 5, 9, 2, $_SESSION['captcha-code'], $textcol );
// Wave effect
for ( $i = 0; $i
< 60; $i += 2 )
imagecopy( $im, $im, $i - 2, sin( $i / 10 ) * 3, $i, 0, 2, 20 );
// Tegn rammen
imagerectangle( $im, 0, 0, 59, 19, $bordercol );
// Smid billedet til browseren
imagepng( $im );
imagedestroy( $im );
// Stop scriptet her!
exit;
}
function newCode()
{
// Denne funktion laver en tekst der (som regel) kan udtales
$vowels = array_slice( preg_split( '//', 'AEUY' ), 1, -1 );
$nvowels = count( $vowels ) - 1;
$consonants = array_slice( preg_split( '//', 'BCDFGHJKLMNPQRSTVWXZ' ), 1, -1 );
$nconsonants = count( $consonants ) - 1;
$code = "";
$rnd = mt_rand( 0, 1 ) == 1 ? true : false;
// Loopet herunder bygger teksten
while ( strlen( $code )
< 5 )
{
$code .= ( $rnd ? $vowels[ mt_rand( 0, $nvowels ) ]
: $consonants[ mt_rand( 0, $nconsonants ) ] );
$rnd = !$rnd;
}
// Smid teksten i en sessionsvariabel
$_SESSION['captcha-code'] = $code;
}
if ( isset( $_GET['img'] ) || isset( $_GET['newimg'] ))
if ( isset( $_GET['newimg'] ) )
{
// Brugeren kunne ikke læse koden, så lav en ny
newCode();
}
// Vis billede
outputImage();
// Scriptet stopper i outputImage() - Denne kode bliver altså kun
// kørt når der gives ?img eller ?newimg i URL'en
} // Her er linie 67. Nogle der kan sige mig hvad fejlen er?
// Dan ny CAPTCHA-tekst
newCode();
?>
<script type="text/javascript">
function getNewImg()
{
var d = new Date();
document.getElementById('theImg').src =
'
<?= $_SERVER['PHP_SELF'] ?>
?newimg&x' + d.getTime();
}
</script>
<form method="post" action="formhandler.php">
<img id="theImg" align="top" src="
<?= $_SERVER['PHP_SELF'] ?>
?img">
<input type="button" value="Jeg kan ikke læse det!" onclick="getNewImg()">
<br>
Skriv bogstaverne i billedet:
<input type="text" style="width: 60px" name="kode">
<input type="submit" value="Indsend">
</form>
Hele koden uden den er delt op ved fejlen:
<?php session_start(); function outputImage() {
// Denne funktion skriver et billede til browseren
header( 'Content-Type: image/png' );
$im = imagecreate( 60, 20 );
// Baggrundsfarven
$bgcol = imagecolorallocate( $im, 255, 255, 255 );
// Rammen
$bordercol = imagecolorallocate( $im, 0, 0, 0 );
// Tekstfarce
$textcol = imagecolorallocate( $im, 100, 100, 220 );
// Fyld med baggrundsfarven
imagefill( $im, 1, 1, $bgcol );
for ( $i = 0; $i
< 4; $i++ )
{
// Tilfældig farve til linjerne
$tmpCol = imagecolorallocate(
$im, mt_rand( 100, 230), mt_rand( 100, 230), mt_rand( 100, 230) );
// Tegn linje
imageline( $im, 0, mt_rand( 0, 19 ), 59, mt_rand( 0, 19 ), $tmpCol );
}
// Skriv CAPTCHA-teksten
imagestring( $im, 5, 9, 2, $_SESSION['captcha-code'], $textcol );
// Wave effect
for ( $i = 0; $i
< 60; $i += 2 )
imagecopy( $im, $im, $i - 2, sin( $i / 10 ) * 3, $i, 0, 2, 20 );
// Tegn rammen
imagerectangle( $im, 0, 0, 59, 19, $bordercol );
// Smid billedet til browseren
imagepng( $im );
imagedestroy( $im );
// Stop scriptet her!
exit;
}
function newCode()
{
// Denne funktion laver en tekst der (som regel) kan udtales
$vowels = array_slice( preg_split( '//', 'AEUY' ), 1, -1 );
$nvowels = count( $vowels ) - 1;
$consonants = array_slice( preg_split( '//', 'BCDFGHJKLMNPQRSTVWXZ' ), 1, -1 );
$nconsonants = count( $consonants ) - 1;
$code = "";
$rnd = mt_rand( 0, 1 ) == 1 ? true : false;
// Loopet herunder bygger teksten
while ( strlen( $code )
< 5 )
{
$code .= ( $rnd ? $vowels[ mt_rand( 0, $nvowels ) ]
: $consonants[ mt_rand( 0, $nconsonants ) ] );
$rnd = !$rnd;
}
// Smid teksten i en sessionsvariabel
$_SESSION['captcha-code'] = $code;
}
if ( isset( $_GET['img'] ) || isset( $_GET['newimg'] ))
if ( isset( $_GET['newimg'] ) )
{
// Brugeren kunne ikke læse koden, så lav en ny
newCode();
}
// Vis billede
outputImage();
// Scriptet stopper i outputImage() - Denne kode bliver altså kun
// kørt når der gives ?img eller ?newimg i URL'en
}
// Dan ny CAPTCHA-tekst
newCode();
?>
<script type="text/javascript">
function getNewImg()
{
var d = new Date();
document.getElementById('theImg').src =
'
<?= $_SERVER['PHP_SELF'] ?>
?newimg&x' + d.getTime();
}
</script>
<form method="post" action="formhandler.php">
<img id="theImg" align="top" src="
<?= $_SERVER['PHP_SELF'] ?>
?img">
<input type="button" value="Jeg kan ikke læse det!" onclick="getNewImg()">
<br>
Skriv bogstaverne i billedet:
<input type="text" style="width: 60px" name="kode">
<input type="submit" value="Indsend">
</form>
Indlæg senest redigeret d. 23.01.2007 13:24 af Bruger #11184