• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Includesystem

  • Ersteller Ersteller matibaski
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
M

matibaski

Guest
Hallo.
Ich probiere einen neuen PHP Code aus, um mir Dateien einzuliefern, ohne dass ich immer bei einem switch z.B. eine Datei hinzufügen muss.

Also der Code sieht folgendermassen aus:
PHP:
   if(!isset($_GET['site'])) // Wen site= nicht gesetzt ist,
   {
    $_GET['site'] = 'home'; // Standart site=home setzen
   }
   else // Wenn doch,
   {
    if(!file_exists("private/" . $_GET['site'] . ".php")) // Prüfen, ob die Datei exisitiert. Wenn nicht,
    {
     include "_private/error.php"; // Errorseite einbinden.
    }
    else // Wenn die Datei doch exisitert,
    { 
     include "_private/" . $_GET['site'] . ".php"; // die gewünschte Seite einbinden
    }
   }
Mein problem ist, dass er immer die Errorseite einbindet, obwohl jetzt die home.php existiert, wenn ich oben site=home eingebe.

Das andere Problem ist,dass es den Standartwert nicht setzt (site=home) beim Seitenaufruf.

Bin für jede Hilfe dankbar.



MfG, matibaski
 
Mein problem ist, dass er immer die Errorseite einbindet, obwohl jetzt die home.php existiert, wenn ich oben site=home eingebe.

Das andere Problem ist,dass es den Standartwert nicht setzt (site=home) beim Seitenaufruf.

Hi,

zum ersten Problem:

Vllt. spielt der absolute Pfad da eine Rolle ?! Weiß ich aber nicht 100%.

zum zweiten Problem:

Naja, soweit ich weiß, kannst Du keine reservierten superglobalen neu setzen.

Versuch es mal so ...

PHP:
$myVar = $_GET['myVar'];

if(isset($myVar))
{
 $myVar = "home";
}
 
PHP:
   $site = $_GET['site'];
   if(!isset($site))
   {
    $_GET['site'] = 'home';
   }
   else
   {
    if(!file_exists("private/" . $site . ".php"))
    {
     include "_private/error.php";
    }
    else
    { 
     include "_private/" . $site . ".php";
    }
   }
Hab es halt in ne Variable gepackt, will aber trotzdem nicht.
 
PHP:
   $site = $_GET['site'];
   if(!isset($site))
   {
    $_GET['site'] = 'home';
   }
   else
   {
    if(!file_exists("private/" . $site . ".php"))
    {
     include "_private/error.php";
    }
    else
    { 
     include "_private/" . $site . ".php";
    }
   }
Hab es halt in ne Variable gepackt, will aber trotzdem nicht.

:roll: Ist das jetzt Dein ernst ?

Vllt. so ??

PHP:
   $site = $_GET['site'];
   if(!isset($site))
   {
    $site = 'home';
   }
   else
   {
    if(!file_exists("private/" . $site . ".php"))
    {
     include "_private/error.php";
    }
    else
    { 
     include "_private/" . $site . ".php";
    }
   }
 
:roll: Ist das jetzt Dein ernst ?

Deiner aber hoffentlich auch nicht, eure Varianten werden immer Fehlermeldungen ausgeben (E_NOTICE).
Ihr könnt doch nicht prüfen ob die Variable gesetzt ist, nachdem ihr sie setzt....
:roll:
Erst mit isset prüfen, dann setzen
PHP:
if(isset($_GET["site"]))
  $site = $_GET["site"];
else
  $site = "home";

beziehungsweise für die Pros ;)
PHP:
$site = (isset($_GET["site"])) ? $_GET["site"] : "home";
 
Deiner aber hoffentlich auch nicht, eure Varianten werden immer Fehlermeldungen ausgeben (E_NOTICE).
Ihr könnt doch nicht prüfen ob die Variable gesetzt ist, nachdem ihr sie setzt....
:roll:
Erst mit isset prüfen, dann setzen
PHP:
if(isset($_GET["site"]))
  $site = $_GET["site"];
else
  $site = "home";
beziehungsweise für die Pros ;)
PHP:
$site = (isset($_GET["site"])) ? $_GET["site"] : "home";

Ui :neutral:

Oh man -.-

Jupp, da hast Du mich erwischt. Du hast völlig recht.

Sry
 
Habe es neu aufgebaut:
PHP:
if(isset($_GET['site']))
{
 $site = $_GET['site'];
 if(!file_exists("_private/" . basename($site) . ".php")
 {
  include "_private/error.php";
 }
 else
 {
  include "_private/" . basename($site) . ".php";
 }
}
elseif($_GET['site'] == "")
{
 include "home.php";
}
Es funktioniert, aber es versucht die Datei aus dem Ordner von index.php abzurufen.
Also es erscheint:

Warning: include(home.php) [webhosting24 - Login]: failed to open stream: No such file or directory in C:\xampp\htdocs\Web\mybnew\index.php on line 44

Warning: include() [webhosting24 - Login]: Failed opening 'home.php' for inclusion (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\Web\mybnew\index.php on line 44
 
also irgendwie ist bei dir immer der wurm drin
Ich schreib dir mal ne funktionierende Lösung auf
PHP:
error_reporting(E_ALL);
$site = (isset($_GET["site"])) ? $_GET["site"] : "home";
$dir = "./_private/";
if(!file_exists($dir.$site.".php"))
  $site = "error";
include($dir.$site.".php");
 
Habs herausgefunden.
Ich habe beim default = "" nur home.php gesetzt ;)

MfG, matibaski
 
PHP:
error_reporting(E_ALL);
$site = (isset($_GET["site"])) ? $_GET["site"] : "home";
$dir = "./_private/";
if(!file_exists($dir.$site.".php"))
  $site = "error";
include($dir.$site.".php");

PHP:
index.php?site=../../../../../../../../../etc/passwd%00
 
ja dass liegt aber an der art und weise dieses Codes generell, nicht speziell an meinem.
Die kompletten Codes hier sind ohne Blacklist oder sonstigem verfahren, allerdings sollte dein Code bei einem richtig konfiguriertem Server einen
404,403 (oder 500) ausgeben
 
Die aller wenigsten Server sind so konfiguriert, dass das nicht funktioniert.
 
Natürlich gibt das ne' Fehlermeldung aus, du musst ja auch erstmal den etc Ordner aufm Server finden.

EDIT
Es geht ja generell um die Problematik, dass man gewisse Dateien includen könnte.
Ausserdem wird dein Server das Null Byte nicht akzeptieren. PHP Dateien kann man dann aber immernoch includen ;)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben