PHP-Kontaktformular mit Grafik-Check

Hier werden Probleme rund um das Zahlen Captcha behandelt

Moderator: frameguard

PHP-Kontaktformular mit Grafik-Check

Beitragvon theprodigy » 07.04.2008, 17:43

Hallo,

ich brauchte einen Schutz bei meinem Kontaktformular
und wollte daher das Zahlen-Captcha einrichten, aber
irgendwie habe ich wohl einen Fehler eingebaut, obwohl
ich streng nach Tutorial/Anleitung ging. Die Datei, bzw.
das Kontaktformular erscheint nun gar nicht mehr, bzw.
wird nicht geladen.

Hier ist meine Datei kontakt.php vor der Veränderung:
Code: Alles auswählen
<?
require("$DOCUMENT_ROOT/menulinks.inc.php");
$status = $menu["kontakt"]["id"];
require("$DOCUMENT_ROOT/header.inc.php");
?>
 
<div id="main">
<?php
function generate_formular() {
?>
<div id="contentleft">
<p class="centered">
  Bei ernsthaftem Interesse an einer Zusammenarbeit freue ich mich über eine Anfrage mit vollständigen Angaben.
</p>
<form action="kontakt.php" method="post">
<p>
  <label for="anrede">Anrede</label>
    <select name=anrede size="1">
      <option selected>Herr
      <option>Frau
      <option>Firma/Agentur
     </select>
  </p>

<p>
  <label for="name">Name</label>
    <input type="text" name="name" size="40" maxlength="120" />
  </p>
<p>
  <label for="telefon">Telefon</label>
    <input type="text" name="telefon" size="40" maxlength="80" />
  </p>
 
  <p>
   <label for="email">E-Mail-Adresse</label>
    <input type="text" name="email" size="40" maxlength="90" />
   </p>

  <!!   ------------------------------------------------------Angaben Referenzen des Fotografen      -----------------------------------------------------------------!!>
  <p>
   <label for="website">Internetpräsenz</label>
    <input type="text" name="website" size="40" maxlength="90" />
   </p>
<p>
  <label for="betreff2">Betreff</label>
  <input type="text" name="betreff2" size="40" maxlength="90" />
</p>
<p> <label for="nachricht">Nachricht</label>
  <textarea name="nachricht" cols="40" rows="8"></textarea>
</p>
  <textarea class="gbcommentnv" name="comment1" cols="40" rows="5"></textarea>
  <textarea class="gbcommentnv" name="comment2" cols="40" rows="5"></textarea>
  <textarea class="gbcommentnv" name="comment3" cols="40" rows="5"></textarea>
<p>
  <input type="submit" name="mail" value="E-Mail verschicken" />
</p>
</form>
<p class="centered">
<br /><br />
Bitte keine Anfragen bezüglich Escort-Service oder ähnlicher Dienstleistungen.
</p>
</div> <!-- contentleft -->
<div id="contentright">
  <img id="right" src="images/kontakt.jpg" alt="Bild des Autors" />
</div>
<?
}
function generate_answer() {
?>
<p class="headline">
  Ihre Mail wurde zugestellt.<br />
  Herzlichen Dank für Ihr Interesse.
</p>
<?
}

