Page 1 sur 1

Ma variable n'est pas déclaré... et ?

Posté : 02 févr. 2008, 04:01
par supercanard
Bonjour
J'ai une toute petite question

Voilà c'est tout simple :

J'ai une condition :
if ($_GET['disabled_affich_page']) {
				echo 'toc';
			}

Et pour afficher toc, je passe la variable disabled_affich_page par l'url, avec un contenu qui importe peu :
index.php?disabled_affich_page=oui
Mais dans l'histoire je ne déclara ma variable nul part, c'est donc une erreur ?


Maintenant si je déclare ma variable, exemple :
$disabled_affich_page = 1

Puisque le contenu n'est pas important, est-il possible de faire plus court que ça pour passer la variable ? :
index.php?disabled_affich_page=$disabled_affich_page

Posté : 02 févr. 2008, 05:44
par Patriboom
Tu peux faire un simple test de définition avec isset
if (isset($_GET["maVariable"])) { echo "toc"; }

Re: Ma variable n'est pas déclaré... et ?

Posté : 02 févr. 2008, 07:17
par AB
...
Et pour afficher toc, je passe la variable disabled_affich_page par l'url, avec un contenu qui importe peu :
index.php?disabled_affich_page=oui
Mais dans l'histoire je ne déclara ma variable nul part, c'est donc une erreur ?
T'as pas encore pigé le système. Quand tu fais
index.php?disabled_affich_page=oui 
tu déclares bien une variable 'disabled_affich_page' égale à 'oui'.
C'est pour récupérer cette variable avec PHP qu'il faut faire comme dit Patriboom et tant qu'à faire pour que ce soit complet
if(isset($_GET['disabled_affich_page']) && $_GET['disabled_affich_page'] == 'oui') {//j'ai bien  ma variable $_GET['disabled_affich_page'] qui a été transmise et qui est égale à oui
}

Posté : 02 févr. 2008, 13:02
par supercanard
Ah mais alors, quand je la passe dans la variable, je la déclare bien ?

Je pensais qu'il était obligatoire de la déclarer avent le script (ex : $maVar = '')

Posté : 02 févr. 2008, 15:02
par Ryle
On peut pas vraiment parler de déclaration dans ce cas... Pour tout couple de données variable/valeur envoyée en post, get, cookie, etc. PHP va alimenter les tableaux $_GET, $_POST, etc. en créant les index adapté et les valeurs associées :)

Les variables $_GET, $_POST, etc. existent déjà et sont déjà déclarées par défaut, php se contente donc de les alimenter avec les données qu'il reçoit. Ton test avec isSet() consiste dans ce cas à t'assurer que l'index auquel tu fais appel existe bien dans ce tableau associatif.

En revanche, il faut effectivement déclarer les variables que tu utilises avant de t'en servir. Tu ne peux par exemple comparer $var=='oui' si tu n'as pas spécifié au préalable ce qu'était $var :)

Ta confusion vient sans doute du fait qu'avec la directive "register globals" à "on", php va non seulement créer les index dans les supervariables $_GET, $_POST, etc. mais également générer (et donc déclarer) des variables portant le même nom que les index, et ayant la même valeur...

Posté : 02 févr. 2008, 15:17
par supercanard
Ok

En fait je me suis mélangé les pinceaux.

A ma décharge : Posté le: 02 Fév 2008, 03:01 :D

Par contre si je veut simplement vérifier l'éxistence d'une variable :
if (isset($_GET['test'])) {
Es ce que je peut faire tout simplement ceci dans mon lien :
index.php?test
Ca marche, mais cette fois ci je n'assigne aucune valeur à cette variable, donc je suppose que c'est une erreur ?

Posté : 02 févr. 2008, 16:56
par Ryle
Nope, ce n'est pas une "erreur" :) Il y a deux choses à distinguer, la déclaration et l'affectation.

La déclaration c'est dire qu'une variable existe, l'affectation, c'est donner une nouvelle valeur a cette variable. Par défaut, lorsque tu déclares une variable la valeur NULL lui est automatiquement affectée.
var $cpt; // déclaration de la variable
$cpt = 0; // déclaration et affectation d'une valeur

Ainsi
if (isset($_GET['test']))
Va uniquement tester s'il existe un index nommé "test" dans le tableau $_GET et c'est tout. On se moque ici de savoir si celui-ci est associé a une valeur ou pas on veut juste s'assurer de sa présence.
index.php?test=ok //=> la variable $_GET['test'] sera définie et aura pour valeur "ok"
index.php?test= //=> la variable $_GET['test'] sera définie et aura pour valeur "" (chaine vide)
index.php?test //=> la variable $_GET['test'] sera définie et aura une valeur NULL
index.php //=> la variable $_GET['test'] ne sera pas définie 

Posté : 02 févr. 2008, 17:05
par supercanard
Cool merci pour les explications :D
Beaucoup plus clair ainsi :wink: