VIVEZ LE
FOOTBALL !

Posez votre question Signaler

[PHP] Switch ne fonctionne pas

Fabian - Dernière réponse le 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??
Lire la suite 

[PHP] Switch ne fonctionne pas »

18 réponses
Réponse
+0
moins plus
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 ?
Fabian - 4 mars 2010 à 15:33
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
Ajouter un commentaire
Réponse
+0
moins plus
"extension" ???? pour ça ...
Ajouter un commentaire
Réponse
+0
moins plus
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
Fabian - 4 mars 2010 à 15:44
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
Ajouter un commentaire
Réponse
+0
moins plus
Encore le même problème avec <?php switch ($_GET['pg']) {
Ajouter un commentaire
Réponse
+0
moins plus
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*";
Fabian - 4 mars 2010 à 15:59
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 ) **
Ajouter un commentaire
Réponse
+0
moins plus
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])
Fabian - 4 mars 2010 à 16:21
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 <?)
Ajouter un commentaire
Réponse
+0
moins plus
he bien fais

$pg=$_GET['pg'];

echo "Valeur de pg= ".$pg;

pour voir ce que tu reçoit.
Fabian - 4 mars 2010 à 16:33
J'ai déjà essayé switch ($_GET['pg']) à la place de switch ($pg) et sans effet
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
Toujours pas de solution
Ajouter un commentaire
Réponse
+0
moins plus
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;
}
?> 
Fabian - 4 mars 2010 à 21:51
toujours même problème et la valeur de pg est vide dans tout les cas
valeur de pg:
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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;
}
?> 

Ajouter un commentaire
Ce document intitulé « [PHP] Switch ne fonctionne pas » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?