Wie in Srkipt einbauen?

Hier werden Probleme rund um das Zahlen Captcha behandelt

Moderator: frameguard

Wie in Srkipt einbauen?

Beitragvon Andreas84 » 18.03.2007, 14:00

Hallo,

ich habe heute das Kontkatformular von http://www.webmaster-resource.de/tutori ... php-01.php in meine Webseite und danach das Zahlen Captcha eingebaut.

Nun wird nach dem Versenden das Formulars in der Datei kontaktformular-auswerten.php geprüft, ob alle Angaben vorhanden ist.

Diese sieht so aus:
Code: Alles auswählen
<html>
<head>
<title>Kontaktformular mit PHP</title>
</head>
<body>
<?php

$Empfaenger = "service@modenio.de";

if($_REQUEST['Send'])
{
   if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
   {
      echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
   }
   else
   {
      $Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
      while(list($Formularfeld, $Wert)=each($_REQUEST))
      {
         if($Formularfeld!="Send")
         {
            $Mailnachricht .= $Formularfeld.": ".$Wert."\n";
         }
      }
      $Mailnachricht .= "\nDatum/Zeit: ";
      $Mailnachricht .= date("d.m.Y H:i:s");
      $Mailbetreff = "Kontakt: ";
      $Mailbetreff .= $_REQUEST['Betreff'];
      mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
      echo"Vielen Dank für Ihre eMail!";
   }
}
else
{
   echo"Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese <a href=\"kontaktformular.php\">Seite</a>.";
}


?>
</body>
</html>


Nun habe ich, wie beschrieben, den Code für das zaheln Captcha dort wie folgt eingebaut:
Code: Alles auswählen
<html>
<head>
<title>Kontaktformular mit PHP</title>
</head>
<body>
<?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"], "8h384ls94");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);


$Empfaenger = "service@modenio.de";

if($_REQUEST['Send'])
{
   if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
   {
      echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
   }
   else
   {
      $Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
      while(list($Formularfeld, $Wert)=each($_REQUEST))
      {
         if($Formularfeld!="Send")
         {
            $Mailnachricht .= $Formularfeld.": ".$Wert."\n";
         }
      }
      $Mailnachricht .= "\nDatum/Zeit: ";
      $Mailnachricht .= date("d.m.Y H:i:s");
      $Mailbetreff = "Kontakt: ";
      $Mailbetreff .= $_REQUEST['Betreff'];
      mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
      echo"Vielen Dank für Ihre eMail!";
   }
}
else
{
   echo"Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese <a href=\"kontaktformular.php\">Seite</a>.";
}
}

?>
</body>
</html>


Dann gibt es mir bei Versenden jedoch nur eine Fehlermeldung aus. Was stimmt denn im Code noch nicht?

Gruß,
Andreas
Andreas84
 
Beiträge: 3
Registriert: 18.03.2007, 13:56
Wohnort: Thalmässing

Beitragvon jk » 18.03.2007, 14:34

Hallo Andreas. session_start() muss aufgerufen werden, bevor der Server irgendwas an den Browser sendet, sonst gibt's ne Fehlermeldung über Header, die schon gesendet wurden. Versuch mal, den Anfang des Skripts so zu modifizieren:
Code: Alles auswählen
<?php
session_start();
?>
<html>
<head>
<title>Kontaktformular mit PHP</title>
</head>
<body>
<?php
function encrypt($string, $key) {
Rest unverändert...

Gruß

JK
jk
 
Beiträge: 6
Registriert: 18.03.2007, 10:24

Beitragvon Andreas84 » 18.03.2007, 15:06

Fehler ist weg und Mail wird gesendet :-)

Füllt man nun die Zahlen nicht aus, erscheint leider nur eine Fehlermeldung. Es sollte aber sowas kommen wie " Bitte füllen Sie alle Felder aus".

Gruß,
Andreas
Andreas84
 
Beiträge: 3
Registriert: 18.03.2007, 13:56
Wohnort: Thalmässing

Beitragvon jk » 18.03.2007, 16:21

Hallo Andreas. Was für eine Fehlermeldung denn? Für ne Meldung wegen fehlender Codeeingabe:

Code: Alles auswählen
if($sicherheits_eingabe == $_SESSION['captcha_spam']){
   unset($_SESSION['captcha_spam']);
   
   // dein Skript
}
else {
   echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
}

Gruß

JK
jk
 
Beiträge: 6
Registriert: 18.03.2007, 10:24

Beitragvon Andreas84 » 18.03.2007, 18:40

Wenn ich das richtig verstanden habe, müsste das so aussehen:
Code: Alles auswählen
<?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"], "8h384ls94");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);

else {
   echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
}

$Empfaenger = "service@modenio.de";

if($_REQUEST['Send'])
{
   if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
   {
      echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
   }
   else
   {
      $Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
      while(list($Formularfeld, $Wert)=each($_REQUEST))
      {
         if($Formularfeld!="Send")
         {
            $Mailnachricht .= $Formularfeld.": ".$Wert."\n";
         }
      }
      $Mailnachricht .= "\nDatum/Zeit: ";
      $Mailnachricht .= date("d.m.Y H:i:s");
      $Mailbetreff = "Kontakt: ";
      $Mailbetreff .= $_REQUEST['Betreff'];
      mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
      echo"Vielen Dank für Ihre eMail!";
   }
}
else
{
   echo"Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese <a href=\"kontaktformular.php\">Seite</a>.";
}
}

?>


Das funktioniert aber irgendwie nicht :-(
Andreas84
 
Beiträge: 3
Registriert: 18.03.2007, 13:56
Wohnort: Thalmässing

Beitragvon jk » 18.03.2007, 19:59

Das müßte klappen. Nach einem schönen Spaziergang am Rhein bin ich jetzt aber zu faul zum Testen. ;-)

<?php
session_start();
?>
<html>
<head>
<title>Kontaktformular mit PHP</title>
</head>
<body>
<?php


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"], "8h384ls94");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);


$Empfaenger = "service@modenio.de";

if($_REQUEST['Send'])
{
if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
{
echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
}
else
{
$Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
while(list($Formularfeld, $Wert)=each($_REQUEST))
{
if($Formularfeld!="Send")
{
$Mailnachricht .= $Formularfeld.": ".$Wert."\n";
}
}
$Mailnachricht .= "\nDatum/Zeit: ";
$Mailnachricht .= date("d.m.Y H:i:s");
$Mailbetreff = "Kontakt: ";
$Mailbetreff .= $_REQUEST['Betreff'];
mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
echo"Vielen Dank für Ihre eMail!";
}
}
else
{
echo"Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese <a href=\"kontaktformular.php\">Seite</a>.";
}
}
else {
echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
}

?>
</body>
</html>
jk
 
Beiträge: 6
Registriert: 18.03.2007, 10:24


Zurück zu Zahlen Captcha

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron