kostenloser Webspace werbefrei: lima-city


Captcha

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    gordan

    Kostenloser Webspace von gordan

    gordan hat kostenlosen Webspace.

    Hallo allerseits!

    Nachdem ich mich informiert hatte, ob die Bilbliotheken die Möglichkeit der Einbindung eines Captcha geben, habe ich nun versucht, auch eins einzubauen. Es wird angezeigt und auch verarbeitet, allerdings habe ich ein großes Problem. Und zwar ist der Code, den ich verwendet habe dazu ausgelegt, ein Zugangssperre zu dem Kontaktvformular darzustellen. Wenn jemand den Code eingegeben hat, wied er zu dem Formular weitergeleitet. Aber von da aus kann ja jeder soviel Spammen wie er will. Deshalb wollte ich fragen, ob mir jemand helfen kann, die Prüfung des/der Captcha mit dem Abseden des Formulars zu kombinieren, damit bei jedem Versand nachgehakt wird.

    Hier der Quellcode:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">   <html>   <head>   <title>Kontaktformular</title>     <meta name="title" content="Kontaktformular">   <meta name="description" content="Kontaktformular">   <meta name="keywords" content="Kontakt, Kontaktformular">   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">   <style type="text/css">  #table{  		width: 100%;  		border-sytle: none;  		cellspacing: 2px;  }  .links{  		text-align:right;  }  </style>  </head>   <body style="background-color:grey">   <h1>Kontakt</h1><br>   <?php      // zufällige Zahl zwischen 100000 und 999999 ermitteln      srand();      $wert = rand(100000, 999999);  ?>  <?php      // Prüfung ob captcha == eingabe      if (isset($_POST['submit']))      {          if ($_POST['wert'] == $_POST['testwert'])              echo 'Prüfung erfolgreich!';          else              echo 'Prüfung erfolglos!';      }      // Formular      else      {          // zufällige Zahl zwischen 100000 und 999999 ermitteln          srand();          $wert = rand(100000, 999999);                // Formular ausgeben          echo '<form action="newdfdf.php" method="post">';          echo '<input type="text" name="testwert" maxlength="6" /><br /><br />';          // Captcha anfordern mit dem entprechenden Wert anfordern          echo '<img src="captcha.php?wert='.$wert.'" /><br /><br />';          echo '<input type="hidden" name="wert" value="'.$wert.'" />';          echo '<input type="submit" name="submit" value="Eingabe Prüfen" />';          echo '</form>';      }  ?>  <?php     // *** Deine Mailadresse (Empfänger) ***   $mail_to="xxxxx@xxxxx.de";   // *************************************     $from_name=$_POST['fromname'];   $from_mail=strtolower($_POST['frommail']);   $mail_subject=$_POST['mailsubject'];   $mail_text=$_POST['mailtext'];   $send=$_POST['s'];     if(trim($from_name)=="") $err_text.="Bitte gib Deinen Namen an.<br>";   if(trim($from_mail)=="")     $err_text.="Bitte gib Deine E-Mail-Adresse an.<br>";   else     if(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$",$from_mail))       $err_text.="Bitte gib eine gültige E-Mail-Adresse an.<br>";   if(trim($mail_subject)=="") $err_text.="Bitte gib einen Betreff ein.<br>";   if(trim($mail_text)=="") $err_text.="Bitte gib einen Nachrichtentext ein.<br>";     // *** Zu langen Text abschneiden ***   if(strlen($mail_text)>1000) {     $mail_text=substr($mail_text,0,1000)."... (Text wurde gekürzt!)";   }   $from_name=str_replace(chr(34),"''",$from_name);   $mail_subject=str_replace(chr(34),"''",$mail_subject);   $from_name=stripslashes($from_name);   $from_mail=stripslashes($from_mail);   $mail_subject=stripslashes($mail_subject);   $mail_text=stripslashes($mail_text);     if(($send=="1") && (isset($err_text))) {     echo "<p><big><b>Fehler:</b></big><br>";     echo "$err_text</p>";   }     if(($send!="1") || (isset($err_text)))   {   ?>     <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">   <table id="table">   <tr><td class="links">Dein Name:</td><td>&nbsp;</td>   <td width="50%"><input type="text" name="fromname" size=50 maxlength=120 value="<?php echo $from_name; ?>"></td></tr>   <tr><td class="links">Deine E-Mail Adresse:</td><td></td>   <td width="50%"><input type="text" name="frommail" size=50 maxlength=120 value="<?php echo $from_mail; ?>"></td></tr>   <tr><td class="links">Betreff:</td><td></td>   <td width="50%"><input type="text" name="mailsubject" size=50 maxlength=120 value="<?php echo $mail_subject; ?>"></td></tr>   <tr><td style="vertical-align:top" class="links">Text:<br><i>(max. 1.000 Zeichen)</i></td><td></td>   <td width="50%"><textarea cols="40" rows="10" name="mailtext"><?php echo $mail_text; ?></textarea></td></tr>   <tr><td></td><td></td><td>   <input type="hidden" value="1" name="s">   <input type="submit" value="Nachricht versenden" name="submit">   </td></tr>   </table>   </form>     <?php   } else {     $header="From: $from_name <$from_mail>\n";     $header.="Reply-To: $from_mail\n";     $header.="X-Mailer: PHP-FormMailer (www.gaijin.at)\n";     $header.="Content-Type: text/plain";     $mail_date=gmdate("D, d M Y H:i:s")." +0000";     $send=0;     if(@mail($mail_to,$mail_subject,$mail_text,$header))     {       echo "<p><b>Deine E-Mail wurde abgesendet.</b></p>";       echo "<p><a href=http://gordan.lima-city.de>Zurück zum Formular</a></p>";     }else{       echo "<p><b>Beim Versenden der E-Mail ist ein Fehler aufgetreten!</b></p>";       echo "<p>Zurück zum Formular</p>";     }   }   ?>   </body>   </html>



    PS.: Die Gestaltung stammt aus einer Zeit ohne CSS. Ich habe schonmal angefange, es ein wenig umzugestalten. Es geht jetzut ja nicht um den Schönheitspreis sondern um die FUnktion.

    Bitte um Hilfe!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. $wert = rand(100'000, 999'999);
    Zwischen "eine Million" und "hundert Tausend" gibt es nicht besonders viele Zahlen...
  4. Autor dieses Themas

    gordan

    Kostenloser Webspace von gordan

    gordan hat kostenlosen Webspace.

    Stimmt. Werde ich ändern. Kannst du (oder wer anders) mir denn dabei helfen, beide Funktionen (Übermitteln und Verifizieren) unter einen Hut zu bringen?

    Edit: Das dient dazu, dass z.B. zweistellige Zahlen ausgeschlossen werden. Auf diese Weise - so glaube ich - kann man manuelle Spammer ganz gut fern halten.

    Beitrag geändert: 9.7.2007 23:17:24 von gordan
  5. Autor dieses Themas

    gordan

    Kostenloser Webspace von gordan

    gordan hat kostenlosen Webspace.

    Ich habe das ganze nun ein wenig verändert.

    Und zwar versuchte ich es mit include(), require() und nun mit header().

    Aber nichts funktionierte?!?

    Weiß Jemand Rat?

    Hier der "neue" Code :

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>Kontaktformular</title>
    </head>
    <body style="background-color:grey">
    <h1>Kontakt</h1>
    <br>
    <?php
    
    // zufällige Zahl zwischen 100000 und 999999 ermitteln      
    srand();      $wert = rand(100000, 999999);  ?>  
    <?php     
     // Prüfung ob captcha == eingabe      
    if                                  (isset($_POST['submit']))      {      if ($_POST['wert'] == $_POST['testwert']) {              require $bestaetigt.php;  }        else {              echo 'Prüfung erfolglos!';  }      }      // Formular      else      {          
    // zufällige Zahl zwischen 100000 und 999999 ermitteln 
    srand();          $wert = rand(100000, 999999);                
    // Formular ausgeben          
    echo '
    <form action="formular.php" method="post">';
    echo '<input type="text" name="testwert" maxlength="6" />
    <br /><br />';          
    // Captcha mit dem entprechenden Wert anfordern          
    echo '<img src="captcha.php?wert='.$wert.'" /><br /><br />';          
    echo '<input type="hidden" name="wert" value="'.$wert.'" />';          
    echo '<input type="submit" name="submit" value="Eingabe Prüfen" />';          
    echo '</form>';      }  ?>  
    </body>   
    </html>



    Prinzipiell gibt es überhaupt keine Probleme. Nur das ich nach der Bestätigung folgenden Fehlermeldungen erhalte:

    Warning: require(php) [function.require]: failed to open stream: No such file or directory in /home/webpages/lima-city/gordan/html/mail/formular.php on line 18


    Fatal error: require() [function.require]: Failed opening required 'php' (include_path='.:/usr/share/pear') in /home/webpages/lima-city/gordan/html/mail/formular.php on line 18


    Wie kann ich das umgehen? Die angeforderte Datei liegt im Verzeichnis!

    Ich stehe vor einem Rätsel!
  6. Autor dieses Themas

    gordan

    Kostenloser Webspace von gordan

    gordan hat kostenlosen Webspace.

    Ich habe das Problem gelöst.

    Grund war, dass ich das $ Zeichen, so wie auf irgenteiner semiaktuellen PHP Seite beschrieben, verwendet hatte.

    Stattdessen habe ich die URL nun in ' verpackt.

    FÜr alle, die sich fragen, warum ich "include":

    dadurch vermeide ich, dass Jemand einmal bestätigt, Lesezeichen setzt und ab sofort die Sperre umgeht. Er kann nicht herausfinden, dass und wenn ja was ich include. Bei entsprechnd langem Name - den ich noch geben werde- findet keiner die Datei. Also niemand, der extremen Schaden anrichten möchte.

    Ehrlich gesagt muss ich sagen, dass ich mir vorgestellt habe, dass ich ein wenig flinker seit (keine Beleidigung). Naja guten Tag wünsche ich.
  7. Dein Captcha ist sinnlos. Einerseits wird keiner versuchen mit einem Bot dein Kontaktformular zu benutzen und selbst wenn doch, lässt es sich denkbar einfach umgehen, da dein Wert als Plaintext im Quellcode deiner Seite angezeigt wird. Der Bot müsste also nur im Quelltext suchen und die Eingabe tätigen. Wirklich sicher ist das also nicht. Verwende lieber Sessions, da kannst du den Wert übergeben, ohne dass er "sichtbar" wird.
  8. Verwende doch statt Captchas lieber einfach eine Frage:
    z.B. "Wie viel ist 1 + 3?"
    Mittlerweile können Programme die Wörter aus Captchas lesen, auf so eine Frage sind sie aber meist noch nicht eingestellt.

    Außerdem ist das sehr viel benutzerfreundlicher als ein extra Bild.
  9. Autor dieses Themas

    gordan

    Kostenloser Webspace von gordan

    gordan hat kostenlosen Webspace.

    Danke euch beiden für die Antwort/en.

    Ich habe jetzt eine Kombination aus beidem gewählt.

    Es wird eine Session eingeleitet und ein einfaches Rechenbeispiel abgefragt.

    Bei erfolgreicher Bestätigung wird das zweite Script eingebunden.

    Danke euch beiden!

    Allerdings habe ich das Scirpt erst nur übernommen und dann relativ stark angepasst.

    Und habe nun noch ein Problem.

    Und zwar bekomme ich das nicht ganz geregelt mit dem Ein- und Ausblenden der Felder nach der Bestätigung.

    Ich habe das mit CSS (fürs erste gelöst). ALlerdings wäre mir was anderes lieber.

    Weiteres Problem, was dabei entsteht:

    Der erste Bereich (mit der Rechen Captacha) ist valide, der zweite nicht. BEim reinladen der zweiten Datei muss es einen Fehler geben, da die alten Daten (Formularfeld etc.) nur ergänzt werden. Da ich in diesen (um sie zu validieren) den HTML und body Tag schon geschlossen habe, wird mir der Rest (der noch nicht validiert ist, aber das mache ich erst nach Bewältigung dieses Problems) als nicht mehr im Quelltext und somit die gesamte Seite als invalide ausgegeben.

    <?php   
    session_start();   
    function encrypt($string, $key) {   $result = '';   
    for($i=0; 
    $i<strlen($string); $i++) {      
    $char = substr($string, $i, 1);      $keychar = substr($key, ($i % strlen($key))-1, 1);      
    $char = chr(ord($char)+ord($keychar));      $result.=$char;   }   return base64_encode($result);   }   $sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "458f7878r7854s45d4");   $sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);   {  	
    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">';  	
    echo '<html xmlns="http://www.w3.org/1999/xhtml">';  	
    echo '<head>';
    echo '<title>';  	
    echo 'E-Mail Kontaktformular';  
    echo '</title>';  	
    echo '</head>';  	
    echo '<body>';  	
    echo '<div>';  	
    echo '<form action="formular.php" method="post" id="form">';  	
    echo '<div>';  	
    echo '<input type="text" name="sicherheitscode" size="5" id="input" />';  	
    echo '<img src="rechen-captcha.php" id="img" alt="Das Bild kann nicht angezeigt werden. Ohne Anzeige von diesem ist der Service nicht nutzbar. Bitte schreiben Sie mir eine E-Mail auf konventionellem Wege" /><br /><br />';  	
    echo '<input type="submit" name="submit" value="Eingabe Pr&#252;fen" id="input2" />';  	
    echo '</div>';  	
    echo '</form>';  	
    echo '</div>';  	
    echo '</body>';  	
    echo '</html>';      }  if(isset($_SESSION['rechen_captcha_spam']) AND $sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){   	include 'BESTAETIGT.php';  }  unset($_SESSION['rechen_captcha_spam']);   
    ?>


    Und hier der Rest (das daraufhin eingebundene):
    <style type="text/css">
    #form {
    		display: none;
    		visibility: hidden;
    }
    #input {
    		display: none;
    		visibility: hidden;
    }
    #img {
    		display: none;
    		visibility: hidden;
    }
    #input2 {
    		display: none;
    		visibility: hidden;
    }
    </style>
    </head>
    <body>
    <div>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <table id="table"> 
    <tr><td class="links">Dein Name:</td><td>&nbsp;</td> 
    <td width="50%"><div><input type="text" name="fromname" size=50 maxlength=120 value="<?php echo $from_name; ?>" /></div></td></tr> 
    <tr><td class="links">Deine E-Mail Adresse:</td><td></td> 
    <td width="50%"><div><input type="text" name="frommail" size=50 maxlength=120 value="<?php echo $from_mail; ?>" /></div></td></tr> 
    <tr><td class="links">Betreff:</td><td></td> 
    <td width="50%"><div><input type="text" name="mailsubject" size=50 maxlength=120 value="<?php echo $mail_subject; ?>" /></div></td></tr> 
    <tr><td style="vertical-align:top" class="links">Text:<br><i>(max. 1.000 Zeichen)</i></td><td></td> 
    <td width="50%"><div><textarea cols="40" rows="10" name="mailtext"><?php echo $mail_text; ?></textarea></div></td></tr> 
    <tr><td></td><td></td><td> 
    <div>
    <input type="hidden" value="1" name="s" /> 
    <input type="submit" value="Nachricht versenden" name="submit" /> 
    </div>
    </td></tr> 
    </table> 
    </form> 
    </div>
    </html>


    Könnt ihr mir dabei vielleicht noch helfen?

    Ich habe schon versucht, die "echo" Werte aus dem ersten Script irgentwo anders hinzusetzten, aber vielleicht bin ich einfach blind.

    Beitrag geändert: 17.7.2007 20:39:49 von gordan
  10. Am Besten machst du mal eine Beispielseite damit wir uns das ganze Live angucken können...
    Es hat wohl niemand Lust den ganzen Code durchzusehen...
  11. Autor dieses Themas

    gordan

    Kostenloser Webspace von gordan

    gordan hat kostenlosen Webspace.

    Stimmt. Kann ich gut verstehen.

    Die Rechen Captcha:

    http://gordan.lima-city.de/script/rechen-captcha.php

    Das Formular (Captcha):

    http://gordan.lima-city.de/script/formular.php

    Und die Ausgabe (E-Mail-Formular):

    http://gordan.lima-city.de/script/bestaetigt.php
  12. Bau das Rechen-Captcha doch einfach unter das e-Mail-Formular und überprüfe beim Absenden der Mail, ob das Captcha richtig war. Wenn nicht, wird die Mail nicht gesendet und ein Fehler erscheint, wenn es stimmt ist alles super. So sparst du dir das includen des Formulars und einiges an Arbeit.

    Edit
    Ich mein das so in der Art: http://cacophonie.de/captcha/
    (is von mir...)

    Beitrag geändert: 10.7.2007 16:15:19 von tct
  13. Autor dieses Themas

    gordan

    Kostenloser Webspace von gordan

    gordan hat kostenlosen Webspace.

    Hm.. Das war auch meine erste Idee gewesen. Leider habe ich das nicht hinbekommen. Nun habe ich alles versucht und es scheint tatsächlich extrem kompliziert zu sein, vorrausgesetzt, man versucht es so zu machen, wie ich es versucht habe...

    Könntest du mir freundlicherweise eine Anleitung zum Verknüpfen der Captchakontrolle und der E-Mail-Versendung geben oder gar den Quellcode:angel: (gesetzt den Fall, du tätest es, modifizierte ich ihn vollständig).

    Ist das möglich??
    Gruß
  14. Nen Quellcode kann ich dir schlecht geben, da du ihn eh auf deine Bedürfnisse anpassen musst.
    Du brauchst halt das Formular unter dem du zusätzlich das Captcha anzeigen lässt:
    <?
    session_start();
    
    // Captcha-Wort generieren und in Session speichern
    
    $_SESSION['captcha']='Captcha-Wort';
    ?>
    <form action="ziel.php" method="post">
       <div>
       <p>Your message:<br />
       <textarea name="message" cols="50" rows="5"></textarea></p>
       <p>CAPTCHA code:</p>
       <table>
       <tr>
       <td>[b]<img src="captcha.php" alt="CAPTCHA image" width="100" height="25"/></td>
       <td>&raquo;</td>
       <td><input type="text" name="captcha_word" value="" size="10" />[/b]</td>
       </tr>
       </table>
       <p><input type="submit" name="form_submit" value=" OK "></p>
       </div>
       </form>

    Und bei der Auswertung der ganzen Felder, überprüfst du eben auch den eingegebenen Captcha-Code mit:
    <?
    if(isset($_POST['form_submit']))
    {
     if(!isset($_SESSION['captcha'])) $errors[] = 'Session error';
     if(strtolower($_POST['captcha_word']) != strtolower($_SESSION['captcha'])) $errors[] = 'The code is invalid';
     // Überprüfung deiner Felder
    
     if(empty($errors))
     {
      // Mail senden
      // andere Aktionen ausführen
     }else{
      // Fehler ausgeben
     }
    }
    ?>

    Ich hoffe das hilft dir ein bissel weiter, denn eigentlich ist das gar nicht so schwer, wenn man schon Erfahrung in PHP hat.
  15. Autor dieses Themas

    gordan

    Kostenloser Webspace von gordan

    gordan hat kostenlosen Webspace.

    Danke dir. Hat mir sehr geholfen.

    Das größte Problem ist meine bisherige Jungfräulichkeit in Sachen PHP. HTML und CSS (keine Programmiersprachen) beherrsche ich aus dem FF (CSS fehlt eigentlich mitlerweile auch nichts mehr). Javascript bin ein "besserer Anfänger". Ich habs nun gelöst.
    Und danke für die Hilfe. Auf PHP werde ich mich jedenfalls in nächster Zeit konzentrieren.

    Danke nochmal!:thumb:
  16. Recaptcha könnte dich interessieren: http://recaptcha.net/

    Diese Captchas können von Maschinen nicht erkannt werden, außerdem helfen deine Benutzer noch Bücher zu digitalisieren, wenn Sie das Capcha abschreiben!

    ps3web
  17. Es gibt auch schon animierte Captcha:

    http://www.animierte-captcha.de/:biggrin:
  18. Autor dieses Themas

    gordan

    Kostenloser Webspace von gordan

    gordan hat kostenlosen Webspace.

    Danke für die Empfehlungen!

    Ich habe es nun schon angewendet und werde es recht bald anwenden. Das Problem sehe ich nur, dass das ganze auf Javascript basiert. Ich z.B. habe Jvascript immer aus, wenn ich browse mit ausnahme, ich besuche Seiten und merke, dass diese ihre volle Funktionalität nicht mehr erreichen (wie z.B. Web.de, der mehr oder weniger gute E-Mail-Account, bei welchem man sich ohne aktiviertes Javascript nicht ausloggen kann).

    Ich überlege mir noch, ob ich später dann einen entsprechenden Vermerk auf die Seite setzte oder .. wie auch immer. Mir fällt schon was ein.

    Edit:
    Die animierte Captcha ist auch nicht schlecht...
    Obwohl sie nicht für Leute mit physischen Einschränkungen geeignet zu sein scheint. Ausserdem spuckt sie mir immer eine Fehlermeldung aus :mad:

    Beitrag geändert: 15.7.2007 20:08:31 von gordan
  19. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!