Hilfe, ich stehe an!

Hier werden Probleme rund um das Zahlen Captcha behandelt

Moderator: frameguard

Hilfe, ich stehe an!

Beitragvon katarina » 26.08.2007, 08:10

Hallo Forum,
ich habe ein Problem mit dem Script.
Bei mir wird die Datei "email.php" mittels <iframe> in die "kontakt.htm" eingebunden.

email.php :
Code: Alles auswählen
<? session_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Email</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="archiv.css" rel="stylesheet" type="text/css">
</head>

<body leftmargin="0" topmargin="0" oncontextmenu="return false" oncontext="return false" onselectstart="return false">
<?
// Übernahme der Daten aus den Formular
if ($_POST["submit"]) {

// Variablen der Datenfelder
   $name = $_POST["name"];
   $email = $_POST["email"];
   $text = $_POST["text"];

// Benutzerdaten des Absender
   $absendedatum = date("d.m.Y - H:i");
   $host = gethostbyaddr($REMOTE_ADDR);
   $ip = "$REMOTE_ADDR";
   $plattf = "$HTTP_USER_AGENT";

// Überprüfung der Datenfelder
if (!eregi("^[a-za-zäöüß ]+$", $name)) {
   $fehler['name'] = "Name fehlt<br><br>";
}
if (!eregi("^[0-9a-z_.-]+@[0-9a-z.-]+\.[a-z]{2,6}$", $email)) {
   $fehler['email'] = "Email fehlt<br><br>";
}
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
   $fehler['sicherheitscode'] = "Der Sicherheitscode ist falsch</br>";
   }
   else {
   if (!eregi("^[0-9]+$", $_POST["sicherheitscode"])) {
   $fehler['sicherheitscode'] = "Sicherheitscode fehlt</br>";
   }
}
// Ausgabe der Fehler wird weiter unten ausgegeben (assoziatives Array)

