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

PHP & Base de données Discussion :

Liste de colonnes d'une table dans un tableau [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Par défaut Liste de colonnes d'une table dans un tableau
    Bonjour à tous,

    j'ai un petit soucis concernant la récupération des champ d'une table dans mon array.
    J'ai une fonction pour récupérer les données et une autre pour traiter les données.

    Petit exemple dans ma class Photos

    fonction pour récupérer les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static function listing()
    {		
    	return mysql_query("SELECT id, nom, dateAdd FROM photos ORDER BY id LIMIT 50");
    }
    fonction pour traiter les données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static function traiter(&$array)
    {
    	$array_tmp = array();
     
    	if(empty($array)) return;
     
    	while($donnees = mysql_fetch_array($array))
    	{
    		array_push($array_tmp, array("id" => $donnees['id'], "nom" => $donnees['nom'], "dateAjout" => AfficheDate($donnees['dateAd'])));
    	}
     
    	$array = $array_tmp;
    }

    et dans ma page php j'ai donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $array = Photos::listing();
    Photos::traiter($array);


    mon soucis est que lorsque je veut ajouter un champ à mon listing (par exemple le titre la photo), qui ne doit pas avoir de traitement (pas un champ date donc) je dois :
    - ajouter le champ dans la query SQL (normal)
    - mais ajouter aussi ce champ dans la fonction de traitement

    Je cherche donc un moyen pour récupérer tous les champs dans un array (sachant que je devrais utiliser certaines fonction de traitement sur par exemple les date).
    J'ai cherché du côté de mysql_field_name mais ça ne m'a pas vraiment aider.

    J'espère avoir été clair

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si ton problème est juste sur les dates, tu peux les formater dans ta requete plutot qu'en PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Par défaut
    merci de ta réponse si rapide

    mais c'est pas exactement ça

    déja pour les date ma fonction php peut me renvoyer le mot "aujourd'hui", hors faire ça en Mysql c'est pas vraiment possible.

    Mais mon souhait est vraiment d'essayer de faire une fonction "Traiter" un peu passe partout.

    Comme par exemple faire une boucle sur les différents champ de ma query automatiquement, que je ne dois pas toujours écrire le nom des fields dans cette fonction.

    Je sais que ça peut paraître bizarre lol mais j'ai beaucoup de programmation qui m'attend et je souhaite vraiment réduire mon travail pour ce genre de chose.
    Penser plutôt à diminiuer le codage.

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    Citation Envoyé par gianni7033 Voir le message
    J'ai cherché du côté de mysql_field_name mais ça ne m'a pas vraiment aider.
    tu étais proche du but, dans la documentation de la fonction (http://php.net/mysql_field_name) il y a un exemple pour récupérer la liste des colonnes de la requête

    mais dans ton cas, il est plus rapide d'utiliser la fonction http://php.net/mysql_fetch_assoc


    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
    public static function traiter(&$array)
    {
        if (empty($array)) {
            return;
        }
     
        $array_tmp = array();
     
        while ($donnees = mysql_fetch_assoc($array))
        {
            $array_tmp[] = $donnees;
        }
     
        $array = $array_tmp;
    }
    par contre j'ai plusieurs remarques sur le reste du code :
    - dans la méthode "traiter", c'est bizarre de remplacer une ressource par un tableau dans la variable $array, ça serait plus clair de retourner le résultat dans une autre variable
    - à l'exécution du la requête tu devrais rajouter des tests pour voir s'il y a une erreur, ça va faciliter la phase de développement, regarde là :
    http://php.developpez.com/faq/?page=...ysql_ressource

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Par défaut
    Citation Envoyé par mathieu Voir le message
    mais dans ton cas, il est plus rapide d'utiliser la fonction http://php.net/mysql_fetch_assoc
    alors là nikel ta fonction, je savais pas qu'on pouvais l'utiliser de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array_tmp[] = $donnees;
    maintenant une petite chose à changer, je voudrais mettre dans un array les différents champ dont le type est une date pour appeler ma fonction php AfficheDate, simplement je comprend pas trop comment je dois me servir de la variable $donnees et la mettre dans $array_tmp.
    AfficheDate fait un return d'une chaine.


    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
    public static function traiter(&$array)
    {
        if (empty($array)) return;
     
        $array_tmp = array();
        $arrayDate = $array("dateAd", "dateUpdate"); // les différentes date de ma table, c'est la seule chose à changer pour utiliser dans une autre classe
     
        while ($donnees = mysql_fetch_assoc($array))
        {
            // if(in_array(, $arrayDate)) AfficheDate($donnees); ??? // ici je coince pour appeler ma fonction php
            $array_tmp[] = $donnees;
        }
     
        $array = $array_tmp;
    }
    Citation Envoyé par mathieu Voir le message
    par contre j'ai plusieurs remarques sur le reste du code :
    - dans la méthode "traiter", c'est bizarre de remplacer une ressource par un tableau dans la variable $array, ça serait plus clair de retourner le résultat dans une autre variable
    Je comprend ce que tu veux dire lol mais bon c'était pour pas utiliser une autre variable
    Citation Envoyé par mathieu Voir le message
    - à l'exécution du la requête tu devrais rajouter des tests pour voir s'il y a une erreur, ça va faciliter la phase de développement, regarde là :
    http://php.developpez.com/faq/?page=...ysql_ressource
    je pense que tu peux dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("blabl") or die ("ERROR");

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    Citation Envoyé par gianni7033 Voir le message
    Je comprend ce que tu veux dire lol mais bon c'était pour pas utiliser une autre variable
    utiliser une autre variable ne prends pas beaucoup de ressources en plus et rend le code plus clair donc réfléchis-y

    Citation Envoyé par gianni7033 Voir le message
    je pense que tu peux dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("blabl") or die ("ERROR");
    oui et la place de "ERROR" afficher l'erreur comme dans le lien que je t'ai indiqué

    Citation Envoyé par gianni7033 Voir le message
    maintenant une petite chose à changer, je voudrais mettre dans un array les différents champ dont le type est une date pour appeler ma fonction php AfficheDate, simplement je comprend pas trop comment je dois me servir de la variable $donnees.
    AfficheDate fait un return d'une chaine.
    puisque tes données sont utilisées dans un objet, il vaut mieux laisser cet objet gérer ce genre de traitements particuliers à chaque classe. et comme ça tu n'as pas besoin de faire de traitements spéciaux dans la classe qui lit les résultats de la requête.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Par défaut
    Citation Envoyé par mathieu Voir le message
    puisque tes données sont utilisée dans un objet, il vaut mieux laisser cet objet gérer ce genre de traitement particuliers à chaque classe. et comme ça tu n'as pas besoin de faire de traitements spéciaux dans la classe qui lit les résultats de la requête.
    Oui mais en pratique, je ne vois pas trop comment je pourrais faire ce que tu me dis.

    Dans ce cas précis, tu pourrais me dire comment je peux arriver à utiliser ma fonction PHP pour le champ "dateAd" ?

    Encore merci

  8. #8
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    voilà un exemple de séparation entre les 2 classes, ça ne fonctionne pas tel quel et il y a surement plein de chose à améliorer mais c'est juste pour l'exemple

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    abstract class ObjetSQL
    {
        abstract protected static function requeteListeObjet();
        abstract protected static function creerObjet($tableau);
     
        protected static function listeObjet()
        {
            // connexion à la base de données
            $connexion = ...
     
            $requete = self::requeteListeObjet();
            $resultat = mysql_query($requete, $connexion) or exit(mysql_error() . "<br/>$requete");
     
            $listeObjet = array();
     
            while ($tableau = mysql_fetch_assoc($resultat)) {
                $listeObjet[] = self::creerObjet($tableau)
            }
     
            return $listeObjet;
        }
    }
     
    class Photo extends ObjetSQL
    {
        protected static function requeteListeObjet()
        {
            return 'SELECT * FROM Photo ORDER BY id';
        }
     
        protected static function creerObjet($tableau)
        {
            $objet = new Photo();
     
            $objet->definiNom($tableau['nom']);
            $objet->definiDate($tableau['date']);
        }
     
        private function definiNom($nom)
        {
            $this->nom = $nom;
        }
     
        private function definiDate($date)
        {
            $this->date = ClasseDate::formaterDate($date);
        }
     
        public function obtientNom()
        {
            return $this->nom;
        }
     
        public function obtientDate()
        {
            return $this->date;
        }
     
        private $nom;
        private $date;    
    }
     
    // exemple d'utilisation
    ?>
     
    <ul>
        <?php foreach (Photo::listeObjet() as $photo) {?>
     
            <li>
                <?php echo $photo->obtientDate();?>
            </li>
     
        <?php }?>
    </ul>

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 21/05/2010, 13h36
  2. Réponses: 2
    Dernier message: 03/12/2007, 09h57
  3. Réponses: 1
    Dernier message: 22/07/2007, 17h42
  4. Recuperer la liste des colonnes d'une table
    Par miai85 dans le forum Oracle
    Réponses: 1
    Dernier message: 12/07/2007, 11h44
  5. Réponses: 4
    Dernier message: 19/05/2005, 14h18

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