Plusieurs mysql_fetch_array avec un seul mysql_query

Petit nouveau ! | 9 Messages

10 mai 2005, 14:35

Me revoilà avec un petit problème, enfin c'est pas un problème mais juste pour alléger les requêtes. En fait dans l'exemple ci dessous je veux afficher plusieurs menus déroulants identiques des mots clés. Et pour que ca marche il faut faire à chaque fois la meme requete avec mysql_query, et ca multiplie le nombre de requêtes en nombre et ca allourdie la page.J'espère que vous aurez compris mon problème en tout cas, et si jamais quelqu'un pourrait m'aider pour avancer ce problème. Si vous avez des questions, n'hésitez pas. Merci beaucoup d'avance :oops: :wink:

Code : Tout sélectionner

$result11=mysql_query("SELECT * from MOTCLE order by libMotCle"); echo " <SELECT NAME='cleMotCle2'>\n"; echo " <option></option>"; while($ligne11=mysql_fetch_array($result11)){ $cleMotCle2=$ligne11[0]; $libMotCle2=$ligne11[1]; echo "<OPTION VALUE=$cleMotCle2 "; if($cleMotCle2=="$cleMot2"){ echo "selected";} echo ">$libMotCle2</OPTION>"; } echo "</SELECT><br>"; $result11=mysql_query("SELECT * from MOTCLE order by libMotCle"); echo " <SELECT NAME='cleMotCle3'>\n"; echo " <option></option>"; while($ligne11=mysql_fetch_array($result11)){ $cleMotCle3=$ligne11[0]; $libMotCle3=$ligne11[1]; echo "<OPTION VALUE=$cleMotCle3 "; if($cleMotCle3=="$cleMot3"){ echo "selected";} echo ">$libMotCle3</OPTION>"; } echo "</SELECT>";
les $result et $ligne ont les memes noms mais ca n'a pas d'importance à priori.

Eléphant du PHP | 287 Messages

10 mai 2005, 14:48

regarde du côté de cette fonction:
http://fr2.php.net/manual/fr/function.mysql-result.php

comme tu peux préciser la ligne que tu souhaite traité elle te permet de te balader dans ton jeux de résultats.

Petit nouveau ! | 9 Messages

10 mai 2005, 14:55

Je ne vois pas trop l'utilité de cette fonction avec mon petit problème.
En effet je voudrais pouvoir afficher plusieurs fois la meme chose, ici plusieurs menus déroulant. Je ne veux pas afficher le 3 resultat d'un $result mais tout mais plusieurs fois.
Donc je dois utiliser un while pour afficher toute la requete. Et ce que j'aimerais c'est faire ca plusieurs fois (plusieurs menus déroulants identiques) mais pour ca il faut refaire la requete à chaque fois... D'où le problème,car ca surcharge la page.

Mammouth du PHP | 983 Messages

10 mai 2005, 15:05

Je vois pas l'interet d'afficher plusieurs fois la meme liste déroulante hors du contexte mais bon:

Je crois que cette fonction pourra t'aider:
http://fr.php.net/manual/fr/function.my ... a-seek.php

Petit nouveau ! | 9 Messages

10 mai 2005, 15:14

Je t'explique : en faitpour l'exemple que jai donné, il y a plusieurs fois le meme menu déroulant de mot clé, car pour une question on peut mettre plusieurs mots clés donc il faut bien que l'utilisateur puisse rentrer ces différents mots clés.

Peut etre est ce la solution la page que tu m'as donné, mais je ne vois pas comment ca peut résoudre mon problème. Donc si jamais tu pourrais m'aider car là je suis perdu :oops: :wink: . Merci

Petit nouveau ! | 9 Messages

10 mai 2005, 15:35

En résumé, je voudrais réutiliser plusieurs un meme $result (de mysql_query) et ca je n'ai jamais trouvé comment faire, d'ailleurs je doute que ce soit possible. :cry:

Eléphant du PHP | 287 Messages

10 mai 2005, 15:59

salut,

dis moi si je me trompe:

ce que j'ai compris de ton problème c'est que tu devais exploiter le jeux de résultats d'une requête plusieurs fois.

ensuite tu bloque sur le fait qu'une fois que tu as exploité un jeux de résultat à laide d'une boucle sur un mysql_fertch_array() tu ne peut plus revenir en arrière.
donc tu refait la même requête afin de "recharger" ton jeux de résultats et pouvoir l'exploiter à nouveau.

c'est pour ça que je t'ai conseillé d'utiliser mysql_result().

en gros voila comment on s'en sert.

comme tu va exécuter plusieurs fois un code similaire, le mieux est de créer une fonction (c'est plus propre, ça facilite la lecture du code et sa maintenace :wink: )
function gere_liste($nom_select,$match_mot_clef,$data,$nb_row)
{
    echo('<select name="' . $nom_select . '">'
    .'<option></option');
    
    for($i=0;$i<$nb_row;$i++)
    {
        echo('<option value="' . mysql_result($data,$i,0) . '"');
        
        if(mysql_result($data,$i,0)==$match_mot_clef) echo('&nbsp; selected &nbsp;');
        
        echo('>' . mysql_result($data,$i,1) . '</option>');
       
    }

    echo('</select>');
}
ensuite en dehors de la fonction:
$result11=mysql_query("SELECT * from MOTCLE order by libMotCle");
$nombre_lignes=mysql_num_rows($result11);
ensuite à insérer au bon endroit dans ton code html:
//en reprenant l'exemple de ta première boucle
<?php gere_liste('cleMotCle2',$cleMot2,$result11,$nombre_lignes); ?>
j'ai pas tester le code mais si tu as un problème n'hésite pas.

thierry
Modifié en dernier par thierry le 10 mai 2005, 16:25, modifié 2 fois.

Petit nouveau ! | 9 Messages

10 mai 2005, 16:03

:wink: Tout à fait, tu as bien compris mon problème.
Merci bcp pour ta réponse c'est super cool.
Je vais tester d'où ca rapidement, et te dire si ca fonctionne en effet.
Merci

Petit nouveau ! | 9 Messages

10 mai 2005, 16:17

Bin merciiiiiiiiiii ca marche nickel, c'est vraiment cool :wink: :wink: :wink: :wink: :wink: