php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.05.2009, 13:57  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard Problem beim Captcha Aufruf in einem Formular, nur das Bild wird angezeigt

Hallo Leutz und einen schönen Sonntag noch.

Ich habe momentan ein Problem wo ich nicht mehr recht weiter weis, ich habe mir zur Übung ja ein OOP Captcha geschrieben und rufe dies auch auf, aber nun habe ich das Problem das das Formular was auch angezeigt werden soll nicht angezeigt wird. Sprich ich kann momentan nich weiterarbeiten.

Hier mal der Code der captcha.php
PHP-Code:
<?php
/*
########################################################################################
#
#     (c) 2009 OOP Captcha Version 0.1
#     Autor: Daniel Seelig
#     Internet: http://www.lit-web.de
#     Email: webdesign-seelig@gmx.de
#
########################################################################################
*/
error_reporting(E_ALL);
/*
-----------------------------------------
 php5 oop captcha test
-----------------------------------------
*/
class Captcha
{
 
/*
 *
 * deklaration der variablen für den captchastring
 * chars, int, sonderzeichen
 *
 */
 
private $char_small_array = array(); //kleinbuchstaben array (nicht ändern)
 
private $char_big_array = array(); //großbuchstaben array (nicht ändern)
 
private $int_array = array(); //zahlen array (nicht ändern)
 
private $sond_char = array(); //sonderzechen array (nicht ändern)
 
private $mixed_array//variable um alle arrays zusammenzufügen (nicht ändern)
 
private $lenght 8//länge des strings festlegen (nicht ändern)
 
private $ausgabe_string ''//variable für den letzendlichen ausgabestring (nicht ändern)
 
private $wellen_string//in der variablen wird der wellenstring dargestellt (nicht ändern)
 
private $copyright ="(c) by www.lit-web.de"//copyright darf nicht entfernt werden
 
private $copy_string ="tahoma.ttf"
 
 
/*
 *
 * deklaration für die variablen des bildes
 *
 */
 
private $imagewidth 160//bildbreite
 
private $imageheight 60//bildhoehe
 
private $image//varibale für das erstellte bild
 
private $background ="#cccccc"//hexafarbwert eintragen für den hintergrund
 
private $bcolor;
 private 
$bild_text ="#ff0000"//hexafarbwert festlegen für den text
 
private $st_color;
 private 
$image_string ="tahoma.ttf";
 
 
/*-----------------------------------------------------------------------------------------*/
 /* ab hier keine änderungen mehr vornehmen, es sei denn ihr wisst was ihr tut      */
 /*-----------------------------------------------------------------------------------------*/
 
