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
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
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ü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ü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 ü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ö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önnen uns eine Nachricht ü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önlich ansprechen kö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ü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ü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ö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ö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ücksetzen" />
<img src="hilfeicon.gif" alt="Hilfe" width="15" height="15" title="Sie können das Formular absenden oder zurücksetzen!" /> </div>
<div class="kf"><strong>Sie benö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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 113011
Url: https://administrator.de/contentid/113011
Ausgedruckt am: 26.11.2024 um 01:11 Uhr
3 Kommentare
Neuester Kommentar
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
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