// wenn kein Fehler, wird eine E-Mail versendet
if (!isset($fehler)) {
// Kopf der E-Mail
   $recipient = "xxxxx@xxx.at"; // Empfänger der Nachricht
   $subject = "Email - Nachricht"; // Betreff der Nachricht
   $mailheaders = "From: \"".stripslashes($_POST["name"])."\" <".$_POST["email"].">\n";
   $mailheaders .= "Reply-To: <".$_POST["email"].">\n";
   $mailheaders .= "X-Mailer: PHP/" . phpversion();
   
// Darstellung der E-Mail
   $msg  = "Folgendes wurde am " . $absendedatum . " per Online-Formular gesendet:\n" . "-------------------------------------------------------------------------\n\n";
   $msg .= "Name: " . $name . "\n";
   $msg .= "E-Mail: " . $email . "\n";
   $msg .= "\nNachricht:\n " . $text . "\n\n";
   $msg .= "Zur Sicherheit wurden diese Daten protokolliert!\n" . "------------------------------------------------\n";
   $msg .= "IP-Adresse: " . $ip . "\n";
   $msg .= "Host: " . $host . "\n";
   $msg .= "Plattform: " . $plattf . "\n";
   
   $msg = strip_tags (stripslashes ($msg));


if (@mail($recipient,$subject,$msg,$mailheaders)) {
   // Text wenn E-Mail versendet wurde,
   session_unset();
   print " <p>&nbsp;</p>
            <p class=kursiv>Das Emailformular wurde erfolgreich gesendet!</p>
         <p><form action=email.php><input class=form_button type=submit value=\" Zurück \" name=return></form></p>"; 
   exit; // mit exit wird nun das Script nach Versand angehalten, so dass das Formular nicht erneut kommt!
   }
}
}
?>
<form action="<?=$_SERVER["PHP_SELF"];?>" method="POST">
<table width="600" height="150" border="0" cellpadding="0" cellspacing="2" bordercolor="#F0F0FF">
  <tr>
    <td height="17" width="130" class="kursiv">Emailformular</td>
    <td width="8" bgcolor="#508296">&nbsp;</td>
    <td colspan="3"> &nbsp;= Pflichtfelder</td>
  </tr>
  <tr>
    <td colspan="5"><img src="img/transpixel.gif" height="3"></td>
  </tr>
  <tr>
    <td width="130" height="25" bgcolor="#D2D2D2" align="right">Name &nbsp; </td>
    <td width="8" bgcolor="#508296">&nbsp;</td>
    <td colspan="2"><input type="text" class="form_textfeld" name="name" size="45" value="<?=htmlentities(stripslashes($_POST["name"]), ENT_QUOTES);?>"></td>
     <td width="170" rowspan="4" valign="top">
        <? if (is_array($fehler)) {
         echo "<p><b><i>Eingabefehler!</i></br></br>";
           foreach ($fehler as $feldname => $wert) {
            print $wert;
            }
          print "</b></p>";
         }
      ?>
      </td>
  </tr>
  <tr>
    <td width="130" height="25" bgcolor="#D2D2D2" align="right">Email &nbsp; </td>
    <td width="8" bgcolor="#508296">&nbsp;</td>
    <td colspan="2"><input type="text" class="form_textfeld" name="email" size="45" value="<?=htmlentities(stripslashes($_POST["email"]), ENT_QUOTES);?>"></td>
  </tr>
  <tr>
    <td width="130" height="40" bgcolor="#D2D2D2" align="right">Nachricht &nbsp; </td>
      <td width="8">&nbsp;</td>
    <td colspan="2"><textarea class="form_textfeld" name="text" rows="3" cols="47"><?=htmlentities(stripslashes($_POST["text"]), ENT_QUOTES);?></textarea></td>
  </tr>
  <tr>
      <td width="130" height="30" bgcolor="#D2D2D2" align="right">Code wiederholen &nbsp; </td>
      <td width="8" bgcolor="#508296">&nbsp;</td>
      <td width="170"><input type="text" class="form_textfeld" name="sicherheitscode" size="1" maxlength="4">
        &nbsp; <img src="captcha/captcha.php" border="0" align="absmiddle" alt="Sicherheitscode"></td>
      <td>
      <input class="form_button" name="submit" type="submit" value=" Absenden ">
      </td>
  </tr>
</table>
</form>
</body>
</html>


Die Datei captcha/captcha.php sieht wie folgt aus:
Code: Alles auswählen
<?php
   session_start();
   unset($_SESSION['captcha_spam']);
   $text = rand(1000,10000); //Zufallszahl

   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);
   }

   $_SESSION['captcha_spam'] = encrypt($text, "693840a67"); //Key
   $_SESSION['captcha_spam'] = str_replace("=", "", $_SESSION['captcha_spam']);

         
   header('Content-type: image/png');
   $img = ImageCreateFromPNG('captcha.png'); //Backgroundimage
   $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
   $ttf = $_SERVER['Document_Root']."arial.ttf"; //Schriftart
   $ttfsize = 25; //Schriftgrösse
   $angle = rand(0,5);
   $t_x = rand(5,50);
   $t_y = 35;
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
   imagepng($img);
   imagedestroy($img);
?>


Das Problem ist,

1) wenn ich keinen Code eingebe schreibt er zwar "Sicherheitscode fehlt" aber generiert mir keinen neuen.

2) wenn ich einen falschen Code (oder auch den richtigen) eingebe, wird gesendet.

Ich weiß nicht ob die "kontakt.htm" auch wichtig ist.
kontakt.htm :
Code: Alles auswählen
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Kontakt</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="archiv.css" rel="stylesheet" type="text/css">
</head>
<body oncontextmenu="return false" oncontext="return false" onselectstart="return false">
<h3>Kontakt</h3>
<table width="500" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="50%"><p class="block>Adresse 1</p></td>
    <td width="50%"><p class="block>Adresse 2</p></td>
  </tr>
</table>

<div id="Layer1" style="position:absolute; left:20px; top:122px; width:600; height:195; z-index:1">
   <iframe name="email" src="email.php" height="195" width="600" frameborder="0"></iframe></div>
