Ankündigung

Einklappen
Keine Ankündigung bisher.

reCaptcha in Formular einbinden - eigentlich kein Problem?

Einklappen

Neue Werbung 2019

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

  • reCaptcha in Formular einbinden - eigentlich kein Problem?

    Hallo liebe Forenmitglieder,
    ich stehe vor einem -für mich unüberwindbaren- Problem mit reCaptcha und PHP. Da ich mich noch nicht sehr lange mit PHP beschäftige, habe ich zwar Fortschritte gemacht aber es reicht wohl noch lange nicht aus. Die eingetragenen Daten im Formular werden auf Vollständigkeit geprüft und auch versendet. Allerdings wird reCaptcha einfach übergangen, das heißt, es ist egal, ob etwas eingetragen wird oder nicht. Das Formular wird trotzdem versendet. Ich habe schon in diversen Foren und auch bei Google Groups nach Lösungen gesucht aber nichts exaktes gefunden. Möglicherweise hilft es, so las ich, einen "CALL" einzufügen aber da ich eben noch am Anfang stehe, weiß ich weder wie, noch wo.

    Kurz zu den Codes: ich habe ein Kontaktformular namens form.php. Dieses wird per include in die ausführende Datei PhpFormMail4.php eingelesen und dort weiter verarbeitet. Das Formular funktioniert weitestgehend, nicht aber "reCaptcha". Und das ärgert mich sehr, weil ich seit 3 Tagen an dieser, für Profis sicher "Kleinigkeit" sitze. Daher poste ich auch in "Fortgeschritten", weil ich die Hoffnung habe, Hilfe zu bekommen.

    Zuerst einmal der Code aus der form.php.

    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Strousberg | Development - Schreiben Sie uns</title>
    <link rel="stylesheet" href="css/styles.css" type="text/css" media="screen" />
           
    <script type="text/javascript">
    var RecaptchaOptions = {
    theme : 'white',
    lang : 'de'
    };
        </script>
    </head>
    
    <body>
    
    <form name="kontaktform" id="kontaktform" method="post" action="?send=1">
    
    <label for="anrede" class="plabel2">* Anrede:</label>
    <select name="anrede" class="fullcontent" id="anrede">
    <option value="Firma" selected="selected">Firma</option>
    <option value="Herr">Herr</option>
    <option value="Frau">Frau</option>
    </select>
    
    <label for="name" class="plabel2">* Name:</label>
    <input name="name" type="text" id="name" size="41" value="<?PHP ECHO $_POST[name]; ?>"/>
    		
    <label for="email" class="plabel2">* e-Mail:</label>
    <input name="email" type="text" id="email" size="41" value="<?PHP ECHO $_POST[email]; ?>"/>
    				
    <label for="telefon" class="plabel2">* Telefonnummer:</label>
    <input name="telefon" type="text" id="telefon" size="41" value="<?PHP ECHO $_POST[telefon]; ?>"/>
                    
    <label for="anfrage" class="plabel2">* Ihre Anfrage:</label>
    <textarea name="anfrage" cols="38" rows="10" id="anfrage"><?PHP ECHO $_POST[anfrage]; ?></textarea>
    
    <div id="recaptcha_widget_div">							
    <?php
    require_once('recaptchalib.php');
    $publickey = "xxx";
    echo recaptcha_get_html($publickey);
    ?>
    </div>
    <div>
    <input class="submit" type="submit" name="Submit" value="&raquo; Anfrage Versenden" />
    <input class="reset" type="reset" name="Reset" value="&raquo; Felder leeren" />
    </div>
    </form>
    </body>
    </html>
    Das scheint mir noch relativ übersichtlich und einfach. Deswegen habe ich es wohl auch hinbekommen. Laut der Installationsanleitung von reCaptcha, ist jetzt in der ausführenden Datei, direkt zu Beginn, der Aufruf für die recaptchalib.php zu platzieren, was mir aber von daher unlogisch erscheint, weil das Formular an sich ja erst weiter unten aufgerufen wird. Ich ahbe es trotzdem einmal so gemacht wie beschrieben und erhalte nun bei Aufruf der Seite die Nachricht: "The reCAPTCHA wasn't entered correctly. Go back and try it again.(reCAPTCHA said: incorrect-captcha-sol)", was logisch ist, da die reCaptchalib.php ja ganz zu Anfang, also noch bevor sich etwas ausfüllen lässt, aufgerufen wird. Der Code zur PhpFormMail4.php lautet wie folgt:

    PHP-Code:
     <?php
        
    require_once('recaptchalib.php');
        
    $privatekey "yyy";
        
    $resp recaptcha_check_answer ($privatekey,
                        
    $_SERVER["REMOTE_ADDR"],
                        
    $_POST["recaptcha_challenge_field"],
                        
    $_POST["recaptcha_response_field"]);
        if (!
    $resp->is_valid) {
            die (
    "The reCAPTCHA wasn't entered correctly. Go back and try it again." .
                 
    "(reCAPTCHA said: " $resp->error ")");
        }
     
    ?>
     <?php
        $YOUREMAIL 
    "development@strousberg.de";
     
    ?>
     <?PHP
         
    if ($_GET[send] < 1) { 
     
    ?>
     <?php
         
    include "form.php";
     
    ?>
     <?PHP
         
    }
     
    ?>
     <?PHP
        
    if ($_GET[send] == 1) {
                if (
    $_POST[name] == $nil || $_POST[email] == $nil || $_POST[telefon] == $nil || $_POST[anfrage] == $nil)
                        
    $_GET[send] = 2;
        }
        
        if (
    $_GET[send] == 1) {
            
    $comment preg_replace("/\n/","\n<BR>",$_POST[anfrage]);
            
    $to="$YOUREMAIL";
            
    $headers.= "MIME-Version: 1.0\r\n";
            
    $headers.= "Content-type: text/html; ";
            
    $headers.= "charset=iso-8859-1\r\n";
            
    $headers.= "From: $_POST[email]";
            
    $subject "$_POST[telefon]";

            
    $body "<HTML><BODY>
                <b>From : 
    $_POST[name]</b><BR><BR>$comment
                </BODY></HTML>"
    ;

        
    mail($to,$subject,$body,$headers);
     
    ?>
          
                  <table border="0" cellspacing="0" cellpadding="0">
            <tr>
          <td class>"Email gesendet</td>
              </tr>
              <tr>
            <td class><span class="below">Ihre Email ist angekommen. Vielen Dank.</span></td>
              </tr>
            </table>
     <?PHP
         

        if (
    $_GET[send] == 2) {
     
    ?>
                <table border="0" cellspacing="0" cellpadding="0">
              <tr>
           <td class><span style="color: #94A6B0; font-weight: bold; font-size: 12px; margin-left: 122px; position:absolute; top: 420px;">Fehler. Bitte alle Felder ausfüllen.</span></td>
              </tr>
              <tr>
            <td class><span style="color: #94A6B0; font-weight: bold; font-size: 12px; margin-left: 122px; position: absolute; top: 440px;">Es gibt leere Felder. Sie müssen alle Felder ausfüllen.</span></td>
              </tr>
            </table>
     <?php
         
    include "form.php";
     
    ?>
     <?PHP
         
    }
     
    ?>
    Es gibt auch noch eine CSS aber ich möchte das Forum nicht zumüllen und bitte bereits jetzt um Verzeihung, wenn ich nicht richtig eingerückt habe. Es waren lange Nächte, ich bin nicht sehr erfahren und Lust und Konzentration lassen nach.

    Ich hoffe, dass ich hier Hilfe bekommen kann. Herzlichen Dank im Voraus.

  • #2
    Sorry, jetz erstmal unabhängig von deinem Problem aber das ist ganz grausamer Code. Zunächst einmal, wieso überprüfst du auf $_GET[send]? Kann nirgendwo die Variable send im Formular entdecken, außerdem sollte das dann eher so geschrieben werden:
    PHP-Code:
    $blub $_GET['send']; 
    EDIT: Sehe gerade, dass du es als Action übergibst, naja unglücklich würd ich mal sagen. Überprüfe lieber mit POST ob deine Submit-Variable gesetzt wurde.

    Wieso öffnest und schließt du andauernd die PHP-Tags? An den allermeisten Stellen völliger Blödsinn.

    Nun aber zu deinem eigentlichen Problem:
    [...]was mir aber von daher unlogisch erscheint, weil das Formular an sich ja erst weiter unten aufgerufen wird. Ich ahbe es trotzdem einmal so gemacht[...]
    Sieh an, du hast den Fehler doch schon gefunden, wieso probierst du es denn nicht mal wenn es dir unlogisch erscheint?

    Kommentar


    • #3
      Hallo Crunch und vielen Dank für deine Antwort. Na ja, wie gesagt, ich stehe so ziemlich am Anfang. Das Script habe ich aus diversen anderen zusammen gebaut, um erste Erfahrungen im Livebetrieb zu sammeln. Zugegeben, es sieht grottig aus aber jeder fängt mal klein und ganz mies an. Glaube ich wenigstens.
      Ich hatte schon Resonanz dieser Art befürchtet aber wenn es zu einem Ergebnis kommt, denke ich, dass ich auch mit der Kritik gut leben kann. Darauf lernt man schließlich

      Kommentar


      • #4
        Und zu dem zweiten zitierten Teil: wie bereits geschrieben: ich probiere schon seit einiger Zeit. Mal mit diesem, mal mit jenem, nie aber mit dem Ergebnis, das ich haben möchte.

        Kommentar


        • #5
          Zum Beispiel so:

          PHP-Code:
          if(isset($_POST['Submit')){
              
          // Ueberprüfung des Captchas

          Ich wollte dich auch in keiner Weise angreifen, aber solange du z.B keine HTML-Anweisungen eingibst, ist es nicht nötig, den PHP-Teil zu schließen.
          Naja, ich hoffe es klappt dann jetzt mit dem Captcha, frohes Coden noch

          Kommentar


          • #6
            Zitat von strousberg Beitrag anzeigen
            Und zu dem zweiten zitierten Teil: wie bereits geschrieben: ich probiere schon seit einiger Zeit. Mal mit diesem, mal mit jenem, nie aber mit dem Ergebnis, das ich haben möchte.
            Du vermutest den Fehler glaube ich schon an der richtigen Stelle, hast aber nicht ganz verstanden, was da passiert

            Das Formular wird nicht irgendwo "aufgerufen", wenn es erst einmal abgeschickt wurde, ist der Inhalt von $_POST überall im Script verfügbar. Das Problem ist, dass du die recaptcha-Überprüfung auch machst, wenn gar nichts abgeschickt wurde. Es ist schon sinnvoll, das am Anfang des Skripts zu tun aber nur wenn $_GET['send'] auch 1 ist (oder wie auch immer du überprüfen möchtest, ob das Formular abgeschickt wurde).
            [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
            [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

            Kommentar


            • #7
              Hi, vielen Dank euch beiden erst mal. Ich werde mich noch mal ein wenig austoben. Und ja, die Vermutung, dass ich es nicht verstanden habe, ist vollkommen korrekt. Ich habe es nicht mal im Mindesten verstanden aber ich werde es lernen. Und angegriffen fühle ich mich auch gar nicht. Das war durchaus berechtigte Kritik und das finde ich gut. Ich werde mich also mal wieder ans Eingemachte begeben und berichten, wenn ich durch bin. Oder aber, wenn ich weitere Hilfe brauche.

              Kommentar

              Lädt...
              X