Supportnet / Forum / Skripte(PHP,ASP,Perl...)
PHP Variablen
Frage
Hallo,
ich sehe es bei immer mehr Homepages, dass der Link nicht mehr:
beispiel.de/index.php?Daten/Hallo.php
sondern
beispiel.de/?site=hallo heißt.
Wie erstell ich denn sowas?
Gruß Jan
Antwort 1 von Nessus
Hi,
erkläre doch mal, warum du das willst, es ist doch egal, da beide Wege zum Ziel führen.
IMHO ist das nur eine dynaische Seite, sprich das Layout wird im Template gehalten und der Content kommt aus der DB.
Nessus
erkläre doch mal, warum du das willst, es ist doch egal, da beide Wege zum Ziel führen.
IMHO ist das nur eine dynaische Seite, sprich das Layout wird im Template gehalten und der Content kommt aus der DB.
Nessus
Antwort 2 von Bako
Zitat:
erkläre doch mal, warum du das willst, es ist doch egal, da beide Wege zum Ziel führen.
erkläre doch mal, warum du das willst, es ist doch egal, da beide Wege zum Ziel führen.
Warum soll er sich Dir gegenüber dafür rechtfertigen? Nur weil Du nicht weisst, wie es geht? rofl!!! Ja genau, dass ist doch der Knackpunkt, sonst hättest Dus ihm einfach verklickert, gelle? ;-)
Seine Frage ist präzise gestellt und verdient eine ebensolche Antwort. Ich hab mich das übrigens auch schon gefragt. Hier im Supportnet wird ja sogar das Fragezeichen weggelassen.
"https://supportnet.dethreads/1418356"
Würd mich auch mal interessieren, wie das geht. Obwohl der Server ist ja auch Eigenbau, da kann man ja machen was man will.
Ich könnt mir vorstellen, dass man solche Sachen mit "mod_rewrite" machen kann, aber k.A. Vielleicht meldet sich ja noch jemand, der sich damit auskennt..
Antwort 3 von Supermax
Wenn nicht explizit eine Seite oder ein Script angegeben ist, greift der Webserver immer auf eine der konfigurierten Index-Dateien zu. Typischerweise sind das z.B. index.html, index.htm oder index.php. Der Webserver probiert der Reihe nach, welche der angegebenen Dateien gelesen werden kann, und verarbeitet diese dann (vereinfacht ausgedrückt).
Für
wird dann tatsächlich z.B.
aufgerufen.
Die index.php enthält dann in der Regel die notwendigen includes, Initialisierungen (z.B. Session-Handling, User-Informationen aus einer DB lesen etc.), die für alle Seiten gleich sind, und bindet dann die per site-Parameter angegebene Seite entweder direkt als include() ein, oder lädt ein Template mit dem angegebenen Namen...
Für
beispiel.de/?site=hallowird dann tatsächlich z.B.
beispiel.de/index.php?site=halloaufgerufen.
Die index.php enthält dann in der Regel die notwendigen includes, Initialisierungen (z.B. Session-Handling, User-Informationen aus einer DB lesen etc.), die für alle Seiten gleich sind, und bindet dann die per site-Parameter angegebene Seite entweder direkt als include() ein, oder lädt ein Template mit dem angegebenen Namen...
Antwort 4 von sebi2006
Danke für die schnellen Antworten.
Ich habe es schon so probiert:
Aber das klappt nicht, weder ein Fehler, noch die Seite.
Mir wurde auch folgendes empfohlen, aber dann wird die Seite gar nicht mehr geladen.
Gruß Jan
Ich habe es schon so probiert:
Zitat:
function site ( ) {
if (site ( ) == "impress")
{
include "Rechte/Impressum.php";
}
}
function site ( ) {
if (site ( ) == "impress")
{
include "Rechte/Impressum.php";
}
}
Aber das klappt nicht, weder ein Fehler, noch die Seite.
Mir wurde auch folgendes empfohlen, aber dann wird die Seite gar nicht mehr geladen.
Zitat:
datei:
$dateien = array();
$dateien[´home´] = "Impressum.php";
$dateien[´error´] = "index.php";
if(isset($_GET[´page´]) AND isset($dateien[$_GET[´page´]]))
{
if(!file_exists($dateien[$_GET[´page´]])) echo "Die Datei ist nicht vorhanden.";
include $dateien[$_GET[´page´]];
}
else
{
include $dateien[´error´];
}
datei:
$dateien = array();
$dateien[´home´] = "Impressum.php";
$dateien[´error´] = "index.php";
if(isset($_GET[´page´]) AND isset($dateien[$_GET[´page´]]))
{
if(!file_exists($dateien[$_GET[´page´]])) echo "Die Datei ist nicht vorhanden.";
include $dateien[$_GET[´page´]];
}
else
{
include $dateien[´error´];
}
Gruß Jan
Antwort 5 von Supermax
Probier mal folgendes:
$page = basename($_GET[´page´]);
if (file_exists($page)) {
include("$page.php");
} else {
include("error.php");
}Antwort 6 von sebi2006
Danke, das Problem ist gelöst.
Nur leider war ein kleiner Fehler drin.
Wenn man z.B.
index.php?impressum
eingibt, findet er die Datei nicht, da die Überprüfung nur nach impressum sucht und die Dateiendung fehlt, also Error.
Wenn man
index.php?impressum.php
eingibt, wird die Dateiendung doppelt gesetzt.
Also ebenfalls Error.
Daher muss es in korrekter Form so oder halt auch irgendwie anders aussehen:
@Supermax: Der Fehler ist nicht böse gemeint.
Ich danke für die Mühe
Gruß Jan
Nur leider war ein kleiner Fehler drin.
Wenn man z.B.
index.php?impressum
eingibt, findet er die Datei nicht, da die Überprüfung nur nach impressum sucht und die Dateiendung fehlt, also Error.
Wenn man
index.php?impressum.php
eingibt, wird die Dateiendung doppelt gesetzt.
Also ebenfalls Error.
Daher muss es in korrekter Form so oder halt auch irgendwie anders aussehen:
<?php
$page = basename($_GET[´page´]) . ".php";
if (file_exists($page)) {
include("$page");
} else {
include("error.php");
}
?>@Supermax: Der Fehler ist nicht böse gemeint.
Ich danke für die Mühe
Gruß Jan
Antwort 7 von Nessus
@Bako
Hast du noch was anderes drauf als geistigen Dünnpfiff?
Nessus
Zitat:
Warum soll er sich Dir gegenüber dafür rechtfertigen? Nur weil Du nicht weisst, wie es geht? rofl!!! Ja genau, dass ist doch der Knackpunkt, sonst hättest Dus ihm einfach verklickert, gelle? ;-)
Warum soll er sich Dir gegenüber dafür rechtfertigen? Nur weil Du nicht weisst, wie es geht? rofl!!! Ja genau, dass ist doch der Knackpunkt, sonst hättest Dus ihm einfach verklickert, gelle? ;-)
Hast du noch was anderes drauf als geistigen Dünnpfiff?
Nessus
Antwort 8 von Bako
Zitat:
Hast du noch was anderes drauf als geistigen Dünnpfiff?
Hast du noch was anderes drauf als geistigen Dünnpfiff?
Geprüft und für argumentfrei befunden.
Antwort 9 von Supermax
Ich habs auch nicht so aufgefasst, sowas kann schon mal passieren wenn man Code "freihändig" eintippt ;)
Hauptsache es hat dir weitergeholfen.
Hauptsache es hat dir weitergeholfen.
Antwort 10 von sebi2006
@supermax: Das hat es !
@bako und nessus:
Da mein Grund anscheinend so stark diskutiert wird hier die Antwort:
Die Gründe für diese Linkungart waren, dass ich
1. eine kleinere Url in der Adresszeile stehen habe
und
2. der genaue Pfad zur Datei steht auch nicht in der Adresszeile
sowie
3. die Dateiendung wird auch nicht bekannt gegeben.
Desweiteren könnte man so auch z.B. (mit kleiner Abwandlung) index.php?page=1234 als Link setzten und die Impressum.php im Ordner Rechtliches würde eingefügt werden.
@bako und nessus:
Da mein Grund anscheinend so stark diskutiert wird hier die Antwort:
Die Gründe für diese Linkungart waren, dass ich
1. eine kleinere Url in der Adresszeile stehen habe
und
2. der genaue Pfad zur Datei steht auch nicht in der Adresszeile
sowie
3. die Dateiendung wird auch nicht bekannt gegeben.
Desweiteren könnte man so auch z.B. (mit kleiner Abwandlung) index.php?page=1234 als Link setzten und die Impressum.php im Ordner Rechtliches würde eingefügt werden.
Antwort 11 von sebi2006
Hi,
ich habe noch eine weitere Hilfe bekommen, um das Problem zu lösen:
Zuerst dies in der index an der Stelle zum einfügen hinzufügen:
Nun noch die Datei pages.php erstellen und mit folgendem Code füllen:
Zuletzt an gewünschter Stelle nur noch den Link in Form von:
"index.php?page=home"
einfügen.
ich habe noch eine weitere Hilfe bekommen, um das Problem zu lösen:
Zuerst dies in der index an der Stelle zum einfügen hinzufügen:
<?php
include "pages.php";
if(isset($_GET[´page´]) AND isset($dateien[$_GET[´page´]]))
{
if(!file_exists($dateien[$_GET[´page´]]))
echo "Die gewünschte Seite existiert nicht.";
include $dateien[$_GET[´page´]];
}
else
{
include $dateien[´error´];
}
?>
Nun noch die Datei pages.php erstellen und mit folgendem Code füllen:
<?php
$dateien = array();
$dateien[´home´] = "main.php";
$dateien[´mail´] = "kontakt.php";
...
$dateien[´error´] = "main.php"; //Nur ein Beispiel
?>Zuletzt an gewünschter Stelle nur noch den Link in Form von:
"index.php?page=home"
einfügen.
Antwort 12 von ClemBra
Noch einige Verbesserungsvorschläge
Erstmal die Trennung in zwei Dateien ist gut, aber der code der Index.php wird so wohl nicht wie gewünscht funktionieren, Folgender Vorschlag:
Durch das $_SERVER[´QUERY_STRING´] kann man das "page=" auch noch weglassen.
Erstmal die Trennung in zwei Dateien ist gut, aber der code der Index.php wird so wohl nicht wie gewünscht funktionieren, Folgender Vorschlag:
<?php
include "pages.php";
// erstmal den Parameter in eine eigene Variable schreiben, damit man es leicht ändern kann.
if (!empty($_GET[´page´])) $page = $_GET[´page´];
elseif (!empty($_SERVER[´QUERY_STRING´])) $page = $_SERVER[´QUERY_STRING´];
else $page = $startdatei
// $startdatei muss in der pages.php festgelegt werden
if(isset($dateien[$page])) {
if(!file_exists($dateien[$_GET[´page´]])) {
include $dateien[´error_server´];
} else {
include $dateien[$_GET[´page´]];
}
} else {
include $dateien[´error_client´];
}
?>
Durch das $_SERVER[´QUERY_STRING´] kann man das "page=" auch noch weglassen.
Antwort 13 von sebi2006
danke für die Alternative ohne page=, allerdings funktioniert es nicht, ich weiß aber nicht warum, es kommt die meldung
....unspected T_if ....
in der zeile steht:
if(isset($dateien[$page])) {
desweiteren weiß ich auch nicht was mit $startdatei definiert werden soll.
....unspected T_if ....
in der zeile steht:
if(isset($dateien[$page])) {
desweiteren weiß ich auch nicht was mit $startdatei definiert werden soll.
Antwort 14 von rabies
An Bako (auch wenn der Thread schon ein wenig alt ist):
Ja, soetwas macht man mit mod_rewrite.
Das könnte man beispielsweise so lösen:
In der threads.php würde man dann eine Datenbankabfrage mit der thread_id machen (oder die Daten anderweitig verarbeiten).
An sebi2006:
Diese Meldung kommt, da die Anweisung
Ich denke, mit $startdatei sollte definiert werden, welche Datei die 'Index-Seite' repräsentiert. Hier evtl. eine "index.php".
--rabies.
Zitat:
"https://supportnet.dethreads/1418356"
Würd mich auch mal interessieren, wie das geht.
"https://supportnet.dethreads/1418356"
Würd mich auch mal interessieren, wie das geht.
Ja, soetwas macht man mit mod_rewrite.
Das könnte man beispielsweise so lösen:
RewriteEngine on
RewriteRule ^threads/([0-9]*)$ threads.php?thread_id=$1
In der threads.php würde man dann eine Datenbankabfrage mit der thread_id machen (oder die Daten anderweitig verarbeiten).
An sebi2006:
Zitat:
....unspected T_if ....
....unspected T_if ....
Diese Meldung kommt, da die Anweisung
else $page = $startdatei nicht mit einem Semikolon beendet wurde. Setze das Semikolon hinter $startdatei noch, und der Fehler sollte behoben sein. Ich denke, mit $startdatei sollte definiert werden, welche Datei die 'Index-Seite' repräsentiert. Hier evtl. eine "index.php".
--rabies.
Antwort 15 von sebi2006
so, habe nach langer Zeit mal wieder die Möglichkeit hier etwas weiter zu machen.
Die Hilfen haben mir soweit viel gebracht, doch bei mir wird immer nur der error_client angezeigt, weshalb?
Ich kann machen was ich will, ich habe folgendes versucht:
index.php?page=main
index.php?main
index.php
immer das gleiche.
In der Phpinfo steht:
_SERVER["QUERY_STRING"] no value
QUERY_STRING no value
Ist das richtig?
Gibt es noch andere Möglichkeiten?
Die Hilfen haben mir soweit viel gebracht, doch bei mir wird immer nur der error_client angezeigt, weshalb?
Ich kann machen was ich will, ich habe folgendes versucht:
index.php?page=main
index.php?main
index.php
immer das gleiche.
In der Phpinfo steht:
_SERVER["QUERY_STRING"] no value
QUERY_STRING no value
Ist das richtig?
Gibt es noch andere Möglichkeiten?

