Nischenseiten ohne WordPress & Co. – Teil 3



Die Datenbankstruktur steht und wartet nur darauf befüllt zu werden. Wie das mit phpMyAdmin funktioniert und wie die Daten aus der Datenbank in die Webseite kommen, zeigt der dritte Teil dieser kleinen Nischenseiten-Serie.

Um mit der Datenbank etwas anfangen zu können, muss diese zunächst mit entsprechenden Inhalten gefüllt werden. Wir orientieren uns zunächst an den Meta-Daten für die Startseite unseres Beispielprojekts. Alle weiteren Seiten funktionieren nach dem gleichen Prinzip und der Ablauf ist im Grunde immer gleich.

Nischenseiten ohne WordPress Teil 3

Die Datenbanktabelle mit Inhalten füllen

Um die in Teil 2 angelegte Datenbanktabelle mit Inhalten zu füllen muss zunächst phpMyAdmin geöffnet und die Datenbank Beispielprojekt ausgewählt werden. Danach die Tabelle header auswählen und oben im Menü auf Einfügen klicken.
Das sich nun öffnende Eingabefeld kann je nach Version von phpMyAdmin etwas abweichend aussehen, die Funkionsweise ist aber immer gleich.
Grrundsätzlich interessiert uns nur die Spalte Wert, denn in dieser werden nun unsere Metadaten für die Startseite eingetragen (siehe Screenshot).

Nischenseiten phomyadmin Daten einfügen

Daten direkt in der Datenbank eingeben

Sind die Daten hinterlegt, können diese nun in den Head-Bereich der Webseite integriert werden.

Daten mit PHP aus der MySQL-Datenbank auslesen

Die Verbindung zur Datenbank ist am Ende von Teil 2 bereits mit Hilfe der config.php vorbereitet worden. Wenn diese config.php auf jeder Seite eingebunden wird, steht die Datenbankverbindung immer zur Verfügung.
Auch für den Datenbankzugriff bietet PHP bereits vorbereitete Befehle. Bevor diese jedoch greifen, muss zunächst eine Anfrage für die Datenbank festgelegt werden, die MySQL dann mit den (hoffentlich) korrekten Daten beantwortet.

Die Sprache SQL steht für Structured Query Language (Strukturierte Abfragesprache) und ist gar nicht so kompliziert. Da wir uns auf der Startseite befinden, möchten wir auch die entsprechenden Daten aus der Datenbank auslesen. Die Anfrage müsste also lauten:

Gib mir alle Daten, die Du für die Startseite finden kannst.

Ok, wird das so eingegeben, dürfte klar sein wie das Ergebnis aussieht. In SQL sieht dieser Befehl so aus:

Kurz aufgedröselt: SELECT signalisiert MySQL das es auf jeden Fall schon mal Daten auslesen soll. Das * ist ein Platzhalter und bedeutet „wähle alles aus“. An dieser Stelle ließe sich die Auswahl auch auf einzelne Tabellenspalten beschränken. Wir brauchen aber den kompletten Datensatz.

FROM header gibt an, aus welcher Tabelle die Daten abgerufen werden sollen. Wäre die Anfrage an dieser Stelle beendet, würde MySQL alle Datensätze aus der Datenbank abrufen und ausgeben. Da wir aber nur den Datensatz für die Startseite benötigen, schränken wir die Anfrage auch darauf ein. Mit WHERE page_id = ’startseite‘ weiß die Datenbank, dass sie nur den Datensatz auswählen soll, der in Tabellenspalte page_id den Wert startseite hat.

Nun müssen wir nur noch PHP dazu bringen, diese Abfrage an die Datenbank zu senden. Zur Wahrung der Übersicht legen wir den Befehl an MySQL zunächst in einer Variablen ab:

Anmerkung am Rande: Auf die Groß- und Kleinschreibung der SQL-Befehle kommt es nicht an. Das dient nur der Übersicht.

Ok, die Anfrage an die Datenbank steht. Jetzt muss diese nur noch an die Datenbank gesendet werden. Das geschieht mit dem Befefehl bzw. der Funktion mysqli_query() von PHP.
Dazu benötigt mysqli_query() die Angaben zur Datenbankverbindung und den Befehl, der ausgeführt werden soll.

mysqli_query() erwartet diese beiden Angaben immer und sie werden in den Klammern direkt hinter dem Aufruf an die Funktion, durch Komma, getrennt übergeben. Am Ende von Teil zwei haben wir die Verbindung zur Datenbank in der Variable $db gespeichert. Es wäre auch möglich die Daten direkt an Ort und Stelle an mysqli_query() zu übergeben. Aber so ist das deutlich übersichtlicher.

Als zweiten Wert übergeben wir die Variable $sql, in der vorhin der SQL-Befehl gespeichert wurde.

Wird mysqli_query() in der obenstehenden Form aufgerufen, werden alle Ergebnisse der Datenbankabfrage in dem Array $ergebnis gespeichert. Ein Array ist im Prinzip wie eine Variable, kann aber mehr Werte speichern. Ein Array könnte man ein wenig auch als kleine Datenbank beschreiben.

Jetzt sind also alle abgefragten Werte in dem Array $ergebnis gespeichert, aber wie kommen wir jetzt da ran?
Da wir wissen, was in der Datenbank drin ist und wir rausholen wollten, lässt sich recht strukturiert vorgehen.
Da aufgrund unserer Abfrage nur ein Datensatz im Array gespeichert ist, ist das Anzeigen der Inhalte eigentlich relativ einfach. Wir wählen aber in diesem Fall die Variante mit einer Schleife. Eine Schleife wird benötigt, um den gleichen Programmablauf mehrmals zu durchlaufen, bis eine Bedingung erfüllt ist, welche die Schleife abbricht.
PHP bietet verschiedene Arten von Schleifen und jede davon kann auch für diesen Zweck verwendet werden.

In unserem Beispielprojekt nutzen wir eine while-Schleife und die sieht folgendermaßen aus:

 

 

Die Funktion mysqli_fetch_array() gibt im Grunde Datensatz für Datensatz aus $ergebnis an das Array $zeile rüber. Die Bedingung der while-Schleife ist erfüllt, wenn das Array $ergebnis komplett durchlaufen ist. Richtig Sinn macht diese Funktion natürlich erst, wenn mehrere Ergebnisse aus der Datenbank existieren und diese ausgegeben werden müssen. Im Moment haben wir ja nur einen Datensatz.

In dieser Schleife wird nun der Bereich für den HTML-Head ausgegeben. Damit der Code möglichst übersichtlich wird, geben wir die jeweiligen Werte direkt im HTML aus:

 

Wenn das so umgesetzt wurde, muss natürlich überprüft werden, ob das auch funktioniert. Dazu muss der lokale Webserver gestartet sein und unsere Webseite mit https://localhost/pfadzumprojekt aufgerufen werden.

Steht der in der Datenbank hinterlegte Titel bereits oben im Browsertab? Sehr gut. Ob alle weiteren Einträge auch korrekt sind, verrät nur ein Blick in den Quelltext des Browsers.

Was man mit der page_id noch so anfangen kann

Dem aufmerksamen Beobachter wird eben die veränderte SQL-Abfrage aufgefallen sein. Diese sucht nämlich nicht nach „startseite“ sondern nach $page_id. In der Datei, die alle anderen Dateien inkludiert (in diesem Fall index.php), wird die aktuelle Page-ID immer in der Variable $page_id hinterlegt. Damit kann diese auf der kompletten Seite verwendet werden, ohne immer in die SQL-Abfrage eingreifen zu müssen.

Die eindeutige Identifizierbarkeit jeder Webseite des Projektes hat noch weitere Vorteile. Wer das Impressum oder andere Unterseiten nicht von den Suchmaschinen indiziert haben möchte, kann diese mittels der page_id ausschließen:

Die beiden || in der if-Abfrage stehen für „oder“. Die Abfrage prüft also mehrere Werte.
Das Ganze funktioniert natürlich auf der ganzen Seite. Wenn bestimmte AdSense-Anzeigen also nur bei bestimmten Seiten im Footer angezeigt werden sollen, lässt sich auch das mit einer solchen if-Abfrage der jeweiligen page_id realisieren.

Was nun? WordPress oder selber machen?

WordPress soll hier keineswegs schlecht gemacht werden. Wer keine Lust und Zeit hat, tiefer in HTML, CSS und auch PHP einzusteigen, für den ist WordPress mit den vielen Themes und Plugins die beste Lösung.
Ich nutze auch viel WordPress, merke aber immer wieder das ich nie das perfekte Theme finde und doch immer noch selber an manchen Stellen Hand anlegen muss. Und manchmal ist es dann schon zeitlich sinnvoller mit diesem kleinen System kurzerhand alles selbst zu stricken. Denn späterer Aufwand wie Updates oder die Sicherheitsrisiken entfallen. Zudem hat man eine schlanke Webseite ohne viel Overhead und die totale Kontrolle.

Wer sich ein wenig mit den verschiedenen Webtechniken auseinandersetzen möchte, kann diese Artikelreihe gerne als helfende Hand nehmen. Man lernt nie aus und wenn bekannt ist, was da im Hintergrund eigentlich so alles passiert, versteht man viele Fehler schneller und kann den ein oder anderen sogar direkt im Vorfeld verhindern.
Mit ziemlicher Sicherheit ist es nicht perfekt und wer Verbesserungen hat, kann diese gerne kundtun. Auch wenn es an irgendeiner Stelle Probleme gibt, helfe ich gerne weiter.



2 Kommentare:

  1. Hallo ich bekomme das irgendwie mit der Ausgabe der Meta Daten im Quellcode nicht hin der Rest fast sofort hingehauen…

    folgender Fehler:
    Warning: mysqli_connect(): (HY000/2002): Connection timed out in /customers/9/4/7/ddlink.de/httpd.www/Holzspielzeug/inc/config.php on line 14
    Verbindung fehlgeschlagen
    Meine Frage wo starte ich die :

    <meta name="description" content="“>
    <meta name="keywords" content="“>

    <meta property="og:title" content="“/>
    <meta property="og:description" content="“/>
    <meta property="og:url" content="“ />
    <meta property="og:image" content="“/>

    in der Index.php , head.php oder config.php hab versucht mir das irgendwie selber zu erklären, jedoch vergebens… :-(

    Nächste Frage ich teste das live auf meinem WebServer was muss ich mit $db=mysqli_connect(„?– reicht da hostname.xy? oder wie mache ich das?“,“user
    „,“pw“,“datenbank name“)

    Vielen Dank vorab… Stefan

  2. „Conntection timed out“ sieht aus, als würde da irgendwas an der Verbindung zur Datenbank nicht funktionieren. Was, vermutlich, mit deiner Frage unten zu tun haben dürfte. Manch Hoster benötigt zur Datenbank eine direkte Adresse. Strato will dort irgendwas mit rdbms.strato.de haben, all-inkl benötigt dort nur die Angabe „localhost“.

    Die Meta-Angaben sollten in der head.php ausgegeben werden. Nutzt du XAMPP auf deinem Rechner?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert