Se connecter avec
S'enregistrer | Connectez-vous

[resolu] insertion de resultat d'une selection checkbox ds. tbl Mysql

Dernière réponse : dans Programmation

Bonjour, et dores et déjà merci de me lire.
je suis en train de programmer un jeu de cyclisme en php et mysql.

Je bute sur une difficulté pour insérer dans une table mysql, les resultats d'une selection de n checkbox.
( n étant different d'une course à l'autre). ( il s'agit du nb de coureurs selectionné pour la course.


J'ai mis au point un requete qui me permet d'afficher les coureurs de l'équipe disponible pour une course :

  1. <?php
  2.  
  3. ...
  4.  
  5. // la requête SQL
  6. $sql = "SELECT id_coureur, nom, prenom, nation, age FROM coureur WHERE initiale='$equipe' $condition";
  7. $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  8.  
  9. // nb de ligne
  10. $res = mysql_numrows($req);
  11.  
  12.  
  13. // on verifie si des coureurs sont dispo.
  14. if ($res==0)
  15. {echo'Aucun coureur ne peut être selectionné pour cette course';}
  16.  
  17.  
  18. // On cree une ligne et un bouton checkbox pour chaque coureur :
  19.  
  20. else {
  21.  
  22. echo'<form method="post" action="verif_compo.php"> ';
  23.  
  24. // on fait une boucle qui va faire un tour pour chaque enregistrement
  25.  
  26. while($data = mysql_fetch_assoc($req))
  27. { extract ($data);
  28. echo '
  29. <center><b><input type="checkbox" name="choix[]" value=" '.$data['id_coureur'].' "> '.$data['prenom'].' '.$data['nom'].' <i><font size=1>n° ID '.$data['id_coureur'].'</font></i></b></center>
  30. <br>';
  31. }
  32.  
  33. echo"<input type = 'hidden' name='course' value='$course'>";
  34.  
  35. echo' <center><input type="submit" value="envoyer la compo"></center>';}
  36.  
  37. ?>


Voilà pour la première partie.
Je post donc la selection de coureur vers verif_compo.php
Je demande l'affichage de la selection et je n'ai pas de pbm, grace à une boucle foreach.


verif_compo.php :

  1. <?php
  2.  
  3. ...
  4.  
  5. // on recupère les infos.(session est ouvert)
  6.  
  7. $equipe = $_SESSION['initiale'];
  8. $course=$_POST['course'];
  9.  
  10.  
  11. foreach($_POST ['choix'] as $champs=> $valeur)
  12. {
  13.  
  14. // $n permet de compter le nb de coureurs selectionnés et de vérifier que ca ne dépasse pas la limite ( exprimé par $nbcoureur)
  15.  
  16. $n=$n+1;
  17.  
  18. if ($n<=$nbcoureur)
  19. {
  20.  
  21. $sql = "SELECT nom, prenom,id_coureur FROM coureur WHERE id_coureur=$valeur ";
  22.  
  23. $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  24. $data = mysql_fetch_assoc($req);
  25.  
  26. echo "<center>$n - ";
  27. echo' '.$data['prenom'].' '.$data['nom'].' '.$data['id_coureur'].' </center><br>';
  28.  
  29. // jusque là ca tourne j'arrive à afficher ma selection.
  30.  
  31. [b]// mais ici j'aimerai intergrer une requete : INSERT into 'compo' VALUES (nom de la course, nom de l'équipe, nom, prenom, id_coureur n°1, id_coureur n°2, ..., id_coureur n°9)
  32. // et je n'arrive pas j'ai fait de nombreuses tentatives de codes avec INSERT et UPDATE,
  33. // je n'arrive pas à exprimer cette requete.
  34. // Le but étant d'integrer dans cette table compo l'ensemble des compositions des équipes pour une course donnée.[/b]
  35. }
  36.  
  37.  
  38. else {echo "trop de coureurs ont été cochés, seuls ces $nbcoureur seront retenus.";}
  39. }


Merci de votre aide et de vous pencher sur mon problème.
Lassé par la pub ? Créez un compte

ca c'est pas une bonne conception de base de donnée :p 

quand le nombre de champs n'est pas détérminé à l'avance et qu'ils sont nombreux, vaut mieux créer 2 tables:
compo (id_compo, course, equipe)
compo_detail (id_compo, id_joueur)

sinon pour ta requete, si tu gardes le meme schéma (pas bonne idée), il suffit de créer le premier joueur:
  1. // ...
  2. $id_compo = 0;
  3. // ...
  4. foreach ...
  5. if ($id_compo == 0) // je sais pas si tu commences à 1 ou 0
  6. {
  7. // création du premier joueur en insert
  8. mysql_query ("insert into compo (course, equipe, `1`) values ('$course', '$equipe', ". $data['id_coureur'] . ") ");
  9. $id_compo = mysql_insert_id ();
  10. }
  11. else
  12. {
  13. // puis les autres joueurs en update
  14. mysql_query ("update compo set `$n` = " . $data['id_coureur'] . " where id_compo = $id_compo ");
  15. }
  16. //....

Lassé par la pub ? Créez un compte