IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Function appelée de multiples fois pour une requête SQL


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 19
    Points
    19
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre du Club Avatar de Netek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    pour sortir les resultat il te faut utiliser mysql_fetch_assoc() sur le retour de mysql_query

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    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 ?

  4. #4
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Bref où suis je censé l'utiliser ?

    pour sortir les resultat il te faut utiliser mysql_fetch_assoc() sur le retour de mysql_query

  5. #5
    Membre du Club Avatar de Netek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    En gros il faut que tu fasses ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $res = suivi_tech($technicien[$i],$j+1,particulier,aucun,2011);
    $data = mysql_fetch_assoc($res);
    $chiffre [] = $data[0];

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre du Club Avatar de Netek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    Tu peux faire ca si tu préfere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data = suivi_tech($technicien[$i],$j+1,particulier,aucun,2011);
    $chiffre [] = $data[0];

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    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 !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    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

Discussions similaires

  1. Aidez moi pour une requête SQL server
    Par pop10 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 19/06/2007, 22h15
  2. problème de syntaxe delphi pour une requête sql
    Par socooooool dans le forum Bases de données
    Réponses: 12
    Dernier message: 07/07/2006, 16h53
  3. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  4. Réponses: 3
    Dernier message: 18/06/2005, 00h31
  5. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo