• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Captchar einbau

DiamondDog

Neues Mitglied
Hallo Leute,
ich hab da das kleine Problem mit dem einbau eines Captchar in mein Script. Ich hab schon mehrer Tutorials ausprobiert aber es mit keinem geschaft. Weiß jemand vll ein einfaches tut oder kann mir unter die Arme greifen?

Hier mal mein Script:
PHP:
<?php
// Wir legen eine Variable mit deiner E-Mail
$ihremail = "[email protected]";
// Lege nun eine leere Variable für Fehler an (wird später benötigt)
$error = "";
// IP-Adresse übertragen
$ip = $_SERVER["REMOTE_ADDR"];
// Host übertragen
$host = gethostbyaddr($_SERVER["REMOTE_ADDR"]);
// Datum und Uhrzeit übertragen
$timestamp = time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
// Inhalt aus den Formularen übertragen "Name"
$name = $_POST['name'];
// Inhalt aus den Formularen übertragen "Email"
$email = $_POST['email'];
// Inhalt aus den Formularen übertragen "Betreff"
$betreff = $_POST['betreff'];
// Inhalt aus den Formularen übertragen "ICQ Nummer"
$icq = $_POST['icq'];
// Inhalt aus den Formularen übertragen "Homepage"
$homepage = $_POST['homepage'];
// Inhalt aus den Formularen übertragen "Nachricht"
$text = $_POST['text']; // Text

