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 :

[Tableaux] Retour d'un SELECT effectué dans une classe


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut [Tableaux] Retour d'un SELECT effectué dans une classe
    Bonjour,

    Pour me faciliter la maintenance d'une application développée en Php5, j'ai créé une classe qui gère mes transactions avec la base de données (dans ce cas, MySql).

    Dans cette classe (construite selon le modèle singleton), j'ai une fonction publique intitulée select() qui doit me retourner le tableau de résultats. Voici le code incriminé :

    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
    switch(self::$typeBase)
         {
          case "MSQL":
    	   $result = mysql_query($requete, self::$connect);
     
           if(! $query)
            self::$erreur = "Impossible d'effectuer la requête " . $requete;
           else
    	    {
    		 if (! mysql_num_rows($result)) 
    		  self::$erreur = "Aucun résultat";
    		 else
    		  {
    		   $resultatSelect = mysql_fetch_row($result);
    		   return $resultatSelect;
    		  }
    		}
     
    	   break;
    	 }
    Dans mon main, voici le code utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $transaction = CtransactionsBdd::GetInstance("MSQL", "localhost", "root", "", "kine");
     
    ...
     
     
    $resuReq = $transaction->select("select distinct code from codePostaux");
     
    foreach($resuReq as $valeur)
     {
      echo "\n         <option value='" . $valeur . "'>" . $valeur . "</option>";
     }
    Au niveau de la sécurisation des accès à la BDD, je travaillerai cela plus tard.

    Dans ce cas précis, je désire afficher, dans une liste d'un formulaire, les codes postaux de ma table codePostaux.

    Le problème est que ma variable $resuReq n'est pas considérée comme un tableau, et, dès lors, j'ai un message d'erreur m'indiquant qu'un paramètre n'est pas correct dans ma fonction foreach.

    Lorsque je fais un getttype de $resuReq, j'ai NULL.

    Est-ce que quelqu'un d'entre vous aurait une idée?

    Merci d'avance.

    Christophe

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    à priori je dirais que le code qui est exécuté est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(! $query)
            self::$erreur = "Impossible d'effectuer la requête " . $requete;
    donc ta fonction ne retourne rien.
    Il faudrait que tu debug avec des echos, et tu peux déjà ajouter un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query($requete, self::$connect) or die(mysql_error());
    pour le debug.

    D'autre part ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultatSelect = mysql_fetch_row($result);
    mysql_fetch_row() retourne une seule ligne de résultat donc tu ne pourras jamais avoir tous tes codes postaux.
    Ceci serait mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultatSelect[] = mysql_fetch_row($result);
    Ensuite dans tous les cas tu seras obligé de tester le retour de ta fonction avant de parcourir avec un foreach. A moins que tu ne définisses ta variable $resultatSelect en début de fonction et que tu la retournes dans tous les cas, même en cas d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultatSelect = array();
    Comme ca tu pourras parcourir avec un foreach même si le tableau est vide. Le problème avec cette méthode c'est que tu ne sauras pas s'il y a 0 enregistrements ou s'il y a eu une erreur.
    Vive les roues en pierre

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Merci beaucoup à toi pour l'intérêt porté à ma question et pour ton aide...

    Voici la solution :

    - Tout d'abord, j'avais commis une erreur au niveau de l'appellation d'une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(! $query)
            self::$erreur = "Impossible d'effectuer la requête " . $requete;
    $query devait se nommer $result.

    - Ensuite, au niveau du traitement de ma requête dans ma classe, voici le code que j'ai appliqué en remplacement de l'ancien :

    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
    switch(self::$typeBase)
         {
          case "MSQL":
    	   $result = mysql_query($requete, self::$connect);
     
           if(! $result)
            self::$erreur = "Impossible d'effectuer la requête " . $requete;
           else
    	    {
    		 if (! $num_result = mysql_num_rows($result)) 
    		  self::$erreur = "Aucun résultat";
    		 else
    		  {
    		   while($row = mysql_fetch_row($result))
    		    $resultatSelect[] = $row[0];
     
    		   return $resultatSelect;
    		  }
    		}
     
    	   break;
    	 }
    Maintenant, tout fonctionne dès lors comme il se doit.

    Bonne fin de journée.

    Christophe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passer un selected item dans une classe connexion java
    Par cisco.nat dans le forum Général Java
    Réponses: 14
    Dernier message: 12/06/2013, 18h54
  2. Selection d'un choix effectué dans une liste déroulante
    Par jerem1 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/09/2011, 23h15
  3. Réponses: 6
    Dernier message: 17/03/2006, 12h23
  4. vérifier qu'un choix a été effectué dans une liste déroulant
    Par karibouxe dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 17/02/2006, 16h10
  5. Selection aléatoire dans une fouchette de 10%
    Par RobertDeNiroZ dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/06/2004, 09h22

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