Récupérer des valeurs lié à une checkbox dans un while

Petit nouveau ! | 6 Messages

26 févr. 2008, 00:39

Bonjour, désolé pour le titre mon problème est dur à résumé.

Je récupère des données d'une base MYSQL avec une boucle while, j'y insert une checkbox et récupère le tableau en insérant les données dans une autre table MYSQL.

Pour être précis voilà le code:
echo "<form action=\"inscription_tournois.php\" method=\"post\"><ol>";

$check = mysql_query("SELECT * FROM ma_table")
    or die ('connexion impossible au serveur' .mysql_error());
   while ($row = mysql_fetch_array($check)) {
    $id = $row['id'];
    $date = $row['date'];

echo "<li><input type=\"checkbox\" name=\"id_tournoi[]\" value=\"$id\"><input type=\"hidden\" name=\"date_insert\" value=\"$date\"> $date</li>";
   }
echo "</ol><p><input type=\"submit\" name=\"submit\" value=\"Inscription\"></p>";
A ce stade tout fonctionne, je sélectionne mes checkbox et je confirme avec mon bouton Inscription.
Ensuite je récupère le tout et je l'inscrit dans ma 2ème table:
while(($myquestion = array_shift($id_tournoi)) && ($myquestion1 = array_shift($date_insert)) )
mysql_query("insert INTO ma_2ème_table (id_tournoi, date) VALUE ('$myquestion', '$myquestion1')")
or die ('connexion impossible au serveur inscription ' .mysql_error());
Le code fonctionne et l'inscription se fait, seulement la variable "id_tournoi" correspond à ce que j'ai coché mais "date_insert ne correspond pas? elle ne garde pas la valeur de son "id", exemple :

Code : Tout sélectionner

id 1 = 12.01 id 2 = 12.02 id 3 = 12.03 id 4 = 12.04
je sélectionne id 2 et id 4 le résultat me donne:

Code : Tout sélectionner

id 2 = 12.01 id 4 = 12.02
Les dates ne correspondes pas aux "id"

J'ai beau chercher je ne trouve pas...

d0m
Mammouth du PHP | 1141 Messages

26 févr. 2008, 09:45

Salut,

pour régler ton problème essayons de voir plus loin que juste la petite erreur de codage.

Tu as 2 tables :
- l'une contenant les tournois c'est à dire leur identifiant et leur date.
- l'autre qui doit contenir les inscriptions au tournois.

Dans un premier temps, il est inutile de remettre la date dans la 2ème table. L'identifiant suffira puisque tu pourras facilement récupérer la date à travers la première table.

Il te suffit donc de faire tes checkbox comme avant sans les champs hidden et d'insérer que le contenu du tableau id_tournoi.

Et au passage au lieu de faire un while, tu peux tout simplement utiliser un foreach puisque tu veux parcourir un tableau :
foreach($id_tournoi as $id_a_inserer){
 ...
}

Petit nouveau ! | 6 Messages

26 févr. 2008, 20:10

Bonjour et merci pour la réponse.

En fait ce n'est pas si simple:
J'ai 3 tables:

- la table "utilisateur" - ou j'inscrit les données de mes utilisateurs lors de leur inscription
- la table "tournoi" - ou j'inscrit mes tournois et en rajoute régulièrement
- la table "inscription" - ou j'inscrit l'id de l'utilisateur par rapport à l'id du tournoi choisi

Donc mon utilisateur s'inscrit à 3 tournois sur 5, de là j'insert son id et l'id des tournois choisi dans ma table "inscription", un tournoi par ligne enregistré dans la table, ensuite je récupère les inscriptions de mon utilisateur selon son id dans ma table "tournoi" avec une boucle while et j'affiche les tournois:

Cela m'affiche l'id utilisateur et l'id des tournois (table "inscription") auquel il est inscrit mais comment afficher la date qui se trouve dans ma table "tournoi"? c'est là que réside mon problème et c'est la raison pour laquelle je voulais rajouter la date dans ma table "inscription".

Exemple:

- Utilisateur "paul" id "1" table "utilisateur"
- Tournois "janvier" id "1", "février" id "2", "mars" id "3"... table "tournoi"
- Inscription "paul" id "1" s'inscrit aux tournois (id tournoi) 1,3,5 = ma table écrite je récupère l'id utilisateur ou j'affiche son prénom "paul" (table utilisateur) et quand je fais la boucle sur ma table "tournoi" je n'affiche que les id.
Bonjour "paul" vous êtes inscrit aux tournois :
1
3
5

Alors comment lier les id tournois aux dates qui ne sont pas dans la même table?

Je sèche, ça fait 2 heures que je cherche à utiliser la boucle foreach (google) pour trouver une solution.

Merci de votre aide.

[EDIT]
MERCI d0m :lol:

foreach($_POST['id_tournoi'] as $value) {
$check = mysql_query("SELECT * FROM tournoi WHERE id = '$value'")
    //si la connection échoue on imprime une erreur
    or die ('connexion impossible au serveur' .mysql_error());
    //collecte des informations
    $row = mysql_fetch_array($check);
    $lieu = $row['lieu'];
    $date = $row['date'];


 	echo "$value - $lieu - $date<br />";
 }

Me renvoi les bonnes valeurs Yep Yep ça rentre..

Sujet -> Solved

[/EDIT]

[EDIT 2]

Pour être plus clair:

Je construis mon formulaire et mes checkbox (avec while)

echo "<form action=\"inscription_tournois.php\" method=\"post\"><ol>"; 

$check = mysql_query("SELECT * FROM tournoi") 
    or die ('connexion impossible au serveur' .mysql_error()); 
   while ($row = mysql_fetch_array($check)) { 
    $id = $row['id']; 
    $date = $row['date']; 

echo "<li><input type=\"checkbox\" name=\"id_tournoi[]\" value=\"$id\"> $date</li>"; 
   } 
echo "</ol><p><input type=\"submit\" name=\"submit\" value=\"Inscription\"></p>";

ensuite je récupère mon tableau (avec foreach)

$id_insert = $_POST['id_insert']; //id utilisateur

foreach($_POST['id_tournoi'] as $value) {
$check_tournoi = mysql_query("SELECT * FROM tournoi WHERE id = '$value'")
    //si la connection échoue on imprime une erreur
    or die ('connexion impossible au serveur' .mysql_error());
    //collecte des informations
    $row_tournoi = mysql_fetch_array($check_tournoi);
    $id_t = $row_tournoi['id'];
    $lieu = $row_tournoi['lieu'];
    $date = $row_tournoi['date'];
    $tournoi = "$lieu $date";

mysql_query("insert INTO inscription (id_tournoi, id_utilisateur, tournoi) VALUE ('$id_t', '$id_insert', '$tournoi')")
or die ('connexion impossible au serveur inscription ' .mysql_error());
 } 

J'arrive même à y insérer mes dates :lol:

Encore merci de m'avoir mis sur le chemin le plus court (même si ça m'a pris 3 bonnes heures...)