Ankündigung

Einklappen
Keine Ankündigung bisher.

Captcha Problem

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

  • Captcha Problem

    Hallo zusammen,

    ich bin neu hier und komme direkt mal zu meinem Problem.
    Ich bin zur Zeit dabei ein PHP/MySQL Gästebuch, aus reinem Interesse, zu erstellen.

    Ich habe mir da was zusammen ergoogelt und abgeändert. Nun bin ich zur Zeit dabei eine Art Captcha Abfrage in die Erstellung eines Gästebuchpostings einzubauen.
    Ich habe mich hierbei für eine Mathe Aufgabe entschieden, die eine Addition von Random Zahlen beinhaltet.
    Das klappt auch alles soweit so gut. Nun möchte ich, dass wenn ein falsches Ergebnis eingegeben wurde, dass auch angezeigt wird, dass das Ergebnis Falsch sei und der Posting nicht erstellt wird.

    Kann mir jemand bei der Lösung meines Problems helfen?
    Ich geb euch einmal den Quellcode Ausschnit, wo mein Erge bnis überprüft wird, sowie die Rechnung selber und auch einmal mein gesamtes Gästebuch Skript.

    Ich hoffe, dass ihr mir helfen könnt Das wäre echt nett ^^ Ich neige schon zu verzweifeln

    Gruß Galvon

    PS: Dem Helfer meines Problems winkt ein Rapidshare Premium Account der von 24.3 bis zum 24.4 gültig ist und noch unberührt ist

    Rechnung:
    PHP-Code:
    <p>Spamschutzfrage *<br />
    <b>Bitte Rechnen sie folgende Aufgabe:</b> 
    <?php
    $zahl1
    =rand (1,10);
    $zahl2=rand (1,10);
    ?>

    <?php echo $zahl1;?> + <?php echo $zahl2;?>
    <?php
    $ergebnis 
    $zahl1 $zahl2;
    ?>  
     Antwort: 
    <input size="4" name="spam" type="text" />
    Egebnis:
    PHP-Code:
    # Wenn Feld Name und Nachricht nicht leer sind, und Spamfrage falsch beantwortet wurde, dann....
    if ($name != "" && $msg != "" && $spam != $ergebnis) {
    echo 
    'Das von Ihnen eingegebene Ergebnis ist Falsch...'

    # Wenn Feld Name und Nachricht nicht leer sind, und Spamfrage richtig beantwortet wurde, dann speichern...
    if ($name != "" && $msg != "" && $spam == $ergebnis) { 
    Gesamter Quellcode:
    PHP-Code:
    <?php
        session_start
    ();
    // ---------------------------- # Konfiguration # -----------------------------------------------------    
        
    $db_host "localhost";           # Der Datenbank-Host
        
    $db_user "root";                # Der Datenbank-Benutzer
        
    $db_password "";          # Das Passwort für die Datenbank
        
    $db_name "t_gästebuch";              # Der Datenbank-Name

    $conn mysql_connect($db_host,$db_user,$db_password) or die 
    (
    mysql_error()); 
    mysql_select_db($db_name$conn) or die (mysql_error()); 

    $passwort  "123";     # Das Passwort für den Admin
    $mailinfo  "ja";      # email bei Eintrag ? ja oder nein
    $webmaster "email@adresse.de"# wenn bei mailinfo ja steht, dann hier eure email Adresse eintragen 
    $datum date("d.m.Y"); # Das aktuelle Datum für den Eintrag wird hier erstellt
    $zeit date("H:i");    # Die aktuelle Zeit für den Eintrag wird hier erstellt
    // ----------------------------------------------------------------------------------------------------    

    $action = isset($_GET['action']) ? ($_GET['action']) : "";

    // ------------------------------ Admin-Bereich ------------------------------------------ //

    # Wenn auf den Logout Link gecklickt wird, wird hier die Session gelöscht
    if ($action == "logout"){
        
    session_destroy(); 
        
    header("refresh:0;url=gb.php"); 


    $rang $_SESSION['rang'];
    $pass strip_tags($_POST['password']);

    # Wenn das Admin-Passwort falsch eingegeben wurde erscheint eine Fehlermeldung
    if (isset($_POST['submit']) && $pass != $passwort){
    echo 
    "Falsches Passwort!";
    }

    # Wenn das Passwort richtig war, wird der Admin-Rang auf 1 gesetzt und die Session gestartet
    else if (isset($_POST['submit']) && $pass == $passwort){ 
        
    $_SESSION['rang'] = "1"
        
    header("refresh:0;url=gb.php"); 
    }
     
    # --------- Lösch-Funktion ----------- # 
    if ($action == "delete" && $rang == 1) { 
        
    $id $_GET['id']; 

        
    $loeschen "DELETE FROM gb WHERE id=$id"
        
    mysql_query ($loeschen) or die ("Konnte nicht geloescht werden!!!"); 
        
    header ("Location: gb.php"); 

    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" 
    />
    <title>Gästebuch</title>
    <meta name="robots" content="index,follow" />
    <meta name="language" content="de" />  

    <style type="text/css">
    body {
        font: normal 0.8em verdana, tahoma, 'sans-serif';
        color: #000;
        background-color: #EFEFEF;
    }

    .post{
        border: 1px solid #808080;
        background-color: #FFF;
        padding: 5px;
        width: 75%;
    }

    .titel{ border-bottom: 1px solid #EFEFEF; }

    .error{ font-weight: bold; color: #A61212; }

    span{ font-style:italic; color: #395B7D; }

    a {
        color: #49565E;
        font-weight: bold;
        text-decoration: none;
    }

    a:visited {
        color: #63909C;
        text-decoration: none;
    }

    a:hover, a:active {
        color: #7EB1C0;
        text-decoration: none;
    }
    </style>
    </head>
    <body>

    <?php 
    # Wenn auf den Admin-Link gecklickt wird, wird hier das Login-Feld erzeugt
    if ($action == "gbadmin"){?>   
    <strong>Passwort:</strong>
    <form action="" method="post">
    <input name="password" type="password" /> <input type="submit" 
    name="submit" value="login" />
    </form>
    <?php
    }

    # Hier wird abgefragt, ob rang=1 ist. Wenn ja, wird hier die Kommentierfunktion für den Eintrag aufgerufen
    if($rang==1) { 

    $id strip_tags($_GET['id']); 
        
        if(
    $action == "kommentieren") { 
            echo 
    "<h3>Eintrag Nr. $id kommentieren</h3>";
            echo 
    "<form name='kommentar' method='post' 
    action='gb.php?action=speichern&amp;id=
    $id'>
                  <textarea cols='55' rows='10' 
    name='kommentar'></textarea><br />
                  <input type='submit' value='speichern' title='Kommentar 
    speichern' name='komment' />
                  </form>"
    ; }
        
        if(
    $action == "speichern") { 
        
    $kommentar mysql_real_escape_string($_POST['kommentar']);
        
            
    # Und hier wird dann der Kommentar zu dem GB Eintrag in der DB 
    gespeichert.
            
    $sql"UPDATE gb SET kommentar = '$kommentar' WHERE id = '$id'"
            
    mysql_query ($sql) or die ("Das Schreiben ist gescheitert!");  
        } 

    ?>

    <div align="left">
    <a href="gb.php?action=reintragen">Ins Gästebuch eintragen</a> 
    <?php if($rang==1) { echo '<a href="gb.php?action=logout">Logout</a>'; } 
    ?>
    </div>
    <br />

    <? 

    # Wenn der Link zum Eintragen ins GB geklickt wird, wird das Formular zum eintragen angezeigt 
    if($action == "reintragen") { 

    if (isset(
    $_POST['los'])){ # wenn auf Abschicken geklickt wurde

    #--- Eingaben prüfen und ersetzen ---#
    $name mysql_real_escape_string($_POST['name']);
    $email mysql_real_escape_string($_POST['email']);
    $hp mysql_real_escape_string($_POST['hp']);
    $msg mysql_real_escape_string($_POST['msg']);
    $spam mysql_real_escape_string($_POST['spam']);
    $ergebnis mysql_real_escape_string($_POST['ergebnis']);

    # Wenn Feld Name und Nachricht nicht leer sind, und Spamfrage falsch beantwortet wurde, dann....
    if ($name != "" && $msg != "" && $spam != $ergebnis) {
    echo 
    'Das von Ihnen eingegebene Ergebnis ist Falsch...'

    # Wenn Feld Name und Nachricht nicht leer sind, und Spamfrage richtig beantwortet wurde, dann speichern...
    if ($name != "" && $msg != "" && $spam == $ergebnis) {

        
    # Wenn Feld Homepage leer, dann schreiben: www.keine-angegeben.de
        
    if ($hp == "") { 
            
    $hp "http://www.keine-angegeben.de"
        } 
        
        
    # Hier wird geprüft ob die homepage mit oder ohne http:// eingegeben wurde.
        
    if (strtolower(substr($hp07)) == "http://"){ 
            
    # Wenn ja, Feld so wie ist abspeichern    
            
    $hp "$hp"
        }else {
            
    # Wenn nicht, soll er das "http://" manuell hinzufügen 
            
    $hp "http://$hp";              
        }

    $ip $_SERVER['REMOTE_ADDR']; # IP-Adresse ermitteln

    $msg trim($msg);
    $msg preg_replace('/(\s{4})\s+/''\1'$msg);
    $msg preg_replace('~(.)(\1){4,}~''\1\1\1\1'$msg); 
    $name preg_replace('/(\s{4})\s+/''\1'$name);
    $name preg_replace('~(.)(\1){4,}~''\1\1\1\1'$name);

    # --- Und hier speichern wir in die Datenbank --- # 

    $schreiben "INSERT INTO gb (id, name, email, hp, msg, ip, date, time) 
                  VALUES ('', '
    $name', '$email', '$hp', '$msg', '$ip', 
    '
    $datum', '$zeit')"
    $resultsmysql_query ($schreiben) or die ("Das Schreiben ist 
    gescheitert!"
    ); 

    if (
    $results){
        
    # Wenn oben bei mailinfo ja gewählt wurde, wird nach dem speichern eine email geschickt!
        
    if ($mailinfo == "ja"){ 
            
            
    # Betreffzeile für die EMail
            
    $betreff "GB Eintrag"
            
            
    # Name und Nachricht des Eintrages für die Mail
            
    $body    "Es gibt einen neuen Eintrag im GB:\nName: $name 
    Nachricht: 
    $msg"
            
            
    # Hier wird die Mail versendet und zusammengesetzt
            
    mail("$webmaster","$betreff","$body\n");
        }
        
    $go1;
        echo 
    'Vielen Dank fuer Ihren Eintrag ...';
        
    }else{ echo 
    'Fehler beim Eintragen...';}

    }else{ 
    # wenn nicht alle Pflichtfelder ausgefuellt wurden 
        
    echo '<p class="error">Bitte alle mit * gekennzeichneten Felder 
    ausf&uuml;llen!</p>'
    ;
    }
    // close submit  

    if ($go!= 1){
    ?>
    <form action="" method="post" id="eingabe">

    <input type="text" name="name" size="20" /> <label 
    for="name">Name</label>* <br />
    <input type="text" name="email" size="20" /> <label 
    for="email">E-Mail</label> *<br />
    <input type="text" name="hp" size="20" /> <label 
    for="website">Homepage</label><br />

    <textarea cols="55" rows="10" value="msg" name="msg"></textarea>

    <p>Spamschutzfrage *<br />
    <b>Bitte Rechnen sie folgende Aufgabe:</b> 
    <?php
    $zahl1
    =rand (1,10);
    $zahl2=rand (1,10);
    ?>

    <?php echo $zahl1;?> + <?php echo $zahl2;?>
    <?php
    $ergebnis 
    $zahl1 $zahl2;
    ?>  
     Antwort: 
    <input size="4" name="spam" type="text" />

    <input name="ergebnis" value="<?php echo $ergebnis?>" type="hidden" />

    </p>

    <input type="submit" value="Abschicken" title="Eintrag machen" 
    name="los" />&nbsp; 
    <input type="reset" title="Felder leeren" value="Zuruecksetzen" 
    name="stop" /></td> 
    <br />
    <p>    mit * gekennzeichnete Felder m&uuml;ssen ausgef&uuml;llt 
    werden</p>
    <br />
    <br /></form>
    <?php
    }
    // close reintragen

    #--- Datenbank auslesen und anzuzeigende Seiten festlegen ---# 

    $proseite 3// Wieviele Einträge pro Seite anzeigen? 

    if(!isset($_REQUEST["seite"])) {
        
    $seite 0
    } else { 
        
    $seite $_REQUEST["seite"]; 
    }
    $count 0
    $abfrage "SELECT id FROM gb";  
    $ergebnis mysql_query($abfrage);   
    while(
    $row mysql_fetch_object($ergebnis)) {

        if(
    $count%$proseite == 0) { 
            
    $aktuelleseite $count/$proseite+1
        if(
    $count == $seite) { 
            echo 
    $aktuelleseite." "
        } else { 
            echo 
    "<a href='gb.php?seite=$count'>".$aktuelleseite."</a> "
        } 


    $count++; 
    }

    echo 
    '<br /><br />';

        
    $result mysql_query("SELECT * FROM gb ORDER by id DESC LIMIT 
    $seite,$proseite");
        while (
    $zeile mysql_fetch_array($result)) {

    #----------Ausgabe des GB darstellen-------------------------# 
    # Hier wird schadhafter Code und böse Zeichen ausgemustert
    $zeile[1] = htmlspecialchars($zeile[1], ENT_QUOTES);
    $zeile[5] = htmlspecialchars($zeile[5], ENT_QUOTES);
    $zeile[3] = htmlspecialchars($zeile[3], ENT_QUOTES);
    $zeile[5] = wordwrap($zeile[5], 40' '1); 
    $zeile[5] = nl2br($zeile[5]);        
    ?>
    <div class="post">

    <div class="titel">
    <?php echo $zeile[0?> - <a target="blank" href="<?php echo $zeile[4
    ?>"><?php echo $zeile[1?></a>  
    schrieb am <?php echo $zeile[6?> um <?php echo $zeile[7?> Uhr
    <?php if($rang==1) { // Nur anzeigen fuer Admin
    echo  "IP: $zeile[2] | <a 
    href='gb.php?action=delete&amp;id=
    $zeile[0]'>l&ouml;schen</a> |  <a 
    href='gb.php?action=kommentieren&amp;id=
    $zeile[0]'>kommentieren</a>" 
    ?>
    </div>

    <p><?php echo $zeile[5?></p>

    <?php if($zeile[8] != "") { 
        echo
    "<div class='kommentar'>Kommentar:<br /> \n 
        <span>
    $zeile[8]</span>\n </div>\n"; }?>

    </div>
    <br />
    <?php
    }
    #--------------- ENDE AUSGABE ---------------# 


    #------- Beiträge zählen die in der Datenbank gespeichert wurden -------# 
    $count_msgs 0
    $l "SELECT id FROM gb ORDER BY id DESC"
    $dbr mysql_query ($l); 
    while (
    $t mysql_fetch_array ($dbr))  
    $count_msgs++; } 
    echo 
    "<br />Es sind <strong>$count_msgs</strong> Beitr&auml;ge im 
    G&auml;stebuch vorhanden"


    # Datenbankverbindung schließen.
    mysql_close(); 
    ?> 
    <br /><br />
    <a href="gb.php?action=gbadmin">Admin</a> 

    </body>
    </html>


  • #2
    Hi.

    Oha, sind ne Menge Fehler drin in deinem Quellcode und man sieht, dass er etwas zusammengeschustert ist.

    z.B.

    PHP-Code:
    <?php echo $zahl1;?> + <?php echo $zahl2;?> <!-- Wieso hier wieder schließen? -->
    <?php <-- Und hier wieder neu öffnen? -->
    $ergebnis $zahl1 $zahl2;
    ?>
    Warum doppelt?

    PHP-Code:
    # Wenn Feld Name und Nachricht nicht leer sind, und Spamfrage falsch beantwortet wurde, dann....
    if ($name != "" && $msg != "" && $spam != $ergebnis) {
    echo 
    'Das von Ihnen eingegebene Ergebnis ist Falsch...'

    // --> Wo ist die Klammer, die die If Geschichte schließt??

    # Wenn Feld Name und Nachricht nicht leer sind, und Spamfrage richtig beantwortet wurde, dann speichern...
    if ($name != "" && $msg != "" && $spam == $ergebnis) { 
    Anbei: nimm mal deine Passwörter usw. aus dem Quellcode raus. CSS würde ich auslagern.

    Fertige Captcha Möglichkeiten findest Du hier zuhauf:

    Einfaches Captcha - PHP - Coder Forum
    CAPTCHA in PHP / Sicherheitscode-Skript
    Securimage CAPTCHA - Free PHP Captcha Script

    Dein Quellcode ist einfach etwas zu unübersichtlich, um sich das komplett so anzusehen, sorry.

    Wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      wie meinst du das mit CSS würdest du auslagern?
      Ich bin noch ein extremer Anfänger

      Und was das Captcha betrifft, dass würd ich ja selbst von grundauf gemacht haben und nicht wieder entwas fertiges nehmen...

      Ich habe das eine doppelt, weil ich ja das auch nochmal brauche damit doch angezeigt werden kann, dass das Ergebnis falsch ist...

      Ich habe echt keine Ahnung.
      Wenn ich die IF Klammer schließe, dann bekomme ich diesen Fehler: Thu Mar 25 10:15:16 2010] [error] [client 192.168.56.1] PHP Parse error: syntax error, unexpected '}', expecting ',' or ';' in /var/www/html/gb.php on line 164

      Kommentar


      • #4
        Wenn Du googelst (z.B. mit "PHP Captcha Tutorial") findest Du ne Menge Tutorials, z.B. das hier:

        [PHP] einfacher Captcha mit GD2 und FreeType - PHP - Tutorials @ tutorials.de: Forum & Hilfe

        Hier ein kleines Beispiel, wie das mit CSS auslagern ist:

        CSS in externe Datei auslagern

        Bei deiner Zeile

        PHP-Code:
        echo 'Das von Ihnen eingegebene Ergebnis ist Falsch...' 
        Fehlt das ";" und dann wohl danach auch ein "}", außer die Klammer wird noch weiter unten geschlossen (ist aus dem Quellcode nicht 100% ersichtlich).

        Und doppelt brauchst du das nicht, da das ja alles PHP Code ist. Wenn du einmal öffnest mit "<?php" schließe es doch erst, wenn du keinen PHP Code mehr benötigst mit "?>" ganz platt gesagt. Ein gutes allg. Tutorial zur Syntax/Aufbau usw.ist hier zu finden:

        Peter Kropff - PHP - Grundlagen - Syntax

        Wolf29
        while (!asleep()) sheep++;

        Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

        Kommentar


        • #5
          Wuhaaaa es funktioniert nun
          Danke schön

          Interesse an der erwähnten Belohnung?
          Falls ja dann schick mir ne PN mit deiner E-Mail Adresse

          Kommentar


          • #6
            Nur mal so eine Sache nebenbei:
            Da Crosspostings nicht gern gesehen werden, aber du es trozdem gemacht hast , dann mach im anderen Forum bitte einen link hier her wo es erledigt ist!!

            Kommentar


            • #7
              Bitte beachten: Anmerkungen zu Crosspostings
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar

              Lädt...
              X