hardcoresnake
Grünschnabel
Anmerkung von Markus: Diese Nachfrage bezieht sich auf das Tutorial PHP einfacher Captcha mit GD2 und FreeType
Hallo Leute,
habe ein kleines Problem mit dem 2. Tutorial.
Es funktioniert alles bestens bis auf die SID's es wird keine in die Spalte captcha_phpsessid am mysql eingetragen, nach dem Absenden wird sie nicht an die Adresse nach dem "?" dranngehängt und beim Captcha sollte sie auch nach dem "?" stehen wenn man auf Eigenschaften klickt.
Nach ein wenig Spielerei habe ich das Problem mit den "?" beheben können:
in form.inc.php
aus dieser Zeile
wird das
und aus dieser
das
Nur leider schaffe ich es nicht das die SID oder session_id in mysql gespeichert wird,
meiner meinung liegt es an dieser Zeile (1x in index.php, 3x in captcha.php):
Hier noch die 3 Dateien:
form.inc.php
index.php
captcha.php
Verwende Xampp, mysql 5.0.45, php5, apache 2.
Bitte um Hilfe, THX.
Hallo Leute,
habe ein kleines Problem mit dem 2. Tutorial.
Es funktioniert alles bestens bis auf die SID's es wird keine in die Spalte captcha_phpsessid am mysql eingetragen, nach dem Absenden wird sie nicht an die Adresse nach dem "?" dranngehängt und beim Captcha sollte sie auch nach dem "?" stehen wenn man auf Eigenschaften klickt.
Nach ein wenig Spielerei habe ich das Problem mit den "?" beheben können:
in form.inc.php
aus dieser Zeile
PHP:
<form id="form1" name="form1" method="post" action="index.php?<?php echo SID; ?>">
PHP:
<form id="form1" name="form1" method="post" action="index.php?<?php echo session_id(); ?>">
PHP:
<td><img src="captcha.php?<?php echo SID; ?>" width="150" height="50" alt="Bild-Captcha" /></td>
PHP:
<td><img src="captcha.php?<?php echo session_id(); ?>" width="150" height="50" alt="Bild-Captcha" /></td>
Nur leider schaffe ich es nicht das die SID oder session_id in mysql gespeichert wird,
meiner meinung liegt es an dieser Zeile (1x in index.php, 3x in captcha.php):
PHP:
`captcha_phpsessid` = \''.$_GET['PHPSESSID'].'\'
Hier noch die 3 Dateien:
form.inc.php
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=uft-8" />
<title>Captcha Tutorial</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="index.php?<?php echo session_id(); ?>">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Ihr Name:</td>
<td><input type="text" name="name" value="<?php echo htmlspecialchars($_POST['name']); ?>" /><?php echo $error_name; ?></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Captcha:</td>
<td><input type="text" name="captcha" value="" /><?php echo $error_captcha; ?></td>
</tr>
<tr>
<td> </td>
<td><img src="captcha.php?<?php echo session_id(); ?>" width="150" height="50" alt="Bild-Captcha" /></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="validate" value="Senden" />
</td>
</tr>
</table>
</form>
</body>
</html>
PHP:
<?php
session_start();
$form_valid = false;
if(isset($_POST['validate'])) {
$form_valid = true;
$name = trim($_POST['name']);
if(strlen($name) < 3) {
$form_valid = false;
$error_name = 'Bitte geben Sie einen Namen ein (mind. 3 Zeichen).';
}
$link = mysql_connect('localhost', 'root', '*******');
mysql_select_db('*****', $link);
$sql = 'SELECT
*
FROM
`captcha`
WHERE
`captcha_phpsessid` = \''.$_GET["PHPSESSID"].'\'
AND
`captcha_captcha` = \''.$_POST['captcha'].'\'
LIMIT
1';
$result = mysql_query($sql, $link);
if(mysql_num_rows($result) <= 0) {
$form_valid = false;
$error_captcha = 'Bitte geben Sie den gültigen Captcha-Code ein.';
}
}
if($form_valid) {
echo 'Hallo, '.$name;
} else {
include('form.inc.php');
}
?>
PHP:
<?php
$CAPTCHA_LENGTH = 4; // Länge der Captcha-Zeichenfolge, hier fünf Zeichen
$FONT_SIZE = 25; // Schriftgröße der Zeichen in Punkt
$IMG_WIDTH = 170; // Breite des Bild-Captchas in Pixel
$IMG_HEIGHT = 60; // Höhe des Bild-Captchas in Pixel
// Liste aller verwendeten Fonts
$FONTS[] = './ttf/minyaf';
// Unser Zeichenalphabet
$ALPHABET = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0');
// Wir teilen dem Browser mit, dass er es hier mit einem JPEG-Bild zu tun hat.
header('Content-Type: image/jpeg', true);
// Wir erzeugen ein leeres JPEG-Bild von der Breite IMG_WIDTH und Höhe IMG_HEIGHT
$img = imagecreatetruecolor($IMG_WIDTH, $IMG_HEIGHT);
// Wir definieren eine Farbe mit Zufallszahlen
// Die Farbwerte sind durchgehend und absichtlich hoch (200 - 256) gewählt,
// um eine "leichte" Farbe zu erhalten
$col = imagecolorallocate($img, rand(200, 255), rand(200, 255), rand(200, 255));
// Wir füllen das komplette Bild mit der zuvor definierten Farbe
imagefill($img, 0, 0, $col);
$captcha = ''; // Enthält später den Captcha-Code als String
$x = 10; // x-Koordinate des ersten Zeichens, 10 px vom linken Rand
for($i = 0; $i < $CAPTCHA_LENGTH; $i++) {
$chr = $ALPHABET[rand(0, count($ALPHABET) - 1)]; // ein zufälliges Zeichen aus dem definierten Alphabet ermitteln
$captcha .= $chr; // Der Zeichenfolge $captcha das ermittelte Zeichen anfügen
$col = imagecolorallocate($img, rand(0, 199), rand(0, 199), rand(0, 199)); // einen zufälligen Farbwert definieren
$font = $FONTS[rand(0, count($FONTS) - 1)]; // einen zufälligen Font aus der Fontliste FONTS auswählen
$y = 25 + rand(0, 20); // die y-Koordinate mit einem Mindestabstand plus einem zufälligen Wert festlegen
$angle = rand(0, 30); // ein zufälliger Winkel zwischen 0 und 30 Grad
/*
* Diese Funktion zeichnet die Zeichenkette mit den
* gegeben Parametern (Schriftgröße, Winkel, Farbe, TTF-Font, usw.)
* in das Bild.
*/
imagettftext($img, $FONT_SIZE, $angle, $x, $y, $col, $font, $chr);
$dim = imagettfbbox($FONT_SIZE, $angle, $font, $chr); // ermittelt den Platzverbrauch des Zeichens
$x += $dim[3] + abs($dim[5]) + 10; // Versucht aus den zuvor ermittelten Werten einen geeigneten Zeichenabstand zu ermitteln
}
imagejpeg($img); // Ausgabe des Bildes an den Browser
imagedestroy($img); // Freigeben von Speicher
$link = mysql_connect('localhost', 'root', '********');
mysql_select_db('******', $link);
$sql = 'SELECT
*
FROM
`captcha`
WHERE
`captcha_phpsessid` = \''.$_GET["PHPSESSID"].'\'
LIMIT
1';
$result = mysql_query($sql, $link);
if(mysql_num_rows($result) > 0) {
$sql = 'UPDATE
`captcha`
SET
`captcha_time` = '.time().',
`captcha_captcha` = \''.$captcha.'\'
WHERE
`captcha_phpsessid` = \''.$_GET["PHPSESSID"].'\'
LIMIT
1';
mysql_query($sql, $link);
} else {
$sql = 'INSERT INTO
`captcha`
(
`captcha_phpsessid`,
`captcha_time`,
`captcha_captcha`
)
VALUES
(
\''.$_GET["PHPSESSID"].'\',
'.time().',
\''.$captcha.'\'
)';
mysql_query($sql, $link);
}
$sql = 'DELETE FROM
`captcha`
WHERE
`captcha_time` <= '.(time() - 300);
mysql_query($sql, $link);
mysql_close($link);
?>
Verwende Xampp, mysql 5.0.45, php5, apache 2.
Bitte um Hilfe, THX.