haliel
Goto Top

Eigenes Kontakformular mit kleinem Fehler

Dumme Cookies

Hallo,

ich bin gerade dabei mal ein eigenes Kontakformular zu erstellen, dummerweiße klappt das mit dem Cookie setzten nicht so ganz.
Hier mal der Code

kontak.php
<?php
// Wenn alle Felder ausgefuellt wurden und der Captcha stimmt, wird ein Cookie gesetzt
if($_GET['action'] != "" && !empty($_POST['name']) && $_POST['number'] != md5($_POST['arithmetic']) && !empty($_POST['message']) && ereg ("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $_POST['email']) && !empty($_POST['email']))  
{
setcookie("spam_protection", "spam_protection", time()+500);  
}

// Erstellen einer Rechenaufgabe
$Zahl_1 = intval(rand(1, 5));
$Zahl_2 = intval(rand(1, 5));
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>
<title>Kontaktformular</title>
<link href="layout.css" rel="stylesheet" type="text/css" />  
<link href="style.css" rel="stylesheet" type="text/css" />  
</head>
<body>
<?php

 $mailsent = 0; 
 if($_GET['action'] == "send")  
 {
   if(empty($_POST['name']) or empty($_POST['email']) or empty($_POST['email1']) or $_POST['email'] != ($_POST['email1']) or !ereg ("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $_POST['email']) or empty($_POST['message']) or $_POST['number'] != md5($_POST['arithmetic']))  
   {
    $info = 'Bitte bef&uuml;llen sie alle Felder';  
  
    if(empty($_POST['name']))  
    {
     $color_name = "#FF0000";  
    }
    if(empty($_POST['email']))  
    {
     $color_email = "#FF0000";  
    }
    else
    {
     if(!ereg ("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $_POST['email']))  
     {
      $info='Die eingegebene E-Mail-Adresse ist ung&uuml;ltig!';  
      $color_email = "#FF0000";  
     } 
    }
    if(empty($_POST['email1']))  
    {
     $color_email1 = "#FF0000";  
    }
    else
    {
     if($_POST['email'] != ($_POST['email1']))  
     {
      $info='Die eingegebenen E-Mail-Adressen stimmen nicht &uuml;berein!';  
      $color_email = "#FF0000";  
      $color_email1 = "#FF0000";  
     }   
    }
    if(empty($_POST['message']))  
    {
     $color_message = "#FF0000";  
    }
    if(empty($_POST['arithmetic']))  
    {
      $color_arithmetic = "#FF0000";  
    }
    elseif($_POST['number'] != md5($_POST['arithmetic']))  
    {
     $color_arithmetic = "#FF0000";  
     $info='Die Rechenaufgabe wurde falsch gel&ouml;st!';  
    }   
   
   } 
   else
   {
    // dann den ganzen Muell von Spambots oder auch menschlichen Spammern entfernen...
    $name          = nl2br(stripslashes(htmlspecialchars($_POST['name'])));  
    $IP            = getenv("REMOTE_ADDR");  

    $absender      = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $_POST['email'] );  
    $absender      = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $absender );  

    $nachricht     = nl2br(stripslashes(htmlspecialchars($_POST['message'])));  

    // ...die Nachricht, die Sie erhalten moechten, wenn eine neue Nachricht an Sie versandt wurde, definieren...
    $mailnachricht = "Hallo!\n\nEs ist eine neue Nachricht fuer Sie eingetroffen:\n\n---------------------------------------------\n\nName:\n$name\n\nIP:\n$IP\n\nE-Mail:\n$absender\n\nNachricht:\n$nachricht\n\n---------------------------------------------\n\nSie koennen dem Absender der Nachricht direkt antworten, indem Sie einfach auf diese E-Mail antworten.\n\nMfG\nIhr Webmaster ;-)";  

    // ...an Sie verschicken...
    mail("%emailadrresse%", "Neue Nachricht fuer Sie!", $mailnachricht, "From: $name <$absender>");  

    // ...und dem Benutzer sagen, dass alles glatt lief!
    $erfolg='Nachricht wurde erfolgreich an uns versand.<br>Wir werden ihre Nachricht umgehend beantworten.';  
    $mailsent = 1;
   }
  
 }
 
 
?>
Sie k&ouml;nnen uns eine Nachricht &uuml;ber das Kontaktformular schreiben.
<div id="contact">  
 <p class="fehlermeldung"><?php echo $info; ?></p>  
    <p class="erfolg"><?php echo $erfolg; ?></p>  
  <form class="form" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>?action=send" accept-charset="UTF-8" method="post" id="contact-mail">  
    <div class="kf">  
      <div style="color:<?php echo $color_name; ?>">Ihr Name:</div>  
      <div>
        <input name="name" type="text" id="name" maxlength="255" value="<?php echo htmlspecialchars($_POST['name']); ?>"/>  
        <img src="hilfeicon.gif" alt="Hilfe" width="15" height="15" title="Bitte geben Sie Ihren Namen an, damit wir Sie pers&ouml;nlich ansprechen k&ouml;nnen!" /> </div>  
    </div>
    <div class="kf">  
      <div style="color:<?php echo $color_email; ?>">Ihre E-Mail-Adresse:</div>  
      <div>
        <input type="text" maxlength="255" name="email" id="email" value="<?php echo htmlspecialchars($_POST['email']); ?>"/>  
        <img src="hilfeicon.gif" alt="Hilfe" width="15" height="15" title="Ihre aktuelle, g&uuml;ltige E-Mail Adresse, an der wir Ihnen antworten!" /> </div>  
    </div>
    <div class="kf">  
      <div style="color:<?php echo $color_email1; ?>">Ihre E-Mail Adresse wiederholen:</div>  
      <div>
        <input type="text" maxlength="255" name="email1" id="email1" value="<?php echo htmlspecialchars($_POST['email1']); ?>"/>  
        <img src="hilfeicon.gif" alt="Hilfe" width="15" height="15" title="Ihre aktuelle, g&uuml;ltige E-Mail Adresse, an der wir Ihnen antworten!" /> </div>  
    </div>
    <div class="kf" >  
      <div style="color:<?php echo $color_message; ?>">Nachricht:</div>  
      <div>
        <textarea name="message" id="message"><?php echo htmlspecialchars($_POST['message']); ?></textarea>  
        <img src="hilfeicon.gif" alt="Hilfe" width="15" height="15" title="Bitte formulieren Sie Ihr Anliegen m&ouml;glichst detailliert!" /> </div>  
    </div>
    <div class="kf" >  
      <div style="color:<?php echo $color_arithmetic; ?>">Wieviel ist <?php echo $Zahl_1; ?> plus <?php echo $Zahl_2; ?>?</div>  
      <div>
        <input name="number" type="hidden" id="number"  value="<?php echo md5(( $Zahl_1 + $Zahl_2 )); ?>"/>  
        <input name="arithmetic" type="text" id="arithmetic"/>  
        <img src="hilfeicon.gif" alt="Hilfe" width="15" height="15" title="Spamschutz: Addieren Sie bitte <?php echo $Zahl_1; ?> und <?php echo $Zahl_2; ?> und schreiben Sie deren Summe in das Textfeld." /> </div>  
    </div>
    <div class="kf"><strong>M&ouml;gliche Aktionen</strong>  
   <?php
 // Wenn KEIN Cookie gegen Spam gesetzt wurde, dann soll der "Senden"-Button anklickbar sein 
 if($_COOKIE["spam_protection"] != "spam_protection")  
 {
?>
    <input name="submit" type="submit" id="submit" value="Senden" />  
    <?php
 }
 // Wenn aber ein Cookie gegen Spam gesetzt wurde, dann soll der "Senden"-Button blockiert werden 
 if($_COOKIE["spam_protection"] == "spam_protection")  
 {
?>
    <input name="submit" type="submit" id="submit" value="Senden" disabled="disabled" />  
    <?php
 }
?>
      
      <input name="reset" type="reset" id="reset" value="Zur&uuml;cksetzen" />  
      <img src="hilfeicon.gif" alt="Hilfe" width="15" height="15" title="Sie k&ouml;nnen das Formular absenden oder zur&uuml;cksetzen!" /> </div>  
    <div class="kf"><strong>Sie ben&ouml;tigen Hilfe? </strong> <br />  
      Mit dem Mauszeiger auf das Fragezeichen zeigen und Hilfe naht :-) </div>
  </form>
</div>
<?php
echo ("Cookie: " & $_COOKIE["spam_protection"]);  
?>
</body>
</html>

Mein Problem ist folgendes.
Der Skript funktioniert so weit ganz gut. Nur die Sache mit den cookies läuft nicht. Irgendwie wird beim "Erfolgreichen" senden kein Cookie gesetzt, und ich bekomme nicht raus warum.

Weiß jemand von euch Rat?

Achja wofür ich das Cookie brauche. Das cookie soll verhindern, dass jemand mehrmals das Formular hintereinander abschicken kann. Vllt kennt ihr ja auch eine andere Lösung dafür.

Danke schon mal im Vorraus

gruß Haliel

Content-ID: 113011

Url: https://administrator.de/contentid/113011

Ausgedruckt am: 26.11.2024 um 01:11 Uhr

filippg
filippg 01.04.2009 um 20:46:00 Uhr
Goto Top
Hallo,

PHP hat eine integrierte Session-Verwaltung. Ich würde dir empfehlen, die zu verwenden, und nicht mit Cookies etwas eigenes zu basteln.
Warum das Cookie nicht gesetzt wird? Hast du sichergestellt, dass es nicht gesetzt wird, oder liegt das Problem vielleicht nur beim Auslesen? Vor dem ersten "<?php" darf kein Leerzeichen sein.

Gruß

Filipp
Top44
Top44 01.04.2009 um 22:30:35 Uhr
Goto Top
PHPSessions sind/werden deine Freunde.


Grüzi
Haliel
Haliel 03.04.2009 um 17:36:38 Uhr
Goto Top
Ich hoffe es, kam leider noch nicht zum Testen. Werde mal heute abend rumprobieren^^. Danke schon mal für die Hilfe.