Seite kann nicht angezeigt werden / Querystring-Problem ?
Enrico
- grafik
Hallo,
Ich hatte gestern eine Anfrage zum Thema "Problem mit Maskierung von verschachtelten Querystrings" erstellt.
Auf die gegebenen Anregungen hin, v.a. auf die von wahsaga, habe ich die interne Steuerung der Navigation erheblich vereinfacht.
Nun ergibt sich aber trotzdem ein Problem mit der Anzeige des Gästebuches, wenn ich beispielsweise blättern möchte.
In der Gästebuch-Datei werden die Links jetzt grundsätzlich wie folgt aufgebaut:
$Link = 'Seite_Nr=' . ($Seite_Nr + 1);
$Link_Vorblaettern = '<a href="Seitenaufbau.php?Register_Nr=3&Seite=Gaestebuch.php?' . $Link . '" ...>Vorblättern</a>
In der Datei "Seitenaufbau.php" werden nun die übergebenen Variablen wie folgt abgefragt:
$Array_Seiten = array ("Neuigkeiten.html", ..., ...);
$Register_Nr = isset ($_REQUEST ['Register_Nr']) ? trim ($_REQUEST ['Register_Nr']) : "";
if ($Register_Nr == "")
{
$Register_Nr = 0;
$Anzuzeigende_Seite = "Neuigkeiten.html";
}
else
{
$Seite = isset ($_REQUEST ['Seite']) ? trim ($_REQUEST ['Seite']) : "";
if ($Seite == "")
$Anzuzeigende_Seite = $Array_Seiten [$Register_Nr];
else
{
if ($Seite == "Gaestebuch.php")
{
$Link = isset ($_REQUEST ['Link']) ? trim ($_REQUEST ['Link']) : "";
$Anzuzeigende_Seite = "Gaestebuch.php?" . $Link;
}
}
}
...Tabellen-Aufbau...
<?php include $Anzuzeigende_Seite; ?>
...Tabellen-Aufbau...
Wenn ich im Gästebuch aber nun auf den Link "Vorblättern" klicke, dann erhalte ich die Fehlermeldung, dass diese Datei nicht angezeigt werden kann. In der Statuszeile wird der Link aber richtig angezeigt, d.h. der Link wird damit auch richtig zusammengesetzt.
Woran kann der Fehler liegen ?
Vielen Dank im voraus,
Gruss Enrico
Entschuldigung, hatte mich beim Thema verklickt.
Gruss, Enrico
hi,
$Anzuzeigende_Seite = "Gaestebuch.php?" . $Link;
<?php include $Anzuzeigende_Seite; ?>
wenn du eine PHP-datei mittels include über das lokale dateisystem einbindest, kannst du ihr keine GET-parameter mehr mitgeben - logisch, HTTP ist dabei ja gar nicht im spiel.
ist aber nicht tragisch, weil eine derart eingebundene seite auf alle variablen zugriff hat, die auch im hauptscript verfügbar sind.
also bau deinen link-URL doch so auf:
Seitenaufbau.php?Register_Nr=3&Seite=Gaestebuch.php&Seite_Nr=123
dann extrahierst du dir im hauptscript $Seite_Nr daraus, und dann hat dein per include eingebundenes script Gaestebuch.php diese variable ebenfalls zur verfügung.
btw: thema eines threads beim antworten ändern geht über die vorschau-funktion.
gruß,
wahsaga
Hallo wahsaga,
Ich hab hier überhaupt keinen Durchblick mehr, wo ich was wie einbauen soll :-((
Ich brüte jetzt schon seit gestern über diesem Problem, komme aber absolut nicht weiter :-((
Könntest Du mir bitte, ganz ausnahmeweise, das ganze nicht in Codeform erklären ?
Wär riesig nett von Dir :-))
Enrico
PS: Danke für Deinen btw-Tip :-)))
hi,
Könntest Du mir bitte, ganz ausnahmeweise, das ganze nicht in Codeform erklären ?
da gibt's gar nicht viel zu erklären.
aufgerufen wird:
Seitenaufbau.php?Register_Nr=3&Seite=Gaestebuch.php&Seite_Nr=123
jetzt hast du also in $_GET die drei variablen
$_GET['Register_Nr']
$_GET['Seite']
$_GET['Seite_Nr']
in $_GET['Seite'] steht die seite, die du einbinden willst (natürlich erst nach prüfung, ob gültige seite), also machst du das dann:
include $_GET['Seite'];
und innerhalb von Gaestebuch.php hast du jetzt automatisch zugriff auf $_GET['Seite_Nr'], weil diese variable ja auch im hauptscript zur verfügung steht:
echo $_GET['Seite'];
in gaestebuch.php wird 123 ausgeben.
gruß,
wahsaga
Ich raff's einfach nicht... *knirsch*
In der Statuszeile habe ich bei einem Link in der Datei Gaestebuch.php beispielsweise die Ausgabe:
Seitenaufbau.php?Register_Nr=3&Seite=Gaestebuch.php?Seite_Nr=2
Dieser String wird an die Datei "Seitenaufbau.php" übergeben und ausgewertet:
$Array_Seiten = array ("Neuigkeiten.html", ..., ...);
$Register_Nr = isset ($_REQUEST ['Register_Nr']) ? trim ($_REQUEST ['Register_Nr']) : "";
if ($Register_Nr == "")
{
$Register_Nr = 0;
$Anzuzeigende_Seite = "Neuigkeiten.html";
}
else
{
$Seite = isset ($_REQUEST ['Seite']) ? trim ($_REQUEST ['Seite']) : "";
if ($Seite == "")
$Anzuzeigende_Seite = $Array_Seiten [$Register_Nr];
else
$Anzuzeigende_Seite = $Seite;
}
<?php include $Anzuzeigende_Seite; ?>
Ich verstehe absolut nicht, was an meinem Code nicht stimmen soll und warum der Browser die Seite nicht anzeigt ... :-((
Hallo Enrico.
Ich raff's einfach nicht... *knirsch*
Verwende statt $_REQUEST mal $_GET, so wie vom wahsaga vorgeschlagen.
Freundschaft!
Siechfred
Hallo Siechfried,
Hallo wahsaga,
mit $_GET bringt er mir nachfolgende Fehlermeldung:
Failed opening 'Gaestebuch.php?Seite_Nr=2'
Enrico
Bin jetzt auf folgenden Sachverhalt gestossen:
"werden variablen in einem php-script-bereich definiert, so sind diese in einer im selben bereich inkludierten datei auch ansprechbar."
Vielleicht war das ja ganz genau das, was wahsaga gemeint hatte :o)
Da ich in der Gästebuch-Datei die Variablen $Aktion, $ID und $Seite_Nr benötige, muss ich sie, gemäss obigem Zitat, auch vor dem später folgenden include-Befehl in der Datei Seitenaufbau.php einbinden:
if (ereg ("Gaestebuch", $Seite))
{
$Aktion = isset ($_GET ['Aktion']) ? trim ($_GET ['Aktion']) : "";
$ID = isset ($_GET ['ID']) ? trim ($_GET ['ID']) : "";
$Seite_Nr = isset ($_GET ['Seite_Nr']) ? trim ($_GET ['Seite_Nr']) : 1;
$Anzuzeigende_Seite = "Gaestebuch.php";
}
...Tabellen-Aufbau...
<?php include $Anzuzeigende_Seite; ?>
...Tabellen-Aufbau...
Diese Variablen werden in der Gaestebuch-Datei in genau der gleichen Art und Weise abgefragt.
Jetzt bin ich zumindest so weit, dass mir keine Fehlermeldung mehr angezeigt wird, allerdings kann ich immer noch nicht blättern.
Ich habe auch festgestellt, dass der korrekte Seitenaufruf auch ohne Deklaration in der Datei "Seitenaufbau.php" funktioniert:
if (ereg ("Gaestebuch", $Seite))
$Anzuzeigende_Seite = "Gaestebuch.php";
Leider werden aber in beiden Varianten die Variablen $Aktion und $Seite_Nr nicht übergeben, die Variable $ID hingegen aber schon.
Was muss ich noch korrigieren ?
Enrico
Kann es sein, dass die Variablen, die ich über die URL an die Datei Seitenaufbau.php übergebe, beim includieren der Datei Gaestebuch.php verloren gehen ?
Ich komme da einfach nicht weiter... :-(
Auf der Seite http://us2.php.net/include (Beispiel 15-5)) wird ein funktioniostüchtiger include mit Parametern angegeben:
include 'http://www.example.com/file.php?foo=1&bar=2';
Diese Methode funktioniert bei mir lokal aber auch nicht.
Ich flipp' noch aus... :o)
Ich habe jetzt auch die Variante probiert, den Querystring abzutrennen, das Ergebnis als Variable vor dem Include-Befehl zu deklarieren und die Variable in meiner Gästebuchdatei wieder aufzurufen.
Funktioniert aber leider auch nicht. :-(
Ich weiss nicht, was ich noch alles probieren soll. :-(
Hallo!
Auf der Seite http://us2.php.net/include (Beispiel 15-5)) wird ein funktioniostüchtiger include mit Parametern angegeben:
include 'http://www.example.com/file.php?foo=1&bar=2';
Diese Methode funktioniert bei mir lokal aber auch nicht.
Natürlich nicht, weil lokal das Dateisystem und keine URLs/HTTP verwendet wird, und das ist auch gut so. Im Dateisystem kannst Du keine Parameter an Dateien übergeben.
Vielleicht hilft es Dir, wenn Du mal einen Blick in die PHP-FAQ wirfst: http://www.php-faq.de/q/q-datei-uebergabe.html
Grüße
Andreas
hi,
Bin jetzt auf folgenden Sachverhalt gestossen:
"werden variablen in einem php-script-bereich definiert, so sind diese in einer im selben bereich inkludierten datei auch ansprechbar."
Vielleicht war das ja ganz genau das, was wahsaga gemeint hatte :o)
bingo! ;-)
gruß,
wahsaga
hi,
In der Statuszeile habe ich bei einem Link in der Datei Gaestebuch.php beispielsweise die Ausgabe:
Seitenaufbau.php?Register_Nr=3&Seite=Gaestebuch.php?Seite_Nr=2
gnmpf ... ich habe dir doch schon mehrfach vorgeschlagen, den letzten parameter zu _trennen_.
Seite=Gaestebuch.php?Seite_Nr=2 ist m.E. wenig sinnvoll, besser wäre:
Seite=Gaestebuch.php&Seite_Nr=2
^ _unterschied_!
mit $_GET['Seite_Nr'] hast du darauf sowohl im haupt-script, als auch in jeglichen per include über's dateisystem eingebundenen scripten zugriff - also beispielsweise nach
include 'Gaestebuch.php';
auch in diesem script.
gruß,
wahsaga