bjbenderTV: Probleme mit PhP inclutions

Hallo alle zusammen, ich habe folgendes Problem. Ich arbeite an einer Website welche fast nur mit Php include arbeitet, da so alles modular ist und schnell geändert werden kann. Die Seite läuft zurzeit über einen Localhost. Wenn ich die Index Datei öffne wird alles richtig includiert außer der footer. Dort erscheint keine Fehlermeldung es erscheint einfach nicht. Hier ein Bild wie es bis gestern ausgesehen hat: So soll es Aussehen Und so sieht es jetzt aus: So soll es nicht Aussehen

Ich habe seid gestern Abend nichts mehr am Code der Seiten footer.php und index.php geändert. Öffnet man den footer alleine wird dieser auch angezeigt. Nun habe ich gestern Abend eine weitere Seite erstellt welche auch die Footer.php nutzt. Als Zusatz auf der Englischen Seite ist genau der gleiche Fehler vorhanden.

Meine Thesen: Könnte der Localhost überlastet sein? Hat die neue Seite alles Ausgelöst?

Das ist der Code vom Footer dieser ist in Weißerschrift geschrieben und wenn mir wer erklären kann wie ich den Strich durch code ersetzten könnte welcher den Strich hervorrufen würde. Wäre ich euch sehr dankbar!

<div id="footer">
         <a href="Impressum.php">Impressum</a> |
         <a href="AGB.php">AGB</a>  |
         <a href="">DSGVO</a> |
         <a href="contact.php">Kontakt</a>
</div>

Und das ist der Code von der Index Datei

<div id="Container">
 <div id="Sprache"><?php include('Language.php'); ?></div>
 <div id="border">
         <div id="Logo"><?php include('logo.php'); ?></div>
         <div id="Header"><?php include('header.php'); ?></div>
 </div>
         <div id="navigation"><?php include('Menu.php'); ?> </div>
  <div id="border1">
         <div id="content"><?php include('start.php'); ?></div>
         <div id="Footer"><?php include('footer.php'); ?></div>
      </div>      
</div>

Bei der obigen Datei wird oben noch die Style.css verlinkt.

Und zum Schluss dann noch die Style.css

#border{
         border-top-style: solid;
         border-left-style: solid;
         border-right-style: solid;
         border-color:#808080;
}

#border1{
           border-bottom-style: solid;
           border-left-style: solid;
           border-right-style: solid;
           border-color:#808080;


}
#Container{
         margin-left:auto;
         margin-right:auto;
         width: 100%;


}
#Sprache{
         width: 100%;
         height: 30px;
         float: right;
         margin-bottom: 1px;
         background-color: grey;

}
.eng{    float: right;
         margin-left: 15px;
         margin-right: 5px;
         }
.ger{    float: right;

         }

#Logo{   width: 100%;
         height: 70px;
         float: left;


}

#Header{

         width:100%;
         height: 201px;



}



#Suche{
     width:100%;
     height: 30px;
     background-color: yellow;
}
#navigation{
         width: 100%;
         height: 45px;
         background-color: blue;


         }

#content{
         width: 100%;
         height:2000px ;
         margin-bottom: 10px;
         background-color: purple;
}
#Menu{   float: left;
         width: 172px;

}


#Footer {

         color: white;
         text-align: center;
         width:100%;
         height: 20px;
         background-color: #8F8A2C;
}


a{
         text-decoration: none;
         }

Es könnten Fehler im Code sein ich bin noch ein Anfänger was PhP angeht.