if(isset($_POST["Submit"]))
{
// Wir bauen eine Funktion die soll die Absender E-Mail überprüfen, ob die gültig ist
// das machen wir mit eregi() wir prüfen nicht nur ob "@" und "." vorhanden ist sondern auch
// 2 bustaben vor "@" und nach dem "@" da sind.
function mailcheck($mail) {
  $mail = eregi("^[a-z0-9]+([-_.]?[a-z0-9])
+@[a-z0-9]+([-_.]?[a-z0-9])+.[a-z]{2,4}", $mail); // Hier läuft das ab
  return $mail; // wir geben die E-Mail zurück
}
    // Jetzt prüfen wir ob die Felder ausgefüllt wurden mit if(empty)
    //wenn das feld "Name" nicht ausgefüllt wurde geben wir der leeren $error Inhalt
    // Also die Ausgabe "Sie haben keinen Namen angegeben."

    if(empty($name)) $error .= "<li>Sie haben keinen Namen angegeben.</li>";    
    // das gleiche mit "Email"
    if(empty($email)) $error .= "<li>Sie haben keine E-Mail angegeben.</li>";
    // hier setzen wir unsere oben gebaute Funktion ein wenn E-Mail nicht stimmt dann fehlerausgabe
    if(mailcheck($email)) $error .= "<li>Ihre E-Mail Adresse ist ungültig.</li>";
    // für das Feld "Betreff"
    if(empty($betreff)) $error .= "<li>Sie haben keinen Betreff ausgewählt.</li>";
    // für Nachricht
    if(empty($text)) $error .= "<li>Sie haben kein Text angegeben.</li>";

    // if(empty($error)) d.h wenn $error leer ist also alles normal ausgefüllt wurde und der Button "Absenden" angeklickt wurde
    // Dann springt das runter und wir holen uns die übertragene Daten
    if(empty($error)) {
    // wir machen das ganze in eine Variable "$nachricht"
    $nachricht = "<b>".$uhrzeit."".
                    "Uhr - ".$datum."</b><br><br>\n".
                 "<b>Ip:</b> ".$ip."<br>\n".
                 "<b>Host:</b> ".$host."<br>\n".
                 "<b>Name:</b> ".$name."<br>\n".
                 "<b>Email:</b> ".$email."<br>\n".
                 "<b>ICQ Nummer:</b> ".$icq."<br>\n".
                 "<b>Homepage:</b> ".$homepage."<br><br>\n".
                 "<b>Betreff:</b> ".$betreff."<br>\n".
                 "<b>Nachricht:</b><br> \n".$text;
    
    $subject = "Homepage Kontakt - $betreff";

    $header    = "From: $email\n";
    $header   .= "Content-Type: text/html\nContent-Transfer-Encoding: 8bit\n";
    
    // hier setzen wir unsere mail() funktion ein das muss genau so ausehen
    // mail($anwem,$subject,$den den ganzen inhalt, unbedingt "From:" also von wem)
    mail($ihremail,$subject,$nachricht,$header);
    }
    // hier fragen wir wieder ein Error ein:
if(empty($error)) {
    // wir geben dann hier ein dass alles ok ist
    echo "<b>&nbsp;&nbsp;Die Nachricht wurde erfolgreich verschickt!</b><br>
          <div align=\"left\"><ul>
                  <li>Name: $name</li>
                  <li>Email: $email</li>
                  <li>ICQ Nummer: $icq</li>
                  <li>Homepage: $homepage</li>
                  <li>Betreff: $betreff</li>
                  <li>Nachricht: $text</li>
                  </ul></div>";
    // Wenn es nicht stimmt
    } else {
    echo "<b>Ihre Nachricht konnte \"nicht\" gesendet werden!</b>
    <br><div align=\"left\"><p>&nbsp;&nbsp;Folgende(r) Fehler ist aufgetreten:<ul>$error</ul></p></div>";
}
};
?> 
<head>
<title>Kontakt</title>
<link rel="stylesheet" href="../style/style.css" type="text/css">
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" scroll="yes">
<div align="center">Kontakt</div><br>
<div align="left">
<form action="<?php echo 'index.php?site=kontakt/index'; ?>" method="post">
<table width="100%" border="0" cellpadding="0" cellspacing="2">
<tr>
  <td width="10%"><b>Name:</b></td>
  <td width="89%"><input name="name" type="text" id="name" style="width:200px;" value="<?php echo $name; ?>" /></td>
</tr>
<tr>
<td><b>E-Mail:</b></td>
<td><input name="email" type="text" id="email" style="width:200px;" value="<?php echo $email; ?>"/></td>
</tr>
<tr>
  <td><b>ICQ Nummer:</b></td>
  <td><input name="icq" type="text" id="icq" style="width:200px;" value="<?php echo $icq; ?>"/></td>
</tr>
<tr>
  <td><b>Homepage:</b></td>
  <td><input name="homepage" type="text" id="homepage" style="width:200px;" value="<?php echo $homepage; ?>"/></td>
</tr>
<tr>
<td><b>Betreff:</b></td>
<td>
<select name="betreff" id="betreff" style="width:200px;">
  <option value=""></option>
  <option <?php if($_POST['betreff'] == 'Fehler' ) { echo 'selected'; } ?> value="Fehler">Fehler</option>
  <option <?php if($_POST['betreff'] == 'Download' ) { echo 'selected'; } ?> value="Download">Download</option>
  <option <?php if($_POST['betreff'] == 'Homepage Link' ) { echo 'selected'; } ?> value="Homepage Link">Homepage Link</option>
  <option <?php if($_POST['betreff'] == 'Urheberrecht' ) { echo 'selected'; } ?> value="Urheberrecht">Urheberrecht</option>
  <option <?php if($_POST['betreff'] == 'sonstiges' ) { echo 'selected'; } ?> value="sonstiges">sonstiges</option>
</select></td>
</tr>
<tr>
<td valign="top">
<b>Nachricht:</b><br>
<img src="../style/bilder/Abstandhalter.gif" width="100" height="10" /></td>
<td><textarea name="text" cols="50" rows="7" id="name4"><?php echo $text; ?></textarea></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input type="Submit" name="Submit" value="Absenden" />&nbsp;<input name="reset" type="reset" id="reset" value="l&ouml;schen" /></td>
</tr>
</table>
</form>
</div>
</body>
Hoffe das mir da jemand weiterhelfen kann, bin schon am verzweifeln.

Danke schon mal.

Mfg Dog

Ps: die index seite wird per include geladen, fals das ausschlag gebend sein sollte.
 
Hallo DiamondDog,

ich habe ein, auf Cookie basierendes Captcha-System entwickelt, welches relativ leicht einbaubar ist.
Ich habe dies in deinem Script eingebaut:
Code:
<?php
// Wir legen eine Variable mit deiner E-Mail
$ihremail = "[email protected]";
// Lege nun eine leere Variable für Fehler an (wird später benötigt)
$error = "";
// IP-Adresse übertragen
$ip = $_SERVER["REMOTE_ADDR"];
// Host übertragen
$host = gethostbyaddr($_SERVER["REMOTE_ADDR"]);
// Datum und Uhrzeit übertragen
$timestamp = time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
// Inhalt aus den Formularen übertragen "Name"
$name = $_POST['name'];
// Inhalt aus den Formularen übertragen "Email"
$email = $_POST['email'];
// Inhalt aus den Formularen übertragen "Betreff"
$betreff = $_POST['betreff'];
// Inhalt aus den Formularen übertragen "ICQ Nummer"
$icq = $_POST['icq'];
// Inhalt aus den Formularen übertragen "Homepage"
$homepage = $_POST['homepage'];
// Inhalt aus den Formularen übertragen "Nachricht"
$text = $_POST['text']; // Text

if(isset($_POST["Submit"]))
{
  @session_start(); ## captcha Abfrage - start
    if(isset($_SESSION['captcha_spam']) AND $_POST["cap"] == $_SESSION['captcha_spam']){ 
        unset($_SESSION['captcha_spam']);  } else { $error .= "Captchacode falsch<br>"; }
// Wir bauen eine Funktion die soll die Absender E-Mail überprüfen, ob die gültig ist
// das machen wir mit eregi() wir prüfen nicht nur ob "@" und "." vorhanden ist sondern auch
// 2 bustaben vor "@" und nach dem "@" da sind.
function mailcheck($mail) {
  $mail = eregi("^[a-z0-9]+([-_.]?[a-z0-9])
+@[a-z0-9]+([-_.]?[a-z0-9])+.[a-z]{2,4}", $mail); // Hier läuft das ab
  return $mail; // wir geben die E-Mail zurück
}
    // Jetzt prüfen wir ob die Felder ausgefüllt wurden mit if(empty)
    //wenn das feld "Name" nicht ausgefüllt wurde geben wir der leeren $error Inhalt
    // Also die Ausgabe "Sie haben keinen Namen angegeben."

    if(empty($name)) $error .= "<li>Sie haben keinen Namen angegeben.</li>";    
    // das gleiche mit "Email"
    if(empty($email)) $error .= "<li>Sie haben keine E-Mail angegeben.</li>";
    // hier setzen wir unsere oben gebaute Funktion ein wenn E-Mail nicht stimmt dann fehlerausgabe
    if(mailcheck($email)) $error .= "<li>Ihre E-Mail Adresse ist ungültig.</li>";
    // für das Feld "Betreff"
    if(empty($betreff)) $error .= "<li>Sie haben keinen Betreff ausgewählt.</li>";
    // für Nachricht
    if(empty($text)) $error .= "<li>Sie haben kein Text angegeben.</li>";

    // if(empty($error)) d.h wenn $error leer ist also alles normal ausgefüllt wurde und der Button "Absenden" angeklickt wurde
    // Dann springt das runter und wir holen uns die übertragene Daten
    if(empty($error)) {
    // wir machen das ganze in eine Variable "$nachricht"
    $nachricht = "<b>".$uhrzeit."".
                    "Uhr - ".$datum."</b><br><br>\n".
                 "<b>Ip:</b> ".$ip."<br>\n".
                 "<b>Host:</b> ".$host."<br>\n".
                 "<b>Name:</b> ".$name."<br>\n".
                 "<b>Email:</b> ".$email."<br>\n".
                 "<b>ICQ Nummer:</b> ".$icq."<br>\n".
                 "<b>Homepage:</b> ".$homepage."<br><br>\n".
                 "<b>Betreff:</b> ".$betreff."<br>\n".
                 "<b>Nachricht:</b><br> \n".$text;
    
    $subject = "Homepage Kontakt - $betreff";

    $header    = "From: $email\n";
    $header   .= "Content-Type: text/html\nContent-Transfer-Encoding: 8bit\n";
    
    // hier setzen wir unsere mail() funktion ein das muss genau so ausehen
    // mail($anwem,$subject,$den den ganzen inhalt, unbedingt "From:" also von wem)
    mail($ihremail,$subject,$nachricht,$header);
    }

    // hier fragen wir wieder ein Error ein:
if(empty($error)) {
    // wir geben dann hier ein dass alles ok ist
    echo "<b>&nbsp;&nbsp;Die Nachricht wurde erfolgreich verschickt!</b><br>
          <div align=\"left\"><ul>
                  <li>Name: $name</li>
                  <li>Email: $email</li>
                  <li>ICQ Nummer: $icq</li>
                  <li>Homepage: $homepage</li>
                  <li>Betreff: $betreff</li>
                  <li>Nachricht: $text</li>
                  </ul></div>";
    // Wenn es nicht stimmt
    } else {
    echo "<b>Ihre Nachricht konnte \"nicht\" gesendet werden!</b>
    <br><div align=\"left\"><p>&nbsp;&nbsp;Folgende(r) Fehler ist aufgetreten:<ul>$error</ul></p></div>";
}
};
?>
<head>
<title>Kontakt</title>
<link rel="stylesheet" href="../style/style.css" type="text/css">
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" scroll="yes">
<div align="center">Kontakt</div><br>
<div align="left">
<form action="<?php echo 'index.php?site=kontakt/index'; ?>&quot; method=&quot;post&quot;&gt;<table width="100%" border="0" cellpadding="0" cellspacing="2">
<tr>
  <td width="10%"><b>Name:</b></td>
  <td width="89%"><input name="name" type="text" id="name" style="width:200px;" value="<?php echo $name; ?>" /></td>
</tr>
<tr>
<td><b>E-Mail:</b></td>
<td><input name="email" type="text" id="email" style="width:200px;" value="<?php echo $email; ?>"/></td>
</tr>
<tr>
  <td><b>ICQ Nummer:</b></td>
  <td><input name="icq" type="text" id="icq" style="width:200px;" value="<?php echo $icq; ?>"/></td>
</tr>
<tr>
  <td><b>Homepage:</b></td>
  <td><input name="homepage" type="text" id="homepage" style="width:200px;" value="<?php echo $homepage; ?>"/></td>
</tr>
<tr>
<td><b>Betreff:</b></td>
<td>
<select name="betreff" id="betreff" style="width:200px;">
  <option value=""></option>
  <option <?php if($_POST['betreff'] == 'Fehler' ) { echo 'selected'; } ?> value="Fehler">Fehler</option>
  <option <?php if($_POST['betreff'] == 'Download' ) { echo 'selected'; } ?> value="Download">Download</option>
  <option <?php if($_POST['betreff'] == 'Homepage Link' ) { echo 'selected'; } ?> value="Homepage Link">Homepage Link</option>
  <option <?php if($_POST['betreff'] == 'Urheberrecht' ) { echo 'selected'; } ?> value="Urheberrecht">Urheberrecht</option>
  <option <?php if($_POST['betreff'] == 'sonstiges' ) { echo 'selected'; } ?> value="sonstiges">sonstiges</option>
</select></td>
</tr>
<tr>
<td valign="top">
<b>Nachricht:</b><br>
<img src="../style/bilder/Abstandhalter.gif" width="100" height="10" /></td>
<td><textarea name="text" cols="50" rows="7" id="name4"><?php echo $text; ?></textarea></td>
</tr>
<tr>
<td><b>Captcha:</b></td>
<td><img src="<? echo $_SERVER['DOCUMENT_ROOT']; ?>/captcha/captcha.php" border="0"><input type="text" name="cap" size="5"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input type="Submit" name="Submit" value="Absenden" />&nbsp;<input name="reset" type="reset" id="reset" value="l&ouml;schen" /></td>
</tr>
</table>
</form>
</div>
</body>
Jetzt brauchst du noch die captcha.php
Inhalt der captcha.php:
Code:
<?PHP
   @session_start();
   unset($_SESSION['captcha_spam']);

   function randomString($len) {
      function make_seed(){
         list($usec , $sec) = explode (' ', microtime());
         return (float) $sec + ((float) $usec * 100000);
      }
      srand(make_seed());  
                       

      $possible="1234567890"; ## Welche Zeichen verwendet werden
      $str="";
      while(strlen($str)<$len) {
        $str.=substr($possible,(rand()%(strlen($possible))),1);
      }
   return($str);
   }

   $text = randomString(5); ## Anzahl der Zeichen
   $_SESSION['captcha_spam'] = $text;
         
   header('Content-type: image/png');
   $bild = rand(1,6); ## Zufallshintergrundbild bsp: captcha$bild.PNG
   $img = ImageCreateFromPNG('captcha'.$bild.'.PNG');
   $color = ImageColorAllocate($img, 0, 0, 0); ## Farbe
   $ttf = $_SERVER['DOCUMENT_ROOT']."/captcha/ParryHotter.ttf"; ## Schriftart
   $ttfsize = 35; ## Schriftgroesse
   $angle = rand(0,5);
   $t_x = rand(5,30); ## Zufallsposition X
   $t_y = 30; ## Position Y
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
   imagepng($img);
   imagedestroy($img);
?>
Jetzt brauchst du noch die PNG-Hintergrundbilder, sowie die Schriftart.
Diese kannst du dir hier runterladen: http://studio-y.de/dl/captcha.zip

Beachte bitte, das dieses Captcha-Script inmoment so eingestellt ist, das es davon ausgeht es sei im Ordner $_SERVER['DOCUMENT_ROOT']/captcha/ . Daher empfehle ich dir, die captcha.php, die captcha-Hintergrundbilder und die Schrifftart in "deinedomain.de/captcha/" zu speichern. Solltest du einen anderen Speicherort bevorzugen, musst du dies dementsprechend ändern.

Zur veranschaulichung kann man es hier anschauen: http://studio-y.de/captcha/index.php

Ich hoffe, ich konnte dir damit helfen.
Mfg
 
Zuletzt bearbeitet:
Zurück
Oben