Problème de variable $_GET

Wofty
Invité n'ayant pas de compte PHPfrance

18 oct. 2010, 09:14

Bonjour à tous,

Je rencontre un problème de récupération de variable en utilisant une url de type : http://www.site.fr/id=x

Sur ma page php, j'utilise généralement la variable : $id = $_GET['id']; ce qui fonctionne très bien généralement. Or dans un certain cas ça ne fonctionne pas et je ne comprends pas pourquoi.

Exemple de code :

Code : Tout sélectionner

<?php $id = $_GET['id']; $sql = "SELECT * FROM `table` WHERE id = ".$id; ?>
Dans ce cas là, la variable est bien récupérée. Maintenant, voici où ça coince :

Code : Tout sélectionner

<?php $id = $_GET['id']; $action = $_GET['action']; if ($action == read) { sql = "SELECT * FROM `table` WHERE id = ".$id; } ?>
Cette fois-ci, la variable n'est pas récupérée. En revanche, si je donne une valeur fixe à $id telle que $id = 10; ça passe bien. J'ai tenté de remplacer mon "if" par un "switch", idem. J'ai également testé de remplacer $id dans ma requête sql par $GLOBALS['id'], rien à faire.

Je suis un perdu, est-ce que quelqu'un aurait une idée du pourquoi du comment ?

Merci par avance.

Wofty
Invité n'ayant pas de compte PHPfrance

18 oct. 2010, 09:16

Petite erreur de frappe, il y a bien un $ devant sql lors de mon deuxième exemple.

Eléphanteau du PHP | 26 Messages

18 oct. 2010, 10:36

Salut,

Dans ton if tu n'as pas de quotes autour de read, le problème vient peut-être de là.
Sinon il faut tracer la valeur de $id au cours de ton script avec un echo $id;

Wofty
Invité n'ayant pas de compte PHPfrance

18 oct. 2010, 10:50

Salut ludwig,

Merci pour ta réponse, mais malheureusement il ne s'agit pas d'un problème de quote. Je viens de tester, ça revient au même.

Pour ce qui est de l'echo, j'ai évidemment fait un test avant de poster sur le forum, l'echo me remonte bien la valeur lorsque je le mets avant le if, mais ne me retourne rien à l'intérieur du if.

J'y ai passé plusieurs heures toute la journée hier, je suis sûr que c'est tout bête mais je ne vois pas la solution.

ViPHP
ViPHP | 5462 Messages

18 oct. 2010, 10:52


Wofty
Invité n'ayant pas de compte PHPfrance

18 oct. 2010, 11:05

Oui effectivement c'est une page du genre : http://www.site.fr/index.php?id=x

ViPHP
ViPHP | 5462 Messages

18 oct. 2010, 11:10

et c'est pas
$action == read
mais
$action == 'read'

t'as pas les erreurs d'activées ?

Eléphanteau du PHP | 26 Messages

18 oct. 2010, 11:18

C'est qu'il ne passe pas dans le if tout simplement, vérifie que $action soit bien égal à 'read'

Eléphant du PHP | 314 Messages

18 oct. 2010, 11:26

fais un var_dump de $action
Cordialement,
Julien - http://laravel.fr/

Wofty
Invité n'ayant pas de compte PHPfrance

18 oct. 2010, 11:35

Alors j'ai bien rajouté les quotes autour de 'read' suite à ce que m'a répondu ludwig.

J'ai activé les erreurs, je n'ai aucun retour.

Eléphanteau du PHP | 26 Messages

18 oct. 2010, 11:40

<?php

/* $id = $_GET['id'];
$action = $_GET['action']; */

$id = 3;
$action = 'read';

if ($action == 'read') {
$sql = "SELECT * FROM `table` WHERE id = ".$id;
}

?>
Là ça ne peut que passer, fait un echo (ou var_dump) de ta variable $action juste avant le if pour vérifier son contenu.

Wofty
Invité n'ayant pas de compte PHPfrance

18 oct. 2010, 11:45

En mettant la variable en "dur", ça fonctionne, sauf que c'est pas le but recherché.

le retour de var_dump($action); --> string(4) "read"

Eléphanteau du PHP | 26 Messages

18 oct. 2010, 11:47

Je me doute bien que ce n'est pas le but :roll:

C'était juste pour te montrer que si ta variable contenait vraiment 'read' la condition serait valide, ce qui ne semble pas être le cas quand tu récupère la valeur de ton $_GET...

Eléphant du PHP | 314 Messages

18 oct. 2010, 11:49

Dans ce cas fais un var_dump de $_GET['action']
Cordialement,
Julien - http://laravel.fr/

Wofty
Invité n'ayant pas de compte PHPfrance

18 oct. 2010, 11:57

Un var_dump sur $_GET['action'] me remonte la même chose : string(4) "read".

En revanche, un var_dump sur $id me remonte : NULL