 /*
 *
 * kreiere ein gemixtes array
 * 
 */
 
private function CreateMixedImageString()
 {
  
//small char array erstellen
  
$this->char_small_array range('a','z');
  
$this->char_small_array array_flip($this->char_small_array);
  
$this->char_small_array array_rand($this->char_small_array2);
  
  
//big char array erstellen
  
$this->char_big_array range('A','Z');
  
$this->char_big_array array_flip($this->char_big_array);
  
$this->char_big_array array_rand($this->char_big_array2);
  
  
//intager array erstellen
  
$this->int_array range('0','9');
  
$this->int_array array_flip($this->int_array);
  
$this->int_array array_rand($this->int_array2);
  
  
//sonderzeichen array erstellen
  
$this->sond_char_array = array('#','+','*','~','-','?');
  
$this->sond_char_array array_flip($this->sond_char_array);
  
$this->sond_char_array array_rand($this->sond_char_array2);
  
  
//arrays mixen
  
$this->mixed_array array_merge($this->char_small_array$this->char_big_array,$this->int_array,$this->sond_char_array);
  
  
//durchmische das ganze array
  
shuffle($this->mixed_array);
  
  
//ausgabestring der auf das bild gelegt wird erstellen
  
$this->ausgabe_string implode(' 'array_slice($this->mixed_array0$this->lenght));
  
  
//rückgabe des ausgabestrings
  
return $this->ausgabe_string;
 }
 
 
/*
 *
 * imagestring für spamchaeck
 * einsatz erst im formular
 *
 */
 
public function Get_Image_String()
 {
  return 
$this->CreateMixedImageString();
 }
 
 
/*
 *
 * hintergrundfarbe als rgb wert berechnen
 *
 */
 
private function SetRgbBc()
 {
  
$string_hex_bc str_replace("#"''$this->background);
  
  
//rotwert  ermitteln
  
$bc_hex_rot substr($string_hex_bc02);
  
$bc_hex_rot hexdec($bc_hex_rot);
  
  
//gruenwert ermitteln
  
$bc_hex_gruen substr($string_hex_bc22);
  
$bc_hex_gruen hexdec($bc_hex_gruen);
  
  
//blauwert ermitteln
  
$bc_hex_blau substr($string_hex_bc42);
  
$bc_hex_blau hexdec($bc_hex_blau);
  
  
$rgb_Array = array($bc_hex_rot,$bc_hex_gruen,$bc_hex_blau);
  
  return 
$rgb_Array;
 }
 
 
/*
 *
 * schriftfarbe als rgb wert berechnen
 *
 */
 
private function SetRgbFontColor()
 {
  
  
$string_hex_str str_replace("#"''$this->bild_text);
  
//rotwert  ermitteln
  
$str_hex_rot substr($string_hex_str02);
  
$str_hex_rot hexdec($str_hex_rot);
  
  
//gruenwert ermitteln
  
$str_hex_gruen substr($string_hex_str22);
  
$str_hex_gruen hexdec($str_hex_gruen);
  
  
//blauwert ermitteln
  
$str_hex_blau substr($string_hex_str42);
  
$str_hex_blau hexdec($str_hex_blau);
  
  
$font_Array = array($str_hex_rot,$str_hex_gruen,$str_hex_blau);
  
  return 
$font_Array;
 }
 
 
/*
 *
 * erstellen des bildes
 * @ param: wellen_string (unterschiedliche positionierung der einzelzeichen)
 * @ param: image (erstelltes bild)
 * @ param: bcolor (hintergrundfarbe des bildes)
 * @ param: st_color (farbe des strings im bild)
 *
 */
 
public function CreateImage()
 {   
  
$rgb_Array $this->SetRgbBc(); //hintergrundfarb array instanzieren
  
$font_Array $this->SetRgbFontColor(); //schriftfarben array aufrufen
  
  
$this->image imagecreate($this->imagewidth$this->imageheight);
  
$this->bcolor imagecolorallocate($this->image$rgb_Array[0], $rgb_Array[1], $rgb_Array[2]);
  
$this->st_color imagecolorallocate($this->image$font_Array[0], $font_Array[1], $font_Array[2]);
  
imagefilledrectangle($this->image00$this->imagewidth$this->imageheight$this->bcolor);
  
  
$string_break explode(" ",$this->CreateMixedImageString());
  
  
$this->wellen_string imagettftext($this->image1209rand(25,40), $this->st_color$this->image_string$string_break[0]);
  
$this->wellen_string imagettftext($this->image12023rand(25,40), $this->st_color$this->image_string$string_break[1]);
  
$this->wellen_string imagettftext($this->image12043rand(25,40), $this->st_color$this->image_string$string_break[2]);
  
$this->wellen_string imagettftext($this->image12063rand(25,40), $this->st_color$this->image_string$string_break[3]);
  
$this->wellen_string imagettftext($this->image12083rand(25,40), $this->st_color$this->image_string$string_break[4]);
  
$this->wellen_string imagettftext($this->image120103rand(25,40), $this->st_color$this->image_string$string_break[5]);
  
$this->wellen_string imagettftext($this->image120123rand(25,40), $this->st_color$this->image_string$string_break[6]);
  
$this->wellen_string imagettftext($this->image120143rand(25,40), $this->st_color$this->image_string$string_break[7]);
  
  
imagettftext($this->image70552$this->st_color$this->copy_string$this->copyright);
  
  
header("Content-type: image/png");
  
  
imagepng($this->image);
  
imagedestroy($this->image);
 }
}
$captcha = new Captcha(); //klassenaufruf
$captcha->CreateImage(); //aufruf des Objektes für das anzeigen des Bildes
?>
Und der code der PHP Datei wo es aufgerufen wird und das Formular drin ist.
PHP-Code:
<?php
session_start
();
require_once(
'captcha.php'); //include der cpatcha klassen php
$check_code = new Captcha(); //aufrufen der klasse Captcha
$check_code->Get_Image_String(); //instanzieren der Methode des prüfstrings
echo '<form action="" method="post">';
echo 
'<input type="text" name="code" />';
echo 
'<img src="captcha.php" alt="" border="0" />'//aufrufen des bildes
echo '<input type="submit" name="send" value="Senden" />';
echo 
'</form>';
?>
Und hier könnt Ihr das ganze live sehen. http://www.lit-web.de/oopcaptcha , könnt Ihr mir sagen was ich da falsch mache? Da ich erst am Anfang der OOP bin sicher ein kleiner dummer Fehler den ich aber nicht entdecke Aufgrund meiner OOP Unerfahrenheit.

Habt recht vielen Dank für eure Hilfe Gruß litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.05.2009, 14:26  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Wenn du in dem Skript was du aufrufst auch als header image/png sendest dann wird das ganze eben als Bild ausgegeben. Da kann natürlich kein HTML drin vorkommen.

Du hast noch nicht ganz verstanden wie das Prinzip funktioniert. Du hast eigentlich 2 Dateien. Eine die Das Formular generiert und als image eben eine zweite Datei anzeigt und in dieser Datei wird das Bild generiert. Es ist also nicht möglich Formular und Image in einem einzigen Skriptaufruf anzuzeigen. Dafür müssen schon zwei einzelne Aufrufe sein.
Flor1an ist gerade online  
Alt 10.05.2009, 14:41  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

OMG nun habe ich grad einen kompletten Schatten.

So Teilweise habe ich das ja verstanden aber eben nur Teilweise. Zum einen rufe ich das in der Klassendatei selber auf um die Datei dann in ein <img src=""> einzubinden was auch klappt. Aber das zwei mal aufrufen dann im Bezug auf das Formular verstehe ich nicht ganz. Weil ich das ja oben eben noch mal brauche um dann im Formular den String Chack zu machen.

Das mit den 2 mal aufrufen jetzt verstehe ich nciht so ganz weil ich das ja mache. Kannst du mir das genauer erläutern?

[EDIT]
Oder meinst du die Klasse zwei mal in der PHP Datei mit dem Formular aufrufen? Und somit nicht in der Klasse selber aufrufen? Dann bekomme ich aber das Problem mit dem header das da eine Fehlermeldung kommt.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de

Geändert von litterauspirna (10.05.2009 um 14:50 Uhr).
litterauspirna ist offline  
Alt 10.05.2009, 14:50  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ich versuchs dir mal im Code zu zeigen.

PHP-Code:
<?php
session_start
();
require_once(
'captcha.php'); // hier wird die captcha.php eingebunden darin steht folgendes

$captcha = new Captcha();
$captcha->CreateImage(); // hiermit wird das bild erstellt und der header gesetzt dass dieser Aufruf ein image/png ist

// hier wird jetzt das formular generiert, bringt aber gar nichts da es ja schon als Bild ausgegeben wird.
$check_code = new Captcha();
$check_code->Get_Image_String();
echo 
'<form action="" method="post">';
echo 
'<input type="text" name="code" />';
echo 
'<img src="captcha.php" alt="" border="0" />'// hier wird jetzt nochmal die captcha datei eingebunden und das Bild generiert (passt soweit)
echo '<input type="submit" name="send" value="Senden" />';
echo 
'</form>';
?>
Mein Vorschlag wäre in der captcha.php die zwei Zeilen am Ende:
$captcha = new Captcha(); //klassenaufruf
$captcha->CreateImage();
zu entfernen. Um dann das Bild zu generieren musst du eine neue Datei erstellen irgendwie captcha_image.php und in dieser Datei bindest du wieder die captcha.php ein und generierst das Bild mit:
$captcha = new Captcha(); //klassenaufruf
$captcha->CreateImage();

Aber jetzt musst du noch beachten dass das ja zwei einzelne HTTP Requests sind. Bedeutet die beiden Instanzen der Captcha Klasse sind unterschiedlich -> unterschiedliche Strings! Das bedeutet du musst den String in der Session speichern.
Flor1an ist gerade online  
Alt 10.05.2009, 14:50  
Benutzer
 
Benutzerbild von papalangi_44
 
Registriert seit: 12.02.2009
Beiträge: 63
PHP-Kenntnisse:
Fortgeschritten
papalangi_44 befindet sich auf einem aufstrebenden Ast
Standard Captcha

Hallo
lasse mal im Mainprogramm
das Instanzieren der Klasse weg, dann funktioniert es.

PHP-Code:

<?php
session_start
();
//require_once('captcha.php'); //include der cpatcha klassen php
//$check_code = new Captcha(); //aufrufen der klasse Captcha
//$check_code->Get_Image_String(); //instanzieren der Methode des prüfstrings
echo '<form action="" method="post">';
echo 
'<input type="text" name="code" />';
echo 
'<img src="captcha.php" alt="" border="0" />'//aufrufen des bildes
echo '<input type="submit" name="send" value="Senden" />';
echo 
'</form>';
?>
Im <img src="captcha.php" ... rufst du die Php datei auf. Dort eststelltst du ja eine Instanz der Klasse.
Wenn du den Captchastring später prüfen willst, dann solltest du ihn in der Klasse in einer Sessionvariablen ablegen.

Schönen Sonntag noch

