Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/06/2011, 14h29   #1
Invité régulier
 
Inscription : mai 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 27
Points : 9
Points : 9
Par défaut Function appelée de multiples fois pour une requête SQL

Bonjour,

Pour un tableau récapitulatif des chiffres par technicien et par mois, j'ai besoin de procéder à une requête SQL très similaire plusieurs fois. Pour simplifier l'écriture du fichier générant ce tableau, j'ai voulu tenté une fonction contenant la requête SQL et les variables allant bien avec.

J'ai donc une fonction avec 5 options à définir qui va faire un "return" sur une variable nouvelle nommée $res. Je l'ignorai mais cette variable est en fait un tableau donc j'ai obtenu le fameux "ressources id#". J'ai donc voulu appelé la fonction plusieurs fois et stocker les résultats dans un nouveau tableau appelé $chiffre.

Étonnamment toutes mes lignes contiennent la valeur 0. J'ai donc voulu procéder à divers tests, ma requête SQL est valide car si je n'exécute la fonction qu'une fois et que j'appelle le résultat $res[0], j'obtiens bien ma valeur attendue.

Si j'appelle deux fois ma fonction en faisant un echo $res[0] entre chaque appel, j'obtiens deux fois la première valeur calculée...

Pour finir de me déprimer l'utilisation d'un tableau pour stocker mes résultats de façon incrémentielle dans la fonction elle-même ne m'a permis que de ne plus avoir la moindre réponse correcte...

Je me tourne donc vers vous pour me donner une piste ou la solution.

Je vous poste ci-dessous les 2 fichiers : d'un côté le fichier du tableau et de l'autre la fonction.


La fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
include ("connect_db.php");
function suivi_tech($tech, $mois, $classe, $prestataire, $annee)
	{
	$mois_fd = mktime (0,0,0,$mois,1,$annee);
	$mois_ff = mktime (0,0,0,$mois+1,1,$annee);
	if ($classe == "dirisi")
		$classe_finale = 'c.statut = "entreprise" AND c.societe = "X"';
	if ($classe == "societe")
		$classe_finale = 'c.statut = "entreprise"';
	if ($classe == "particulier")
		$classe_finale = 'c.statut = "particulier"';	
	$sql = 'SELECT SUM(i.montant_factu) FROM interventions AS i JOIN clients AS c ON i.id_clients = c.id WHERE i.user = "'.$tech.'" AND '.$classe_finale.' AND i.date_intervention < "'.$mois_ff.'" AND i.date_intervention > "'.$mois_fd.'" AND c.prestataire = "'.$prestataire.'"';
	$res = mysql_query ($sql) or die ('Erreur : '.mysql_error() );
	if (isset($res))
		return $res;
	}
?>
Le fichier PHP :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
include ("connect_db.php");
	require ('function.php');
	echo '<div class="titre">Suivi technicien</div>';
	$technicien = array('A', 'B', 'C', 'D', 'E');
	$mois_fr = array ('Janvier', 'F&eacute;vrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Ao&ucirc;t', 'Septembre', 'Octobre', 'Novembre', 'D&eacute;cembre');
	for ($i = 0; $i < sizeof($technicien); $i ++)
	{
	echo '<table width="500px" cellpadding="5" cellspacing="0"><tr><th colspan="2" class="nom_tech">'.$technicien[$i].'</th></tr>';
	echo '<tr><td>Mois</td><td>Particulier</td><td>Soci&eacute;t&eacute;</td><td>X</td></tr>';
	for ($j = 0; $j < sizeof($mois_fr); $j ++)
		{
		$chiffre = array ();
		suivi_tech($technicien[$i],$j+1,particulier,aucun,2011);
		$chiffre [] = $res[0];
		suivi_tech($technicien[$i],$j+1,societe,aucun,2011);
		$chiffre [] = $res[0];
		suivi_tech($technicien[$i],$j+1,societe,S,2011)*0.8;
		$chiffre [] = $res[0];
		suivi_tech($technicien[$i],$j+1,societe,T,2011)*0.75;
		$chiffre [] = $res[0];
		suivi_tech($technicien[$i],$j+1,X,aucun,2011);
		$chiffre [] = $res[0];		
		echo '<tr><td>'.$mois_fr[$j].'</td>';
		echo '<td>'.$chiffre[0].'</td>';
		echo '<td>'.$chiffre[1]+$chiffre[2]+$chiffre[3].'</td>';
		echo '<td>'.$chiffre[4].'</td>';
		echo '</tr>';
		}
	echo '</table>';
	}	
?>
Et j'ai beau cherché je ne vois pas ce qui cloche.