Ich hoffe Ihr könnt mir helfen! Ich bedanke mich schon mal für eure Hilfe.

  1. Es könnten Fehler im Code sein ich bin noch ein Anfänger was PhP angeht.

    Dann zeige doch bitte Deinen PHP Code und nicht HTML, CSS.

    1. Es könnten Fehler im Code sein ich bin noch ein Anfänger was PhP angeht.

      Dann zeige doch bitte Deinen PHP Code und nicht HTML, CSS.

      Ich sehe den PHP Code
      Allerdings sehe ich viel zu viele div.

      --
      I � Unicode
      1. Es könnten Fehler im Code sein ich bin noch ein Anfänger was PhP angeht.

        Dann zeige doch bitte Deinen PHP Code und nicht HTML, CSS.

        Ich sehe den PHP Code
        Allerdings sehe ich viel zu viele div.

        Vielleicht ist ja auch das CSS kaputt!?

  2. Hallo,

    <div id="footer">
             <a href="Impressum.php">Impressum</a> |
             <a href="AGB.php">AGB</a>  |
             <a href="">DSGVO</a> |
             <a href="contact.php">Kontakt</a>
    </div>
    

    wenn deine zu includierenden Dateien nur html enthalten, benenne sie nach .html um, da sie sonst auch durch den php Interpreter laufen.

    Fred

    --
    I � Unicode
    1. Okay ich probiere dies gleich mal aus.

      Danke für diesen Ansatz!

      Edit: Habe den Ansatz getestet funktioniert leider nicht 😕

    2. Hallo Fred,

      nach meiner Erfahrung ist das nicht so. Aber man kann ja auch Falsches wissen, darum habe ich es noch flott ausprobiert (PHP 7.1).

      Inkludierst Du datei1.php, musst Du darin trotzdem erstmal mit <?php den PHP Modus aktivieren, andernfalls wird der Inhalt 1:1 ausgegeben.

      Inkludierst Du datei1.html, kannst Du darin dennoch mit <?php den PHP Modus aktivieren

      Heißt: der PHP Interpreter verarbeitet die includierte Datei, egal wie ihre Filename Extension heißt. Die PHP Doku zu include legt auch nichts anderes nahe. Der entscheidende Satz ist wohl:

      Wenn eine Datei eingebunden wird, wechselt der Parser am Anfang der eingebundenen Datei in den HTML-Modus und am Ende wieder in den PHP-Modus. Aus diesem Grund muss jeder PHP-Code in der eingebundenen Datei mit gültigen PHP-Start- und -Endtags umschlossen sein.

      Kein Hinweis auf den Bedarf für spezielle Filename Extensions.

      Wenn die includierte Datei reines HTML enthält, ist es möglicherweise sinnvoll, sie auf .html enden zu lassen. Aber irgendwann kommt vielleicht doch der Punkt, wo man "eben mal" einen Wert aus dem Script darin anzeigen möchte. Und dann muss man sie, um konsistent zu bleiben, umbenennen, und alle Include-Stellen ändern.

      Die Trennung in PHP Rahmen und UI Templates erledigt man besser mit Ordnern.

      Rolf

      --
      sumpsi - posui - clusi
    3. Tach!

      wenn deine zu includierenden Dateien nur html enthalten, benenne sie nach .html um, da sie sonst auch durch den php Interpreter laufen.

      Das ist nicht richtig. Wenn PHPs include/require verwendet wird, geht es immer durch den PHP-Interpreter, egal welche Endung man der Datei gibt. Die Endung ist nur für den Apachen interessant, wenn der die Datei direkt ausliefern soll. Das wäre für einen Footer nur bei Frames der Fall.

      Wenn man mit PHP das PHP-Parsen weglassen möchte, kann man readfile() nehmen.

      dedlfix.

      1. Das ist nicht richtig.

        Ich sollte nicht auf "erfahrene" Kollegen hören, lesen bildet...

        --
        I � Unicode
  3. Hallo bjbenderTV,

    da hilft nur Debuggen. Bislang ist nicht einmal klar, ob das Problem auf dem Server auftritt (bspw. wird eine Datei wird nicht gefunden) oder ob Du dem Client nicht das HTML schickst, was Du gerne möchtest.

    1. PHP Fehlermeldungen aufdrehen -> error_reporting

    2. Browser Entwicklerwerkzeuge verwenden (zumeist per F12 Taste erreichbar) und gucken, welches HTML Du da vorfindest. Es gibt zwei Ansichten: Den Quellcode, das ist das, was Du dem Browser schickst, und den DOM Inspector (bei Chrome: Elements), der Dir anzeigt, was der Browser daraus verstanden hat.

    Die bereits angesprochene Divitis - eine kaum auszurottende Seuche - lässt sich heutzutage mit einer kräftigen Dosis Semantin Forte bekämpfen. Meint: semantisches Markup mit den dazu passenden Elementen, keine div-Wüste.

    Die senkrechten Striche als Trennzeichen sind doch gar nicht so schlecht. Wenn Du möchtest, dass der Browser sie zeichnet, kannst Du den Footer-Links ein border-left geben. Das CSS geht bereits davon aus, dass Du <div class="footer"></div> durch <footer></footer> ersetzt hast.

    footer a {
       padding: 0.1em 0.5em;
    }
    footer a:nth-of-type(n+2) {
       border-left: 2px solid black;
    }
    

    a:nth-of-type(n+2) besagt: gib den a Elementen ab Nummer 2 diesen Style. Generell ist die Pseudoklasse :nth-of-type dazu da, Elemente in einem bestimmten Wiederholmuster zu selektieren. Das 1,3,5,... Element: :nth-of-type(2n+1). Das 4, 8, 12, ... Element: :nth-of-type(4n).

    Rolf

    --
    sumpsi - posui - clusi
    1. Danke Rolf für die Verbesserungs Vorschläge!

      Habe mir grade das mit F12 in Chrome(Elements) angeschaut dort wird das angegeben wie ich das haben wollte. Nur Auf der Website selbst wird es immer noch nicht angegeben. 😕

      1. Hallo bjbenderTV,

        das HTML, das Du in Chrome siehst, ist so wie Du es erwartest? Die Footer-Links sind drin?

        Dann sind sie vielleicht falsch gestyled? Wird Dir etwas anderes angezeigt, als Du aus dem DOM herausdeutest?

        Wenn Du im Elemente-Inspektor mit der Maus über ein Element fährst, zeigt Chrome an, wo es in der Browseranzeige ist. Und Du kannst mit dem Icon oben links (Kasten mit Pfeil hinein) den Auswahlmodus aktiveren, d.h. du klickst auf dieses Icon und dann auf den Bereich im Browser, der Dich interessiert. Er zeigt Dir dann, wo das im DOM ist.

        Mit fällt auf jeden Fall auf, dass Du im HTML <div id="footer"> stehen hast, im CSS aber #Footer. IDs und Klassennamen sind case sensitive (Tag-Namen nicht), das passt nicht zusammen. Auch bei deinen Dateinamen musst Du aufpassen. Unter Linux sind footer.php und Footer.php verschiedene Dateien. Unter Windows NTFS eigentlich auch, aber Windows ist so „nett“ und simuliert für Windows-Anwendungen das alte FAT Verhalten.

        Rolf

        --
        sumpsi - posui - clusi
        1. Hallo Rolf ich habe es auch mit deiner grad angesprochenden Methode gemacht also das mit dem Mauszeiger rüber gehen dort wird der footer auch angezeigt. Was mich wundert warum es die letzten Tage funktioniert hat so wie es ist und jetzt aufeinmal nicht mehr. Woran kann das liegen?

          1. Hello,

            enthält die footer-Datei vielleicht eine BOM?
            Stimmen die angegebene und die tatsächliche Kodierung überein?

            Glück Auf
            Tom vom Berg

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
            1. Was ist eine BOM? 😀 Die kodierungen stimmen alle überein.

              1. Hallo bjbenderTV,

                der, die oder das BOM bedeutet "Byte Order Mark" und kann in einer Datei, die in eineem Unicode Encoding gespeichert ist, am Anfang stehen. Je nach Encoding sind es 2 bis 4 Bytes. Programme, die die Datei lesen, können das als Hinweis auf das verwendete Encoding verwenden. Im Fall von UTF-8, was im Web üblich ist, besteht es aus 3 Bytes und Programme, die nichts von UTF-8 wissen (wollen), zeigen statt des BOM drei wirre Zeichen an.

                In UNICODE ist das BOM als nullbreite Leerstelle definiert und sollte daher die HTML Anzeige nicht stören. Wenn die Darstellung aber einmal funktioniert hast, kann man Probleme mit dem Unicode-Encoding eher auszuschließen.

                Rolf

                --
                sumpsi - posui - clusi
                1. Okay danke für die gute Erklärung. Habe aber keine BOM Datei ein meine Seiten.

                2. Hello,

                  In UNICODE ist das BOM als nullbreite Leerstelle definiert und sollte daher die HTML Anzeige nicht stören. Wenn die Darstellung aber einmal funktioniert hast, kann man Probleme mit dem Unicode-Encoding eher auszuschließen.

                  Wenn die Datei bearbeitet wurde und aus Versehen mit BOM wieder abgespeichert wurde, ist es passiert. Der Editor zeigt die BOM vermutlich nicht an, sadass man es evtl. nicht merkt. PHP soll das ja angeblich inzwischen auch verkraften, aber wir wissen ja noch nichts über die Versionen und die Installation. Ist es ein XAMPP?

                  Glück Auf
                  Tom vom Berg

                  --
                  Es gibt nichts Gutes, außer man tut es!
                  Das Leben selbst ist der Sinn.
                3. @@Rolf B

                  In UNICODE ist das BOM als nullbreite Leerstelle definiert

                  War. Die Verwendung von U+FEFF als nullbreites Leerzeichen ist misbilligt.

                  LLAP 🖖

                  --
                  „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
              2. @@bjbenderTV

                Was ist eine BOM?

                s.a. Das BOM (byte-order mark) in HTML

                LLAP 🖖

                --
                „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
          2. Hallo bjbenderTV,

            Woran kann das liegen?

            Das liegt an der Ursache, die es sicherlich gibt.

            Die Seite ist nicht live, sondern nur auf deinem localhost, und darum bist Du der Einzige[1], der das beantworten kann. Aus dem HTML/CSS erkenne ich erstmal nichts.

            Alles, was wir ohne eine Live-Seite tun können, ist, Dir Hinweise auf die verwendbaren Werkzeuge liefern.

            Rolf

            --
            sumpsi - posui - clusi

            1. oder die Einzige - ich kann nur raten ↩︎

            1. Danke Rolf für die Hilfe. Habe bei der zu Includierenden Footer Datei den Div container gelöscht da dieser für nichts verwendet wurde jetzt funktioniert wieder alles hätte dann aber noch eine Frage vielleicht kannst du mir dabei helfen. Wie bekomme ich die Footer Datei am untersten Bildschirm Rand bei allen Seiten funktioniert es. Die Style.css ist die Selbe und der Footer code auch bis auf dei Sprache.

              1. Hi,

                schau dir mal den generierten HTML-Quelltext im Browser an. Es könnte zumindest sein, dass nicht alle Tags geschlossen sind, oder sonst etwas durcheinander geht.

                Für die Positionierung:

                Setzte das "margin-bottom: 1px;" aus dem #Sprache-Abschnitt im CSS in den #Footer-Abschnitt. Dann müsste der richtig positioniert werden.

                Wilfried

                1. Hallo, erstmal danke für deine Hilfe alle Tags sind geschlossen und im Code und bei F12 ist auch nichts durcheinander gekommen. Dein Ansatz mit dem margin-bottom: 1px; in den #Footer hat leider nicht zum Ergebnis geführt. Wenn dir oder euch noch andere Ideen einfallen wäre ich euch sehr dankbar.

              2. Hallo bjbenderTV,

                die Seite hat einen Scrollbar, und der ist irgendwo in der Mitte. D.h. der Footer ist zusammen mit der Seite nach oben gescrollt, und unter dem Footer ist noch irgendwas. Nach dem Aussehen des Scrollbar zu urteilen, ist da noch eine ganze Menge.

                Irgendein HTML Element, irgend ein Margin, irgendein Padding, irgendein absolut positioniertes Dings das über den Footer hinaushängt - keine Ahnung. Das DOM und den HTML Source siehst nur Du.

                Also musst Du selbst debuggen. Die Werkzeuge kennst Du. Und Fehlersuche gehört zu den besten Möglichkeiten, etwas zu lernen.

                Wenn Dir jemand dabei helfen soll, musst Du die Seite irgendwo online stellen.

                Rolf

                --
                sumpsi - posui - clusi
                1. Danke Rolf mit den Tipps vom nutzem der Tools des Browsers habe den Fehler gefunden. Danke nochmal für deine Hilfe.

    2. Hello,

      da hilft vermutlich kein Debuggen. Wenn es ein Apache ist, sind "footer" und "header" konfigurierbare Ziele. Da muss man entweder andere Namen nehmen, einen qualifizierten Pfad angeben, oder die Konfiguration ändern.

      Glück Auf
      Tom vom Berg

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
      1. Tach!

        da hilft vermutlich kein Debuggen. Wenn es ein Apache ist, sind "footer" und "header" konfigurierbare Ziele. Da muss man entweder andere Namen nehmen, einen qualifizierten Pfad angeben, oder die Konfiguration ändern.

        Das habe ich jetzt nicht verstanden. Kannst du genauer erklären, was "konfigurierbare Ziele" sind, vielleicht mit einem Hinweise auf die Apache-Doku?

        dedlfix.

    3. @@Rolf B

      a:nth-of-type(n+2) besagt: gib den a Elementen ab Nummer 2 diesen Style.

      Das wäre die zweitbeste Umsetzung. Alle a-Elemente außer Nummer kann man so selektieren: a:not(:first-child) (a:not(:first-of-type)) – das ist sprechender Code und erspart die Überlegungen, wie :nth-child() (:nth-of-type()) nun genau funktioniert.

      Wegen des Whitespaces zwischen den a-Elementen ist der Strich bei dir nicht in der Mitte zwischen den Links. Das bekommt man hin, indem man die a-Elemente zu Flex-Items macht, d.h. den footer zur Flexbox: footer { display: flex }.

      Da man aber nicht wissen kann, ob alle a-Elemente in eine Zeile passen, sollte man den Umbruch erlauben: flex-wrap: wrap oder flex-flow: row wrap.

      Un wenn sie dann umbrechen, sieht es vermutlich blöd aus, wenn die Zeilen ab der zweiten mit dem Trennstrich beginnen. Also diesen nicht als border-left für alle außer dem ersten Element, sondern als border-right für alle außer dem letzten (bei Schreibrichtung von links nach rechts).

      Durch negativen margin gleichen Betrags wie das horizontale padding kann man die Elemente wieder an den Rand rücken. Sieht dann so aus (Codepen):

      footer
      {
      	display: flex;
      	flex-flow: row wrap;
      	margin-left: -0.5em;
      	margin-right: -0.5em;
      }
      
      footer a
      {
      	padding: 0 0.5em;
      }
      
      footer a:not(:last-child)
      {
      	border-right: thin solid;
      }
      

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  4. Hello,

    läuft das auf einem Apache?

    Da haben die Namen Footer und Header eine Sonderbedeutung. Musst Du bitte mal selber recherchieren. Ich hatte Dir gerade Links rausgesucht, aber leider spinnt mein Tablet gerade...

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hallo,

      ja der Localhost läuft mit Apache. Aber warum hat das dann die ganze Zeit so funktioniert und jetzt auf einmal nicht mehr?