Aller au contenu

Comment utiliser le résultat d'une requête dans une fonction ?


Spark

Sujets conseillés

Bonjour,

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

J'ai une requête genre :

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

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

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

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

$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 :

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:

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 :)

Modifié par captain_torche
Lien vers le commentaire
Partager sur d’autres sites

[joke] (en cours d'édition, j'attends la question pour fournir la réponse ) [/joke]

;)

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 :

$query = "SELECT * FROM truc";

echo showcalendar($query);

function showcalendar($requete){

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

Nico.

Lien vers le commentaire
Partager sur d’autres sites

? 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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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é ^^).

Modifié par Spark
Lien vers le commentaire
Partager sur d’autres sites

Voici le code d'origine :

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

Repère la partie :

						 // 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 :

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 :

						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 :

$leCalendrier = "";

par:

$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 :

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

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

Par (quelque chose du genre) :

	$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 :

<?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);
?>

Modifié par Spark
Lien vers le commentaire
Partager sur d’autres sites

Pour faire simple il me faudrait savoir comment mettre le résultat d'une requête dans un tableau ^^

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 :

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'];
}

Modifié par Spark
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...