<br>
</body>
</html>


Ich probiere schon 3 Tage mittels Beiträgen aus diesen Forum aber ich komm nicht drauf.
Ich danke schon in voraus.
lg Kathi
katarina
 
Beiträge: 3
Registriert: 25.08.2007, 21:21

Beitragvon Steef389 » 26.08.2007, 17:53

Probier mal statt
Code: Alles auswählen
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
   $fehler['sicherheitscode'] = "Der Sicherheitscode ist falsch</br>";
   }
   else {
   if (!eregi("^[0-9]+$", $_POST["sicherheitscode"])) {
   $fehler['sicherheitscode'] = "Sicherheitscode fehlt</br>";
   }
}

Das aus:
Code: Alles auswählen
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);
}
if (!isset($_POST["sicherheitscode"]) || (encrypt($_POST["sicherheitscode"], "693840a67") != $_SESSION['captcha_spam'] ) {
$fehler['sicherheitscode'] = "Der Sicherheitscode ist falsch</br>";
}

Sollte funktionieren.
Wenn nicht schreib es.
Steef389
 
Beiträge: 57
Registriert: 20.06.2007, 20:31

Beitragvon katarina » 26.08.2007, 18:58

Hallo Steef, danke erstmal für die Antwort.
Ich habe es schon soweit geschafft (ich habe nur mehr ein "iframe") wenn ich die Seite "email.php" alleine aufrufe funktioniert alles gut, sowie ich die Seite "email.php" im "iframe" aufrufe, werden keine neuen Captcha erstellt und ich bekomme nur die Antwort "Der Sicherheitscode ist falsch". Egal ob ich den richtigen oder den falschen Code eingebe. :roll:
Vielleicht weiß da ja jemand bescheid.
lg kathi
katarina
 
Beiträge: 3
Registriert: 25.08.2007, 21:21

Beitragvon katarina » 26.08.2007, 19:49

Ach ja , der afktuelle Code der "email.php":

Code: Alles auswählen
<? session_start();?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Kontakt</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="archiv.css" rel="stylesheet" type="text/css">
</head>
<body>
<h3>Kontakt h3>
<table width="500" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="50%">Adresse 1</td>
    <td width="50%">Adresse 2</td>
  </tr>
</table>
<?
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"], "159a357");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);

// Übernahme der Daten aus den Formular
if ($_POST["submit"]) {

// Variablen der Datenfelder
   $name = $_POST["name"];
   $email = $_POST["email"];
   $text = $_POST["text"];

// Benutzerdaten des Absender
   $absendedatum = date("d.m.Y - H:i");
   $host = gethostbyaddr($REMOTE_ADDR);
   $ip = "$REMOTE_ADDR";
   $plattf = "$HTTP_USER_AGENT";

// Überprüfung der Datenfelder
if (!eregi("^[a-za-zäöüß ]+$", $name)) {
   $fehler['name'] = "Name fehlt<br><br>";
}
if (!eregi("^[0-9a-z_.-]+@[0-9a-z.-]+\.[a-z]{2,6}$", $email)) {
   $fehler['email'] = "Email fehlt<br><br>";
}
if (!eregi("^[0-9]+$", $sicherheitscode)) {
   $fehler['sicherheitscode'] = "Sicherheitscode fehlt<br><br>";
   }
   else {
   if($sicherheits_eingabe != $_SESSION['captcha_spam']){
   unset($_SESSION['captcha_spam']);
   $fehler['captcha'] = "Sicherheitscode<br>war nicht korrekt!<br>";
   }
}

// wenn kein Fehler, wird eine E-Mail versendet
if (!isset($fehler)) {
// Kopf der E-Mail
   $recipient = "xxx@xx"; // Empfänger der Nachricht
   $subject = "Email - Nachricht "; // Betreff der Nachricht
   $mailheaders = "From: \"".stripslashes($_POST["name"])."\" <".$_POST["email"].">\n";
   $mailheaders .= "Reply-To: <".$_POST["email"].">\n";
   $mailheaders .= "X-Mailer: PHP/" . phpversion();
   
// Darstellung der E-Mail
   $msg  = "Folgendes wurde am " . $absendedatum . " per Online-Formular gesendet:\n" . "-------------------------------------------------------------------------\n\n";
   $msg .= "Name: " . $name . "\n";
   $msg .= "E-Mail: " . $email . "\n";
   $msg .= "\nNachricht:\n " . $text . "\n\n";
   $msg .= "Zur Sicherheit wurden diese Daten protokolliert!\n" . "------------------------------------------------\n";
   $msg .= "IP-Adresse: " . $ip . "\n";
   $msg .= "Host: " . $host . "\n";
   $msg .= "Plattform: " . $plattf . "\n";
   
   $msg = strip_tags (stripslashes ($msg));


   if (@mail($recipient,$subject,$msg,$mailheaders)) {
      // Text wenn E-Mail versendet wurde,
      session_unset();
      print " <p>&nbsp;</p>
               <p class=kursiv>Das Emailformular wurde erfolgreich gesendet!</p>
            <p><form action=email.php><input class=form_button type=submit value=\" Zurück \" name=return></form></p>"; 
      exit; // mit exit wird nun das Script nach Versand angehalten, so dass das Formular nicht erneut kommt!
   }
}
}
?>

<form action="<?=$_SERVER["PHP_SELF"];?>" method="POST">
<table width="600" height="150" border="0" cellpadding="0" cellspacing="2" bordercolor="#F0F0FF">
  <tr>
    <td height="17" width="130" class="kursiv">Emailformular</td>
    <td width="8" bgcolor="#508296">&nbsp;</td>
    <td colspan="3"> &nbsp;= Pflichtfelder</td>
  </tr>
  <tr>
    <td colspan="5"><img src="img/transpixel.gif" height="3"></td>
  </tr>
  <tr>
    <td width="130" height="25" bgcolor="#D2D2D2" align="right">Name &nbsp; </td>
    <td width="8" bgcolor="#508296">&nbsp;</td>
    <td colspan="2"><input type="text" class="form_textfeld" name="name" size="45" value="<?=htmlentities(stripslashes($_POST["name"]), ENT_QUOTES);?>"></td>
     <td width="170" rowspan="4" valign="top">
        <? if (is_array($fehler)) {
         echo "<p><b><i>Eingabefehler!</i></br></br>";
           foreach ($fehler as $feldname => $wert) {
            print $wert;
            }
          print "</b></p>";
         }
      ?>
      </td>
  </tr>
  <tr>
    <td width="130" height="25" bgcolor="#D2D2D2" align="right">Email &nbsp; </td>
    <td width="8" bgcolor="#508296">&nbsp;</td>
    <td colspan="2"><input type="text" class="form_textfeld" name="email" size="45" value="<?=htmlentities(stripslashes($_POST["email"]), ENT_QUOTES);?>"></td>
  </tr>
  <tr>
    <td width="130" height="40" bgcolor="#D2D2D2" align="right">Nachricht &nbsp; </td>
      <td width="8">&nbsp;</td>
    <td colspan="2"><textarea class="form_textfeld" name="text" rows="3" cols="47"><?=htmlentities(stripslashes($_POST["text"]), ENT_QUOTES);?></textarea></td>
  </tr>
  <tr>
      <td width="130" height="30" bgcolor="#D2D2D2" align="right">Code wiederholen &nbsp; </td>
      <td width="8" bgcolor="#508296">&nbsp;</td>
      <td width="170"><input type="text" class="form_textfeld" name="sicherheitscode" size="1" maxlength="4">
        &nbsp; <img src="captcha/captcha.php" border="0" align="absmiddle" alt="Sicherheitscode"></td>
      <td>
      <input class="form_button" name="submit" type="submit" value=" Absenden ">
      </td>
  </tr>
</table>
</form>
</body>
</html>

katarina
 
Beiträge: 3
Registriert: 25.08.2007, 21:21


Zurück zu Zahlen Captcha

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 0 Gäste

cron