/* function *main* */
if (!sent || strlen($name) < 2 || strlen($email) <2) {
   generate_formular();
} else {
$pruefung = array(
  'email' => '/^ [\w.!#%&\*\/=\?\^\`\{\|\}\~+-]{1,64}
    \@ [[:alnum:].-]{1,255} \. [a-z]{2,6} $/xi',
    'name' => '/^[[:print:]]{3,}$/',
  'betreff' => '/^[[:print:]]{3,}$/');
//Eingabeprüfung
$fehler = array();
foreach($_POST as $parameter => $wert) {
  if(isset($pruefung[$parameter])) {
     if(!preg_match($pruefung[$parameter], $wert)) {
        $fehler[] = "Probleme mit Feld " . $parameter . ": " . $wert;
      }
  } else {
      unset($_POST[$parameter]);
  }
}
   if(strlen($_POST['comment1']) == 0 and strlen($_POST['comment1']) == 0 and strlen($_POST['comment1']) == 0 and empty($fehler)){
    $betreff = "E-Mail über Kontaktformular";
    $message = "<html><body>
        <p align=\"left\">
        <b>Anrede: </b>    $anrede<br />
        <b>Name: </b>     $name<br />
        <b>Telefon: </b>     $telefon<br />
        <b>E-Mail: </b>    $email<br />
        <b>Internetpräsenz: </b>  <a href=\"$website\">$website</a><br /><br />
        <b>Betreff: </b>    $betreff2<br />
     <b>Nachricht: </b>   $nachricht<br />
        </p>
        </body></html>
        ";
       
 
  $header    = "From: $email\r\n";
  $header   .= "Content-Type: text/html\r\nContent-Transfer-Encoding: 8bit\r\n";
  $header   .= "X-Mailer: PHP ". phpversion();
 
  mail (">> Edit by Admin :Das Posten von Email-Adressen ist hier nicht gestattet <<   
    generate_answer();
} else { // if commentfelder 0
    if(!empty($fehler)){
      ?><ul><?
      foreach($fehler as $row){
       echo"<li>".$row."</li>";
      }
      ?></ul><?
  }
 
    generate_formular();
}
}
?>
</div> <!-- div main -->
<?php
require("$DOCUMENT_ROOT/footer.inc.php");
?>


... und hier danach:
Code: Alles auswählen
<?
   session_start();
   require("$DOCUMENT_ROOT/menulinks.inc.php");   
   $status = $menu["kontakt"]["id"];
   require("$DOCUMENT_ROOT/header.inc.php");
?>
   
<div id="main">

<?php

function generate_formular() {
?>

<div id="contentleft">

   <p class="centered">
      Bei ernsthaftem Interesse an einer Zusammenarbeit freue ich mich über eine Anfrage mit vollständigen Angaben.
   </p>   

<form action="kontakt.php" method="post">

   <p>
      <label for="anrede">Anrede</label>
      <select name=anrede size="1">
          <option selected>Herr
          <option>Frau
          <option>Firma/Agentur
       </select>
    </p>


   <p>
      <label for="name">Name</label>
      <input type="text" name="name" size="40" maxlength="120" />
    </p>

   <p>
      <label for="telefon">Telefon</label>
      <input type="text" name="telefon" size="40" maxlength="80" />
    </p>
     
    <p>
       <label for="email">E-Mail-Adresse</label>
      <input type="text" name="email" size="40" maxlength="90" />
   </p>


  <!!   ------------------------------------------------------Angaben Referenzen des Fotografen      -----------------------------------------------------------------!!>   

    <p>
       <label for="website">Internetpräsenz</label>
      <input type="text" name="website" size="40" maxlength="90" />
   </p>

   <p>
      <label for="betreff2">Betreff</label>
      <input type="text" name="betreff2" size="40" maxlength="90" />
   </p>

   <p>   <label for="nachricht">Nachricht</label>
      <textarea name="nachricht" cols="40" rows="8"></textarea>
   </p>
      <textarea class="gbcommentnv" name="comment1" cols="40" rows="5"></textarea>
      <textarea class="gbcommentnv" name="comment2" cols="40" rows="5"></textarea>
      <textarea class="gbcommentnv" name="comment3" cols="40" rows="5"></textarea>

   <p>
      <img src="captcha/captcha.php" border="0" title="Sicherheitscode"><br />
      <input type="text" name="sicherheitscode" size="5">
   </p>

   <p>
      <input type="submit" name="mail" value="E-Mail verschicken" />
   </p>
</form>

<p class="centered">
   <br /><br />
   Bitte keine Anfragen bezüglich Escort-Service oder ähnlicher Dienstleistungen.
</p>

</div> <!-- contentleft -->

<div id="contentright">
      <img id="right" src="images/kontakt.jpg" alt="Bild des Autors" />
</div>

<?
}

function generate_answer() {
?>   
   <p class="headline">
      Ihre Mail wurde zugestellt.<br />
      Herzlichen Dank für Ihr Interesse.
   </p>
<?
}

if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);

/* function *main* */
if (!sent || strlen($name) < 2 || strlen($email) <2) {
   generate_formular();
} else {

$pruefung = array(
    'email' => '/^ [\w.!#%&\*\/=\?\^\`\{\|\}\~+-]{1,64}
    \@ [[:alnum:].-]{1,255} \. [a-z]{2,6} $/xi',
    'name' => '/^[[:print:]]{3,}$/',
    'betreff' => '/^[[:print:]]{3,}$/');

   //Eingabeprüfung
   $fehler = array();
   foreach($_POST as $parameter => $wert) {
      if(isset($pruefung[$parameter])) {
           if(!preg_match($pruefung[$parameter], $wert)) {
              $fehler[] = "Probleme mit Feld " . $parameter . ": " . $wert;
          }
      } else {
          unset($_POST[$parameter]);
      }
   }

   if(strlen($_POST['comment1']) == 0 and strlen($_POST['comment1']) == 0 and strlen($_POST['comment1']) == 0 and empty($fehler)){

      $betreff = "E-Mail über Kontaktformular";
      $message = "<html><body>
                  <p align=\"left\">
                  <b>Anrede: </b>            $anrede<br />
                  <b>Name: </b>             $name<br />
                  <b>Telefon: </b>             $telefon<br />
                  <b>E-Mail: </b>            $email<br />
                  <b>Internetpräsenz: </b>      <a href=\"$website\">$website</a><br /><br />
                  <b>Betreff: </b>            $betreff2<br />
               <b>Nachricht: </b>         $nachricht<br />
                  </p>
                  </body></html>
                  ";
                   
   
      $header    = "From: $email\r\n";
      $header   .= "Content-Type: text/html\r\nContent-Transfer-Encoding: 8bit\r\n";
      $header   .= "X-Mailer: PHP ". phpversion();
       
      mail ("blaaaa AT schubidu PUNKT deutschland", $betreff, $message, $header);
   
      generate_answer();

   } else { // if commentfelder 0
      if(!empty($fehler)){
            ?><ul><?
            foreach($fehler as $row){
               echo"<li>".$row."</li>";   
            }
            ?></ul><?
      }
   
      generate_formular();   
   }

}
}
?>

</div> <!-- div main -->

<?php
   require("$DOCUMENT_ROOT/footer.inc.php");
?>


session_start(); nach oben gepackt und Rest in den
Mail-Sende-Bereich, aber nix klappt.

Das Verzeichnis captcha mit den drei Dateien habe ich
definitiv richtig angelegt. :-/
theprodigy
 
Beiträge: 1
Registriert: 07.04.2008, 17:37

Beitragvon Steef389 » 09.04.2008, 17:38

Code: Alles auswählen
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);

/* function *main* */
if (!sent || strlen($name) < 2 || strlen($email) <2) {
   generate_formular();
} else {

$pruefung = array(
    'email' => '/^ [\w.!#%&\*\/=\?\^\`\{\|\}\~+-]{1,64}
    \@ [[:alnum:].-]{1,255} \. [a-z]{2,6} $/xi',
    'name' => '/^[[:print:]]{3,}$/',
    'betreff' => '/^[[:print:]]{3,}$/');

   //Eingabeprüfung
   $fehler = array();
   foreach($_POST as $parameter => $wert) {
      if(isset($pruefung[$parameter])) {
           if(!preg_match($pruefung[$parameter], $wert)) {
              $fehler[] = "Probleme mit Feld " . $parameter . ": " . $wert;
          }
      } else {
          unset($_POST[$parameter]);
      }
   }

2 Fehler:
1. Falls kein Sicherheitscode eingegeben wurde, wird gar nichts angezeigt, da er gar nicht in die Auswahlschleife hüpft.
2. Falls Parameter nicht gefunden => lösche POST.

So müsste es funktionieren:
Code: Alles auswählen
/* function *main* */
if (!sent || strlen($name) < 2 || strlen($email) <2) {
   generate_formular();
} else {

$pruefung = array(
    'email' => '/^ [\w.!#%&\*\/=\?\^\`\{\|\}\~+-]{1,64}
    \@ [[:alnum:].-]{1,255} \. [a-z]{2,6} $/xi',
    'name' => '/^[[:print:]]{3,}$/',
    'betreff' => '/^[[:print:]]{3,}$/',
    'sicherheitscode' => '/^[A-Za-z0-9]*$/');

   //Eingabeprüfung
   $fehler = array();
   foreach($_POST as $parameter => $wert) {
      if(isset($pruefung[$parameter])) {
           if(!preg_match($pruefung[$parameter], $wert)) {
              $fehler[] = "Probleme mit Feld " . $parameter . ": " . $wert;
          }
      } else {
          unset($_POST[$parameter]);
      }
   }
if (isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
}
else
{
$fehler[] = "Sicherheitscode war falsch";
}




PS: HTML_Kommentare mit <!-- -->
Steef389
 
Beiträge: 57
Registriert: 20.06.2007, 20:31


Zurück zu Zahlen Captcha

Wer ist online?

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

cron