Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Captcha - Vergleich klappt nicht

Habe auf meiner Seite www.eikehoerding.de unter .gbook ein Gästebuch laufen, wenn ihr es ausprobiert funktioniert es auch.  Nun hab ich versucht, auch unter www.porta-racing.de einen Captcha-Check einzubauen, dazu habe ich einfach mal die entsprechenden Zeilen meines eigenen Gb's kopiert und in das andere GB eingefügt.  Das Problem besteht darin, dass PHP mir manchmal Falscher Zahlencode ausspuckt, manchmal funktioniert es aber...

Mein Gästebuch:

Zahlencode:<br>
         <?php $rd rand(0,3);
             
$pics glob("./gb/*.jpg");
             
$werte=array("3e42R","8hlnQ","a7pYD","W6j8v");
             
?>

             <img src="<?php echo $pics[$rd]; ?>" alt="Code"><br>
             <input type="text" name="codefeld" size="25"><br<br>
     Eintrag:<br>
     <textarea name="gbeintrag" rows="20" cols="40"></textarea><br>
     <br>
     <input type="submit" value="Eintragen" name="absenden"> <input  type="reset" value="Reset">
     </form><br>

             <?php
                 
if(isset($absenden)){
                 if(
$codefeld == $werte[$rd]){
    
         $dateiinhalt file_get_contents(&#39;gbeintraege.txt&#39;);
                 
$datei=fopen ("gbeintraege.txt","w+");
                 
$eintrag stripslashes($eintrag);
       
         $daten="<hr><b>Name:</b> $name<br>
                 <b>Email:</b> <a href=&#39;mailto:
$email&#39;>$email</a><br>
                 <b>Website:</b> <a href=&#39;
$url&#39;>$url</a><br>
                 <b>Eintrag:</b> 
$gbeintrag<br>\n\n".$dateiinhalt;
        fwrite ($datei,$daten);
        fclose ($datei);}
                else {echo
"<b>Falscher Zahlencode!</b><br><br>";}
                }
                if(
file_exists("gbeintraege.txt")){
    
        readfile("gbeintraege.txt");
                }
                else {
    
       echo ("Momentan sind keine Einträge im Gästebuch vorhanden.");
                }
           
?>


Neues Gästebuch:

<?php $rd rand(0,3);
             
$pics glob("./gb/*.jpg");
             
$werte=array("3e42R","8hlnQ","a7pYD","W6j8v");
             
?>

             <img src="<?php echo $pics[$rd]; ?>" alt="Code">
             <input type="text" name="codefeld" >
             <?php
              
if(isset($gbsubmit)){
              if(
$codefeld == $werte[$rd]){
              
$content file_get_contents (&#39;./txt/gbuch.txt&#39;);
              
$data "<div id=&#39;gb&#39;><b>Name:</b> $name<br><b>Email:</b>
             <a  href=&#39;mailto:
$mail&#39;>$mail</a><br><b>Homepage:</b> 
             <a  href=&#39;
$hp&#39;>$hp</a><br><b>Eintrag:</b>   
             
$eintrag<br><br><hr></div>$content";
             
$data stripslashes ($data);
              
$file fopen ("./txt/gbuch.txt","w+");
              
fwrite ($file,$data);
              
fclose ($file);}
              else {echo 
"Zahlencode falsch eingegeben!";}
              }
              if(isset(
$gbbearbeiten)){
                 
$file fopen ("./txt/gbuch.txt","w+");
                 
$gbtext stripslashes($gbtext);
                 
fwrite ($file,$gbtext);
                 
fclose ($file);
                 };
              
readfile (&#39;./txt/gbuch.txt&#39;);
          
?>



           

Kurze Erklärung: Die letze if-Abfrage dient zum löschen der Einträge über einen Admincenter. Ihr könnt die Beiden Bücher gern ausprobieren, vllt. findet ihr ja einen Fehler, aber mir tun schon die Augen weh!

Liebe Grüße und an dieser Stelle schonmal vielen Dank an Jossif, der bestimmt wieder eine Antwort parat hat...

Dark_Dog

Antworten zu Captcha - Vergleich klappt nicht:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Das Problem besteht darin, dass PHP mir manchmal Falscher Zahlencode ausspuckt, manchmal funktioniert es aber...

OK, diesen Satz verstehe ich jetzt mal gar nicht, aber so ungefähr kann ich mir vorstellen, wohin die Reise geht...

Du gehst davon aus, dass glob() dir ein sortiertes Ergebnis zurückliefert. Das scheint nicht durchweg der Fall zu sein und könnte sich gerade auf anderen Servern erst bemerkbar machen. Ich würde an deiner Stelle eine EINDEUTIGE Verknüpfung herstellen zwischen dem Dateinamen des Captcha-Bildes und dem Code, der da drin steht.

greez 8)
JoSsiF

Hallo,
das Problem besteht darin, dass mir manchmal trotz richtiger Eingabe "Falscher Zahlencode" ausgegeben wird, manchmal funzt es aber wieder. Beide Ordner mit den Bildern liegen auf dem selben Server.

EDIT: Könnte es was bringen, wenn ich beide "Scripte" auf ein und den selben Ordner zugreifen lasse, anstatt auf 2 eigene?

LG 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Hallo,
das Problem besteht darin, dass mir manchmal trotz richtiger Eingabe "Falscher Zahlencode" ausgegeben wird

Ja, weil die Zuordnung von Bild und Code nicht eindeutig ist. Siehe letzter Post. 

Gut, Aber warum klappt es dann immer beim anderen Gästebuch?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Gut, Aber warum klappt es dann immer beim anderen Gästebuch?

Weiß ich nicht. Keine Ahnung, wie der Webserver sortiert. Und um sich um sowas keine Gedanken machen zu müssen, einfach mal so programmieren, dass man solche Fälle ausschließen kann. Das ist in dem Fall ja besonders einfach, da du im Prinzip nicht einmal auf eine korrekte Sortierung angewiesen bist.

Ok, ich schau mal, vllt. kann man da noch irgendwas mit führenden Nullen machen.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Ok, ich schau mal, vllt. kann man da noch irgendwas mit führenden Nullen machen.

...du hast es nicht verstanden.

Wenn der Server jetzt nicht richtig sortiert, macht der das mit führenden Nullen auch nicht. Und es sollte auch gar nicht das Ziel sein, die Sortierung richtig hinzubekommen. Lies einfach nochmal die erste Antwort.
« Letzte Änderung: 28.10.07, 11:47:43 von JoSsiF »

Na dann versuche ich es mal so:

Ich speichere die Captcha-"Lösungen" nicht in einem Array, sondern trenne die Endung ".jpg" vom Rest des Dateinamens, welches von glob ausgelesen und von $rd ausgelost wurde und stelle damit den Vergleich an. Somit ist der hinterlegte Wert immer gleich dem Bild;

so richtig?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Keine Ahnung. Du hast noch nie erwähnt, wie deine Dateien heißen.

Mach dir doch einfach ein assoziatives Array mit dem Dateinamen als Key und dem Code als Wert. Damit hast du die Zuordnung. Dann globst du dein Verzeichnis, wählst eine Datei per random aus und sprichst damit das Array an, um den Code zu bekommen...  ():-)

Habs jetzt mal so gemacht, bevor du gepostet hattest:

 

<?php $rd rand(0,7);
             
$pics glob("./gb/*.jpg");
             
$wert=substr($pics[$rd], 5, -4);
             
?>

         <img src="<?php echo $pics[$rd]; ?>" alt="Code">
.
.
.
.
.
.
.
<?php
              
if(isset($gbsubmit)){
              if(
$codefeld == $wert){...}
              else{...};

.
.
.

?>

Nehmen wir an, ein Bild hat den Inhalt "rh3et", so heißt das Bild rh3et.jpg

 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Nehmen wir an, ein Bild hat den Inhalt "rh3et", so heißt das Bild rh3et.jpg

Sehr clever. Jetzt brauchen die Bots gar nicht mehr das Bild entschlüsseln, sondern nur noch im Quellcode nachschauen, wie das Bild heißt ;D

Schön - aber funktionieren müsste es dennoch oder?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Jedenfalls hast du eine Zuordnung ... ;)

Gut, das wollte ich hören, denn nun glaube ich, dass mein Server es verlernt hat, zu rechnen. Es erschien mir ja bei meiner allerersten Variante schon sehr merkwürdig, dass es in einem Gästebuch funktioniert, im anderen jedoch nicht. Und genau vor diesem Problem stehe ich jetzt wieder. Probies am besten selbst hier aus. 


« Kontaktformular -> Mehr Sicherheit durch Captcha ?Problem mit Blaze Ftp »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
PHP
PHP steht für Personal Home Page und ist eine Skriptsprache die meist verwendet wird zur dynamischen Erzeugen von Internetseiten. PHP zeichnet sich durch die weite D...

Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet einen unkompilierten Programm-Code einer Software. Der Quellcode ist meist in einer der verbreiteten Programmierspra...

Unicode
Ein Unicode ist ein "Einheitsschlüssel", der als internationaler Standard gilt. Unicode ist ein digitaler Zeichensatz zur Darstellung von weitestgehend jedem Schrift...