Lieber Simon P.,
Ist es vielleicht sogar sinnvoller, alle Navigationsmöglichkeiten in einer eigenen Struktur abzubilden, die anhand von $pages abgeleitet werden kann?
Naja, eigentlich rede ich davon, dass ich mehrere dynmaische Inhalte in eine HTML schreiben möchte (natürlich gehört der Inhalt zu dieser HTMl) und diese dann in das Template "puzzle". Puzzlen ist hier schon das richtige Wort für.
dann sollte man sich genauer überlegen, wie man diese Puzzlelei einfacher gestalten kann. Bitte definiere doch einfach und klar die einzelnen Teile! Offensichtlich benötigst Du das <title> Element aus dem <head>-Bereich ebenso, wie die Subnavi. Aber was noch und wie ist es in einer HTML-Datei abgelegt?
Okay, bis jetzt puzzle ich den HEAD, die "Sub-Navi" (in meiner Index, die ich dir geschickt habe, links an der Seite die Navi) und den Text (also Kontent) zusammen. Mit head meine ich sowas, was (soweit wie ich verstanden habe), wichtig ist für jede Seite einzelnd zu bestimmen:
<title>Meine Website / Animes / Geschaut</title>
<meta charset="UTF-8">
<meta name="description" content="Eine Liste aller Animes die ich geschaut habe.">
<meta name="author" content="Simon P.">
Das wird dann tatsächlich eine Aufgabe für einen HTML-Parser (Methode c). Man kann es auch mit der Methode b) machen, aber sicherer ist es mit einem Parser. Das schauen wir uns demnächst an.
> > 3.) Deine exit-Anweisung im Fehlerfall ist eine ganz schlechte Idee!
>
> Habe ich geändert in:
> ~~~php
<?php
> $db = mysqli_connect("localhost", "Benutzer", "Passwort", "homepage");
> if(!$db){
> exit("Verbindungsfehler: Es konnte keine Verbindung zur Datenbank aufgenommen werden.");
> }
> $db->query("SET NAMES 'utf8'");
> ?>
Ach, und da steht jetzt kein exit-Statement mehr? Ein Programmabbruch ist eine sehr schlechte Idee!
Dieses exit bewirkt, dass _kein_ korrekt zusammengesetztes HTML-Dokument an den Browser gesandt wird. Probiere es doch einmal aus, indem Du die Login-Daten absichtlich verfälschst! Was Du in einem solchen Fall willst, ist eine Seite, die ebenso ein vollständiges HTML-Dokument ist, wie alle anderen auch. Nicht nur eine (egal wie aussagekräftige) Fehlermeldung in einer simplen Text-Datei. Was soll denn der Seitenbesucher machen, wenn ein Fehler auftritt? Kann er den Fehler beheben oder vermeiden? Nein, kann er nicht, aber vielleicht kann er aus der Navi einen anderen Link auswählen... halt, kann er nicht, da ist ja gerade keine Navi.
Verstanden?
Besser, Du erstellst Deinen HTML-Code erst nachdem Du alles aus der DB ausgelesen hast. [...]
Hm, habe ich bisher noch nicht gemacht, weil es einfach nicht funktioniert hat (habe es noch nicht richtig getestet und dran rumgebastelt, weswegen ich dir jetzt keinen Fehlercode oder meinen Code etc. geben kann).
Es fällt leichter, Fehler beim DB-Zugriff im Vorfeld abzufangen. Beispiel:
$data = array();
if ($db) {
// read DB into $data array
}
// default (in case of error)
$html = '<p class="error">Sorry, no data available.</p>';
if (!empty($data)) {
$html = '<dl>';
foreach ($data.....) {}
}
Wenn der Zugriff auf die DB aus welchen Gründen auch immer nicht geklappt hat, enthält $data keine Daten. Dafür landet auf der Seite genau der Hinweis, der für den Besucher relevant ist. Der Hinweis wird korrekt in den Platzhalter eingefügt und steht an genau der Stelle, an die er soll.
Irgendwas stimmt mit dieser Schleife nicht:
if (array_key_exists('p', $_GET) && 'p' == 'animes_geschaut')
Das ist keine Schleife, das ist eine Verzweigung. ;-)
Du willst also prüfen, ob der String-Wert "p" ungefähr das gleiche ergibt wie "animes\_geschaut". Das ist aber nicht das gleiche, auch nicht ungefähr.
Tipp: In PHP gibt es zwei verschiedene "ist das gleiche wie"-[Operatoren](http://php.net/manual/de/language.operators.comparison.php). Entweder "==" (ungefähr gleich) oder "===" (exakt gleich). Schau mal nach, was da wie genau funktioniert. Das kann in manchen Fällen sehr zur Verwirrung führen.
Liebe Grüße,
Felix Riesterer.
--
"Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)