évaluation php

da capo

abonné absent
Club iGen
12 Août 2001
17 460
3 598
Bonjour, à tous.
C'est mon premier post ici, je débute presque en php et j'ai un souci.
Alors que le code que j'écris est parfaitement exécuté sur une page perso sur free, localement (sous Win2k avec easyphp 1.8 ou 1.7 ainsi que sur Panther avec le pkg de entropy) pas moyen de le faire fonctionner.

voilà le code en question :

Bloc de code:
<p><a href="index.php?page=a">LABO-DTF OUVERT LE 18/06/2005</a></p>
<p><a href="index.php?page=b">GAGNER L'¼UVRE</a></p>
<p> <a href="index.php?page=c">POURQUOI DTF</a></p>
<p> <a href="index.php?page=d">IMAGES</a></p>
<p> <a href="index.php?page=e">FILMS</a></p>
<p> <a href="index.php?page=f">CONTACT</a></p>

// quelques autres lignes en html, puis

<div class="frame">
<?php 
if (!isset($_GET["page"])) $page='a'; 
switch($page){
case 'a': include ("atelier.php");break;
case 'b': include ("accueil.php");break;
case 'c': include ("pourquoidtf.php");break;
case 'd': include ("diapo1.htm");break;
case 'e': include ("diapo2.htm");break;
case 'f': include ("contacts.php");break;
default: include ("atelier.php");break;
} 
?>
</div>

En fait, la page par défaut se charge, mais les autres liens non. La variable 'page' n'est pas lue.
Le message d'erreur qui s'affiche avec easyphp 1.8 est :
Notice: Undefined variable: page in e:\program files\easyphp1-8\

Que dois-je faire pour permettre l'exécution du code ?
 
Bien, je me réponds à moi même :

j'ai simplement réécrit la clause if (!isset....

comme cela :

Bloc de code:
if (!isset($_GET["page"])) 
{
$page='a';
}
else
{
$page=$_GET["page"];
}

et cela fonctionne.
Je pense que la cohabitation sur les serveurs de free d'une version 5 et d'une version 4 de php donne une certaine tolérance dont on ne dispose pas localement.
 
$page n'est pas égal à $_GET["page"] dans les versions de php récentes (avec config par défaut) si tu ne fais pas l'affectation toi même.
Free a changé la config pour que les vieux scripts fonctionnent au mieux...

Là dans ton code tu testes si $_GET["page"] existe, et s'il n'existe pas tu crées une variable $page égale à 'a'.
Ensuite, tu utilises $page pour ton switch... jamais $_GET["page"]... tu vois le problème?

Un truc comme cela irait mieux :
Bloc de code:
if (!isset($_GET["page"])) {
   $page='a'; 
} else {
   $page = $_GET["page"];
}


Edit : hum bon bin visiblement j'ai mis du temps à écrire mon post, je suis bien grillé :D bon au moins j'avais juste :D
 
noliv a dit:
Edit : hum bon bin visiblement j'ai mis du temps à écrire mon post, je suis bien grillé :D bon au moins j'avais juste :D

Trop drôle :D :D

En tout cas, c'était bien plus simple que je le pensais.
 
Ptit-beignet a dit:
Ca serait pas un problème de registerGlobals à "Off" chez toi ?

Moi je dirais que c'est plutôt un problème de register globals on chez Free ;)

Les register globals devraient toujours être à off pour des raisons de sécurités. C'est d'ailleurs le cas par défaut depuis un moment pour les installations standardes de PHP.