Ich bau mir nen Rechen-Captcha

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #31
    Original geschrieben von TobiaZ
    Nett, aber inzwischen hat er ganz andere Probleme. Und mit einem Passwort hat das ganze nie wirklich was zu tun gehabt, warum er nicht direkt sein vorhaben beschrieben hat? Keine Ahnung.
    OffTopic:
    ich hatte den ganzen verlauf nicht ganz verfolgt
    Gruß
    Uzu

    private Homepage

    Kommentar


    • #32
      Mach mal im Erfolgsfall (im else-Zweig) keine Weiterleitung auf die Datei selber, sondern gib eine Meldung aus und brich ab:
      PHP-Code:
      if(isset($_POST['send']))
      {
          if(
      $_SESSION['resultat'] != $_POST['code'])
          {
              echo 
      "Der Code stimmt nicht überein,bitte noch mal!<br>
                  <a href=\"captcha.php\">Zurück</a>"
      ;
              exit();
          }
          else
          {
              die(
      'Text ist korrekt');
          }

      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #33
        Sowohl bei if, als auch bei else leitest du den User auf captcha.php weiter.

        Kommentar


        • #34
          Ich leite doch im if Zweig nicht auf die captcha.php weiter das ist nur ein Zurück Link wenn die Fehlermeldung kommt das der Code nicht passt!

          Ich kann mir nicht erklären warum das nicht geht. Den Vergleich mache ich richtig und in der SESSION Variable steht auch der Wert der sol,darum das echo. Doch egal was ich mache es kommt immer die Meldung der Code stimmt nicht!
          PHP-Code:
          <?php
          $_SESSION
          ['resultat'] = round($resultat);

          echo 
          $_SESSION['resultat'];

          if(isset(
          $_POST['send']))
          {
              if(
          $_SESSION['resultat'] != $_POST['code'])
              {
                  echo 
          "Der Code stimmt nicht überein,bitte noch mal!<br>
                      <a href=\"captcha.php\">Zurück</a>"
          ;
                  exit();
              }
              else
              {
                  die(
          'Der Code ist Ok');
              }
          }
          ?>
          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

          Kommentar


          • #35
            Kann ja sein, dass du mich ignorierst, aber nur weil du jetzt den Namen einer Variable geändert hast, heißt das ja noch lange nicht, dass sie auch vorhanden ist.

            Wo kommt nun $resultat her?

            session_start() hast du ja sicher nur ausgeblendet.

            Kommentar


            • #36
              Hier mal der komplette Code!

              So die Sache ist die ich ignoriere dich doch nicht und die Variable existiert auch sonst hätte error_reporting ja was ausgegeben.

              Und wenn ich mir die SESSION Variable mit echo ausgeben lasse zeigt die mir genau den Wert den die Gleichung am Ende auch ergibt,nur der Vergleich stimmt dann nicht bzw dort läuft was schief! Ich bekomme auch keinerlei Fehler angezeigt!
              PHP-Code:
              <?php
              error_reporting
              (E_ALL);
              session_start();
              //Ersten Gleichungsteil erstellen
              function generate_teil1($length1 2)
              {
                  
              $char1 array_merge(
                      
              range(19)
                  );

                  
              shuffle($char1);

                  return 
              implode(''array_slice($char10$length1));
              }
              $teil1 generate_teil2(rand(2,2));
              //Zweiten Gleichungsteil erstellen
              function generate_teil2($length2 2)
              {
                  
              $char2 array_merge(
                      
              range(19)
                  );

                  
              shuffle($char2);

                  return 
              implode(''array_slice($char20$length2));
              }
              $teil2 generate_teil2(rand(2,2));
              //Hiererstellen wir den zufälligenen Gleichungsoperator
              function generate_operator($length_op 1)
              {
                  
              $array1 = array('+');
                  
              $array2 = array('*');
                  
                  
              $operator array_merge($array1,$array2);

                  
              shuffle($operator);

                  return 
              implode(''array_slice($operator0$length_op));
              }
              $op_nutz generate_operator();

              //Gleichungsergebnis berechen und anschliesend in einer Session Variable speichern
              switch($op_nutz){
                  case 
              '+'$resultat $teil1 $teil2; break;
                  case 
              '*'$resultat $teil1 $teil2; break;
              }

              $_SESSION['resultat'] = round($resultat);

              echo 
              $_SESSION['resultat'];

              if(isset(
              $_POST['send']))
              {
                  if(
              $_SESSION['resultat'] != $_POST['code'])
                  {
                      echo 
              "Der Code stimmt nicht überein,bitte noch mal!<br>
                          <a href=\"captcha.php\">Zurück</a>"
              ;
                      exit();
                  }
                  else
                  {
                      die(
              'Der Code ist Ok');
                  }
              }
              ?>
              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

              Kommentar


              • #37
                Dann wollen wir mal!

                Ich zähl mal alles auf, was mir so auffällt.

                PHP-Code:
                $teil1 generate_teil2(rand(2,2)); 
                Sicher sollte hier generate_teil1() aufgerufen werden. Der Parameter ist natürlich schwachsinn und könnte gleich 2 lautet, aber das ist sicher nur zum Testen (warum auch immer).

                PHP-Code:
                $char1 array_merge(range(19)); 
                Ohne Sinn!

                Die Funktionen generate_teil1() und generate_teil2() sind vom Ergebnis identisch. Also eine überflüssige redundundanz. Die Benennung der Variablen in der Funktion zeigt, dass du das Funktionen-Konzept noch nicht verstanden hast. Aber wie gesagt, lösch einfach eine davon.

                PHP-Code:
                $array1 = array('+');
                    
                $array2 = array('*');
                    
                    
                $operator array_merge($array1,$array2); 
                Ohne Sinn!

                Eigentlich ist der komplette Inhalt der Funktion überflüssig, was zeigt, dass du rand() immer noch nicht verstanden hast. Einfacher:
                PHP-Code:
                $teil1 rand (11,99); // herzlichen Glückwunsch! 
                function generate_operator($length_op = 1)
                Wie lang soll ein Rechenoperator sein, wenn er nicht 1 ist???

                if(isset($_POST['send']))
                Prüf doch lieber auf den Index 'code'. Den verwendest du nämlich ungeprüft.

                Jetzt der eigentliche Knackpunkt, ein graverender Fehler im Konzept, bzw. in der Logik:

                Gesetz den Fall, dass der User irgendwoher die Rechenaufgabe kennt (Du zeigst sie nirgends an), gehst du davon aus, dass er sie an die Datei sendet (wo ist das Formular), generierst dann ein völlig neues zufälliges Ergebnis $result und vergleichst dieses mit dem Erratenen, bzw. veralteten Ergebnis des Users (falls es das überhaupt gibt).

                Hoffe dein Fehler ist klar geworden, so dass du uns die ausgebesserte Version später zeigen kannst.
                Zuletzt geändert von TobiaZ; 20.05.2008, 17:00.

                Kommentar


                • #38
                  Die beiden Funktionen ergeben zwei verschiedene Werte zum rechnen!
                  Ich lege mich auf einen Rechenoperator + jetzt fest!

                  Ich habe mir das Ergebnis zum Test 2 mal ausgeben lassen. Im Formular und im Quellcode und es steht der gleiche Wert drin aber wenn ich es vergleiche beim Button Klick dann funktioniert das nicht!

                  Es läuft zwar was falsch aber an den funktionen kann das doch bald net liegen!

                  PHP-Code:
                  <?php
                  error_reporting
                  (E_ALL);
                  session_start();
                  //Ersten Gleichungsteil erstellen
                  function generate_teil1($length1 4)
                  {
                      
                  $char1 array_merge(
                          
                  range(19)//Nur Zahlen 1-9 also keine 0
                      
                  );

                      
                  shuffle($char1);

                      return 
                  implode(''array_slice($char10$length1));
                  }
                  $teil1 generate_teil1(rand(2,4));//Erster Gleichungsteil min 2 Zeichen max. 4 Zeichen

                  //Zweiten Gleichungsteil erstellen
                  function generate_teil2($length2 4)
                  {
                      
                  $char2 array_merge(
                          
                  range(19)//Nur Zahlen 1-9 also keine 0
                      
                  );

                      
                  shuffle($char2);

                      return 
                  implode(''array_slice($char20$length2));
                  }
                  $teil2 generate_teil2(rand(2,4));//Zweiter Gleichungsteil min 2 Zeichen max. 4 Zeichen

                  $_SESSION['resultat'] = $teil1 $teil2;//Ergebnis der Gleichungsteile errechnen und 
                  //in eine SESION Variable schreiben

                  echo $_SESSION['resultat'];//Testausgabe auch im Formular noch mal enthält selbes Ergebnis

                  if(isset($_POST['send']))
                  {
                      if(
                  $_SESSION['resultat'] != $_POST['code'])
                      {
                          echo 
                  "Der Code stimmt nicht überein,bitte noch mal!<br>
                              <a href=\"captcha.php\">Zurück</a>"
                  ;
                          exit();
                      }
                      else
                      {
                          die(
                  'Der Code ist Ok');
                      }
                  }
                  ?>

                  <form action="<?php echo $_SERVER['PHP_SELF'?>" method="post">
                  <?php echo $teil1." + ".$teil2." = ".$_SESSION['resultat']; ?><br />
                  <input type="text" name="code">
                  <input type="submit" name="send" value="Checken">
                  </form>
                  Zuletzt geändert von litterauspirna; 20.05.2008, 17:41.
                  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

                  Kommentar


                  • #39
                    Die beiden Funktionen ergeben zwei verschiedene Werte zum rechnen!
                    Ja, aufgrund des Zufalls. Wenn du eine der Funktionen zwei mal aufrufst, ergibt das auch zwei verschiedene Werte. Also warum zwei Funktionen definieren?

                    Ich habe mir das Ergebnis zum Test 2 mal ausgeben lassen. Im Formular und im Quellcode und es steht der gleiche Wert drin aber wenn ich es vergleiche beim Button Klick dann funktioniert das nicht!
                    Ich dachte, das hätte ich dir recht ausführlich beschrieben. Aber anscheinen mangelt es dir so stark an Grundlagen, dass dir nicht mal bekannt ist, dass nach dem Absenden des Formulars, die Datei erneut ausgeführt wird, uns somit natürlich auch eine neue Rechenaufgabe samt Ergebnis generiert wird.

                    Meine ganzen anderen Tipps befolgst du sicher auch noch.

                    Kommentar


                    • #40
                      Das mit den Funktionen leuchtet mir ein und habe ich korrigiert.

                      Aber warum ist das hier Sinnfrei?

                      PHP-Code:
                      <?php
                      $char1 
                      array_merge(
                              
                      range(19)//Nur Zahlen 1-9 also keine 0
                          
                      );
                      ?>
                      Hier sage ich es sollen nur Zahlen von 1-9 in Betracht gezogen werden sproch es darf keine 0 vorkommen! Warum ist das ohne Sinn?

                      Und ich sage ja auch beim klick auf den Button soll er prüfen oder Wert in der Session Variablen mit dem übereinstimmt der im Textfeld steht bzw. ist das nicht soll eine Fehlermeldung kommen!

                      Und zum Test lasse ich mir nur im Formular den Wert der Session ausgeben!

                      Hier der code!
                      PHP-Code:
                      <?php
                      error_reporting
                      (E_ALL);
                      session_start();
                      //Funktion um Gleichungsteile zu erstellen
                      function generate_gleichung($length1 4)
                      {
                          
                      $char1 array_merge(
                              
                      range(19)//Nur Zahlen 1-9 also keine 0
                          
                      );

                          
                      shuffle($char1);

                          return 
                      implode(''array_slice($char10$length1));
                      }

                      //Ersten Gleichungsteil erstellen
                      $teil1 generate_gleichung(rand(2,4));//Erster Gleichungsteil min 2 Zeichen max. 4 Zeichen

                      //Ersten Gleichungsteil erstellen
                      $teil2 generate_gleichung(rand(2,4));//Erster Gleichungsteil min 2 Zeichen max. 4 Zeichen

                      $_SESSION['resultat'] = $teil1 $teil2;//Ergebnis der Gleichungsteile errechnen

                      if(isset($_POST['send']))
                      {    
                          if(
                      $_SESSION['resultat'] != $_POST['code'])
                          {
                              echo 
                      "Der Code stimmt nicht überein,bitte noch mal!<br>
                                  <a href=\"captcha.php\">Zurück</a>"
                      ;
                              exit();
                          }
                          else
                          {
                              die(
                      'Der Code ist Ok');
                          }
                      }
                      ?>

                      <form action="<?php echo $_SERVER['PHP_SELF'?>" method="post">
                      <?php echo $teil1." + ".$teil2." = ".$_SESSION['resultat']; ?><br />
                      <input type="text" name="code">
                      <input type="submit" name="send" value="Checken">
                      </form>
                      Es wird mir ja auch kein Fehler ausgegeben!
                      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

                      Kommentar


                      • #41
                        Aber warum ist das hier Sinnfrei?
                        Hier sage ich es sollen nur Zahlen von 1-9 in Betracht gezogen werden sproch es darf keine 0 vorkommen! Warum ist das ohne Sinn?
                        range() liefert genau 1 Array zurück. Ein einzelnes Array brauchst du wohl kaum mit sich selbst zu mergen.

                        Und ich sage ja auch beim klick auf den Button soll er prüfen oder Wert in der Session Variablen mit dem übereinstimmt der im Textfeld steht bzw. ist das nicht soll eine Fehlermeldung kommen!
                        Ach ja?? Wo?

                        Wie liest du eine Text? Von oben nach unten, oder?

                        Also passiert folgendes:

                        - rechenaufgabe + ergebnis wird generiert
                        - (wenn post-daten vorhanden sind, wird geprüft, ist hier aber nicht der fall)
                        - formular angezeigt
                        - [user füllt formular aus und sendet ab]
                        - rechenaufgabe + ergebnis wird generiert
                        - diesmal sind postdaten vorhanden. die stimmen aber natürlich nicht mit dem neuen ergebnis überein

                        Und zum Test lasse ich mir nur im Formular den Wert der Session ausgeben!
                        Und dabei bemerkst du nicht, dass der sich beim "neuladen" geändert hat?
                        EDIT:
                        btw: poste mal bitte nen Link, vielleicht kann ichs dir dann verständich machen.
                        Zuletzt geändert von TobiaZ; 20.05.2008, 18:25.

                        Kommentar


                        • #42
                          Ich bitte um entschuldigung!

                          Manchmal bin ich echt eine Brine!

                          Ich brauchte den Teil mit der Prüfung beim klick vor den ganzen Teil wo die Gleichung generiert wird setzen und nun klappt es!

                          Danke vielmals!
                          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

                          Kommentar


                          • #43
                            [WARNUNG]
                            PHP_SELF macht das Script anfällig für XSS Attacken
                            [/WARNUNG]
                            Wir werden alle sterben

                            Kommentar


                            • #44
                              Ich weis.

                              Aber was kann ich dafür nehmen was den gleichen Zweck erfüllt?
                              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

                              Kommentar


                              • #45
                                print_r($_SERVER);

                                Kommentar

                                Lädt...
                                X