• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kontaktformular geht nicht

xXxPeterPanxXx

Neues Mitglied
Hi,

wie der Titel schon sagt geht mein Kontaktformular nicht. Ich habe error_reproting(E_ALL) eingestellt und alle Fehler behoben. Auch der oder das Script gibt keinen error wieder. Also ich weiß einfach nicht wo der Fehler ist.

Das hier der PHP Code:

PHP:
if(isset($_POST['submit'])) {
if(!empty($_COOKIE["spam_protection"])) {
$error = '<p class="error"> Sie haben bereits in den letzten 30 Minuten eine E-Mail verschickt.</p>';
}
if($_POST['number'] != md5($_POST['arithmetic'])) {
$error = '<p class="error">Bitte lösen Sie die Rechenaufgabe.</p>';
}
if(!ereg("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $_POST['email'])) {
$error = '<p class="error">Ihre E-Mail Adresse besteht nicht</p>';
}
if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['message'])) {
$error = '<p class="error">Bitte füllen Sie alle Felder aus</p>';
}
if ($error = '') {
$name          = nl2br(stripslashes(htmlspecialchars($_POST['name'])));
$betreff       = nl2br(stripslashes(htmlspecialchars($_POST['betreff'])));
$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'])));

$mailnachricht = "Es ist eine neue Nachricht eingetroffen:\n\n---------------------------------------------\n\nName:\n$name\n\nIP:\n$IP\n\nE-Mail:\n$absender\n\nNachricht:\n$nachricht";
mail("[email protected]", $betreff , $mailnachricht, "From: $name <$absender>", "-f [email protected]");
echo "<p class=\"good\">Die Nachricht wurde abgeschickt</p>";
setcookie("spam_protection", "spam_protection", time()+1800);
$bestaetigung = '<p class="good">Vielen dank für die Nachricht.</p>';
} 

}
und das hier das fieldset:
HTML:
<form method="post" action="kontakt.html">
<fieldset class="contact">
<label for="name">Ihr Name</label><input name="name" type="text" id="name"  />
<label for="email">Ihre E-Mail-Adresse</label><input name="email" type="text" id="email"  />

<label for="betreff">Betreff</label><input name="betreff" type="text" id="betreff"  />

<label for="message">Ihre Nachricht</label><textarea name="message" id="message"></textarea>

<label for="arithmetic">Wie viel ist <?php echo $zahl_1; ?> plus <?php echo $zahl_2; ?>?</label><input name="number" type="hidden" id="number"  value="<?php echo md5(( $zahl_1 + $zahl_2 )); ?>" />
<input name="arithmetic" type="text" id="arithmetic" />

<?php
//Wenn KEIN Cookie gegen Spam gesetzt wurde, dann soll der "Senden"-Button anklickbar sein
if(empty($_COOKIE["spam_protection"]))
{
echo "<input name=\"submit\" type=\"submit\" id=\"submit\" value=\"Senden\" />"; 
}
// Wenn aber ein Cookie gegen Spam gesetzt wurde, dann soll der "Senden"-Button blockiert werden
if(!empty($_COOKIE["spam_protection"]))
{
echo "<input name=\"submit\" type=\"submit\" id=\"submit\" value=\"Senden\" disabled=\"true\" />"; 
}
?>
Wie ich schon gesagt habe gibt es keine Fehlermeldung, so dass ich nicht mal die Fehlersuche eingrenzen kann.

MfG xXxPeterPanxXx
 
Wie ich schon gesagt habe gibt es keine Fehlermeldung, so dass ich nicht mal die Fehlersuche eingrenzen kann.
Dazu braucht man keine Fehlermeldung. Dann baut man eben nach jeder Zeile irgendeine Ausgabe ein, um so der Stelle auf die spur zu kommen, wo der Fehler liegt.

Debuggen lernen ist manchmal schwieriger als Programmieren zu lernen. :-)
 
Ja du hast Recht -> war ein bisschen blöd.

Anscheinend scheitert es schon an dem if(isset($_POST['submit'])), warum weiß ich aber nicht. Der Button hat den Namen submit, darum müsste es gehen. Tut es aber leider nicht.
 
Da ist auch schon der Fehler: Das Formular braucht den Namen "submit", da das Formular ja mit der Post-Methode abgeschickt wird. Logisch oder?

Außerdem kannst du auch mit if($_SERVER['REQUEST_METHOD'] == "POST") arbeiten.
 
Das habe ich nicht ganz verstanden.

Ich habe dem <fieldset> das Attribut name="submit" zugewiesen, aber das bringt auch nichts.

Eigentlich muss es das doch so gehen wie ich es bisher mache. isset überprüft ob die Variable besteht und wenn ja wird das Skript durchlaufen.

MfG xXxPeterPanxXx
 
Es soll ja geprüft werden, ob das Formular abgeschickt worden ist. Die Methode, die du anwenden möchtest, eignet sich für mehrere Formulare auf einer Seite. Wenn du if($_SERVER['REQUEST_METHOD'] == "POST") arbeitest, kannst du nur ein Formular mit der Methode POST abschicken. Dann brauchst du dem Formular oder dem Submitbutton keinen Namen oder ID geben. Sobald das Formular abgeschickt wurde, wird signalisiert, dass POST-Daten ankommen und if($_SERVER['REQUEST_METHOD'] == "POST") wird "ausgeführt", ansonsten (also wenn man das Formular nicht abgeschickt hat, sondern so auf die Seite geht) passiert eben nichts.
 
ereg:

This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.

PHP:
if (!preg_match("/^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$/",
    $_POST['email'])
) {
    // ...
}

...müsste auch gehen.

Mail-Adressen wie "[email protected]" (Betonung auf dem "+") sind allerdings auch valid, schaffen es aber nicht durch den Filter.
 
Zurück
Oben