2009-02-19 11 views
1

Pour un projet d'école, je dois produire un site Web utilisant PHP qui permet à l'utilisateur de générer son propre article ou de commenter des nouvelles ou d'autres articles. Je me demandais comment il est préférable d'utiliser la fonction GET pour afficher le contenu d'un fichier include et utiliser la fonction get pour d'autres fichiers include tels que la page de connexion et tout autre contenu ajouté par le développeur au site. mais en tant que liens, etc. N'importe qui a eu des suggestions ou de bons tutoriels qu'ils pourraient poster.Comment démarrer avec un site web PHP?

Répondre

1

Vous aurez certainement envie aseptiser tout ce qui vient à travers le paramètre GET avant y compris un fichier. Vous le faites normalement en vérifiant les caractères valides, et comme il appelle directement un fichier du système de fichiers, j'entre habituellement les actions de navigation valides. Ce n'est pas la solution la plus élégante mais souvent la plus simple et la plus sûre pour une petite application.

J'utilise généralement des commutateurs de cas pour cela, mais j'ai vu des gens utiliser des expressions régulières de fantaisie ainsi.

Quelque chose le long des lignes de:

if (isset($_GET['nav'])) { 
    switch ($_GET['nav']) { 
     case 'login': 
     case 'logout': 
     case 'article': 
      include($_GET['nav'] . '.php'); 
      break; 
     default: 
      die('Invalid nav parameter'); 
      break; 
    } 
} 
1

Wheel a été inventé, testé, roulé pour un million de miles: WordPress

+0

Nous étions tous en train de le penser ... – cole

+0

Donc je suis le seul à avoir les boules à faire remarquer qu'il est ridicule de perdre du temps sur des problèmes qui ont déjà été résolus –

+0

+1 .. mais parfois ça peut être amusant 'ou au moins une bonne expérience d'apprentissage. Bien que si c'était pour un client que j'étais payé pour faire, je laisserais à wordpress. – alex

1

C'est ce que je l'utilise ...

function safeIncludeFile($path) 
    { 

     $regex = '/[a-z0-9\-_]+/i'; // match only a to z, 0 to 9 and the minus and unscore character. case insensitive. adjust to accommodate your file naming schema. 

     return preg_match($regex, $path); 

    } 

Et puis faire quelque chose comme ça

if (isset($_GET['page']) && safeIncludeFile($_GET['page'])) { 
    require PATH_TO_INCLUDES . $_GET['page'] . '.inc.php'; 

} 
0

Vous pouvez aussi avoir un tableau qui agit comme une liste blanche

$allowedIncludes = array('home', 'about', 'news'); 

puis vérifiez si la page est là

if(in_array($_GET['page'], $allowedIncludes)){ 
    include $_GET['page'].'.php'; 
}else{ 
    die('Forbidden!'); 
} 

donc, vous ne devez pas ajouter un « cas » à votre commutateur chaque fois que vous ajoutez quelque chose.

Questions connexes