Supportnet Computer
Planet of Tech

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

Antwort 2 von Bako

Zitat:
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
beispiel.de/?site=hallo

wird dann tatsächlich z.B.
beispiel.de/index.php?site=hallo

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

Antwort 4 von sebi2006

Danke für die schnellen Antworten.

Ich habe es schon so probiert:
Zitat:

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´];
}


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:

<?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
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? ;-)


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?

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.

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.

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:

<?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:

<?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.

Antwort 14 von rabies

An Bako (auch wenn der Thread schon ein wenig alt ist):
Zitat:
"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 ....

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?

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: