capcha fehler
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgabe
ausgeben
bild
break
code
datei
fehler
fehlermeldung
formular
grafik
header
http
image
registrieren
schriftart
speichern
stadt
type
url
zeichen
-
ich hab eine Problem mit Captcha
und zwar
er gibt mir Falsche captcha Code in Bild
wenn ich schreibe Code und drucke regestieren dann schreibt bei Prüfung sie haben falsche "Code eingegeben ihre Code hjhjjjh" "captcha Code ist fdfsff "
obwohl ich richtige Code reingeschrieben hab
und unterdrunter Sie habe Registriert
und senden trotzten Daten zum Datenbank
hier ist
regist.php
............ ............ session_start(); ...................... ...................... $CAPTCHA_TempString=""; // Zufallsfunktion für Zahlen und Buchstaben function GetRandomChar() { // Zufallszahl generieren mt_srand((double)microtime()*1000000); $CAPTCHA_RandVal = mt_rand(1,2); // Buchstabensalat generieren jeh nachdem ob Randval 1 oder 2 ist switch ($CAPTCHA_RandVal) { case 1: // Zahlen 0-9 $CAPTCHA_RandVal = mt_rand(48, 57); break; case 2: // Grosse Buchstaben $CAPTCHA_RandVal = mt_rand(65, 90); break; } // Zufallscode ausgeben return chr($CAPTCHA_RandVal); } // Zufallscode x-stellig ausgeben for ($i = 1; $i <= 6; $i++) { $CAPTCHA_TempString .= GetRandomChar(); } // Text in Sessionvariable speichern if (isset($CAPTCHA_TempString)) { $_SESSION["CAPTCHA_RndText"] = str_replace('I','E',str_replace('0','3',str_replace('1','S',str_replace('B','F',str_replace('O','P',str_replace('4','A',str_replace('D','K',$CAPTCHA_TempString))))))); } else { die("Zufallscode konnte nicht generiert werden!"); } // Bei Ausgabe des eingegebenen Codes müssen html tags entfernt werden! $CAPTCHA_RandomText = ""; if (isset($_POST['txtCode'])){ $CAPTCHA_EnteredText = str_replace("<","",str_replace(">","",str_replace("'","",str_replace("[","",str_replace("]","",$_POST['txtCode']))))); } if (isset($_SESSION['CAPTCHA_RndText'])) { $CAPTCHA_RandomText = $_SESSION['CAPTCHA_RndText']; } <td><p class="abstand3">Bitte geben sie Zufallcode ein.</p></td> <td><p class="abstand3"><img border="0" src="captcha_img.php?PHPSESSID=<?echo session_id();?>" alt="" /></p></td>
captcha_img.php
<?php // Alle Fehler und Notices anzeigen error_reporting(E_ALL); // Session initialisieren session_start(); // Benötigte Files laden! Hier kann editiert werden! $imagettftext = "1"; // Alternative Grafik-Zeichenfunktion nutzen? (bei fehlerhafter Darstellung // oder fehlendem Truetype-support) 1=nein, 2=ja $Welleneffekt = "1"; // Welleneffekt nutzen? 1=nein, 2=ja $Textgroesse = "32"; $Texthoehe = "47"; $Schriftart = "captcha_files/truetype.ttf"; $bg1 = "captcha_files/background1.png"; $bg2 = "captcha_files/background2.png"; $ov1 = "captcha_files/overlay1.png"; $ov2 = "captcha_files/overlay2.png"; // Benötige Strings überprüfen if (isset($_SESSION["CAPTCHA_RndText"])) { $CAPTCHA_RandomText = $_SESSION["CAPTCHA_RndText"]; } else { // Fehlermeldung ausgeben header ("Content-type: image/png"); $im = @imagecreatetruecolor(300, 30) or die("Cannot Initialize new GD image stream"); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 10, 5, 7, "Kein Zufallscode übergeben!", $text_color); imagepng($im); imagedestroy($im); exit(); } // Auf Funktion überprüfen if ($imagettftext == "1") { // Benötige Files überprüfen if (!file_exists($Schriftart)) { // Fehlermeldung ausgeben // header ("Content-type: image/png"); $im = @imagecreatetruecolor(300, 30) or die("Cannot Initialize new GD image stream"); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 10, 5, 7, "Schriftart nicht gefunden!", $text_color); imagepng($im); imagedestroy($im); exit(); } if (!file_exists($bg1) OR !file_exists($bg2)) { // Fehlermeldung ausgeben header ("Content-type: image/png"); $im = @imagecreatetruecolor(300, 30) or die("Cannot Initialize new GD image stream"); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 10, 5, 7, "Hintergrundbild nicht gefunden!", $text_color); imagepng($im); imagedestroy($im); exit(); } if (!file_exists($ov1) OR !file_exists($ov2)) { // Fehlermeldung ausgeben header ("Content-type: image/png"); $im = @imagecreatetruecolor(300, 30) or die("Cannot Initialize new GD image stream"); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 10, 5, 7, "Overlaybild nicht gefunden!", $text_color); imagepng($im); imagedestroy($im); exit(); } // Zufallshintergrund mt_srand((double)microtime()*1000000); $Bild1 = mt_rand(1, 2); switch ($Bild1) { case 1: $Grafik=imagecreatefrompng($bg1); $Grafikhilf=imagecreatefrompng($bg1); break 1; case 2: $Grafik=imagecreatefrompng($bg2); $Grafikhilf=imagecreatefrompng($bg2); break 1; } // Zufallsgrafik2 mt_srand((double)microtime()*1000000); $Bild2 = mt_rand(1, 2); switch ($Bild2) { case 1: $Grafik2=imagecreatefrompng($ov1); break 1; case 2: $Grafik2=imagecreatefrompng($ov2); break 1; } // Textfarben ins Array speichern $textfarbe = array( imagecolorallocate($Grafik, 128, 128, 128), imagecolorallocate($Grafik, 0, 0, 0), imagecolorallocate($Grafik, 50, 171, 4), imagecolorallocate($Grafik, 128, 0, 128), imagecolorallocate($Grafik, 128, 128, 255), imagecolorallocate($Grafik, 255, 128, 128), imagecolorallocate($Grafik, 192, 122, 0), imagecolorallocate($Grafik, 250, 94, 250), imagecolorallocate($Grafik, 122, 146, 224), imagecolorallocate($Grafik, 122, 155, 180) ); // Text auf das Bild schreiben imagettftext($Grafik, $Textgroesse, mt_rand(-13, 13), 10, $Texthoehe+mt_rand(-7,8), $Textfarbe1 = $textfarbe[array_rand($textfarbe)] , $Schriftart, $CAPTCHA_RandomText[0]); imagettftext($Grafik, $Textgroesse, mt_rand(-13, 13), 45, $Texthoehe+mt_rand(-7,8), $Textfarbe2 = $textfarbe[array_rand($textfarbe)] , $Schriftart, $CAPTCHA_RandomText[1]); imagettftext($Grafik, $Textgroesse, mt_rand(-13, 13), 80, $Texthoehe+mt_rand(-7,8), $Textfarbe3 = $textfarbe[array_rand($textfarbe)] , $Schriftart, $CAPTCHA_RandomText[2]); imagettftext($Grafik, $Textgroesse, mt_rand(-13, 13), 113, $Texthoehe+mt_rand(-7,8), $Textfarbe4 = $textfarbe[array_rand($textfarbe)] , $Schriftart, $CAPTCHA_RandomText[3]); imagettftext($Grafik, $Textgroesse, mt_rand(-13, 13), 150, $Texthoehe+mt_rand(-7,8), $Textfarbe5 = $textfarbe[array_rand($textfarbe)] , $Schriftart, $CAPTCHA_RandomText[4]); imagettftext($Grafik, $Textgroesse, mt_rand(-13, 13), 191, $Texthoehe+mt_rand(-7,8), $Textfarbe6 = $textfarbe[array_rand($textfarbe)] , $Schriftart, $CAPTCHA_RandomText[5]); if ($Welleneffekt == "2") { $stauchung = mt_rand(0,100)/400+0.10; $Grafikalt = $Grafik; $Grafik = $Grafikhilf; for ($i=1;$i<=65;$i++){ imagecopy($Grafik, $Grafikalt, round((sin($i*$stauchung)*2))+3, $i, 1, $i, 230,1); } } // Transparente Grafik drüberlegen imagecopy($Grafik, $Grafik2, 0, 0, 0, 0, 230, 65); // Bild ausgeben header("Content-type: image/png"); imagepng($Grafik); imagedestroy($Grafik); } else if ($imagettftext == "2") { // Alternativbild ausgeben header ("Content-type: image/png"); $im = @imagecreatetruecolor(70, 30) or die("Cannot Initialize new GD image stream"); $gdColor = imagecolorallocate($im, 255, 255, 255); // Hintergrundfarbe imagefilledrectangle($im, 0, 0, 99, 99, $gdColor); $text_color = imagecolorallocate($im, 255, 0, 0); // Schriftfarbe imagestring($im, 10, 5, 7, $CAPTCHA_RandomText, $text_color); imagepng($im); imagedestroy($im); } else { // Fehlermeldung ausgeben header ("Content-type: image/png"); $im = @imagecreatetruecolor(430, 30) or die("Cannot Initialize new GD image stream"); $gdColor = imagecolorallocate($gdImage, 255, 0, 0); // red imagefilledrectangle($im, 0, 0, 99, 99, $gdColor); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 10, 5, 7, "Fehlerhafte Auswahl($imagettftext)der Funktion! (1 od. 2)", $text_color); imagepng($im); imagedestroy($im); exit(); } ?>
Danke -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
leider ist bei deinem code-beispiel gerade die entscheidende stelle wo geprüft wird ob der eingegebene code der gleiche wie in der session-variablen ist (also auch die stelle wo deine erwähnte fehlermeldung herkommt) nicht mit dabei...
poste den und man kann dir vielleicht helfen.
p.s.: deutsche sprache, schwere sprache -
hcms
ich hab dir Alles Von Capcha gesendet
hier ist Complette PHP von Regist mehr hab ich nicht
http://tshaika.lima-city.de/Reg.txt -
naja hier hat sich ja die abfrage versteckt, war vorher nicht mit dabei:
weshalb das nicht funktioniert ist mir aber auch nicht so direkt klar.if ($CAPTCHA_EnteredText == $CAPTCHA_RandomText and isset($_POST['txtCode']) == true and isset($_SESSION['CAPTCHA_RndText'])){ // Hier Code, wenn Übereinstimmung echo "<h3>Richtige Code!</h3>"; echo "Your Code: $CAPTCHA_EnteredText, Random Code: $CAPTCHA_RandomText"; } else { // Hier Code wenn keine Übereinstimmung echo "Falsche Zufallcode"; echo "Ihre Code: $CAPTCHA_EnteredText, Zufallcode: $CAPTCHA_RandomText"; } // Session unset unset($_SESSION['CAPTCHA_RndText']);
sind auf dem server denn sessions aktiviert ?
...zur fehlersuche müsstest du wohl erstmal die bedingungen in der if()
einzeln auf typ & wert kontrollieren...$CAPTCHA_EnteredText == $CAPTCHA_RandomText and isset($_POST['txtCode']) == true and isset($_SESSION['CAPTCHA_RndText'])
-
hcms schrieb:
Ist doch klar warum
weshalb das nicht funktioniert ist mir aber auch nicht so direkt klar.
Ganz am Anfang der Seite berechnet er immer einen neuen Code fürs Captcha und ignoriert einen bereits vorhandenen und in der Session gespeicherten… -
och ja....das erklärt natürlich einiges
dasimmer
ist zwar relativ, denn eigentlich ja nur wenn
, aber du hast effektiv natürlich rechtisset($_POST['submit']) AND $_POST['submit']=='Registrieren'
also, tshaika, wie hackyourlife sagte sollte eine zusätzliche bedingung z.b. hier:
in z.b. dieser form:// Text in Sessionvariable speichern if (isset($CAPTCHA_TempString)) { $_SESSION["CAPTCHA_RndText"] = str_replace('I','E',str_replace('0','3',str_replace('1','S',str_replace('B','F',str_replace('O','P',str_replace('4','A',str_replace('D','K',$CAPTCHA_TempString))))))); } else { die("Zufallscode konnte nicht generiert werden!"); }
das problem lösen...// Text in Sessionvariable speichern if (isset($CAPTCHA_TempString) and !isset($_SESSION["CAPTCHA_RndText"])) { $_SESSION["CAPTCHA_RndText"] = str_replace('I','E',str_replace('0','3',str_replace('1','S',str_replace('B','F',str_replace('O','P',str_replace('4','A',str_replace('D','K',$CAPTCHA_TempString))))))); } else { die("Zufallscode konnte nicht generiert werden!"); }
-
oh - ähhh ja..
muss natürlich eher so sein:
// Text in Sessionvariable speichern falls noch nicht vorhanden if(isset($CAPTCHA_TempString)) { if(!isset($_SESSION["CAPTCHA_RndText"])) { $_SESSION["CAPTCHA_RndText"] = str_replace('I','E',str_replace('0','3',str_replace('1','S',str_replace('B','F',str_replace('O','P',str_replace('4','A',str_replace('D','K',$CAPTCHA_TempString))))))); } }else { die("Zufallscode konnte nicht generiert werden!"); }
Beitrag zuletzt geändert: 9.1.2013 20:53:42 von hcms -
OK Fast des Funkz
jetzt noch kleine Problem
bei erste mal wenn auf die Seite geht ist Kein "Zufallcode übergeben!" dann drucke REG und dann zuruck dann taucht er wieder auf oder wenn
Daten fehlen und ich zuruck drucke steht noch alte Code obwohl Neue Code generiert
wo ist noch wo keine Groß und klein buchstabe nicht beachtet
Jetz hab ich so http://tshaika.lima-city.de/Reg.txt
Danke
Beitrag zuletzt geändert: 9.1.2013 21:29:15 von tshaika -
Da sind mir noch eon paar kleinigkeiten aufgefallen:
"session_start();" lieber vor einer eventuellen mysql-error-ausgabe notieren.
bei "Prüft, ob ein Name eingegeben wurde" sollte die Fehlermeldung so geschrieben werden: "Bitte geben Sie Ihren Namen ein."
bei "Prüft, ob ein Vorname eingegeben wurde" sollte die Fehlermeldung so geschrieben werden: "Bitte geben Sie Ihren Vornamen ein."
bei "if(trim($_POST['Postleitzahl'])=='')" fehlt der kommentar und die fehlermeldung sollte so geschrieben werden: "Bitte geben Sie Ihre Postleitzahl ein.".
bei "Prüft, ob der Postleitzahl mindestens 1 Zeichen enthält" sollte die Fehlermeldung so geschrieben werden: "Ihre Postleitzahl muss mindestens 1 Zeichen lang sein. Für Orte ohne Postleitzahl geben sie Einfach eine 0 ein."
bei "Prüft, ob ein Stadt eingegeben wurde" sollte die Fehlermeldung so geschrieben werden: "Bitte geben Sie Ihre Stadt ein."
bei "Prüft, ob der Stadt mindestens 4 Zeichen enthält" ist die überprüfung aber nur auf 1 zeichen und die Fehlermeldung sollte so geschrieben werden: "Ihre Stadt muss mindetsens 4 Zeichen lang sein."
bei "Prüft, ob der Stadt nur gültige Zeichen enthält" sollte die Fehlermeldung so geschrieben werden: "Benutzen Sie bei Stadt nur alphanumerische Zeichen (Keine Zahlen oder Symbole)."
bei "Prüft, ob ein Haus eingegeben wurde" sollte die Fehlermeldung so geschrieben werden: "Bitte geben Sie Ihre Hausnummer ein."
bei "Prüft, ob der Haus mindestens 1 Zeichen enthält " sollte die Fehlermeldung so geschrieben werden: "Ihre Hausnummer muss mindetsens 1 Zeichen lang sein."
bei "pruft ob AGB bestätigt ist" sollte die Fehlermeldung so geschrieben werden: "Sie haben den AGB nicht zugestimmt."
bei der ausgabe des formulars steht "<h3>Regestrierung<h3>" direkt in einer "<tr>"
bei der ausgabe des formulars gibt es zeilen mit 2 zellen, aber auch zeilen mit 1 zelle (und ohne colspan).
bei der ausgabe des formulars sind mehrere spans die nur enden, aber nirgendwo beginnen.
bei der ausgabe des formulars in der zelle "Zufallcode:" fehlt das ">" am ende.
bei der ausgabe des formulars fast am ende der tabelle benutzt du eine <h10>?
bei der ausgabe des formulars sollte es besser heissen: "Hausnummer:" und "<p class="abstand3">Bitte geben sie den Zufallcode ein.</p>" und "<p>Ich versichere, das die vorstehenden Angaben<br/>richtig und vollständig sind</p>"
zum problembei erste mal wenn auf die Seite geht ist Kein "Zufallcode übergeben!"
das liegt wohl daran das die generierung des codes innerhalb der "isset($_POST['submit']) and $_POST['submit']=='Registrieren'" liegt.
ich habe mir erlaubt diese änderungen und ein paar weitere kleinigkeiten zur besseren lesbarkeit des codes vorzunehmen:
http://hcms.lima-city.de/Regist.php.txt
mitwo ist noch wo keine Groß und klein buchstabe nicht beachtet
kann ich leider nichts anfangen.
-
hcms schrieb:
Da sind mir noch eon paar kleinigkeiten aufgefallen:
"session_start();" lieber vor einer eventuellen mysql-error-ausgabe notieren.
...............................................................
.......................................... utw
Danke Aber immer noch gleiche Fehler
1 es generiert immer noch nicht immer
2 bei Falsche Captcha geht trotztem Regestieren und sendet in Datenbank
ich bin verzweifelt -
vielleicht wäre es besser den zufallscode direkt in der bild-datei zu generieren und nicht andersherum...
Einen sauberen Code mit einfacher Anleitung zum Einbau findest du hier:
http://www.stoppt-den-spam.info/webmaster/captcha-tutorial/zahlen-cpatcha/captcha-php-script.html
-
Hi
ich hab dei link geckukt
ich hab die letzte seite nicht verstanden
//
//
//Hier kommt das ursprüngliche Script hin.
//
//
? -
//
//
//Hier kommt das ursprüngliche Script hin.
//
//
damit ist der code gemeint der nur ausgeführt werden soll (oder die "seite" die nur dann angezeigt werden soll) wenn der capchar code richtig eingetippt wurde - in deinem fall halt der teil wo der account in der datanbank eingetragen wird und die erfolgsmeldung ausgegeben wird. -
klapt trotztem nicht
also vor anfang
1 seite
captcha.php (nicht Verändert)
Dowloaden und speichern in ordner captcha
XFILES.TTF
Dowloaden und Speicher in odner captcha
2 seite
bild speicher in ordner captcha unter namen captcha.png
3 seite
hab ich so
<tr> <td><img src="captcha/captcha.php" border="0" title="Sicherheitscode"></td> <td><input type="text" name="sicherheitscode" size="5"></td> </tr>
4 Seite
hab ich So
// Alle Fehler und Notices anzeigen error_reporting(E_ALL); session_start(); $MYSQL_HOST = ''; $MYSQL_USER = ''; $MYSQL_PASS = ''; $MYSQL_DATA = ''; $connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) or die("Error: ".mysql_error()); mysql_select_db($MYSQL_DATA) or die("Error: ".mysql_error()); if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){ unset($_SESSION['captcha_spam']); } if(isset($_POST['submit']) and $_POST['submit']=='Registrieren'){
Fertig
Beitrag zuletzt geändert: 17.1.2013 13:43:58 von tshaika -
4 Seite
hab ich So
mann mann ich krieg noch kopfschmerzen
das was dort auf seite 3 und auf seite 4 beschreiben ist behandelst du bei dir ja auf einer einzigen seite, weshalb in deinem code ja auch unterschieden wird ob das formular abgesendet wurde oder noch nicht:if(isset($_POST['submit']) and $_POST['submit']=='Registrieren'){ ... }else { ... }
in dem teil der ausgeführt wird wenn noch nicht abgesendet wurde steht logischerweise dein eingabeformular mit:
als teil der tabelle.<tr> <td><img src="captcha/captcha.php" border="0" title="Sicherheitscode"></td> <td><input type="text" name="sicherheitscode" size="5"></td> </tr>
in dem anderen teil, also wenn das formular abgeschickt wurde, muss dann geprüft werden ob die eingabe des capchar codes korrekt ist (siehe schnipsel von Seite 4), und wenn das der fall ist (neben deinen anderen abfragen auf zb länge des namens usw.) findet die anmeldung statt. -
Sorry
if(isset($_POST['submit']) and $_POST['submit']=='Registrieren'){ ... }else { ... }
hab ich Copy Fehler
meist du das
//
//
//Hier kommt das ursprüngliche Script hin.
//
//
ich hab gedacht drachman nich und wie kann ich das formulieren
und bild zeigt auch nix -
drachman
???
Also ich habe dir alle benötigten Dateien nochmal zusammengestellt und die registrierung.php entsprechend deinen Bedürfnissen neugeschrieben. Da man hier keine zip-files hochladen darf aber .php Dateien ja nicht ungeparst ausgegeben werden habe ich dir die Dateien kurzzeitig hier hochgeladen:
http://martens.verwag.de/captcha.zip
Die datei "registrierung.php" und der Ordner "captcha" müssen im root-Verzeichnis deines webservers abgelegt werden.
Die Dateien "captcha.PNG", "captcha.php" und "XFILES.TTF" müssen in dem ordner "captcha" sein.
Außerdem muß die GD-Lib auf dem Server zur verfügung stehen.
Und dann musst Du in der Datei "registrierung.php" natürlich noch deine Datenbank-Zugangsdaten eintragen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage