Forum
Tipps
News
Menu-Icon

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Du hast ja richtigerweise nur einen Teil des Codes gepostet, deswegen frag ich zur Sicherheit nochmal ran: Die Daten aus dem Formular holst du aber schon per $_POST[] bzw. $_REQUEST[] oder?

Ja, Guckst du hier, nochmal etwas mehr code:

<form action="gbuch.php" method="post">
           <table cellpadding="5" cellspacing="5" border="0">
            <tr><td>Name: </td><td><input type="text" name="name"></td></tr>
            <tr><td>Email: </td><td><input type="text" name="mail"></td></tr>
            <tr><td>Zahlencode:</td><td><?php $rd rand(0,7);
             
$pics glob("./gb/*.jpg");
             
$wert=substr($pics[$rd], 5, -4);
             
?>

         <img src="<?php echo $pics[$rd]; ?>" alt="Code"></td></tr><tr><td></td>
         <td><input type="text" name="codefeld" ></td></tr>
            <tr><td>Homepage: </td><td><input value="http://www." type="text" name="hp"></td></tr>
            <tr><td>Eintrag: </td><td><textarea name="eintrag" rows="10" cols="35"></textarea></td></tr>
            <tr><td></td><td><input type="submit" name="gbsubmit" value="Eintragen"><input value="Reset" type="reset" name="reset"></td></tr>
           </table>
          </form>
           <br>
          <?php
              
if(isset($gbsubmit)){
              
$codeeingabe $_REQUEST[&#39;codefeld&#39;];
              
if($codeeingabe == $wert){
              
$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;);
          
?>

PS: Warum gibt es eig beim Beitrag verfassen keinen Code-Button?

 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Jetzt fällt's mir auf...

Du bist'n ganz schöner Witzbold. Du lässt den armen Nutzer einen Code eingeben und vergleichst diesen mit einer Zeichenkette, die du NACH dem Submit nochmal neu per random generierst. Deswegen klappt's auch nur manchmal, aber dann doch eher selten.

Na denn...

greez 8)
JoSsiF

Da kann ich dir grad nich wirklich folgen, deshalb liste ich es mal hier in Textform auf:

1)Es wird eine Zahl zwischen 0 und 7 generiert ($rd)
2)Verzeichnis wird durchsucht und im Array abgespeichert (8 Elemente)
3)Es wird ein Wert zum Vergleich mit der EIngabe hergestellt, und zwar wird der Bildname, das sich hinter der ausgelosten Zahl ($rd) im array $pics verbirgt, geteilt, sodass eine Zeichenkette übrigbleibt ($wert)
4)Es wird ein Bild angezeigt, und zwar genau das Bild, welches sich hinter derselben Zahl im array verbirgt wie oben beim erstellen des Wertes. Somit ist doch - wie ich meine - das Bild was angezeigt wird gleich dem Wert, der     erzeugt wurde.
5)Der String wird geholt und in $codeeingabe gespeichert
6)Nun wird der Eingabestring mit dem´oben hinterlegten Wert verglichen.

Ich meine doch, so ist es richtig, und wenn du meinst nein, berichtige den Text doch bitte, ich versteh sonst nich, was du meinst.

 

Zitat
die du NACH dem Submit nochmal neu per random generierst.

Nach dem Submit sehe ich nichts, wo was generiert wird...

Ich weise aber nochmals darauf hin, dass es mich gewundert hat, dass  es bei Version Nr. 1 auch nich wie erwartet funktioniert hat.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Ich meine doch, so ist es richtig, und wenn du meinst nein, berichtige den Text doch bitte

Nö, da könnte ja jeder kommen ;D

Ich versuch's nochmal:

Das Skript ruft sich beim Absenden selber neu auf. Es gibt da einen If-Block, der nur NACH dem Absenden aufgerufen wird, denn so hast DU das programmiert. Richtig soweit, denn es soll ja nichts verarbeitet werden, wo nichts zu verarbeiten ist.

Bringen wir mal den zufällig generierten Wert ins Spiel. Der wird dummerweise in einem Teil des Skripts gebildet, der IMMER aufgerufen wird. Was passiert?

(1) Das Formular lädt, ein Captcha wird zufällig ausgewählt und angezeigt (es wird NOCH NICHTS verarbeitet)

(2) Das Formular wird abgeschickt. Der User hat einen Code eingegeben, der jetzt ausgewertet wird. Aber womit wird er denn verglichen? Mit einem NEU generierten Zufallswert!

Klar soweit?

greez 8)
JoSsiF

Jetzt verstehe ich so langsam, was du meinst, ich schau mal eben nach einer Lösung.
Habe das jetzt mal ein wenig umbebaut und herausgefunden, dass ich $rd im zweiten Teil nicht mehr gebrauchen kann (Wie du schonn sagtest) Doch wie komme ich nun an meine Zahl ran? Guck dir das hier nochmal an, is doch im Grunde der gleiche Sachverhalt und sollte somit das gleiche Problem verursachen, oder?

<?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="submit" value="Eintragen" name="absenden">

         <?php
    
if(isset($absenden)){
         if(
$codefeld == $werte[$rd]){
    
.....}
         else {echo
"<b>Falscher Zahlencode!</b><br><br>";}
         }
« Letzte Änderung: 30.10.07, 06:58:45 von Dark_Dog »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
is doch im Grunde der gleiche Sachverhalt und sollte somit das gleiche Problem verursachen, oder?

Wie wär's, wenn du tatsächlich mal 'ne Änderung im Code vornimmst, anstatt dich im Kreis zu drehen? ;D

Jaja, habe rausgefunden, dass ich $rd im 2ten teil nicht mehr verwenden kann, da es sonst beim posten neu generiert wird. Nun gibt es da 2 Dinge:

1)Wieso geht es beim anderen Script
2)Wie kann ich dennoch an meine zahl rankommen, soll ich sie vllt. in einer DB oder Textdatei-abspeichern?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
1)Wieso geht es beim anderen Script

Vielleicht Zufall. Du hattest glaub ich auch weniger Werte drin, damit hast du 'ne höhere Chance, dass derselbe Wert wiederkommt.

2)Wie kann ich dennoch an meine zahl rankommen, soll ich sie vllt. in einer DB oder Textdatei-abspeichern?

Das wäre aber ein ziemlicher Umweg, wenn auch denkbar. Ich würd's über eine Session machen. Aber da du ja den Captcha-Code im Quellcode bereits mitlieferst, nämlich über den Bildnamen, könntest du theoretisch auch gleich noch ein Hidden Field zum Durchschleifen des Codes verwenden ;D

Hmmm, da das durchaus noch unerfahrenes Gebiet ist, werde ich mir wohl was ganz anderes Einfallen lassen müssen...
Damit hätte sich das Thema hier erledigt...


« 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!
Datenbank
Eine Datenbank (DBS), im englischen database, ist eine strukturierte Datensammlung und fungiert wie ein "digitales Archiv". Datenbanken dienen der effizienten Aufbewahrun...

Datenkompression
Siehe komprimieren. ...

Datenrate
Die Datenrate, oft auch als Datenübertragungsrate oder Datentransferrate bezeichnet, gibt an, wie viele Daten in einer bestimmten Zeiteinheit (meistens pro Sekunde) ...