Bonjour,

J'ai un petit problème avec un GET sur une page php assez simple.
Ce que je veux faire sur ma page est une liste d'enigmes disponible. 1 -2 -3 etc... Qui sont stocké dans ma BDD.

Donc quand nous arrivons sur la page enigme nous arrivons sur la première enigme du joueur puis s'affiche toute celle qu'il possède.

Pour cela j'ai donc fait une requete avec une boucle pour afficher toute les enigmes disponible, et comme l'enigme et la liste se trouve sur la même page j'ai voulu utiliser un GET afin de récupérer l'id de l'enigme et afficher la page concerné.
Dans mon URL j'ai donc le changement de la page avec le bon ID qui s'affiche mais l'énigme elle ne se modifie pas en fonction de l'ID

Voici mes lignes de code:

$e=$bdd->prepare('SELECT * FROM enigme WHERE id_membre = ?');
$e->execute(array($id_membre));
while($enigme=$e->fetch())
{
    $_GET['numero_enigme'] = $enigme['numero_enigme'];
    echo $_GET['numero_enigme'];
    echo "<a href='http://monsite/game/enigme/enigme.php?numero_enigme=" . $_GET['numero_enigme'] . "'>Lien</a></br>";
    $numero = (int)$_GET['numero_enigme'];
}
    echo $_GET['numero_enigme'];

$e=$bdd->prepare('SELECT * FROM enigme WHERE id_membre = ? AND numero_enigme = ?');
$e->execute(array($id_membre,$numero));
$en=$e->fetch();

echo $numero;

//Le problème actuellement est que la variable $numero reste bloqué sur l'idée 3 (la derniere enigme des 3 possibles).
?>

Si quelqu'un à une idée. Merci d'avance pour vos éclairecissements.
Cordialement,

7 réponses


Lartak
Réponse acceptée

Bonjour.
Il a pourtant répondu à ton problème.
Ton problème :

Le problème actuellement est que la variable $numero reste bloqué sur l'idée 3 (la derniere enigme des 3 possibles).

Son affirmation :

Donc lors du dernier passage, il est égale à la dernière id des égnigmes.

Par conséquent, pour régler le problème :

if (isset($_GET['numero_enigme']) && !empty($_GET['numero_enigme'])) {
    $numero = (int)$_GET['numero_enigme'];
    $e = $bdd->prepare('SELECT * FROM enigme WHERE id_membre = ?');
    $e->execute(array($id_membre));
    while($enigme=$e->fetch())
    {
        echo $_GET['numero_enigme'];
        echo "<a href='http://monsite/game/enigme/enigme.php?numero_enigme=" . $enigme['numero_enigme']"'>Lien</a></br>";
    }
    echo $numero;

    $e=$bdd->prepare('SELECT * FROM enigme WHERE id_membre = ? AND numero_enigme = ?');
    $e->execute(array($id_membre, $numero));
    $en=$e->fetch();

    echo $numero;
} else {
    // le paramètre dans l'url est absent ou vide, on redirige l'utilisateur ....
}

Bonjour,

1/ Il vous faudrait revoir l'utilisation des "$_GET", car vous n'êtes pas censé faire leur affection.
2/ Si je suis votre logique :

$numero = $enigme['numero_enigme'];

et celui ci change à chaque passage dans la boucle. Donc lors du dernier passage, il est égale à la dernière id des égnigmes.

Le $_GET doit être générale, la bonne méthode serai celle-ci:

$numero_egnigme_actuelle = $GET['numero_egnime'];
malibx
Auteur

Oui je faisais divers test, toujours est il que ce n'est pas ceci qui pose probleme et oui certes même si j'ai reu les GET avant d'essayé je ne les ai utilisé qu'une fois au cours de la derniere année!
En tout cas cette modification n'a rien apporté ;)

Malibx

Et quelle modification avez-vous apporté ?

malibx
Auteur

J'ai retiré ça

$numero = (int)$_GET['numero_enigme'];

Je l'ai modifié par celle donné, aucun effet car de toute façon avant j'avais pas le (int) devant et ça ne changer rien.

J'ai tenté d'elargir la boucle en encadrant la seconde requete, mais rien non plus( c'est pire ). je ne comprend pas pourquoi il lit mon GET dans l'URL mais pas dans ma seconde requete.

Pourquoi faire

$_GET['numero_enigme'] = $enigme['numero_enigme']

Si le paramètre url s'appelle numero_enigme alors tu viens tout juste de modifier sa valeur, et du coup à la fin de ton while la valeur sera effectivement égale à l'id du 3eme élément récuperer en bdd.

Perso j'effacerais les lignes suivantes:

   $_GET['numero_enigme'] = $enigme['numero_enigme'];
   $numero = (int)$_GET['numero_enigme'];   

Et dans la seconde requête je passerais le get directement comme paramètre, donc:

$e->execute(array($id_membre,$_GET['numero_enigme']));

Eventuellement en le castant en int ((int)$_GET...) mais c'est pas vraiment nécessaire je pense avec la PDO

malibx
Auteur

En effet, je crois que je me suis mélangé les pinceaux, j'avais fait pas mal d'essais divers, merci en tout cas. Sa semble bon la.