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

Mammouth du PHP | 531 Messages

02 févr. 2008, 04:01

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

Mammouth du PHP | 881 Messages

02 févr. 2008, 05:44

Tu peux faire un simple test de définition avec isset
if (isset($_GET["maVariable"])) { echo "toc"; }
Soyez artisans de paix

ViPHP
AB
ViPHP | 5818 Messages

02 févr. 2008, 07:17

...
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
}

Mammouth du PHP | 531 Messages

02 févr. 2008, 13:02

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 = '')

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 févr. 2008, 15:02

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...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 531 Messages

02 févr. 2008, 15:17

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 ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 févr. 2008, 16:56

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 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 531 Messages

02 févr. 2008, 17:05

Cool merci pour les explications :D
Beaucoup plus clair ainsi :wink: