Version complète: sur le forum Webmaster Hub : Comment utiliser le résultat d'une requête dans une fonction ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Spark
Bonjour,

J'ai un souci insondable pour moi, peut être que vous ?

J'ai une requête genre :


CODE
$reponse = mysql_query('SELECT * FROM truc');


J'utilise une boucle pour afficher sans problème les données :

CODE
while ($donnees = mysql_fetch_array($reponse))
{
    echo $donnees['truc1'];
}


Je veux réutiliser le résultat dans une fonction :

CODE
$reponse = mysql_query('SELECT * FROM truc');

echo showCalendar($periode_chosie,$reponse);

while ($donnees = mysql_fetch_array($reponse))
{
    echo $donnees['truc1'];
}


En dans la fonction (exemple simplifié) je fais :

CODE
function showCalendar($periode,$evenement)
{
  while ($donnees = mysql_fetch_array($evenement))
  {
      echo $donnees['truc1'];
  }
  return $leCalendrier;//$evenement==Resource id #5 O_o
}


Mais là j'ai rien qui s'affiche dans aucune des deux boucle O_o

Au cas ou je ne suis pas claire si je fais ça ça fonctionne:

CODE
function showCalendar($periode)
{
  $reponse = mysql_query('SELECT * FROM truc');
  while ($donnees = mysql_fetch_array($reponse))
  {
      echo $donnees['truc1'];
  }
  return $leCalendrier;
}




Merci pour vos lumières smile.gif
Anonymus
[joke] (en cours d'édition, j'attends la question pour fournir la réponse ) [/joke]
wink.gif

Le raisonnement logique (à mon avis) aurait été de passer soit l'ensemble (requète + mysql_query) dans la fonction, comme le montre ton dernier exemple,
mais éventuellement, tu pourrais passer la requète en paramètre, et laisser la fonction mysql_query dans la fonction showcalendar.
Ca donnerait :

CODE
$query = "SELECT * FROM truc";

echo showcalendar($query);

function showcalendar($requete){

$r = mysql_query($requete);
while($row = mysql_fetch_array($r)){
echo'plop';
}
}


Nico.
Spark
Ca revient à faire 2 fois la même requêtes aussi.
Anonymus
? Non, pourquoi ?
Tu appelles ta fonction plusieurs fois ?
Alors la solution est par les tableaux >
Tu stockes le résultat dans un tableau, et c'est celui-ci que tu appelles 2 fois wink.gif
Spark
Ca revient à en faire 1 hors de la fonction et une dans la fonction.

Je viens d'essayer de réunir ces 2 éléments dans la fonction (ce que je n'aime pas trop puisque je réunis 2 éléments graphique différent mais bon ce n'est pas très grave), 1 requêtes, 2 mysql_fetch_array, résultat rien de fonctionne, mais j'ai plus d'un problèmes, je continu à chercher.

Quand à stocker les info dans un tableau c'est dès le départ ce que j'ai essayé de la faire mais sans succès (je suis pas doué happy.gif).
Anonymus
Postes nous le bon code, que l'on puisse t'aider.
1/ ta fonction,
2/ le code qui l'appelle.

Nico.
Spark
Voici le code d'origine :

http://www.sutekidane.net/blog/afficher-un...-et-en-css.html

Repère la partie :

CODE
                         // 1 est toujours vrai => on affiche un lien à chaque fois
                         // A vous de faire les tests nécessaire si vous gérer un agenda par exemple
                         if (1) {
                              $class = " class=\"itemExistingItem\"";
                              $afficheJour = "<a href=\"\">" . Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) . "</a>";
                         }
                         else {
                              $class = "";
                         }


Cette parti du code est faite pour formater les jours du calendrier à notre guise.


Je fais donc une requête pour récupérer les jours avec un évènement, dans le mois en cour :
CODE
list($Y,$m) = split('-',$periode);    

mysql_query('SELECT id, groupe, detail, DATE_FORMAT(date, "%d") AS date2 FROM agenda WHERE DATE_FORMAT(date, "%m")='.$m.' AND DATE_FORMAT(date, "%Y")='.$Y)or die(mysql_error());



Puis à la place du 1er code cité plus haut

Je mets :

CODE
                        while ($donnees = mysql_fetch_array($reponse))
                            {
                
                         // 1 est toujours vrai => on affiche un lien à chaque fois
                         // A vous de faire les tests nécessaire si vous gérer un agenda par exemple
                         if ($donnees['date2']==(Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))))) {
                              $class = " class=\"itemExistingItem\"";
                              $afficheJour = "<a href=\"\">" . Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) . "</a>";
                         }
                         else {
                              $class = "";
                         }
                                
                            }



Problème 1, si je ne mets pas la requête dans la boucle while ($pas < $nb_jour) ça ne fonctionne. Je ne peut pas la laisser dans la boucle sinon 30 requêtes !

Problème 2, je fais exactement la même requête pour fair un listing des évènement du moi hors de la fonction. Si je fais le listing dans la fonction (pour économiser 1 requête et divers redondance de code) j'utilise une 2ème fois la fonction mysql_fetch_array mais elle n'est pas prise en compte.

Pour ajouter le listing dans la requête il faut que je remplace :
CODE
$leCalendrier = "";

par:
CODE
$leCalendrier = "            <div id=\"calendrier\">\n                <div id=\"calendrier1\">\n                <h1 style=\"text-align: center; font-size: 11pt; margin: 0px auto 3px auto;\">Calendrier</h1>";


Et :
CODE
          $leCalendrier .= "\n\t</ul>\n";

          // Retour de la chaine contenant le Calendrier
          return $leCalendrier;

Par (quelque chose du genre) :
CODE
    $leCalendrier .= "\n\t</ul>\n";
    $leCalendrier .= "                </div>\n                <div id=\"calendrier3\">\n";
                            
    $leCalendrier .= "<ul>\n";
    while ($donnees = mysql_fetch_array($reponse))
        {
            $leCalendrier .= "<li><span class=\"itemExistingItem\">".$donnees['date2']."</span> - ".$donnees['groupe']."</li>\n";            
        }
    $leCalendrier .= "</ul>\n";
    $leCalendrier .="                </div>\n                <div id=\"calendrier2\"></div>\n            </div>";

    // Retour de la chaine contenant le Calendrier
    return $leCalendrier;



Et le code qui appel la fonction :

CODE
<?php        
if (isset($_GET['periode']))
            
      {
        $periode_chosie=$_GET['periode'];//je verrais plus tard pour optimiser la récupération des infos et la sécurité
      }
else
      {
        $periode_chosie=date("Y-m");
      }

echo showCalendar($periode_chosie);            
?>
Spark
Pour faire simple il me faudrait savoir comment mettre le résultat d'une requête dans un tableau happy.gif

Mais peut ont après dans un boucle utiliser les donnés de la même façon qu'avec un mysql_fetch_array ? C'est à dire avec le nom des champs comme nom de variable ?
Spark
Bon ba après en avoir chier en découvrant ce que je peux faire et ce que je ne peut pas faire j'ai finalement réussis à créer un tableau :


CODE
while ($donnees = mysql_fetch_array($reponse))
{
    $mysql_array[] = array(id => $donnees['id'], groupe => $donnees['groupe'], detail => $donnees['detail'], date2 => $donnees['date2']);
}

foreach($mysql_array AS $donnees)
{
    echo $donnees['id'];
}
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.