echo $begrüßung;
http://feuerwolf.fe.funpic.de/aa/index.txt
<!-- hier wird das Linken vom menü bearbeitet -->
<?php include "namen.php"; ?>
<!-- ab hier beginnt die Index.html -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
HTML-Kommentare für PHP-Code ...
Wenn du mal den erzeugten HTML-Code anschaust, steht da
<!-- hier wird das Linken vom menü bearbeitet -->
<!-- ab hier beginnt die Index.html -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
Das ist aus HTML-Sicht nicht sinnvoll. Außerdem bringt es einige Browser dazu, in den fehlerhaften Quirks-Mode zu schalten, wenn vor der Doctype-Angabe noch was steht.
Mein Vorschlag: Verlagere die Kommentare in den PHP-Code.
<?php include "$wert"; ?>
Einfache Variablen müssen nicht in "" eingefasst werden. PHP bettet den Wert von $wert, der einen String ist, nochmal in einen String ein. Das ist überflüssig.
$wert als Variablenname ist nicht besonders clever, da er nicht selbstredend ist. Mit beschreibenden Variablennamen lässt sich ein Script einfacher lesen. Ideal ist, wenn man die Intention dahinter erkennen kann. Was es ist, ergibt sich meist von selbst. Beispiel:
$dingsbums_array = array();
Das Array nochmals mit "array" im Namen zu bezeichnen ist überflüssig, da es sich bereits aus der Initialisierung ergibt, dass $dingsbums ein Array ist.
http://feuerwolf.fe.funpic.de/aa/namen.txt
$pa = "";
$na = array();
$la = array();
Auch hier fände ich beschreibende Variablennamen lesbarer.
$pa = "";
// Dazwischen viel Zeug
if ($_GET['pa'] <= 5)
{
$pa = $_GET['pa'];
Das Initialisieren der Variabablen vor dem Gebrauch ist positiv anzumerken. Doch würde ich die Initialisierung direkt vor dem Gebrauch vornehmen, nicht gesammelt am Scipt-Anfang. Das Kopieren und Wiederverwenden von Code-Teilen ist einfacher, wenn der Code beieinander steht. Außerdem habe ich unten schon wieder vergessen, was oben irgendwann mal stand :-)
Die Einrückung von Code innerhalb von Code-Blöcken ist wichtig, um den Überblick zu behalten. Das solltest du konsequenter beachten.
if ($_GET['pa'] <= 5)
{
$pa = $_GET['pa'];
if ($pa == 1)
{
$wert = $la[1];
$untertitel = $na[1];
}
if ($pa == 2)
{
$wert = $la[2];
$untertitel = $na[2];
}
[...]
}
Das Anlegen einer weiteren Variable aus den Werten von $_GET/$_POST/... ist oft gesehen, aber überflüssig. Als Begründung muss immer "$xx ist einfacher zu schreiben als $_GET['xx']" herhalten. Das verschleiert aber nur die Herkunft von Variablen.
Das obige Konstrukt wäre auch lieber eine switch-Anweisung inklusive default-Zweig (Die Initialisierung der Variablen $wert und $untertitel am Script-Anfang kann dann auch unterbleiben.) geworden. Somit ist $_GET['pa'] nur einmal im switch-Kopf notiert und das Argument der umständlichen Schreiberei ist plötzlich gar keins mehr. $na und $la kann dann auch ganz wegfallen.
http://feuerwolf.fe.funpic.de/aa/menu.txt
<li><a href="index.php?pa=1"><?php echo "$na[1]" ?></a></li>
<li><a href="index.php?pa=2"><?php echo "$na[2]" ?></a></li>
<li><a href="index.php?pa=3"><?php echo "$na[3]" ?></a></li>
<li><a href="index.php?pa=5"><?php echo "$na[5]" ?></a></li>
Hier sind wieder einfache Variablen in "" eingefasst. (Wo ist eigentlich Nummer 4 abgeblieben?)
Das sieht eher danach aus, als ob hier eine Schleife angebracht ist, statt der Code-Wiederholung.
Und das $na kann doch nicht wegfallen, weil es hier noch gebraucht wird. Allerdings gefällt mir der Aufbau der beiden Arrays $na und $la nicht. Alternativvorschlag:
$menu = array(
1 => array('Home', 'home.php'),
2 => array('News', 'news.php');
...);
Auch der switch-Statement-Vorschlag fällt weg zugunsten von:
if (isset($_GET['pa']) and isset($menu[$_GET['pa']])) {
$untertitel = $menu[$_GET['pa']][0];
$datei = $menu[$_GET['pa']][1];
} else {
$untertitel = $menu[1][0];
$datei = $menu[1][1];
}
Vor dem Zugriff auf Variablen, die außerhalb des Scripts gefüllt werden ist eine Zugriffsprüfung angebracht, deshalb das einleitende isset($_GET['pa']). Statt isset($menu[$_GET['pa']]) könnte man übrigens auch array_key_exists($_GET['pa'], $menu) notieren.
Der Aufbau der Menüliste lässt sich nun mit einem
foreach($menu as $pa => $menu_element)
echo "<li><a href='index.php?pa=$pa'>$menu_element[0]</a></li>\n";
erzeugen.
<li> </li>
Sowas macht man doch nicht um einen Abstand zu erhalten. Dafür bietet CSS bessere Möglichkeiten.
echo "$verabschiedung $name";