Frage zum Includen?

Paranoid

Mitglied
Ich hab ne Page mit tabellen und mein Include code sieht so aus:

<?php
if(isset($site)){
include("$site.php");
}else{
include("news.php");
}
?>

Der Link dafür sieht so aus:

<a href="index.php?site=pictures">

Beide sachen liegen auf einem Ordner. Jetzt habe ich aber eine index.php von einem gästebuch auf /Gästebuch/index.php und möchte das das Gästebuch auf der Seite liegt.
Wie muss jetzt der Link aussehen?
 
hö aber was ist en das fürn include? Wenn $site leer ist includes site.php, wenn $site was drin hat includets news.php richtig? dann ist ja egal was du in der variabel übergibst nicht?

resp. möchtest du nun das das gästebuch dort drin included wird oder? Also in die tabelle nicht? wieso übergibst du dann nicht einfach das file das zu includen ist? mit index.php?site=site.php und includest dann mit:


<? include($main); ?>

dann kannst du dann bei der übergabe halt so includen: index.php?site=Gästebuch/index.php

mhh oder versteh ich da was falsch?
 
nur als Vorsichtsfrage :

Welche PHP Version benutzt du ?

Wenn du etwas späteres als 4.02 hast,
und ich mich nicht völlig irre, muss
die Variable nicht $site heißen,
sondern $HTTP_GET_VARS[site]

Wie gesagt, reine Vorsichtsmaßnahme.

Gruß,
Jonathan
 
hö wieso das? sind die variablen nicht mehr freiwählbar? Also ich mein was macht das: $HTTP_GET_VARS vor der variable?
 
PHP:
<?php 
if (!isset($action)) { 
$action = "start.php"; 
} 

if (!isset($page)) { 
include($action); 
} else { 
include($page."/".$action); 
} 
?>

Link sieht so aus:
datei.php?page=ORDNER&action=DATEI.php

In deinem Fall:

datei.php?page=Gästebuch&action=index.php
MFG sonicks ;)
 
ganz nebenbei ist es nicht sonderlich geschickt, wenn man in verzeichnissen umlaute benutzt. schon gar nicht, wenn diese verzeichnisse auf einem webserver liegen. also nenn das verzeichnis lieber "gaestebuch" als "gästebuch". das gleiche gilt für die meisten anderen sonderzeichen und leerzeichen.
 
An eurer Stelle würde ich vorsichtig sein, denn mit euren Scripts reißt ihr riesige löcher in euer System.

Ein Beispiel:
der Link von Sonicks ist ein potentielles Loch:
datei.php?page=ORDNER&action=DATEI.php

denn wenn man auf einem Linux Server statt DATEI.php /etc/htpasswd eingibt, bekommt man eine schöne Liste von Daten. Ok, nun hat Sonicks die Datei die per URL übergeben wurde nicht direkt includiert, aber es gibt viele, die auf solche Gedanken kommen, weils so schön einfach ist.
Generell kann man so schlecht geschützte Server aushebeln und an Passwörter heran kommen. Da die meisten die so etwas programmieren, noch nicht lange dabei sein können, und da die, die nicht lange dabei sind eben nicht bei guten Hostern sich einkaufen können, würd ich euch generell abraten in so einem Stil zu programmieren.

Die beste Methode ist immer noch diese (mMn):

PHP:
switch($action) {
   case "gb":
      include("gb.php");
      break;
   case "news":
      include("news.php");
      break;
   ...
   ...
   default:
      include("wasauchimmer.php");
}

Ein Wort zu $_POST oder $_GET bzw. $HTTP_[GET|POST|COOKIE]_VARS:
Auf den meisten Webservern ist die Einstellung noch nicht gesetzt, das die Variablen nicht mehr automatisch zur Verfügung gestellt werden. Deshalb muss das nicht so oder so heißen. Verwirrt bitte die Leute nicht, wenn es so weit ist, kommen sie sowieso noch mal.

Zu diesem Thema hab ich mal einen Workaround gepostet, der die Variablen auch bei Servern zur Verfügung stellt, bei dem die Option gesetzt ist. Allerdings sollte man schon auf die neuen Verfahren umsteigen, allein um die Scripte sicherer zu machen.

Ach egal...

Ciao, F.o.G.
 
Zuletzt bearbeitet:
Original geschrieben von F.o.G.
An eurer Stelle würde ich vorsichtig sein, denn mit euren Scripts reißt ihr riesige löcher in euer System.

Ein Beispiel:
der Link von Sonicks ist ein potentielles Loch:
datei.php?page=ORDNER&action=DATEI.php

denn wenn man auf einem Linux Server statt DATEI.php /etc/htpasswd eingibt, bekommt man eine schöne Liste von Daten.


Es gibt keine htpasswd im verzeichniss /etc/ gibts nicht und gabs nicht.

Die htpasswd befindet sich normalerweise in einem anderen frei wählbaren vezeichnis.
Zumeist ein verzeichnis des users. Diese Datei kann z.b nicht vom accaunt nobody (httpd guest) gelesen werden, somit funktioniert das nicht.


in Wort zu $_POST oder $_GET bzw. $HTTP_[GET|POST|COOKIE]_VARS:
Auf den meisten Webservern ist die Einstellung noch nicht gesetzt, das die Variablen nicht mehr automatisch zur Verfügung gestellt werden. Deshalb muss das nicht so oder so heißen. Verwirrt bitte die Leute nicht, wenn es so weit ist, kommen sie sowieso noch mal.

Das ist keine Einstellung sondern festern bestandteil von PHP4 .
Wenn du diese "Einstellung" nicht hast würde ich mal deinen Provider anscheissen wieso er dir PHP3 verkauft obwohl PHP4 angeboten ist.

Also Leute macht das so, die automatische Übergabe von Variablen wird abgeschafft und das mit gutem grund.
Gewöhnt euch das gleich richtig an.
 
Zurück