dedlfix: Variable wird nicht übergeben

Beitrag lesen

echo $begrüßung;

Aus deinen Formulierungen erkenne ich Defizite im Wissen um die Arbeitsweise PHPs.

Über ein Skript wird ein Link erzeugt, der einen Wert als Parameter übergeben soll:
$mylink[] = "Artikel.php?artnr=$artnr";

Wenn ich mit dem Mauszeiger über den fertigen Link fahre, wird die URL auch korrekt angezeigt (z.B. Artikel.php?U012).

Das zählt nicht. Schau lieber im Code nach, was der Browser vorgesetzt bekommt. Das was er in der Statuszeile anzeigt, hat er ja gegebenenfalls bearbeitet, um eine vollständige URL anzuzeigen.

Dies ist als genereller Tipp zu sehen. Für dein spezielles Problem der Parameterübergabe reicht allerdings auch die Statuszeilenangabe.

Im Skript Artikel.php wird der Parameter eingelesen:
$artnr = $_GET['artnr'];

Es muss weder etwas eingelesen noch übernommen werden. Das hat PHP bereits für dich getan. Es hat den Querystring der URL (oder die POST-Parameter) bereits ausgewertet und stellt dir die Werte fix und gebrauchsfertig in $_GET (und $_POST) zur Verfügung (vom Magic Quotes-Problem mal abgesehen). Greife also direkt darauf zu, ohne die Werte nochmal in andere Variablen umzukopieren. So etwas ist unnötiger Aufwand, erhöht durch die zusätzlichen Variablen die Komplexitität und verschleiert obendrein die Herkunft der Werte. Einem $_GET['foo'] ist sie direkt anzusehen, einem $foo nicht mehr.

Trotzdem wird auf der generierten Seite der Parameter nicht übernommen. Die entsprechenden Stellen im HTML-Code sind leer, so als ob kein Parameter vorhanden wäre!

Wichtiger ist, vor dem Zugriff auf die Elemente von $_GET/$_POST deren Existenz zu überprüfen (isset()) und gegebenenfalls bei Nichtvorhandensein sie mit einen Defaultwert selbst anzulegen (oder anderweitig geeignet im Script zu verfahren). Ein auf E_ALL gestelltes error_reporting (nebst display_errors auf on) zeigt dir solche Zugriffssünden mit einer Notice-Meldung an.

Zum Fehlersuchen sind auch immer wieder Kontrollausgaben hilfreich. Ein einfaches echo ist oft ungenau. Präziser ist var_dump(). Das zeigt auch komplexe Typen (wie Arrays) an. (Auch print_r() eignet sich für Arrays.) Hilfreich ist dabei die vorangehende Ausgabe eines <pre> oder der Blick in den Quelltext.

Ich habe zwar noch nicht viel Erfahrung mit PHP (man merkts wohl!) aber ähnliche Übergaben haben schon oft problemlos funktioniert! Schließlich übernimmt auch schon das Ausgangsskript ohne Probleme einen Parameter mit $_GET.

Anfängerglück :-)  Mach es lieber gleich richtig und vergiss die Unsitte des Umkopierens schnell wieder.

echo "$verabschiedung $name";