php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.12.2011, 16:23  
Neuer Benutzer
 
Registriert seit: 15.01.2011
Beiträge: 17
PHP-Kenntnisse:
Anfänger
thombhitz befindet sich auf einem aufstrebenden Ast
thombhitz eine Nachricht über MSN schicken
Standard [Erledigt] Problem mit $_GET['id'] bei Umstrukturierung der Seite

Habe folgendes Problem: Wir sind dabei unsere Seite neu zu strukturieren. Bis jetzt haben wir alle Seiten im Root Verzeichnis des Servers liegen gehabt. Da dies aber aufgrund der Anzahl Seiten sehr unübersichtlich geworden ist, sollen die verschiedenen Seiten nun in den Unterordner "pages", welcher im Root Verzeichnis des Servers liegt, wandern.

In der Index steht folgendes:

PHP-Code:
                    <?php
                        
// Get the id
                        
$id $_GET['id'];
                        
// If path is wrong go default
                        
if (dirname(realpath($id.'.php')) != dirname(__FILE__) && dirname(realpath('old_files/' $id '.php')) != dirname(__FILE__) . '/old_files')
                            
$id 'index';
                        
// Otherwise it is fine...
                        
else
                            
$id basename($id);
                        
// If the file exists then include it
                        
if($id && file_exists($id ".php") && strtolower($id) != 'index' && strtolower($id) != 'home')
                            include(
$id.".php");
                        
// Otherwise check if the file is in the "old_files" folder
                        
elseif($id && file_exists('old_files/' $id '.php') && strtolower($id) != 'index' && strtolower($id) != 'home')
                            include(
'old_files/' $id '.php');
                        else
                        {
                        include(
"pages/home.php");
                        }
                    
?>
Habe nun folgendes probiert (jedoch ohne Erfolg):

PHP-Code:
                    <?php
                        
// Get the id
                        
$id $_GET['id'];
                        
// If path is wrong go default
                        
if (dirname(realpath('pages/'.$id.'.php')) != dirname('pages/' __FILE__) && dirname(realpath('old_files/' $id '.php')) != dirname(__FILE__) . '/old_files')
                            
$id 'index';
                        
// Otherwise it is fine...
                        
else
                            
$id basename('pages/'.$id);
                        
// If the file exists then include it
                        
if($id && file_exists('pages/'.$id ".php") && strtolower($id) != 'index' && strtolower($id) != 'home')
                            include(
'pages/'.$id.".php");
                        
// Otherwise check if the file is in the "old_files" folder
                        
elseif($id && file_exists('old_files/' $id '.php') && strtolower($id) != 'index' && strtolower($id) != 'home')
                            include(
'old_files/' $id '.php');
                        else
                        {
                        include(
"pages/home.php");
                        }
                    
?>
Wie muss ich die Abfrage umbauen, damit die Seiten aus dem Verzeichnis "pages" geholt und included werden?

Habe mich natürlich auch schon durch die entsprechenden Seiten auf php.net durchgelesen - leider hat mir das in diesem konkreten Beispiel auch nicht weitergeholfen.

Stehe irgendwie auf dem Schlauch und bin halt auch noch nicht so der Proficoder... Bin um jeden Tip dankbar!
thombhitz ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.12.2011, 17:04  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Habe Deinen Code zwar nur kurz überflogen, aber ich denke das sollte für Deine Zwecke auch reichen:
PHP-Code:
$fileName = ( isset($_GET['id']) )? htmlspecialchars$_GET['id'] ): 'home';
$filePath './pages/' $fileName '.php';

if( 
file_exists($filePath) ) {
    include_once 
$filePath

...Du solltest per id halt nur den Dateinamen übergeben, dann sollte das funktionieren.
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein

Geändert von Arne Drews (25.12.2011 um 17:15 Uhr). Grund: etwas übersehen... Weihnachtsstress... ;-)
Arne Drews ist offline   Mit Zitat antworten
Alt 25.12.2011, 18:22  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

sanitizing sollte hier per pathinfo passieren, Arne. Dann stellst du auch sicher das du "valide" Dateinamen benutzt, per htmlspecialchars da irgendwas zu transcodieren ist irgendwie durch den bauch am Bein vorbei und durch die Ohren.

PHP-Code:
$fileName = isset($_GET['id']) ? pathinfo($_GET['id'], PATHINFO_BASENAME) : 'home';

if ( 
is_readable(realpath('pages/'.$filename.'.php')) ) 
   require_once 
realpath('pages/'.$filename.'.php');
elseif( 
is_readable(realpath('old_files/'.$filename.'.php')) )
   require_once 
realpath('old_files/'.$filename.'.php');
else echo 
'Warning, you are too stupid to navigate properly.'
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 25.12.2011, 18:34  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Wichtig ist vor allem, das man nicht aus einem definierten Bereich ausbrechen kann. Code, der .. als Pfad zulässt, ist angreifbar!
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 25.12.2011, 18:40  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Wichtig ist vor allem, das man nicht aus einem definierten Bereich ausbrechen kann. Code, der .. als Pfad zulässt, ist angreifbar!
Jup, genau das verhindert pathinfo()
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 25.12.2011, 19:43  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Ja, kann ich nicht abstreiten...
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 25.12.2011, 20:03  
Neuer Benutzer
 
Registriert seit: 15.01.2011
Beiträge: 17
PHP-Kenntnisse:
Anfänger
thombhitz befindet sich auf einem aufstrebenden Ast
thombhitz eine Nachricht über MSN schicken
Standard

Vielen Dank für Eure antworten!

Ich habe das Beispiel von Tr0y mal ausprobiert. Leider scheint es so, dass ich wirklich zu dumm bin, um richtig zu navigieren

PHP-Code:
$fileName = isset($_GET['id']) ? pathinfo($_GET['id'], PATHINFO_BASENAME) : 'home'
Wenn ich das richtig verstehe, wird hier zuerst einmal geprüft, ob $_GET überhaupt einen Wert zugewiesen bekommt. Allerdings verwirrt mich die alternative Schreibweise mit dem Doppelpunkt. Ich habe auf PHP.net nachgeschlagen, aber steige da nicht ganz durch. Muss ich denn nun die Variable $id zuerst noch befüllen, oder läuft das automatisch?

Und wie sieht es mit 'home' aus - home.php (liegt im Verzeichnis "/pages") ist ja nicht die Basis sondern wird bereits von der index.php (liegt natürlich im root Verzeichnis) included.

Kann ich diesen Code so verwenden, oder muss ich den noch irgendwie weiter anpassen?

Ich denke, wenn ich diesen Knoten lösen kann, bin ich schon mal einen grossen Schritt weiter - schon im Voraus vielen Dank für Eure Geduld
thombhitz ist offline   Mit Zitat antworten
Alt 25.12.2011, 20:47  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

PHP-Code:
$fileName = isset($_GET['id']) ? pathinfo($_GET['id'], PATHINFO_BASENAME) : 'home'
entspricht:
PHP-Code:
if ( isset( $_GET['id'] ) ) {
   
$fileName pathinfo($_GET['id']), PATHINFO_BASENAME);
}
else {
   
$fileName 'home';

oder auch der Logischen Struktur:
Code:
WENN $_GET['id'] gesetzt DANN setze $fileName mit Wert von $_GET['id']
ANSONSTEN setze $fileName mit Wert 'home'
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 26.12.2011, 01:12  
Neuer Benutzer
 
Registriert seit: 25.07.2009
Beiträge: 22
PHP-Kenntnisse:
Anfänger
markwbn befindet sich auf einem aufstrebenden Ast
Standard

So hab ich das mal gelöst !

PHP-Code:
$page "$id.php";


if (empty(
$id))
  {
  
$page ="news.php";
  }

if (
$handle opendir('pages/')) {
    while (
false !== ($file readdir($handle))) {
        if (
$file != "." && $file != "..")
      {
       if (
$page == $file)
        {
        
$check 1;
        }
      }
    }
    
closedir($handle);
}




if (
$check == )
    {
    include (
"pages/$page");
    }
else
    {
    include (
"pages/error.php");
    } 
markwbn ist offline   Mit Zitat antworten
Alt 26.12.2011, 03:20  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Jo. *kreisch*
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem beim Laden von Seitenteilen in den Content. Seite verschiebt sich! philipp JavaScript, Ajax und mehr 6 22.11.2011 20:27
Große leere Lücke zwischen dem Textende der FAQ Seite und dem Footer alarian JavaScript, Ajax und mehr 5 23.10.2011 15:46
[Erledigt] Merkwürdiges Problem mit Internet Explorer beim Seitenaufruf marloy87 PHP-Fortgeschrittene 5 20.10.2010 16:26
PHP Problem beim Weiterleiten aufeine neue Seite Muchi123 Scriptbörse 5 14.09.2010 21:47
CURL in Seite einloggen und einen Teil parsen Matt PHP Tipps 2008 8 03.09.2009 22:30
[Erledigt] Login - werde ständig ausgeloggt likemike90 PHP Tipps 2009 19 12.06.2009 17:14
Problem mit einbindung von javascript auf einer php seite mysteryxxx PHP Tipps 2009 7 01.02.2009 16:40
Bei richtiger Eingabe Daten an nächste Seite versenden xx_heidi_xx PHP Tipps 2008 49 27.05.2008 14:56
Weblog Rss Problem - auf eigener Seite ypsie PHP Tipps 2007 0 17.12.2005 14:26
JS: Wie Seite "neu zeichnen"?? Problem bei Opera.. HTML, Usability und Barrierefreiheit 1 06.10.2005 16:48
Teil der Seite wird erst nach Reload angezeigt! PHP Tipps 2005-2 1 06.08.2005 22:46
Seite in Seite PHP-Fortgeschrittene 3 15.03.2005 19:27
Problem mit eine Seite Weiter... PHP Tipps 2004-2 2 22.12.2004 15:23
Problem beim einbinden einer PHP seite. imported_DJ Nuno HTML, Usability und Barrierefreiheit 26 11.09.2004 20:06
Templates (?) - dynamische Seite - Problem PHP Tipps 2004 0 15.07.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
$id = $_get[\'id\'];, $id = @$_get[\'id\'], $id=$_get[\'id\']; if (file_exists(\., $_get id, if ($_get[\'id\'

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum