Aller au contenu

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


Sujets conseillés

Posté (modifié)

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
Posté

[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.

Posté (modifié)

Ca revient à faire 2 fois la même requêtes aussi.

Modifié par Spark
Posté

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

Posté (modifié)

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
Posté

Postes nous le bon code, que l'on puisse t'aider.

1/ ta fonction,

2/ le code qui l'appelle.

Nico.

Posté (modifié)

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
Posté

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 ?

Posté (modifié)

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

Veuillez vous connecter pour commenter

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



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