2008-11-03 14 views
2

Je suis en train de créer un nouveau site web pour mon entreprise et j'essaye d'implémenter la navigation par switch, ce que j'ai déjà utilisé sur tous mes sites.PHP Automatiquement "GET" Variables

<?php 
switch($x) { 

default: 
include("inc/main.php"); 
break; 

case "products": 
include("inc/products.php"); 
break; 

} 
?> 

Pour une raison quelconque quand je vais à index.php? X = produits ne se passe rien, il affiche encore inc/main.php, en d'autres termes, il n'a pas détecté la variable X à partir de l'URL. Est-ce quelque chose à voir avec les variables globales?

+0

Si c'est un grand site, vous devriez envisager d'utiliser un framework tel que CodeIgniter - il fera beaucoup de ce genre de travail pour vous. Ne pas réinventer la roue, comme on dit :) –

Répondre

14

Oui, votre configuration PHP a correctement a été désactivée, parce que c'est incroyablement non sécurisé.

Il suffit de mettre:

$x = $_REQUEST['x'] 

en haut de votre script.

Vous pouvez également utiliser $_GET si vous souhaitez uniquement que cela fonctionne pour la méthode HTTP GET. J'ai vu certaines personnes prétendre que $_REQUEST est en quelque sorte insécurité, mais aucune preuve pour soutenir cela.

+0

Il vaut mieux utiliser $ _GET et non $ _REQUEST ... $ _REQUEST n'est pas aussi mauvais que register_globals mais ça donne quand même une mauvaise odeur. Il sait qu'il utilise une URL var et ne veut probablement pas que les cookies ou les paramètres POST changent son mode d'affichage, donc il devrait utiliser $ _GET, pas $ _REQUEST. – joelhardi

+0

J'ai aussi entendu dire que ce n'est pas sûr, mais j'ai alors pensé que pourquoi presque tous les serveurs web ou packs d'hébergement que j'ai jamais payé l'avaient-ils allumé? – zuk1

+0

Pour être plus précis que "mauvaise odeur" (déteste la limite de caractères de commentaire), $ _REQUEST est sujet à des attaques XSS, car les cookies peuvent être configurés côté client. – joelhardi

1

Vous devez utiliser $ _GET pour lire ces variables. Il y a une fonction obsolète appelée register_globals, mais je ne conseillerais certainement pas de l'utiliser, car il s'agit d'un risque de sécurité potentiel.

5

Il semble que vos précédents hébergeurs soient tous utilisés register_globals et votre code repose sur cela. Ceci est un dangereux paramètre et a été légitimement supprimé dans PHP 6.0! Utilisez switch($_GET['x']) { à la place.

0

Vous pouvez utiliser http://php.net/manual/es/function.extract.php pour extraire les variables si vous voulez le faire, mais gardez à l'esprit ce permet toutes les variables définies par l'utilisateur avec le contenu qu'ils veulent dans votre script, ce qui en fait en situation d'insécurité que l'utilisation de register_globals

Questions connexes