Deux while à la suite

Deux while à la suite - PHP - Programmation

Marsh Posté le 26-08-2010 à 10:41:58    

Bonjour voici mon code php:
 
$base = mysql_connect (''.$cserveur.'', ''.$clogin.'', ''.$cpassword.'');
mysql_select_db (''.$cbasedd.'', $base) ;
$req = "SELECT * FROM joueurs WHERE s20102011='1' ORDER BY id ASC";  
$sql = mysql_query($req) or die('Erreur SQL !<br>'.$req.'<br>'.mysql_error());  
echo "<FORM method=post action=''>";
echo "<SELECT name='joueurun'>";
while ($data = mysql_fetch_array($sql)) {
echo "<OPTION VALUE='$data[id]'>$data[nom]</OPTION>";
}
echo "</SELECT><br>";
echo "<SELECT name='joueurdeux'>";
while ($data = mysql_fetch_array($sql)) {
echo "<OPTION VALUE='$data[id]'>$data[nom]</OPTION>";
}
echo "</SELECT><br>";
echo "<INPUT type='submit' value='Confirmer'></FORM>";

 
Le problème c'est qu'à l'affichage le premier champ SELECT affiche bien quelque chose (liste des joueurs), mais celui d'en dessous est vide. Que faire?

Reply

Marsh Posté le 26-08-2010 à 10:41:58   

Reply

Marsh Posté le 26-08-2010 à 10:47:02    

Il faut juste remettre le pointeur de $sql à 0 juste avant de refaire ton 2ème while.
mysql_data_seek ($sql,0);

Reply

Marsh Posté le 26-08-2010 à 11:26:50    

Non, Non,non et encore NON!

 

Willy54, sépare tes données de ton contenu HTML.
Dans ton cas t'as 2 options.

 

Soit tu te construits un petit tableau associatif id=>nom dans ta boucle while "mysql", et après tu le ré-utilises plus loin.

 

Soit tu fait ta boucle mysql, et au lieu de faire directement un "echo", tu remplis des variables contenant le html (style $out = "<select><br"; ...)

 

Sinon bon y a toujours la 3ème option, la meilleur, de passer par un modèle vraiment MVC, mais bon c'est un peu plus compliqué à faire

 

Voilà :o


Message édité par esox_ch le 26-08-2010 à 11:28:08

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 26-08-2010 à 11:54:17    

Oui certes... Mais c'est surement un débutant donc je répondais à sa question.
Sinon on peut débattre également de sa façon d'écrire le XHTML.  :ange:

Reply

Marsh Posté le 26-08-2010 à 13:02:38    

Oui c'est un débutant, mais c'est pas une raison de lui donner de mauvais conseils...
Les 2 premiers commentaires sont simples à appliquer et le mettront déjà sur la bonne voie, vu qu'ils partent déjà dans le sens "séparation des couches", bien que ce soit encore loin du compte..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 27-08-2010 à 10:15:40    

Merci bien ;)

Reply

Marsh Posté le 27-08-2010 à 11:38:08    

esox_ch, je ne sais pas faire ton premier conseil. Concernant le second, j'ai essayé, sans succès.
Seule la méthode de scarf fonctionne. Or apparemment il ne faut pas que je fasse ça. Que faire?

Reply

Marsh Posté le 27-08-2010 à 11:59:22    

Tu peux faire ça, par exemple:
 

Code :
  1. $liste_joueurs = array ();
  2. $base = mysql_connect (''.$cserveur.'', ''.$clogin.'', ''.$cpassword.'');
  3. mysql_select_db (''.$cbasedd.'', $base) ;
  4. $req = "SELECT * FROM joueurs WHERE s20102011='1' ORDER BY id ASC"; 
  5. $sql = mysql_query($req) or die('Erreur SQL !<br>'.$req.'<br>'.mysql_error()); 
  6. // MA LISTE DE JOUEURS
  7. while ($data = mysql_fetch_assoc($sql))
  8.          $liste_joueurs[] = array ('id'=>$data['id'],'nom'=>$data['nom']);
  9. // ON RECUPERE LE NOMBRE DE JOUEURS
  10. $nombre_joueurs = count($liste_joueurs);
  11. // MISE EN FORME DU SELECT
  12. $mon_select = '';
  13. for ($i=0;$i<$nombre_joueurs;$i++)
  14.      $mon_select .= '<option value="'.$liste_joueurs[$i]['id'].'">'.$liste_joueurs[$i]['nom'].'</option>';
  15. // AFFICHAGE DU FORMULAIRE
  16. echo "<FORM method=post action=''>
  17. <SELECT name='joueurun'>
  18. ".$mon_select."
  19. </SELECT><br>
  20. <SELECT name='joueurdeux'>
  21. ".$mon_select."
  22. </SELECT><br>
  23. <INPUT type='submit' value='Confirmer'></FORM>";


Message édité par Scarf3ss3 le 27-08-2010 à 12:02:50
Reply

Marsh Posté le 27-08-2010 à 12:18:28    

scarf3ss3, ça fonctionne parfaitement.
 
Merci :)

Reply

Marsh Posté le 27-08-2010 à 13:24:28    

willy54 a écrit :

scarf3ss3, ça fonctionne parfaitement.
 
Merci :)


 
 :)  
C'est juste un début, mais tu peux améliorer tout ça en utilisant des fonctions, voir une class.  

Reply

Marsh Posté le 27-08-2010 à 13:24:28   

Reply

Marsh Posté le 28-08-2010 à 00:47:13    

juste une remarque : quel est l'intérêt des quotes dans cette ligne ?
 
$base = mysql_connect (''.$cserveur.'', ''.$clogin.'', ''.$cpassword.'');
 
Bien plus simple et largement suffisant :
$base = mysql_connect ($cserveur, $clogin, $cpassword);


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed