Récupérer une table pour cocher des checkbox

Invité
Invité n'ayant pas de compte PHPfrance

27 févr. 2008, 20:22

Bonjour, j'ai encore un problème avec mes table et la récupération de celles-ci.

J'ai 5 dates qui sont enregistré dans ma table tournoi, mon utilisateur s'est inscrit à 3 tournoi et l'enregistrement c'est fait dans ma table inscription selon l'id du tournoi et de l'utilisateur.

Je récupère dans un premier temps mes inscriptions, dans un deuxième temps je récupère tous mes tournois afin d'afficher le 5 tournois et non pas seulement ceux que mon utilisateur à choisi. J'usqu'ici ça fonctionne :D

Ensuite je récupère l'id des tournois inscrits ex: 1,3,5 et j'affiche mes 5 tournois avec des checkbox, seulement je n'arrive pas associer les id récupéré des tournois inscrits avec les 5 tournois afin de checker les tournois dejà sélectionner...
//récupération des tournois dont mon user s'est inscrit
$check_inscription = mysql_query("SELECT * FROM inscription WHERE id_utilisateur = '$id_utilisateur'")
    //si la connection échoue on imprime une erreur
    or die ('connexion impossible au serveur' .mysql_error());
    //collecte des informations
   while ($row_inscription = mysql_fetch_array($check_inscription)) {
    $id_tournoi_inscription = $row_inscription['id_tournoi'];

// je crée ma table qui me renvoi les bonnes valeur (1,3,5)
    $table = array('checked' => $id_tournoi_inscription);
    echo $table['checked'];
    
   }

// je récupère les infos de 5 tournois
$check_tournoi = mysql_query("SELECT * FROM tournoi")
    //si la connection échoue on imprime une erreur
    or die ('connexion impossible au serveur' .mysql_error());
    //collecte des informations
    while ($row_tournoi = mysql_fetch_array($check_tournoi)) {
    $id_tournoi = $row_tournoi['id'];
    $lieu_tournoi = $row_tournoi['lieu'];
    $date_tournoi = $row_tournoi['date'];
    $comment_tournoi = $row_tournoi['comment'];
//je crée ma boucle
    foreach ($table['checked'] as $value) {
    	if ($id_tournoi == $value) {
    		$tuc = "checked";
    } else { $tuc = ""; } }
       echo "<input type=\"checkbox\" name=\"id_tournoi[]\" value=\"$id_tournoi\" $tuc> $lieu_tournoi $date_tournoi - $tuc<br />";
     }
Aucun résultat ne s'affiche. si je supprime mon array et ma boucle foreach je ne récupère que la dérnière inscription:
//récupération des tournois dont mon user s'est inscrit
$check_inscription = mysql_query("SELECT * FROM inscription WHERE id_utilisateur = '$id_utilisateur'")
    //si la connection échoue on imprime une erreur
    or die ('connexion impossible au serveur' .mysql_error());
    //collecte des informations
   while ($row_inscription = mysql_fetch_array($check_inscription)) {
    $id_tournoi_inscription = $row_inscription['id_tournoi'];

// je crée ma table qui me renvoi les bonnes valeur (1,3,5)
    $table = $id_tournoi_inscription);
    echo $table;
    
   }

// je récupère les infos de 5 tournois
$check_tournoi = mysql_query("SELECT * FROM tournoi")
    //si la connection échoue on imprime une erreur
    or die ('connexion impossible au serveur' .mysql_error());
    //collecte des informations
    while ($row_tournoi = mysql_fetch_array($check_tournoi)) {
    $id_tournoi = $row_tournoi['id'];
    $lieu_tournoi = $row_tournoi['lieu'];
    $date_tournoi = $row_tournoi['date'];
    $comment_tournoi = $row_tournoi['comment'];

    	if ($id_tournoi == $table) {
    		$tuc = "checked";
    } else { $tuc = ""; } }
       echo "<input type=\"checkbox\" name=\"id_tournoi[]\" value=\"$id_tournoi\" $tuc> $lieu_tournoi $date_tournoi - $tuc<br />";
     }
Comment faire pour implémenter mon tableau?

Merci d'avance

Eléphanteau du PHP | 21 Messages

28 févr. 2008, 09:36

Tu dois obligatoirement travailler avec un tableau ?

Tu le réutilise plus tard ?

d0m
Mammouth du PHP | 1141 Messages

28 févr. 2008, 09:58

salut,

effectivement c'est à la construction du tableau qu'il y a un problème.

Tu veux que ton tableau $table contienne les identifiants à pré-cocher.
while ($row_inscription = mysql_fetch_array($check_inscription)) {
    $id_tournoi_inscription = $row_inscription['id_tournoi'];
    $table = array('checked' => $id_tournoi_inscription);
    echo $table['checked'];
} 
ce que tu fait en fait c'est écraser la variable $table avec un tableau à un seul élément contenant l'identifiant en cours dans la boucle.
Donc forcement à la fin de la boucle il ne te reste que le dernier identifiant dans $table.

La bonne façon est d'ajouter un élément au tableau :
//déclaration du tableau
$table=array();
while ($row_inscription = mysql_fetch_array($check_inscription)) {
    $id_tournoi_inscription = $row_inscription['id_tournoi'];
    //on ajoute au tableau l'identifiant
    $table[$id_tournoi_inscription] = $id_tournoi_inscription;
}
//vérification du contenu :
print_r($table);
 
En plus en mettant comme clé l'identifiant lui même dans le tableau, ce sera très facile pour vérifier si le tournoi est à cocher ou non :
//collecte des informations
    while ($row_tournoi = mysql_fetch_array($check_tournoi)) {
      ....
      //si un élément du tableau a pour clé l'identifiant du tournoi
      //donc le tournoi est dans les inscriptions
      if (isset($table[$id_tournoi])) { 
        $tuc = 'checked';
      else
        $tuc = '';
      }
      ....
    }

Petit nouveau ! | 6 Messages

28 févr. 2008, 13:04

Salut Xvider, oui j'utilise des tableaux vu que je les réutilisent régulièrement et que c'est comme ça que j'ai construit mon script.
voir : http://www.phpfrance.com/forums/voir_sujet-36456.php

Désolé pour le premier post mais j'étais sûre d'être logé -> Invité.

Merci d0m ça fonctionne avec ton explication, maintenant il faut que j'analyse ton explication pour assimiler le fonctionnement et ne plus avoir trop de questions à poser...

Hier soir j'y ai passé bien 3 heures à tourner le script dans tous les sens, à parcourir le forum et à faire des recherches sur google pour comprendre les tableaux et la fonction array, en vain...

Faut que ça rentre :wink:

-> Résolu

[EDIT]

Arg je ne peux pas mettre résolu vu que le premier post est en Invité...

[/EDIT]

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

28 févr. 2008, 13:08

Arg je ne peux pas mettre résolu vu que le premier post est en Invité...
Pas de soucis, je l'ai fait pour toi :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...