[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
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??
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:
- Switch case in array php
- Easy php - Télécharger - Divers Web & Internet
- Navigation in private - Guide
- Aller à la ligne dans une case excel - Guide
- Logiciel switch - Télécharger - Conversion & Extraction
- Excel case ✓ - Forum Excel
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
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 ?
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 ?
bg62
Messages postés
23712
Date d'inscription
samedi 22 octobre 2005
Statut
Modérateur
Dernière intervention
18 avril 2025
2 404
4 mars 2010 à 10:41
4 mars 2010 à 10:41
"extension" ???? pour ça ...
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
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
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*";
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*";
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 ) **
Array ( [pg] => n [n] => 6 ) **
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
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:
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])
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 <?)
(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 <?)
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
4 mars 2010 à 16:27
he bien fais
$pg=$_GET['pg'];
echo "Valeur de pg= ".$pg;
pour voir ce que tu reçoit.
$pg=$_GET['pg'];
echo "Valeur de pg= ".$pg;
pour voir ce que tu reçoit.
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 ?
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 ?
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
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; } ?>
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 ?
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 ?
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
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:
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; } ?>
4 mars 2010 à 15:33
<? 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