papalangi_44
papalangi_44 ist offline  
Alt 10.05.2009, 15:29  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Danke Flor1an, die Erklärung hatte mir schon gereicht um zu verstehen was du meinst, also das geht jetzt. Nun habe ich ein anders Problem ich bekomme zwei unterschiedliche Strings, der in dem Bild ist anders als der, der in der Session steht.

Hier die Captcha Klasse.
PHP-Code:
<?php
/*
########################################################################################
#
#     (c) 2009 OOP Captcha Version 0.1
#     Autor: Daniel Seelig
#     Internet: http://www.lit-web.de
#     Email: webdesign-seelig@gmx.de
#
########################################################################################
*/
error_reporting(E_ALL);
/*
-----------------------------------------
 php5 oop captcha test
-----------------------------------------
*/
class Captcha
{
 
/*
 *
 * deklaration der variablen für den captchastring
 * chars, int, sonderzeichen
 *
 */
 
private $char_small_array = array(); //kleinbuchstaben array (nicht ändern)
 
private $char_big_array = array(); //großbuchstaben array (nicht ändern)
 
private $int_array = array(); //zahlen array (nicht ändern)
 
private $sond_char = array(); //sonderzechen array (nicht ändern)
 
private $mixed_array//variable um alle arrays zusammenzufügen (nicht ändern)
 
private $lenght 8//länge des strings festlegen (nicht ändern)
 
private $ausgabe_string ''//variable für den letzendlichen ausgabestring (nicht ändern)
 
private $wellen_string//in der variablen wird der wellenstring dargestellt (nicht ändern)
 
private $copyright ="(c) by www.lit-web.de"//copyright darf nicht entfernt werden
 
private $copy_string ="tahoma.ttf"
 
 
/*
 *
 * deklaration für die variablen des bildes
 *
 */
 
private $imagewidth 160//bildbreite
 
private $imageheight 60//bildhoehe
 
private $image//varibale für das erstellte bild
 
private $background ="#cccccc"//hexafarbwert eintragen für den hintergrund
 
private $bcolor;
 private 
$bild_text ="#ff0000"//hexafarbwert festlegen für den text
 
private $st_color;
 private 
$image_string ="tahoma.ttf";
 
 
/*-----------------------------------------------------------------------------------------*/
 /* ab hier keine änderungen mehr vornehmen, es sei denn ihr wisst was ihr tut      */
 /*-----------------------------------------------------------------------------------------*/
 
 /*
 *
 * kreiere ein gemixtes array
 * 
 */
 
private function CreateMixedImageString()
 {
  
//small char array erstellen
  
$this->char_small_array range('a','z');
  
$this->char_small_array array_flip($this->char_small_array);
  
$this->char_small_array array_rand($this->char_small_array2);
 
  
//big char array erstellen
  
$this->char_big_array range('A','Z');
  
$this->char_big_array array_flip($this->char_big_array);
  
$this->char_big_array array_rand($this->char_big_array2);
 
  
//intager array erstellen
  
$this->int_array range('0','9');
  
$this->int_array array_flip($this->int_array);
  
$this->int_array array_rand($this->int_array2);
 
  
//sonderzeichen array erstellen
  
$this->sond_char_array = array('#','+','*','~','-','?');
  
$this->sond_char_array array_flip($this->sond_char_array);
  
$this->sond_char_array array_rand($this->sond_char_array2);
 
  
//arrays mixen
  
$this->mixed_array array_merge($this->char_small_array$this->char_big_array,$this->int_array,$this->sond_char_array);
 
  
//durchmische das ganze array
  
shuffle($this->mixed_array);
 
  
//ausgabestring der auf das bild gelegt wird erstellen
  
$this->ausgabe_string implode(' 'array_slice($this->mixed_array0$this->lenght));
 
  
//rückgabe des ausgabestrings
  
return $this->ausgabe_string;
 }
 
 
/*
 *
 * imagestring für spamchaeck
 * einsatz erst im formular
 *
 */
 
public function Get_Image_String()
 {
  
$img_string str_replace(" "''$this->CreateMixedImageString());
 
  
$_SESSION['code'] = $img_string;
 
  return 
$_SESSION['code'];
 }
 
 
/*
 *
 * hintergrundfarbe als rgb wert berechnen
 *
 */
 
private function SetRgbBc()
 {
  
$string_hex_bc str_replace("#"''$this->background);
 
  
//rotwert  ermitteln
  
$bc_hex_rot substr($string_hex_bc02);
  
$bc_hex_rot hexdec($bc_hex_rot);
 
  
//gruenwert ermitteln
  
$bc_hex_gruen substr($string_hex_bc22);
  
$bc_hex_gruen hexdec($bc_hex_gruen);
 
  
//blauwert ermitteln
  
$bc_hex_blau substr($string_hex_bc42);
  
$bc_hex_blau hexdec($bc_hex_blau);
 
  
$rgb_Array = array($bc_hex_rot,$bc_hex_gruen,$bc_hex_blau);
 
  return 
$rgb_Array;
 }
 
 
/*
 *
 * schriftfarbe als rgb wert berechnen
 *
 */
 
private function SetRgbFontColor()
 {
 
  
$string_hex_str str_replace("#"''$this->bild_text);
  
//rotwert  ermitteln
  
$str_hex_rot substr($string_hex_str02);
  
$str_hex_rot hexdec($str_hex_rot);
 
  
//gruenwert ermitteln
  
$str_hex_gruen substr($string_hex_str22);
  
$str_hex_gruen hexdec($str_hex_gruen);
 
  
//blauwert ermitteln
  
$str_hex_blau substr($string_hex_str42);
  
$str_hex_blau hexdec($str_hex_blau);
 
  
$font_Array = array($str_hex_rot,$str_hex_gruen,$str_hex_blau);
 
  return 
$font_Array;
 }
 
 
/*
 *
 * erstellen des bildes
 * @ param: wellen_string (unterschiedliche positionierung der einzelzeichen)
 * @ param: image (erstelltes bild)
 * @ param: bcolor (hintergrundfarbe des bildes)
 * @ param: st_color (farbe des strings im bild)
 *
 */
 
public function CreateImage()
 {   
  
$rgb_Array $this->SetRgbBc(); //hintergrundfarb array instanzieren
  
$font_Array $this->SetRgbFontColor(); //schriftfarben array aufrufen
 
  
$this->image imagecreate($this->imagewidth$this->imageheight);
  
$this->bcolor imagecolorallocate($this->image$rgb_Array[0], $rgb_Array[1], $rgb_Array[2]);
  
$this->st_color imagecolorallocate($this->image$font_Array[0], $font_Array[1], $font_Array[2]);
  
imagefilledrectangle($this->image00$this->imagewidth$this->imageheight$this->bcolor);
 
  
$string_break explode(" ",$this->CreateMixedImageString());
 
  
$this->wellen_string imagettftext($this->image1209rand(25,40), $this->st_color$this->image_string$string_break[0]);
  
$this->wellen_string imagettftext($this->image12023rand(25,40), $this->st_color$this->image_string$string_break[1]);
  
$this->wellen_string imagettftext($this->image12043rand(25,40), $this->st_color$this->image_string$string_break[2]);
  
$this->wellen_string imagettftext($this->image12063rand(25,40), $this->st_color$this->image_string$string_break[3]);
  
$this->wellen_string imagettftext($this->image12083rand(25,40), $this->st_color$this->image_string$string_break[4]);
  
$this->wellen_string imagettftext($this->image120103rand(25,40), $this->st_color$this->image_string$string_break[5]);
  
$this->wellen_string imagettftext($this->image120123rand(25,40), $this->st_color$this->image_string$string_break[6]);
  
$this->wellen_string imagettftext($this->image120143rand(25,40), $this->st_color$this->image_string$string_break[7]);
 
  
imagettftext($this->image70552$this->st_color$this->copy_string$this->copyright);
 
  
header("Content-type: image/png");
 
  
imagepng($this->image);
  
imagedestroy($this->image);
 }
}
?>
Die Datei für den Bild include
PHP-Code:
<?php
require_once('captcha.php');
$captcha = new Captcha(); //klassenaufruf
$captcha->CreateImage(); //aufruf des Objektes für das anzeigen des Bildes
?>
Die Index wo alles aufgerufen wird.
PHP-Code:
<?php
session_start
();
require_once(
'captcha.php'); //include der cpatcha klassen php
$captcha = new Captcha(); //aufrufen der klasse Captcha
//prüfen ob captcha code funktioniert
if(isset($_POST['send']))
{
 if(
$captcha->Get_Image_String() != $_POST['code'])
 {
  echo 
'Der Code ist nicht korrekt!<br />';
  echo 
'<a href="http://www.lit-web.de/oopcaptcha/index.php">Noch mal neu versuchen</a>';
 }
}
//speichern des Captchae Codes in einer Session
//$captcha->Get_Image_String(); //instanzieren der Methode des prüfstrings
echo $captcha->Get_Image_String();
echo 
'<form action="" method="post">';
echo 
'<input type="text" name="code" /><br /><br />';
echo 
'<img src="include_image.php" alt="" border="0" /><br /><br />'//aufrufen des bildes
echo '<input type="submit" name="send" value="Senden" />';
echo 
'</form>';
?>
Da ich alles vor dem absenden des formulars aufrufe verstehe ich nicht warum dei Codes unterschiedlich sind. Wo habe ich da noch einen Schusselfehler?

