Cookie Prop

Mein Kontakt script geht hier irgendwie nicht richtig.
Auf Funpic war alles noch okay.
hier mal ein ausschnit.

[code]<?php
if($_GET[‘action’] == send){
$name = $_POST[‘name’];
$email = $_POST[‘e-mail’];
$betreff = $_POST[‘betreff’];
$text = $_POST[‘text’];
$ts = time();
$datum = date (“d.m.Y H:i”,$ts);
$ip = $_SERVER[‘REMOTE_ADDR’];
$an ="FelixTzschentke@web.de";
$t = “Hallo”;

if ($_COOKIE[‘kspammschutz’] == false) {
if(empty($t)){
echo “Du hast kein Feld ausgefüllt.Bitte kehre zurück und fülle sie aus.”;
}elseif(empty($name)){
echo “Du hast deinen Namen nicht angegeben.Bitte kehre zurück und fülle dein Namen aus.”;
}elseif(empty($email)){
echo “Du hast deine E-Mail Adresse nich angegeben.Bitte kehre zurück und fülle deine E-Mail Adresse aus.”;
}elseif(empty($betreff)){
echo “Du hast keinen Betreff angegeben.Bitte kehre zurück und fülle ihn aus.”;
}elseif(empty($text)){
echo “Du hast keinen Text geschrieben.Bitte kehre zurück und fülle ihn aus.”;
}else{
$text = “Sie haben eine neue Nachricht von $name.Die E-Mail Adresse des Senders lautet: $email \n Betreff: $betreff \n Nachricht: \n $text \n \n IP: $ip \n Absende Datum: $datum”;
@mail($an, $betreff, $text, "From: " . $email);
echo “Ihre Nachricht an den Webmaster dieser Homepage wurde erfolgreich versand.”;
}
setcookie(“kspammschutz”, true, time()+(60*60), “/”); <–Nach hier liegt der Fehler.
}else {
echo “Spammschutz ist aktiviert.Sie Können erst wieder in 1 Stunde den Webmaster Kontaktieren.”;
}
}else{
}
?>[/code]

Warning: Cannot modify header information - headers already sent by (output started at /users/webhelp/www/kontakt.php:10) in /users/webhelp/www/kontakt.php on line 74

Hier die seite: http://webhelp.bplaced.net/kontakt.php

Danke an alle die Helfen.

Hi, welche Zeile ist die in der Fehlermeldung angegebene?

Die Fehlermeldung heißt soviel wie dass du schon html ausgegeben hast, und anschließend willst du noch das cookie setzen.

setcookie(“kspammschutz”, true, time()+(60*60), “/”); <–Nach hier liegt der Fehler.

Du mußt das cookie vor jeglicher Textausgabe senden, weil das
cookie zu den header-Informationen gehört.

Also die gesamte Ausgabe etwa in einer Zeichenkette ablegen
und diese erst nach dem Senden des cookies ausgeben.
Zudem solltest du da wohl nicht mit elseif arbeiten, denn wenn
der Nutzer mehrere Sachen nicht ausfüllt, bekommt er so nur
die erste Fehlermeldung und nicht alle zutreffenden.

Da cookies ja auch abgelehnt werden können, ist zudem wohl
auch die Interpretation falsch, falls kein cookie gesetzt ist.
Da solltest du nochmal drüber nachdenken.
Insbesondere wenn es sich um den Kontakt handelt, der in einem
Impressum Pflicht ist, darf das nicht von cookies oder sowas
abhängen, sondern muß immer funktionieren.

Richtig also das cookie gleich nach

if ($_COOKIE['kspammschutz'] == false) {

danke für die hilfe werde das nacher nochmal bearbeiten.

dasselbe gilt auch für sessions.

ausserdem nochmal als dringender tipp bezüglich sicherheit:

die formulardaten auf format prüfen (reguläre ausdrücke…) und htmlspecialchars() nicht vergessen!

regulärer ausdruck zur e-mail überprüfung kann ich dir per pn schicken (und auch anderen bplaced usern :ps:)

anstelle von endlos elseif könntest du switch-case nehmen, oder, nochbesser die
überprüfung mit nur if / else vornehmen, und einer variablen (z.b. $mailcheck) den wert 1 oder 0 zuweisen, später überprüfst du die werte der variablen, und gibts entsprechend das mailsenden frei, oder gibst einen hinweis aus.

inetwa so:

if (isset($_POST['mail'])){
$mailcheck = 1;
$mail = htmlspecialchars($_POST['mail']);
}
else
$mailcheck = 0;

if (isset($_POST['betreff'])){
$betfcheck = 1;
$betreff = htmlspecialchars($_POST['betreff']);
}
else
$betfcheck = 0;

if ($mailcheck == 0)
echo "<div class='badaction'>E-mail Adresse nicht angegeben</div>";

if ($betfcheck == 0)
echo "<div class='badaction'>Kein Betreff angegeben</div>";

if ($mailcheck == 1 && $betfcheck == 1){

// e-mail senden

}
else
echo "<a href='formular.???'>zurück zum Formular</a>";

mit etwas geschicklichkeit kann man auch die schon eingegeben formulardaten in die inputs einbauen, so das nichts doppelt eingegeben werden muss.
das formular wird dann so lange neu angezeigt, bis alle angaben korekt sind.