Merci par avance de votre aide et déjà d'avoir eu la patience de tout lire
curumo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 14h35   #2
Membre régulier
 
Avatar de Netek
 
Homme Damien Gros
Développeur Web
Inscription : mars 2011
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Damien Gros
Âge : 25
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2011
Messages : 58
Points : 73
Points : 73
Envoyer un message via MSN à Netek
pour sortir les resultat il te faut utiliser mysql_fetch_assoc() sur le retour de mysql_query
__________________
Développeur web netek.fr PHP, MySQL, Ajax, jQuery, Drupal, Magento
Netek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 15h30   #3
Invité régulier
 
Inscription : mai 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 27
Points : 9
Points : 9
Oui ca je l'avais lu aussi. Je l'ai testé dans la fonction sans résultat probant. L'utilisation sur le $res marchait mais vu que je passais aussi bien avec $res[0] je n'en voyais plus l'usage.

Bref où suis je censé l'utiliser ?
curumo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 16h58   #4
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Citation:
Bref où suis je censé l'utiliser ?

Citation:
pour sortir les resultat il te faut utiliser mysql_fetch_assoc() sur le retour de mysql_query
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 18h24   #5
Membre régulier
 
Avatar de Netek
 
Homme Damien Gros
Développeur Web
Inscription : mars 2011
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Damien Gros
Âge : 25
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2011
Messages : 58
Points : 73
Points : 73
Envoyer un message via MSN à Netek
En gros il faut que tu fasses ca :

Code :
1
2
3
$res = suivi_tech($technicien[$i],$j+1,particulier,aucun,2011);
$data = mysql_fetch_assoc($res);
$chiffre [] = $data[0];
__________________
Développeur web netek.fr PHP, MySQL, Ajax, jQuery, Drupal, Magento
Netek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 16h05   #6
Invité régulier
 
Inscription : mai 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 27
Points : 9
Points : 9
Merci pour la précision Netek.

Question à deux sous, on pourrait faire un mysql_fetch_assoc() dans la fonction directement sur le mysql_query ou pas ?

Type
Code :
$res = mysql_fetch_assoc(mysql_query ($sql)) or die ('Erreur : '.mysql_error() );
D'autres parts pourrait-on raccourcir les lignes car à ce rythme je vais bientôt ne plus avoir de besoin de la fonction ^^

Code :
1
2
Genre : $chiffre [] = mysql_fetch_assoc($res);
ou $chiffre [] = mysql_fetch_assoc($res[0]);
??

-------------------------------------------------------------------
Transgohan : si je pose la question c'est que justement cela ne me paraissait pas clair. On peut faire le mysql_fetch_assoc() sur le résultat de mysql_query à plusieurs endroits :

dans la fonction ?
directement sur le résultat type
Code :
1
2
$chiffre [] = mysql_fetch_assoc($res);
voire $chiffre [] = mysql_fetch_assoc($res[0]);
Bref plutôt que de faire une citation sur une phrase qui est certes claire mais pas forcément limpide pour des néophytes, et si tu sais la réponse, éclaire mon ignorance ou abstient toi d'un commentaire totalement inutile
curumo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 17h31   #7
Membre régulier
 
Avatar de Netek
 
Homme Damien Gros
Développeur Web
Inscription : mars 2011
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Damien Gros
Âge : 25
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2011
Messages : 58
Points : 73
Points : 73
Envoyer un message via MSN à Netek
Tu peux faire ca si tu préfere :

Code :
1
2
3
4
5
6
7
8
$res = mysql_query ($sql) or die ('Erreur : '.mysql_error() );
if(mysql_num_rows($res) > 0)
{
$data = mysql_fetch_assoc($res);
return $data;
}
else return 0;
}
Code :
1
2
$data = suivi_tech($technicien[$i],$j+1,particulier,aucun,2011);
$chiffre [] = $data[0];
__________________
Développeur web netek.fr PHP, MySQL, Ajax, jQuery, Drupal, Magento
Netek est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/06/2011, 19h32   #8
Invité régulier
 
Inscription : mai 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 27
Points : 9
Points : 9
ah oui je préfère en effet et je t'en remercie. Du coup les lignes redondantes seront "cachées" dans la fonction au lieu d'être de multiples fois dans le code de la page à proprement parler !
curumo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 20h11   #9
Invité régulier
 
Inscription : mai 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 27
Points : 9
Points : 9
Finalement, cela ne donne pas le résultat escompté mais un retour "vide"...

J'ai testé directement dans un fichier test sans appel de fonction mais avec la requete SQL plusieurs fois et j'ai le même souci. Je ne comprends pas
curumo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h14.


 
 
 
 
Partenaires

Hébergement Web