Hier könnt Ihr das Beispiel sehen, der oben blank stehende Code ist der, der in der Session steht.
http://www.lit-web.de/oopcaptcha/index.php

Danke Gruß litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 10.05.2009, 15:33  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Du hast ja zwei verschiedene Instanzen von der Klasse. Heißt es werden auch 2 verschiedene Strings generiert.

Du musst, wenn du das Bild generierst, den String in die Session schreiben. Und wenn du das Formular überprüfst die Session auslesen und diesen String testen.
Flor1an ist gerade online  
Alt 10.05.2009, 15:41  
Benutzer
 
Benutzerbild von papalangi_44
 
Registriert seit: 12.02.2009
Beiträge: 63
PHP-Kenntnisse:
Fortgeschritten
papalangi_44 befindet sich auf einem aufstrebenden Ast
Standard

War zeitgleich mit Flor1an.

Ich meine es ist besser das erstellen in captcha.php zu belassen. So
wäre es aus jedem Programm einsetzbar, indem es einfach in
<img src="captcha.php" ... >
aufgerufen wird. Es müsste dann nicht mal eine Klasse
sein. So funktioniert das zumindest bei mir in diversen Seiten.
Es wird auch nichts included.


PHP-Code:
<?php
   session_start
();
   
header('Content-type: image/jpeg');

  
//  code für captcha Erzeugung
  
  
$_SESSION['captcha_key']=$this->ausgabe_string;
?>
Bei jeder Instanz die erstellt wird, bekommst einen neuen String. Wenn du also
in der Includedatei, im Captcha und im Mainprogramm jeweils eine Instanz erstellst,
dann hast du 3 unterschiedliche captchastrings.
papalangi_44 ist offline  
Alt 10.05.2009, 17:14  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Momentan verzwiefel ich grad an meinem Verständnis. Ich habe das nun folgendermaßen abgeändert um mehrfache String zu produzieren.

captcha Klasse:
PHP-Code:
<?php
/*
########################################################################################
#
#     (c) 2009 OOP Captcha Version 0.1
#     Autor: Daniel Seelig
#     Internet: http://www.lit-web.de
#     Email: webdesign-seelig@gmx.de
#
########################################################################################
*/
error_reporting(E_ALL);
/*
-----------------------------------------
 php5 oop captcha test
-----------------------------------------
*/
class Captcha
{
 
/*
 *
 * deklaration der variablen für den captchastring
 * chars, int, sonderzeichen
 *
 */
 
private $char_small_array = array(); //kleinbuchstaben array (nicht ändern)
 
private $char_big_array = array(); //großbuchstaben array (nicht ändern)
 
private $int_array = array(); //zahlen array (nicht ändern)
 
private $sond_char = array(); //sonderzechen array (nicht ändern)
 
private $mixed_array//variable um alle arrays zusammenzufügen (nicht ändern)
 
private $lenght 8//länge des strings festlegen (nicht ändern)
 
private $ausgabe_string ''//variable für den ausgabestring wird bearbeitet (nicht ändern)
 
private $wellen_string//in der variablen wird der wellenstring dargestellt (nicht ändern)
 
public $code//hier steht der String drin der in die Session geschrieben wird
 
private $copyright ="(c) by www.lit-web.de"//copyright darf nicht entfernt werden
 
private $copy_string ="tahoma.ttf"
 
 
/*
 *
 * deklaration für die variablen des bildes
 *
 */
 
private $imagewidth 160//bildbreite
 
private $imageheight 60//bildhoehe
 
private $image//varibale für das erstellte bild
 
private $background ="#cccccc"//hexafarbwert eintragen für den hintergrund
 
private $bcolor;
 private 
$bild_text ="#ff0000"//hexafarbwert festlegen für den text
 
private $st_color;
 private 
$image_string ="tahoma.ttf";
 
 
/*-----------------------------------------------------------------------------------------*/
 /* ab hier keine änderungen mehr vornehmen, es sei denn ihr wisst was ihr tut      */
 /*-----------------------------------------------------------------------------------------*/
 
