• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem bei dynamischer Webseite

zachy

Neues Mitglied
Hallo Community,

ich baue gerade eine Homepage und stoße da im Moment an meine Grenzen.

Ich skizziere euch erst mal wie arbeite:

Zunächst einmal habe ich das Grundgerüst der HTML-Seite aufgebaut. Vereinfacht ausgedrückt gibt es eine Header.php, eine Seite.php und eine Footer.php.

In die Seite.php lade ich über den include-Befehl zu beginn die Header.php und am Ende des Dokumentes die Footer.php. So macht man es ja auch typischerweise, da sich Header und Footer ja normalerweise nicht ändern und auf jeder Seite gleich aussehen sollen.

Alle Inhalte liegen in einer MySQL-Datenbank. Jeder Datensatz in der Datenbank hat natürlich eine eindeutige ID. In der Header.php baue ich die Verbindung zur Datenbank auf und führe den SQL-Befehl aus.

Jetzt konkret:

In der Header.php habe ich eine Navigation gebaut. Über diese sind die einzelnen Seiten wählbar. Da ja alles dynamisch sein soll, habe ich die Links in der Navigation mit einem Parameter versehen, welcher die jeweilige ID der Seite in der Datenbank darstellt.

Das kann man sich so vorstellen:

HTML:
<li><a href="seite.php?parameter=1">Käse</a></li>

<li><a href="seite.php?parameter=2">Wurst</a></li>

<li><a href="seite.php?parameter=3">Brot</a></li>

Die Header.php beginnt damit, den im Link übergebenen Parameter auszulesen und in eine Variable namens $id zu schreiben.

PHP:
$id = $_GET["parameter"];

Dann wird die Verbindung zur Datenbank aufgebaut und im SQL-Code wird der Datensatz mit der übergebenen ID abgefragt.

PHP:
$res = mysqli_query($con, 'SELECT * from tblseiten WHERE id = "' . $id . '"');

Die aus der Datenbank geladenen Inhalte können dann über eine while-Schleife in Variablen geladen und diese über einfache echo-Befehle an den dafür vorgesehenen Stellen ausgegeben werden.

Und jetzt das Problem:

Das klappt auch alles wunderbar.... solange man die Navigation benutzt, um sich auf der Homepage zu bewegen.

Wenn man sich z.B. den Link auf eine bestimmte Webseite als Favorit im Browser abspeichert bekommt man beim Laden der Seite natürlich lauter Fehlermeldungen, weil die Variable $id ja nicht befüllt wurde (das wird sie ja nur, wenn man den Link in der Navigation anklickt).

Ich hoffe ich habe mich klar genug ausgedrückt. Sonst bitte einfach fragen. So wie ich es verstanden habe, sollen alle Inhalte ja in der Datenbank liegen. In HTML wird nur das Grundgerüst geschrieben und dieses wird dann per PHP mit den Inhalten aus der DB befüllt. Wie realisiere ich dann aber den Zugriff auf eine meiner Seite über einen Favoriten im Browser oder später über einen Google-Link (die Homepage liegt im Moment noch auf einem Testrechner, kann also im Moment noch über keine Suchmaschine gefunden werden.

Ich weiß, dass Blogs z.B. Permalinks benutzen. Keine Ahnung, ob das hier helfen würden. Ich hätte abgesehen davon auch keinen blassen Schimmer, wie ich diese in der Seiten unterbringen soll.

Bitte um Hilfe, da ich gerade echt auf dem Schlauch stehe..

Beste Grüße
zachy
 
PHP:
$id = $_GET["parameter"];
ändern in
PHP:
$id = isset($_GET["parameter"]) ?  $_GET["parameter"] : "EinWertDeinerWahl";
 
Hallo bdt600,

vielen Dank für deine schnelle Antwort.

Also erst mal soll ich prüfen, ob die Variable befüllt ist. Das verstehe ich. Aber welchen Wert soll ich denn jetzt für EinWertDeinerWahl einsetzen? Das ist mir nicht klar. Ich meine, ich weiß ja nicht, welche Seite der User gerne sehen möchte. Das ist ja gerade mein Problem.

Ich hoffe du verstehst was ich meine.

Beste Grüße
zachy
 
Wenn der Parameter nicht gesetzt ist, dann geht man für gewöhnlich auf die Startseite.
 
Aber das heisst doch, dass alle anderen Seiten nur über die Navigation erreichbar sind und direkt angesteuert werden können?

Wie ist das denn z.B. hier im Forum? Ich meine, ich habe diese Seite ja jetzt auch über einen Favoriten im Browser aufgerufen und nicht über Startseite >> Forum >> Thread ausgewählt. Wie funktioniert das denn hier? Ich blick da einfach gerade nicht durch. :(
 
Wenn du im Browser eine Seite zu den Lesezeichen hinzufügst, wird die aktuelle URL inkl. Parameter übernommen. Das wird bei dir dann nicht anders sein.
 
Habs gerade ausprobiert! Großartig :-D

Danke, hab mir nämlich gerade schon echt den Kopf zerbrochen :D

Bei Google wird es dann wohl ähnlich sein, richtig?

Ich danke dir ganz herzlich. Schönen Tag noch :-D
 
Zunächst einmal habe ich das Grundgerüst der HTML-Seite aufgebaut. Vereinfacht ausgedrückt gibt es eine Header.php, eine Seite.php und eine Footer.php.

Ist vom Ansatz her nicht schön. Das Grundgerüst besteht aus einer index.html als Layout-Datei, welche die gemeinsamen Bestandteile aller Unterseiten beinhaltet, also <head> und <body>, Navigation, Footer, usw. Die Links zu den Unterseiten kannst du in statischem HTML schreiben. Außerdem erstellst du für jede einzelne Unterseite eine HTML-Datei, die analog zur URL dynamisch in das Body-Tag deiner index.html inkludiert wird. sowie einen Controller, in dem die Business-Logik der Seite steht.

Um das Ganze zu verknüpfen, brauchst du einen Router, der festlegt, welche HTML-Seite und welcher Controller beim Klick auf einen Link aufgerufen werden. Angenommen du hättest neben deiner Startseite, eine weitere mit 20 Obstsorten und möchtest Unterseiten anlegen, welche die Details jeder einzelnen Sorte zeigen, brauchst du drei Dateien.

Pseudocode:
Code:
when('/', {
  template: 'index.html',
  controller: 'IndexController'
}).
when('obst.html', {
  template: 'obstlist.html',
  controller: 'ObstListController'
}).
when('obst.html/:sorte', {
  template: 'obstdetail.html',
  controller: 'ObsDetailController'
})

Der ObstListController fetched alle Sorten aus der Datenbank und der ObstDetailController die Details für jede einzelne Sorte. Das erzeugt dann URLs, die sich auch per Google Suche direkt anspringen lassen:

example.com/obst
example.com/obst/bananen
example.com/obst/birnen
usw.

Sinnvoller Weise erstellst du eine solche Site mit einem Framework, welches Router und benötigte Funktionalitäten bereitstellt. Ich selber mache es mit JavaScript und Angular, aber es gibt natürlich auch für PHP entsprechende Frameworks.
 
Zurück
Oben