Moin,
Das Problem ist, dass der body Schließungstag nicht richtig funktioniert. Das ist der Quelltext:
Der schließende body-Tag funktioniert, die Fehlermeldung kommt von PHP:
Parse error: syntax error, unexpected end of file on line 25.
Das heißt, dass du irgendwo noch eine Klammer offen hast. Schau mal beim else nach.
<html> <body> <?php $error = ""; if($_SERVER['REQUEST_METHOD'] == "POST") { if(empty(htmlspecialchars(stripslashes(trim($_POST["Name"]))))) { $error = "Der Name ist ein Pflichtfeld!!!!!!!!!!!!!!!!!!!!!!!!!"; } elseif (filter_var(htmlspecialchars(stripslashes(trim($_POST["email"]))), FILTER_VALIDATE_EMAIL)) { $error = "Keine Valide Email"; } else { echo "Hallo " . htmlspecialchars(stripslashes(trim($_POST["name"]))). "<br>Der Newsletter wird gesendet an:" . htmlspecialchars(stripslashes(trim($_POST["email"]))); } ?> <form action="<?php echo htmlspecialchars($_SERVER["php_self"]);?>" method="POST"> <input type="text" name="name" placeholder="Name"> <input type="text" name="email" placeholder="Email"> <?php echo $error; ?> <input type="submit" value="Senden"> </form> </body> </html>
Außerdem noch ein paar Anmerkungen zu deinem Code:
- Die doppelten Quotes brauchst du nur, wenn du Variablen expandieren möchtest, ansonsten reichen die einfachen.
- Wenn du auf echte Gleichheit testen möchtest, nimm
===
statt==
. - Verwende
stripslashes
nur, wenn du genau weißt, was du tust. Normalerweise brauchst du das heute nicht mehr – bzw. du kannst die Konfiguration abfragen, ob Slashes hinzugefügt werden. - Das kann zu Überraschungen führen, weil htmlspecialchars den Input in eine Form bringen kann, für die filter_var fehlschlägt:
filter_var(htmlspecialchars(stripslashes(trim($_POST["email"]))), FILTER_VALIDATE_EMAIL)
. - Du führst die Operationen trim und stripslashes mehrfach für die gleichen Variablen aus. Speichere das Ergebnis der Operation doch in einer neuen Variablen.
- Du brauchst für echo nicht einen String zusammenketten, du kann echo auch wie folgt aufrufen:
echo 'Hallo', ' ', 'Welt!', "\n"
. $_POST['Name'] !== $_POST['name']
- placeholder sind keine Label!
- Deine input-Elemente haben keine Länge.
Viele Grüße
Robert
[edited: Variablen expandieren, nicht extrapolieren, Tom S.]