 /*
 *
 * hintergrundfarbe als rgb wert berechnen
 *
 */
 
private function SetRgbBc()
 {
  
$string_hex_bc str_replace("#"''$this->background);
  
  
//rotwert  ermitteln
  
$bc_hex_rot substr($string_hex_bc02);
  
$bc_hex_rot hexdec($bc_hex_rot);
  
  
//gruenwert ermitteln
  
$bc_hex_gruen substr($string_hex_bc22);
  
$bc_hex_gruen hexdec($bc_hex_gruen);
  
  
//blauwert ermitteln
  
$bc_hex_blau substr($string_hex_bc42);
  
$bc_hex_blau hexdec($bc_hex_blau);
  
  
$rgb_Array = array($bc_hex_rot,$bc_hex_gruen,$bc_hex_blau);
  
  return 
$rgb_Array;
 }
 
 
/*
 *
 * schriftfarbe als rgb wert berechnen
 *
 */
 
private function SetRgbFontColor()
 {
  
  
$string_hex_str str_replace("#"''$this->bild_text);
  
//rotwert  ermitteln
  
$str_hex_rot substr($string_hex_str02);
  
$str_hex_rot hexdec($str_hex_rot);
  
  
//gruenwert ermitteln
  
$str_hex_gruen substr($string_hex_str22);
  
$str_hex_gruen hexdec($str_hex_gruen);
  
  
//blauwert ermitteln
  
$str_hex_blau substr($string_hex_str42);
  
$str_hex_blau hexdec($str_hex_blau);
  
  
$font_Array = array($str_hex_rot,$str_hex_gruen,$str_hex_blau);
  
  return 
$font_Array;
 }
 
 
/*
 *
 * erstellen des bildes
 * @ param: wellen_string (unterschiedliche positionierung der einzelzeichen)
 * @ param: image (erstelltes bild)
 * @ param: bcolor (hintergrundfarbe des bildes)
 * @ param: st_color (farbe des strings im bild)
 *
 */
 
public function CreateImage()
 {
  
//small char array erstellen
  
$this->char_small_array range('a','z');
  
$this->char_small_array array_flip($this->char_small_array);
  
$this->char_small_array array_rand($this->char_small_array2);
  
  
//big char array erstellen
  
$this->char_big_array range('A','Z');
  
$this->char_big_array array_flip($this->char_big_array);
  
$this->char_big_array array_rand($this->char_big_array2);
  
  
//intager array erstellen
  
$this->int_array range('0','9');
  
$this->int_array array_flip($this->int_array);
  
$this->int_array array_rand($this->int_array2);
  
  
//sonderzeichen array erstellen
  
$this->sond_char_array = array('#','+','*','~','-','?');
  
$this->sond_char_array array_flip($this->sond_char_array);
  
$this->sond_char_array array_rand($this->sond_char_array2);
  
  
//arrays mixen
  
$this->mixed_array array_merge($this->char_small_array$this->char_big_array,$this->int_array,$this->sond_char_array);
  
  
//durchmische das ganze array
  
shuffle($this->mixed_array);
  
  
//ausgabestring der auf das bild gelegt wird erstellen
  
$this->ausgabe_string implode(' 'array_slice($this->mixed_array0$this->lenght));
  
  
$rgb_Array $this->SetRgbBc(); //hintergrundfarb array instanzieren
  
$font_Array $this->SetRgbFontColor(); //schriftfarben array aufrufen
  
  
$string_break explode(" ",$this->ausgabe_string);
  
  
//string der in die session geschrieben wird
  
$this->code $code;
  
$this->code $string_break[0].$string_break[1].$string_break[2].$string_break[3].$string_break[4].$string_break[5].$string_break[6].$string_break[7];
  
  
$this->image imagecreate($this->imagewidth$this->imageheight);
  
$this->bcolor imagecolorallocate($this->image$rgb_Array[0], $rgb_Array[1], $rgb_Array[2]);
  
$this->st_color imagecolorallocate($this->image$font_Array[0], $font_Array[1], $font_Array[2]);
  
imagefilledrectangle($this->image00$this->imagewidth$this->imageheight$this->bcolor);
  
  
$this->wellen_string imagettftext($this->image1209rand(25,40), $this->st_color$this->image_string$string_break[0]);
  
$this->wellen_string .= imagettftext($this->image12023rand(25,40), $this->st_color$this->image_string$string_break[1]);
  
$this->wellen_string .= imagettftext($this->image12043rand(25,40), $this->st_color$this->image_string$string_break[2]);
  
$this->wellen_string .= imagettftext($this->image12063rand(25,40), $this->st_color$this->image_string$string_break[3]);
  
$this->wellen_string .= imagettftext($this->image12083rand(25,40), $this->st_color$this->image_string$string_break[4]);
  
$this->wellen_string .= imagettftext($this->image120103rand(25,40), $this->st_color$this->image_string$string_break[5]);
  
$this->wellen_string .= imagettftext($this->image120123rand(25,40), $this->st_color$this->image_string$string_break[6]);
  
$this->wellen_string .= imagettftext($this->image120143rand(25,40), $this->st_color$this->image_string$string_break[7]);
  
  
imagettftext($this->image70552$this->st_color$this->copy_string$this->copyright);
  
  
header("Content-type: image/png");
  
  
imagepng($this->image);
  
imagedestroy($this->image);
  
  
//return $this->code;
 
}
}
?>
include_image.php
PHP-Code:
<?php
require_once('captcha.php');
$captcha = new Captcha(); //klassenaufruf
$captcha->CreateImage(); //aufruf des Objektes für das anzeigen des Bildes
$code $captcha->code;
$_SESSION['code'] = $code;
?>
und die index.php
PHP-Code:
<?php
session_start
();
//require_once('captcha.php'); //include der cpatcha klassen php
//$captcha = new Captcha(); //aufrufen der klasse Captcha
//prüfen ob captcha code funktioniert
if(isset($_POST['send']))
{
 if(
$_SESSION['code'] != $_POST['code'])
 {
  echo 
'Der Code ist nicht korrekt!<br />';
  echo 
'<a href="http://www.lit-web.de/oopcaptcha/index.php">Noch mal neu versuchen</a>';
 }
}
//speichern des Captchae Codes in einer Session
/*$code = $captcha->code;
$_SESSION['code'] = $code;
echo $_SESSION['code'];*/
echo '<form action="" method="post">';
echo 
'<input type="text" name="code" /><br /><br />';
echo 
'<img src="include_image.php" alt="" border="0" /><br /><br />'//aufrufen des bildes
echo '<input type="submit" name="send" value="Senden" />';
echo 
'</form>';
?>
So nun erzeuge ich nur noch eine Instanz und somit dürfte eigentlich auch nur einString vorhanden sein, aber die Variable $code die auf public gesetzt habe bringt mir kein Ergebnis. Wie ich das verstanden habe, habe ich es versucht umzusetzen, das heist beim Bild gernerieren den String in eine Session geschrieben, das passiert in der include_image.ph. session_start wird in der index.php gesetzt. Also müsste doch alles da sein. Ich komme momentan gerade nicht weiter.

