(edit) PHP erzeugt Whitespaces im HTML Code

  • Ich bin mir ehrlich gesagt nicht sicher ob meine Frage zu PHP, HTML, CSS oder JavaScript gehört, weil es mehr oder minder um alles geht.


    Genauer gesagt habe ich ein Kontaktformular für eine Website, dass (bisher) als kontakt.html gespeichert ist. Styles wurden mit CSS erstellt. Die Seite hat eine Hauptnavigation, die mittels JavaScript Aussehen und Verhalten wechselt (je nach Größe des Screens bzw. onScroll). Eine Formularvalidierung mit JavaScript habe ich bereits eingerichtet. Jetzt arbeite ich an der serverseitigen mit PHP, soweit so gut.

    Das PHP Script fragt verschiedene Kriterien ab, entfernt Script-Tags usw., und wenn alles ok ist wird das Formular abgeschickt. Wenn nicht, sollen Fehlermeldungen direkt im Formular ausgegeben werden. Bereits eingegebene Daten sollen dabei nicht verloren gehen. Das müsste ich auch so umsetzen können.


    Mein Problem ist folgendes:

    Damit der Parser meine ins Formular eingebetteten PHP-Tags erkennt, muss aus kontakt.html ja kontakt.php werden. Aber wenn ich das mache, funktionieren meine JS Styles für den Header nicht mehr richtig. Außerdem wird über dem Header ein weißer Rand angezeigt, d.h. der Header ist um 20 oder so Pixel nach unten verschoben.


    Die Formularvalidierung mit JS funktioniert weiterhin. JS Fehler in der Konsole vom Browser bekomme ich keine. Getestet wird die Site mit XAMPP.


    Ich weiß, das ist keine allzu genaue Fehlerbeschreibung. Aber es erscheint mir wenig sinnvoll einfach tonnenweise Code zu posten. Vielleicht hat jemand eine Idee woran sowas grundsätzlich liegen kann. Ich bin mich grad erst in PHP am einarbeiten und dem entsprechend begrenzt ist mein Wissen.


    Beste Grüße,

    Cyne

  • Eine wesentliche Veränderung durch die Änderung der Erweiterung ist ja, dass das PHP jetzt geparst wird. Kann es sein, dass dieses die Struktur der Seite verändert, HTML-Elemente und/oder inline-Styles einfügt?

    In jedem Fall wäre es gut, wenn Du eine Demo-Seite hättest, wo man das Ganze live sehen kann. Dort kann man zwar nicht das PHP einsehen, aber HTML, CSS und JS. Hast Du überhaupt noch keinen Webspace?

  • Ich hab Webspace. Es fällt mir nur immer schwer halbfertige Sachen zu veröffentlichen. Grade was das Formular angeht bin ich mich auch noch in das ganze Security Zeug am Einarbeiten.


    Ich könnte die entsprechenden Code Teile aber hier posten, wenn auch das weiterhelfen würde.


    Die PHP Fehlermeldungen werden bisher zum Testen via 'echo' auf validate-form.php ausgegeben, wohin die form action verweist wenn submit geklickt wird. Auf kontakt.html bzw kontakt.php gibts bisher noch keine php tags (die muss ich noch einbauen).



    Edit: Peinlich, aber es lag tatsächlich einfach an einem Syntaxfehler den ich ewig nicht gefunden hab, trotz Suchen... :pinch: Jetzt wird kontakt.php richtig angezeigt.


    Dafür habe ich jetzt das Problem dass anstatt POST, GET gesendet wird. Offene Tags kann ich aber keine finden. Ist wahrscheinlich besser dafür ein neues Thema zu machen und dieses zu beenden, falls ich den Fehler nicht finde?

  • Hoffe es ist ok dass ich hier einfach nochmal poste. Grund ist dass ich viel rumprobiert habe.


    Ich habe oberhalb meines <DOCTYPE> Tags einen PHP Teil um Variablen zu definieren, die im HTML Document vorkommen um Fehlermeldungen bzw. User Input auszugeben. Bin mir mittlerweile also relativ sicher dass es dieser Teil ist der den Whitespace erzeugt und nicht das Umbenennen von *.html zu *.php ansich.

    Ich habe bereits versucht den PHP Teil an verschiedene Stellen außerhalb und innerhalb des <DOCTYPE> zu packen, aber der weiße Rand verschwindet nicht.



    Hier mein Code fürs Kontaktformular:


    PHP:

  • Ich bezweifle, dass PHP dafür verantwortlich ist.

    Diese ganzen isset-Abfragen

    Code
    if (!isset($titlesError)) {$titlesError = ''; }
    if (!isset($usrnameError)) {$usrnameError = ''; }
    if (!isset($emailError)) {$emailError = ''; }
    if (!isset($usrmsgError)) {$usrmsgError = ''; }
    if (!isset($titles)) {$titles = ''; }
    if (!isset($usrname)) {$usrname = ''; }
    if (!isset($email)) {$email = ''; }
    if (!isset($usrmsg)) {$usrmsg = ''; }

    sind Quatsch, denn keinerdieser Variablen wird gesetzt sein, also kannst du auch gleich schreiben

    Code
    $titlesError = $usrnameError = $emailError = $usrmsgError = '';
    $titles = $usrname = $email = $usrmsg = '';
  • ...was aber auch Quatsch ist, denn so wie es aussieht, repräsentieren die Variablen die Formulardaten, die später hier übernommen werden:

    PHP
    //get form data and filter it
    $titles = filter_var($_POST['titles'], FILTER_SANITIZE_STRING);
    $usrname = filter_var($_POST['usrname'], FILTER_SANITIZE_STRING);
    $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
    $usrmsg = filter_var($_POST['usrmsg'], FILTER_SANITIZE_STRING);

    , damit sind sie gesetzt.


    Cyne: Bei FILTER_VALIDATE_EMAIL solltest Du bedenken, dass das per default nicht mit Unicode-Zeichen umgehen kann. Dazu musst Du das Flag FILTER_FLAG_EMAIL_UNICODE verwenden, das allerdings erst ab PHP 7.1 zur Verfügung steht, wenn ich mich nicht täusche.

    Weiterhin liefern VALIDATE-Filter true oder false, was Dir in dem Fall nicht das in $email liefert, was Du möchtest.


    KORREKTUR:

    FILTER_VALIDATE_EMAIL liefert nur im Erfolgsfall die E-Mail Adresse zurück, ansonsten false.

  • Nach dem Testen kann ich sagen dass sowohl

    Code
    if (!isset($titlesError)) {$titlesError = ''; }
    if (!isset($usrnameError)) {$usrnameError = ''; }
    if (!isset($emailError)) {$emailError = ''; }
    if (!isset($usrmsgError)) {$usrmsgError = ''; }
    if (!isset($titles)) {$titles = ''; }
    if (!isset($usrname)) {$usrname = ''; }
    if (!isset($email)) {$email = ''; }
    if (!isset($usrmsg)) {$usrmsg = ''; }

    als auch

    Code
    $titlesError = $usrnameError = $emailError = $usrmsgError = '';
    $titles = $usrname = $email = $usrmsg = '';

    den ungewollten Leerraum über dem Header erzeugt. Danke trotzdem für die Kurzversion.


    Ich hätte vielleicht auch noch dazu sagen sollen dass der Whitespace erst nach Klick auf 'submit' erscheint. Vorher wird die Seite normal angezeigt.


    Entferne ich die Definitionen der Variablen aus kontakt.php werden mir Fehler angezeigt:

    Notice: Undefined variable: titlesError in C:\xampp\htdocs\Projektname\kontakt.php on line 58

    Jeweils in den Lines wo ich PHP eingefügt habe im HTML Code.


    Wie validiere ich eine Email Adresse denn dann am Besten daraufhin dass sie ein @ und .com, .de, usw hat?



    EDIT: Was mir auch noch aufgefallen ist, wenn man auf Senden klickt, wird als Dateipfad localhost/Projektname/formvalidation.php angezeigt statt localhost/Projektname/kontakt.php

    Sollte es nicht kontakt.php bleiben solange es Fehler gibt? Weil:

    Code
    if (($titlesError !='') || ($usrnameError !='') || ($emailError !='') || ($usrmsgError !='')) {
    include('kontakt.php');
    exit();
  • Es ist doch wohl klar, dass PHP Warnings raushaut, wenn du auf Variablen zugreifst, die nicht definiert sind.


    Und nur weil du kontakt.php per include einbindest, ändert sich nicht die URL. Informiere dich über Affenformulare.

  • Es ist doch wohl klar, dass PHP Warnings raushaut, wenn du auf Variablen zugreifst, die nicht definiert sind.

    Ja, das ist klar. Mir wurde aber gesagt dass es Quatsch ist diese Variablen im HTML Dokument zu definieren. Zumindest habe ich das so verstanden. Mein Skript läuft ja erst nach Klick auf Submit. Vorher kann das HTML Dokument also nicht wissen was mit $titles etc gemeint sein soll, es sei denn ich definiere das...


    Das löst leider alles nicht mein Problem.

    Welche Informationen braucht ihr von mir, oder was kann ich noch testen? Ich stehe mit PHP noch am Anfang, also ist es höchstwahrscheinlich dass ich Dinge nicht sehe, miss-- oder sogar falsch verstehe. Mir ist also einiges was anderen "doch wohl klar" ist eben nicht klar, wie das so mit allem Anfang ist.

  • Ich hab mich in den letzten Tagen stundenlang mit meinem Formular, möglichen Fehlerquellen und Debugging beschäftigt. Das muss ich vor dir aber nicht rechtfertigen. Ich frage hier um Hilfe. Wenn ich mir deiner Meinung nach nicht genug Mühe mache, brauchst du dich nicht mit mir befassen.

  • Hast du dich nun mit Affenformulare beschäftigt oder nicht? Bei deinen Beschreibungen hört sich das nicht danach an. Wenn du Tipps bekommst, dann solltest du sie auch beachten und nicht rummeckern!

  • Für Tipps bin ich immer dankbar. Sonst bräuchte ich ja nicht in einem Forum um Hilfe bitten... Tut mir leid wenn das anders rüber kam. Mir ist nur etwas sauer aufgestoßen was mir "doch wohl klar" sein sollte, weil es eben nicht selbstverständlich ist dass ein Anfänger jeden (einfachen) Zusammenhang versteht.

    Um aber deine Frage zu beantworten, ich habe natürlich angefangen mich mit Affenformularen zu befassen. Ich wollte auch nicht "rummeckern" sondern einfach nur sagen dass ich halt noch am Anfang stehe.


    Du hast z.B. gesagt dass du bezweifelst, dass PHP für meinen Fehler verantwortlich ist. Woran könnte es sonst liegen?

    JS ist zum Testen disabled und der Fehler tritt erst nach Klick auf 'submit' auf. Daher meine Vermutung dass es am PHP liegt.

  • Nach dem Testen kann ich sagen dass sowohl ... als auch ... den ungewollten Leerraum über dem Header erzeugt.

    Leerraum kann nur eine Ausgabe erzeugen! Beide Varianten tun das nicht, bleiben aber weiterhin überflüssig...


    Entferne ich die Definitionen der Variablen aus kontakt.php werden mir Fehler angezeigt:

    Notice: Undefined variable: titlesError in C:\xampp\htdocs\Projektname\kontakt.php on line 58

    Schau in die Doku bei isset() nach. Das dürftest Du kennen, wenn Du Dich wirklich mit Grundlagen der Formularverarbeitung beschäftigt hättest.


    Wie validiere ich eine Email Adresse denn dann am Besten daraufhin dass sie ein @ und .com, .de, usw hat?

    Beitrag #6 ignoriert, weil nicht verstanden???

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!