detlevk: Variable wird nicht übergeben

Ü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).

Im Skript Artikel.php wird der Parameter eingelesen:

$artnr = $_GET['artnr'];

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!

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.

  1. Hello,

    lass Dir vom deinem Zielscript mal die Get-Parameter anzeigen

    echo "<pre>\r\n";
        echo htmlspecialchars(print_r($_GET,1));
        echo "</pre>\r\n";

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. Tach.

    Ü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).

    Im Skript Artikel.php wird der Parameter eingelesen:

    $artnr = $_GET['artnr'];

    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!

    Wenn die Links tatsächlich so aussehen wie "Artikel.php?U012", ist es klar, daß in $_GET["artnr"] nichts steht. Dafür müßtest Du "Artikel.php?artnr=U012" benutzen; so wie in der ersten Codezeile, die Du hier zeigst -- keine Ahnung, ob Dir im Programm vielleicht das "artnr" verlorengegangen ist ...

    Mit print_r() oder var_dump() kannst Du Dir bei der Fehlersuche den Inhalt von Variablen anzeigen lassen. Das hilft bei der Fehlersuche in der Regel schon eine Menge.

    --
    Wenn es schwingt, ist es ein Filter – Oszillatoren würden so etwas nie tun.
    1. Wenn die Links tatsächlich so aussehen wie "Artikel.php?U012", ist es klar, daß in $_GET["artnr"] nichts steht. Dafür müßtest Du "Artikel.php?artnr=U012" benutzen; so wie in der ersten Codezeile, die Du hier zeigst -- keine Ahnung, ob Dir im Programm vielleicht das "artnr" verlorengegangen ist ...

      Sorry, das war jetzt ein Schreibfehler von mir! Der Link lautet natürlich "Artikel.php?artnr=U012"!
      Ich habe inzwischen allerdings eine Spur im Zuge der Verwendung der Variable...
      Werde mich dann wieder melden, wenn ich wieder auf dem Schlauch stehen sollte!
      Manchmal ist man einfach betriebsblind und findet Fehler nicht, über die ein anderer direkt beim ersten Lesen stolpert.

  3. 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";