Danke für jede Hilfe Gruß litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 10.05.2009, 18:17  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Jein du hast es fast schon verstanden. Das Prinzip stimmt, es fehlt dir nur noch ein session_start() in der include_image.php!

Denn da sitzt noch dein Verständnisfehler. Du willst die index.php aufrufen also sendet der Browser den ERSTEN Request an den Webserver. Dann wird in der index.php das Formular generiert (und dabei die Session gestartet). Das Formular wird jetzt an den Browser zurück gesendet. Der Browser schaut sich den HTML Code an und siehst aha hier noch ein Bild einbinden. Jetzt sendet der Browser einen ZWEITEN Request an den Webserver, also include_image.php. Das ist ein komplett eigenständiger Prozess der rein gar nichts mit dem ersten Request zutun hat. Deshalb musst du in diesem Request die Session auch starten.
Flor1an ist gerade online  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Es erscheint das alte Bild (cache problem) !! mac PHP-Fortgeschrittene 12 18.05.2011 11:23
[Erledigt] PHP Formular =&gt; Problem =&gt; Email kommt nicht an... benschiaa PHP Tipps 2009 21 25.03.2009 11:54
Assoziatives Array und ctype_digit Problem im Formular. Radik PHP Tipps 2009 6 16.02.2009 21:58
Gleichungs Captcha PHP litterauspirna PHP-Fortgeschrittene 17 25.05.2008 21:06
Captcha - Session Problem Toby PHP Tipps 2008 9 11.03.2008 19:38
Problem mit IF und Formular Black-Devil PHP Tipps 2008 12 03.03.2008 17:54
Problem mit CAPTCHA patEwing PHP Tipps 2008 0 11.02.2008 21:57
Problem mit interaktiven Formular max-dhom HTML, Usability und Barrierefreiheit 0 19.09.2006 10:28
Sessions Problem Mehrseitiges Formular PHP Tipps 2006 6 02.02.2006 18:59
Problem mit Formular PHP Tipps 2007 13 03.11.2005 12:23
Formular Problem mit Übertragung (SunOS) PHP Tipps 2005-2 12 07.09.2005 11:26
Wieso wird das Bild nicht angezeigt?? PHP Tipps 2004 15 09.09.2004 22:25
[Erledigt] Bild wird nicht angezeigt Server, Hosting und Workstations 7 03.09.2004 16:08
bild problem HTML, Usability und Barrierefreiheit 2 25.08.2004 02:00
Problem mit Formular + Antwortseite PHP Tipps 2004 2 22.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
captcha imagestring und imagettftext

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:43 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum