[PHP] Captcha in GB einbauen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von riverlove, 14. Januar 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 14. Januar 2009
    Captcha in GB einbauen

    Hey. Benutze auf einer Seite das Guestbox 0.6. Vll kennens ja einige von euch.. ist aber auch nicht so wichtig.
    Da in den letzten Wochen wieder viel Spam dort gelandet ist, wollte ich nun en Captcha reinschalten.
    Hab gegoogelt und folgendes Captcha Script gefunden:
    Zahlen Captcha PHP Script - Captcha Tutorial - stoppt-den-spam.info

    Nun habe ich das auch alles so gemacht, und zunächst die captcha.php in mein Formular eingefügt. Bis dahin klappts, also er zeigts an. Nun muss er natürlich überprüfen ob das eingegebene Captcha stimmt.

    Auf der Seite wird mir folgender Code gegeben:
    EINBAU INS SCRIPT
    Code:
    <?php
    session_start();
    if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
    unset($_SESSION['captcha_spam']);
    
    //
    //
    //Hier kommt das ursprüngliche Script hin.
    //
    //
    
    }
    ?> 
    
    So nun habe ich das in die gbeingabe.php reingehauen:
    Code:
    <SCRIPT LANGUAGE="JavaScript">
    function ueberpruefe()
     {
     if (document.sms.name.value == "")
     {
     alert('Bitte gebe deinen Namen ein!');
     document.sms.name.focus(); // Damit setzt sich der Cursor automatisch da ins Feld rein, wo der Fehler ist
     return false;
     }
     if (document.sms.name.value == "Name")
     {
     alert('Bitte gebe deinen Namen ein!');
     document.sms.name.focus(); // Damit setzt sich der Cursor automatisch da ins Feld rein, wo der Fehler ist
     return false;
     }
     if (document.sms.mail.value == "Email-Adresse")
     {
     alert('Wenn du keine Email-Adresse angeben willst, kannst du das Feld einfach leer lassen. ;-)');
     document.sms.mail.focus(); // Damit setzt sich der Cursor automatisch da ins Feld rein, wo der Fehler ist
     return false;
     }
    
     if (document.sms.text.value == "")
     {
     alert('Bitte gebe einen Text ein!');
     document.sms.text.focus(); // Damit setzt sich der Cursor automatisch da ins Feld rein, wo der Fehler ist
     return false;
     }
     if (document.sms.text.value == "Kommentar")
     {
     alert('Bitte gebe einen Text ein!');
     document.sms.text.focus(); // Damit setzt sich der Cursor automatisch da ins Feld rein, wo der Fehler ist
     return false;
     }
    }
    </SCRIPT>
    <?
    //HIER IST DAS TEILSTÜCK VOM CAPTCHA:
    session_start();
    if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
    unset($_SESSION['captcha_spam']);
    //BIS HIER 
    
    if (isset($_POST['gesendet'])) {
     if ((!empty($_POST['name'])) && (!empty($_POST['text'])))
     {
     $betreff = "Guestbook-Entry!";
     $inhalt = $_POST['name']." (".$_POST['mail']." - ".$_POST['url'].") hat dir folgenden Kommentar geschrieben:\n\n".$_POST['text'];
     $headers = "From: Guestbook-Entry ";
     if (@mail($empfaenger, $betreff, $inhalt, $headers)) {
     echo "";
     } else {
     echo "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><b>Beim Versenden einer Email an den Webmaster ist ein Fehler aufgetreten.</b></font><br>";
     }
    
     $nummer = 0;
     $datei=fopen($gbdaten,"r");
     $all='';
     while (feof($datei) == 0):
     $nummer++;
     $data = fgets($datei,1000000);
     if ($name != $nummer)
     if ($nummer < $anzahllogs)
     $all = $all . $data;
     endwhile;
     fclose($datei);
    
     $ip=getenv("REMOTE_ADDR");
     $all = time()."|||".$_POST['name']."|||".$_POST['mail']."|||".$_POST['url']."|||".preg_replace("/(\015\012)|(\015)|(\012)/","<br />",htmlentities($_POST['text']))."|||".$ip."|||"."\n".$all;
     $all = chop($all);
     $all = trim($all);
     $datei = fopen($gbdaten,"w");
     fputs($datei,$all);
     fclose($datei);
     echo "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\">Vielen Dank =)</font>";
     } else {
     echo "Bitte Name und Kommentarfeld ausfüllen!";
     }
    } else {
    }
    ?>
    <link rel="stylesheet" href="gb_style.css" type="text/css">
    
    <FORM algin="center" action="<?=$_SERVER['PHP_SELF']?>" name="sms" METHOD="POST" onSubmit="return ueberpruefe();">
     <table align="center">
     <tr>
     <td class=normal width=98>Name</td>
     <td width="179">
     <input onFocus="cleanit(this)" type="text" name="name" value="" maxlength="30">
     </td>
     </tr>
     <tr>
     <td class=normal width=98>Email-Adresse</td>
     <td width="179">
     <input onFocus="cleanit(this)" type="text" name="mail" value="" maxlength="60">
     </td>
     </tr>
     <tr>
     <td class=normal width=98>Homepage</td>
     <td width="179">
     <input type="text" name="url" value="http://">
     </td>
     </tr>
     <tr>
     <td colspan=2>
     <textarea onFocus="cleanit(this)" name="text" cols="35" rows="4" wrap="VIRTUAL"></textarea>
     </td>
     </tr>
     <tr>
     <td><img src="captcha/captcha.php" border="0" name="Code" title="Sicherheitscode"></td>
     <td><input type="text" name="sicherheitscode" size="5"></td>
     </tr>
     <tr>
     <td colspan=2>
     <input class="button" type="submit" name="gesendet" value="eintragen">
     <input class="button" type="reset" name="reset" value="l&ouml;schen">
     <input onClick="window.open('./smilies.php','Name','toolbar=no,status=no,menubar=no,width=95,height=145')" type="button" name="smilies" value=":-)">
     </td>
     </tr>
     </table>
    </form>
    

    So hochgeladen.. jetzt gibt er mir bevor irgendwas kommt direkt den Fehler:
    " Parse error: syntax error, unexpected $end in /usr/export/www/vhosts/xxxxxxx/gb/gbeingabe.php on line 129 (das ist die letzte zeile. hab die obersten zeilen beim copy paste weggelassen, wo nur kommentare standen)

    Also ich als Laie würde jetzt sagen, da ich ja session_start() aufrufe muss die auch irgendwann beendet werden. Wird sie aber nicht, darum meckert er rum.. Aber im Prinzip hab ich kein Plan von Php, also wer ne Lösung für mein Prob hat bitte schnell posten Danke euch
     
  2. 14. Januar 2009
    AW: Captcha in GB einbauen

    fehlt vielleicht irgendwo eine "}" musst mal durchschaun....

    edit:
    jop, noch "}" unten dran, dann gehts.
    im Teilstück vom Captcha ist noch ein if
     
  3. 14. Januar 2009
    AW: Captcha in GB einbauen

    1. Wieso benutzt du Short-Open PHP Tags? ("<?")

    2. session_start(); muss stehen, bevor irgendwelche HTML-Ausgaben gemacht werden, sonst wirst du einen "headers already sent"-Fehler bekommen.

    3. Dein Fehler bedeutet, dass irgendwo eine geschlossene geschweifte Klammer ("}") fehlt.
    Wenn du korrekt einrückst, sieht man es sofort:
    PHP:
    <? php
    if(isset( $_SESSION [ 'captcha_spam' ]) AND  $_POST [ "sicherheitscode" ] ==  $_SESSION [ 'captcha_spam' ]){
        unset(
    $_SESSION [ 'captcha_spam' ]);
        
    //BIS HIER 
        
        
    if (isset( $_POST [ 'gesendet' ])) {
            if ((!empty(
    $_POST [ 'name' ])) && (!empty( $_POST [ 'text' ])))
            {
                
    $betreff  "Guestbook-Entry!" ;
                
    $inhalt  $_POST [ 'name' ]. " (" . $_POST [ 'mail' ]. " - " . $_POST [ 'url' ]. ") hat dir folgenden Kommentar geschrieben:\n\n" . $_POST [ 'text' ];
                   
    $headers  "From: Guestbook-Entry " ;
                if (@
    mail ( $empfaenger $betreff $inhalt $headers )) {
                    echo 
    "" ;
                } else {
                    echo 
    "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><b>Beim Versenden einer Email an den Webmaster ist ein Fehler aufgetreten.</b></font><br>" ;
                }
        
                
    $nummer  0 ;
                
    $datei = fopen ( $gbdaten , "r" );
                
    $all = '' ;
                while (
    feof ( $datei ) ==  0 ):
                    
    $nummer ++;
                    
    $data  fgets ( $datei , 1000000 );
                    if (
    $name  !=  $nummer )
                    if (
    $nummer  $anzahllogs )
                    
    $all  $all  $data ;
                endwhile;
                
    fclose ( $datei );
        
                
    $ip = getenv ( "REMOTE_ADDR" );
                
    $all  time (). "|||" . $_POST [ 'name' ]. "|||" . $_POST [ 'mail' ]. "|||" . $_POST [ 'url' ]. "|||" . preg_replace ( "/(\015\012)|(\015)|(\012)/" , "<br />" , htmlentities ( $_POST [ 'text' ])). "|||" . $ip . "|||" . "\n" . $all ;
                
    $all  chop ( $all );
                
    $all  trim ( $all );
                
    $datei  fopen ( $gbdaten , "w" );
                
    fputs ( $datei , $all );
                
    fclose ( $datei );
                echo 
    "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\">Vielen Dank =)</font>" ;
            } else {
                echo 
    "Bitte Name und Kommentarfeld ausfüllen!" ;
            }
        } else {
        }
    ?>
     
  4. 14. Januar 2009
    AW: Captcha in GB einbauen

    merci merci merci
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.