[PHP] Switch ne fonctionne pas

Fermé
Fabian - 4 mars 2010 à 08:55
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 5 mars 2010 à 08:51
Bonjour,
Je viens de transférer mon siteweb à un nouveau serveur et j'ai rencontré un problème avec la fonction switch en PHP. En faite c'est ma première expérience avec les serveurs et je sais pas si ça nécessite une extension bien précise pour PHP ou pour apache pour que cette fonction fonctionne correctement??
A voir également:

12 réponses

Py_rex Messages postés 241 Date d'inscription samedi 12 juillet 2008 Statut Membre Dernière intervention 22 juin 2015 52
4 mars 2010 à 09:35
Bonjour,

Votre problème découle probablement d'une différence de version php entre votre ancien et nouveau hébergeur. Quel est le message d'erreur ?
0
Pas de msg d'erreur, bon voila le code en question (qui fonctionne correctement sur d'autre serveurs)
<? switch ($pg) {
case "":
require_once("index.php");
break;
case "n":
require_once("pg2.php");
break;
case "p":
require_once("pg3.php");
break;
}
?>


Quand j'essaye d'acceder à la page index.php?pg=n par exemple ça me renvoie toujours vers la page index.php
0
bg62 Messages postés 23598 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 11 mai 2024 2 364
4 mars 2010 à 10:41
"extension" ???? pour ça ...
0
Bonjour
Ton début montre que avant, tu travaillais très probablement avec une vieille version de php
<? switch ($pg) {
à remplacer par
<?php switch ($_GET['pg']) {

Si ce point là marche mieux, tu vas devoir remplacer toutes les balises réduites <? par des balises complètes <?php.
Pour les variables récupérées par les méthodes GET ou POST, on verra ensuite
0
Bon la version de php sur l'ancien serveur est 5.2.6-1 et l'actuel est 5.2.10, je crois pas qu'il existe une grande différence entre le deux pour que le Switch ne fonctionnera pas.. Je vais essayé avec le GET
0
Encore le même problème avec <?php switch ($_GET['pg']) {
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ce qui compte, ce n'est pas vraiment la version de PHP, c'est la valeur du paramètre register_globals
Sur les anciennes versions il était actif par défaut et sur les versions récentes il est inactif (pour raison de sécurité) ; c'est pour ça que j'ai parlé de vieille version. En fait, certains hébergeurs le laissent actif sur des PHP récents pour rester compatibles avec les anciens scripts.
Même remarque en ce qui concerne <? au lieu de <?php (le <? semble d'ailleurs accepté dans ton cas)

avant le switch, fais print_r ($_GET); echo"*$pg*";
0
Pour le register_globals je viens de vérifier que c'est "OFF" sur les deux serveurs, et concernant la ligne ajouté avant le switch j'ai pas compris ça sert à quoi exactement, bein lorsque je l'ai ajouté je retrouve cette ligne sur la page avec le même problème toujours
Array ( [pg] => n [n] => 6 ) **
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 mars 2010 à 16:11
pour <? et <?php c'est le parametre short_tag du php ini

il faut prendre l'habitude de mettre <?php comme ça pas de surprise

ensuite Array ( [pg] => n [n] => 6 )

veut dire que $opg est un array donc tu ne peux pas faire ton switch case ainsi

il faut:

switch ($pg[n])
0
Mais non, je suis sure que le code est bien correct, je travaille avec ce même code depuis 2 ans et sur plusieurs serveurs.. mais je crois que le problème la est dans la configuration du PHP ou bien il y a peut être quelques choses qui manque pour PHP ou apache..

(Pour le [n] ça n'a rien à voir avec l'erreur.. c'est déjà relié avec plusieurs pages.. même chose pour le <? , déjà ma page d'index (qui est en php et relié elle même avec plusieurs pages PHP) s'affiche correctement sans aucun problème avec le <?)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 mars 2010 à 16:27
he bien fais

$pg=$_GET['pg'];

echo "Valeur de pg= ".$pg;

pour voir ce que tu reçoit.
0
J'ai déjà essayé switch ($_GET['pg']) à la place de switch ($pg) et sans effet
0
le print_r($_GET) sert à montrer ce qu'il y a dans la variable $_GET qui contient les commandes passées dans l'url. ceci montre que tu as appelé ta page avec ?pg=n&n=6

le echo"*$pg*"; montre ce qu'il y a dans $pg. Si register_globals était on, il y aurait la même chose que dans $_GET['pg'], ce qui n'est pas le cas, ce qui est normal puisque register_global est sur off

Mais puisqu'il n'y a rien dans $pg, c'est normal que le switch fasse le require_once("index.php")
Par contre, ça aurait dû marcher avec switch ($_GET['pg'])
Le require_once("pg2.php") ,a sûrement marché, mais si pg2.php utilise la même variable pour faire une redirection de page, la redirection n'aura pas marché. Peux-tu mettre un echo "coucou"; au début de pg2.php pour voir s'il est appelé ou non avec $_GET['pg'] au lieu de $pg ?
0
Toujours pas de solution
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 mars 2010 à 19:29
essayes comme ça et dis nous ce que tu as comme message:

<?php
if(isset($_GET['pg'])) $pg=$_GET['pg'];
	echo 'valeur de pg: '.$pg;
 switch ($pg) {
	case "n":
		require_once("pg2.php");
	break;
	case "p":
		require_once("pg3.php");
	break;
	default:
		require_once("index.php");
	break;
}
?> 
0
toujours même problème et la valeur de pg est vide dans tout les cas
valeur de pg:
0
je ne vois pas comment print_r($_GET) a pu t'afficher Array ( [pg] => n [n] => 6 ) si le programme d'Alain42 n'affiche rien. C'est absurde.
Ecris-tu bien toujours pg en minuscules, sans espace avant ni après ?
Quand tu avais mis le print_r($_GET), était-ce bien immédiatement avant le switch ?
Quand tu fais l'essai avec le programme d'Alain42, est-ce bien avec le paramètre ?pg=n
Peux tu montrer tout ce qui précède le switch depuis le début de ton script ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 mars 2010 à 08:51
Oui le père tu as tout à fait raison il doit y avoir un pb avant dans l'url

essayes:

<?php
if(isset($_GET['pg'])){
 $pg=$_GET['pg'];
}else{
 $pg='Valeur non reçue !';
}
	echo 'valeur de pg: '.$pg;

 switch ($pg) {
	case "n":
		require_once("pg2.php");
	break;
	case "p":
		require_once("pg3.php");
	break;
	default:
		require_once("index.php");
	break;
}
?> 

0