Webdesign in Siegen

Tutorial: Der Php Include-Befehl (Fehler?)

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Tutorial: Der Php Include-Befehl (Fehler?)

Beitragvon veNom am 30.03.2007, 13:14

Hallo,

ich habe ja vor kurzem hier einen Thread geöffnet da ich Probleme mit dem Include Befehl des Tutorials hatte, da dieser nicht funktionierte.

Um diesen Code handelt es sich:
Code: Alles auswählen
<?php
  if(isset($_GET['action']))
    {
      $action=$_GET['action'];
      if(file_exists("$action.php"))
      {
        include("$action.php");
      }
      else
      {
        include("startseite.php");
      }
    }
?>


Dieser Code funktionierte bei mir nicht, nachdem ich gerade PHP lerne, bin ich hier auf den Fehler gestoßen ;)

das else ist in der falschen if-Abfrage definiert, jetzt steht es in der zweiten If-Abfrage aber es gehört eigentlich zu der ersten.

So funktioniert es bei mir ...
Code: Alles auswählen
<?php
  if(isset($_GET['action']))
    {
      $action=$_GET['action'];
      if(file_exists("$action.php"))
      {
        include("$action.php");
      }
    }
  else
    {
      include("startseite.php");
    }
?>
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1631
Registriert: 29.12.2005
Wohnort: Wien

Beitragvon satinez am 30.03.2007, 19:07

HI !

Ich habe die INCLUDES mit dem eingefügt.

Kann ich auch (wie bei dir) cheken lassen ob die datei existiert ?

oder macht das der default ?


Code: Alles auswählen
<?php
switch($_GET["inhalt"]) {
case "about": include("about.html");break; // Fall 1
case "home": include("home.html");break; // Fall 2
case "port": include("portfolio.htm");break; // Fall 3
default: include("home.html");
}
?>
Benutzeravatar
satinez
Mitglied
 
Beiträge: 345
Registriert: 18.09.2006
Wohnort: Schweiz/Basel

Beitragvon satinez am 18.10.2007, 02:47

HI !

Ist dieses Script zu gebrauchen ?
enthält es Fehler ?


Code: Alles auswählen
<?php
switch($_GET["content"]) {
case "about": include("about.html");break;  // Fall 1
case "home": include("home.html");break;  // Fall 2
case "port": include("portfolio.html");break; // Fall 3
default: include("home.html");
}
?>
Bild
Benutzeravatar
satinez
Mitglied
 
Beiträge: 345
Registriert: 18.09.2006
Wohnort: Schweiz/Basel

Beitragvon Manuel am 18.10.2007, 03:26

Hi satinez!

Wenn du es mittlerweile schon 7 Monate verwendest, dann dürfte es doch so stimmen oder? ;)
In Hinsicht auf die Sicherheit ist diese Methode definitiv besser, bei Seiten mit sehr vielen Unterseiten aber so selten machbar.
Wenn du aber "nur" 4 Unterseiten hast, dann solltest du es unbedingt so machen und zudem würde ich mir dann angewöhnen, ebenfalls wieder php-Dateien zu includen, da du dann dort auch wieder zusätzlichen PHP-Quellcode unterbringen kannst.

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8930
Registriert: 10.12.2004
Wohnort: Asbach

Beitragvon satinez am 18.10.2007, 04:07

uuups, das wahr wohl das falsche , sorry :roll:

hab da ein anderes gefunden, bin aber jetzt zu müde um es rauszusuchen ^^

N8


EDIT:
Code: Alles auswählen
<?php

switch ($_GET['seite']) {

case "start": $link = "Ordner/startseite.php"; break;
case "dings": $link = "Ordner/dingsseite.php"; break;
case "bums": $link = "Ordner/bumsseite.php"; break;
case "donner": $link = "Ordner/donnerseite.php"; break;
case "wetter": $link = "Ordner/wetterseite.php"; break;

default: $link = "Ordner/startseite.php";
}

require_once($link);
?>
Bild
Benutzeravatar
satinez
Mitglied
 
Beiträge: 345
Registriert: 18.09.2006
Wohnort: Schweiz/Basel

Beitragvon Manuel am 18.10.2007, 13:07

Ist ja quasi genau das Gleiche, nur dass du den Befehl ausgelagert hast. Ich bin dennoch eher jemand, der include verwendet anstatt require. Wo genau der kleine Unterschied lag müsste ich aber jetzt ebenfalls nachlesen.

Minimal besser ist es übrigens, wenn du anstatt doppelter Anführungszeichen einfache verwendest, wie du es bei 'seite' auch getan hast. Somit wird der Stringinhalt nicht auf Variablen geparsed und ist somit dann minimal schneller.

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8930
Registriert: 10.12.2004
Wohnort: Asbach

Beitragvon satinez am 18.10.2007, 13:18

Danke.

Also heisst das generell immer ' statt " ueberall (ganz PHP) ?
Bild
Benutzeravatar
satinez
Mitglied
 
Beiträge: 345
Registriert: 18.09.2006
Wohnort: Schweiz/Basel

Beitragvon Manuel am 18.10.2007, 14:11

Jain. Oft macht es auch Sinn einen String zu verwenden in dem direkt eine Variable verwendet wird, beispielsweise in SQL-Anfragen. Dort ist es wesentlich einfacher dann " zu verwenden.

Ansonsten gilt diese "Regel" aber generell meines Wissens. Oder kennt jemand ein Gegenbeispiel wo es gar keinen Sinn macht ' zu verwenden?
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8930
Registriert: 10.12.2004
Wohnort: Asbach

Beitragvon Basti am 18.10.2007, 14:43

Ich handhabe das bei mir genauso. Bei einfachen Strings ohne Variablen immer ein ' und bei "gemischten" Strings die Variablen oder ähnliches enthalten nehme ich dann ".

Der Unterschied zwischen require() und include() besteht übrigens darin, dass require() bei Fehlern direkt einen Fatal Error ausgibt, die Ausführung des Scripts also direkt gestoppt wird, während include() nur eine Fehlermeldung anzeigt, den Rest des Script aber ausführt.

Deshalb sollte man eigentlich schon require() verwenden, vorallem aus Sicherheitsgründen. In manchen Fällen macht es aber nicht so einen großen Unterschied.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1922
Registriert: 15.06.2006
Wohnort: Rheinbreitbach

Beitragvon satinez am 18.10.2007, 22:44

OK verstanden :D

Und was sagt ihr zu dem ?

Code: Alles auswählen
if(!isset($site)) $site="news";
      //Sichheitsl&uuml;cke beheben
      $invalide = array('/','/\/',':','.');
      $site = str_replace($invalide,' ',$site);
      if(!file_exists($site.".php")) $site = "news";
      include($site.".php");
     
Bild
Benutzeravatar
satinez
Mitglied
 
Beiträge: 345
Registriert: 18.09.2006
Wohnort: Schweiz/Basel

Beitragvon Manuel am 18.10.2007, 23:18

Entweder so oder du arbeitest mit einem regulären Ausdruck, der nur Buchstaben, Zahlen und _ zulässt. Somit hättest du dann auf jeden Fall wirklich alles ausgeschlossen, was es irgendwie ermöglichen könnte fremde Dinge zu includen. Ebenfalls sehr wichtig ist, dass safe_mode auf dem Server aktiviert ist. Das erhöht die Sicherheit sehr.
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8930
Registriert: 10.12.2004
Wohnort: Asbach


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste