2013-08-16 3 views
1
<?php 
$p = $_GET['page']; 

$page = $p.".php"; 

if(file_exists($page)) 
    include($page); 
elseif($p=="") 
    include("home.php"); 
else 
    include("404.php"); 

?> 

Ce bloc de code me donne une erreur Undefined index pour la variable $ page, j'ai essayé le faire ......Pourquoi une erreur d'index indéfini se produit-elle?

<?php 
$p = $_GET['page']; 

if(isset($page)){$page = $p.".php";} 

if(file_exists($page)) 
    include($page); 
elseif($p=="") 
    include("home.php"); 
else 
    include("404.php"); 

?> 

mais cela n'a rien fait. Je suis encore un novice en PHP et je ne suis pas sûr de ce que je dois faire pour résoudre ce problème. Des suggestions?

EDIT: Pour tous ceux qui souhaitent l'url: http://memphislinuxboy.tk/ De plus, pour ceux d'entre vous qui veulent savoir sur la sécurité, le fichier inclus doit être .PHP

+0

Votre URL contient somthing comme ça ....? Page = xxx .... sinon vous n'êtes pas Obtenir n'importe quel get variable avec le nom 'page' –

+3

Ce code me fait peur: '? page =/etc/php.ini' – CD001

+0

@ CD001 Pourquoi parce que vous pensez que quelqu'un peut y accéder en utilisant un' $ _GET'? L'OP ne peut-il pas utiliser => ' autoriser, refuser à tous les' in '.haccess' de le protéger? –

Répondre

3

J'imagine $_GET['page']; n'est pas réglé, vérifiez l'URL entrer pour s'assurer qu'il contient "page =" à un moment donné.

Vous pouvez résoudre ce problème avec

if(isset($_GET['page']) { 
    //your code 
} 

Hors sujet:

if(file_exists($page)) 
    include($page); 

Vous essayez d'inclure un fichier spécifié par le client. Cela pourrait être un défaut de sécurité grave s'il n'est pas géré correctement. Il est probablement préférable de vérifier par rapport à une liste de fichiers (bons) connus.

+3

Je m'en fous si le hors-sujet est hors sujet ... il fallait le dire! ;) – CD001

+0

ce type d'insertion provoque un 404 sur mon site. :) Mais merci pour l'info! – lilo346

+0

Quelle ligne? rien ici ne devrait causer un 404 à moins que votre entrée est erronée –

0

la ligne $p = $_GET['page']; lève l'erreur.

Vous tentez d'accéder à un élément de tableau qui n'a pas encore été défini.

Vérifiez que la valeur existe avant de l'utiliser.

if (isset($_GET['page'])) 
{ 
    $page = $_GET['page']; 
} 
else 
{ 
    // this is the page they'll have if they havnt specified one 
    $page = 1; 
} 
0

$_GET['page'] est pas défini dans votre code URL doit contenir ?page=somepage

<?php 

    $page = (isset($_GET['page']) ? $_GET['page'] : 'home') . '.php'; 

    if(file_exists($page)){ 
     include($page); 
    } else { 
     include("404.php"); 
    } 

?> 
Questions connexes