Hallo liebewinter,
Matthias hatte geschrieben:
echo "<br>" . "<b>" . "<h3>** Please enter all required fields **</h3>" . "</b>"; Das geht auch kürzer.
Du setzt mehrere Strings mit dem Punkt-Operator zusammen, aber Du könntest das als einen String schreiben. So:
echo "<br><b><h3>** Please enter all required fields **</h3></b>";
Dazu muss man jetzt aber andere Kritik geben:
-
Statt <br> solltest Du lieber dem <h3> Element über CSS einen margin-top geben.
-
Wenn Du die h3 Überschrift fett haben möchtest, dann mach das auch mit CSS, dafür gibt es
font-weight:bold
. Es sollte aber nicht nötig sein - mein Browser macht h3 Überschriften sowieso fett. -
Dass <b>FETT</b> einen Text fett macht, kommt aus der Zeit von HTML 4. Mit HTML 5 ist das nicht mehr so. Früher hat man b, i und u für Fett, Kursiv und Unterstrichen verwendet. Heute nicht mehr. Du kannst VERMUTEN, dass der Browser den Text <b>FETT</b> in fetten Buchstaben schreibt, aber es ist nicht garantiert.
-
Es ist grundsätzlich falsch, ein h3 Element in ein b Element zu setzen. Bei HTML Elementen ist festgelegt, für was sie stehen und was darin sein darf. In <b> Elementen ist „phrasing content“ erlaubt, also sowas wie fließener Text. Ein <h3> Element ist aber „sectioning content“, also etwas, das den Text aufteilt. Das ist etwas anderes. Guck Dir mal das Bild an, da siehst Du, welche Kategorien es gibt und wie sie zusammenhängen.
Falsches HTML: <b><h3>Überschrift 3</h3></b>
Richtiges HTML, aber unnötig: <h3><b>Überschrift 3</b></h3>
- Aber wie Matthias schon sagte: h3 ist nicht das richtige Element. h3 ist für Überschriften. Du willst eine Fehlermeldung ausgeben. Setze die in ein p Element, gib dem p Element eine Klasse, zum Beispiel class="error", und sorge mit CSS dafür dass die Fehlermeldung so aussieht wie Du es gern möchtest (Fett, Rot, ...).
Weiter…
Das hier:
$this->Name=$_POST["Name"];
$this->Email=$_POST["Email"];
$this->Message=$_POST["Message"];
und das hier
$name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING);
$message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING);
ist doppelt. Du KANNST dein Programm so schreiben, dass das Form von einem PHP Objekt gesteuert wird. Dann ist es gut, die Daten aus $_POST in Variablen des Objekts zu kopieren. Aber dann: (1) Mache es nur einmal, (2) mache es konsequent, (3) mache es zum richtigen Zeitpunkt.
Du hast eine Prüfung, ob $_POST deine Form-Werte enthält. Wenn nicht, schreibst Du deine „Please enter all required fields“ Meldung. Gut. Wenn doch, möchtest Du die Form-Werte verarbeiten. Auch gut. Aber lies sie nicht vorher. Es sollte so aussehen:
function PostOk() {
if(empty($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) {
echo "<p class='error'>*** Please enter all required fields ***</p>";
}
else
{
$this->Name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING);
$this->Email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING);
$this->Message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING);
$data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message);
...
}
}
Die ... Zeile ist kein PHP, das bedeutet nur: „hier geht es so weiter wie Du es geschrieben hattest“
Was Du "ein bisschen schwieriger" machen willst, ist, die Form-Werte in zwei Dateien zu schreiben. Einmal in text.txt, einmal in me.txt. Die Programmteile sehen eigentlich gleich aus und auch nicht falsch. Hast Du auf dem Server geguckt, ob me.txt entsteht? Wenn nicht - vielleicht gibt es einen PHP Fehler. Mit error_reporting(-1)
möchtest Du vielleicht alle Fehlermeldungen einschalten, das funktioniert so aber nicht auf jedem Computer. Richtig ist error_reporting(E_ALL)
.
Du hast auch viel zu viel kopiert - das Übertragen der POST-Werte in Variablen musst Du nur einmal machen.
Rolf
sumpsi - posui - clusi