Body Tag schließt nicht
bearbeitet von TSMoin,
> 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.
> ~~~PHP
> <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 extrapolieren 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