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 :

Sélections de champs irréguliers.


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Par défaut Sélections de champs irréguliers.
    Bonjour,

    J'ai lu dans un sujet du forum qu'il n'était pas possible de faire une requête SQL en disant "sélectionne tout sauf ID" par exemple, à savoir faire une * avec des exceptions.

    Or, il s'avère que j'ai une table qui contient, pour chaque ligne, un ensemble irrégulier d'intitulés de colonnes afin de pouvoir générer des tableaux grâce à une boucle sur la partie "titre" d'une colonne.

    Une ligne possède donc 3 intitulés quand une autre en possède 5. Dois-je nommer tous les champs un par un et demander à SQL d'afficher seulement ceux n'étant pas NULL ?

    Ce qui donnerait cela (en sachant que j'ai 5 champs au max dans toutes mes lignes ) :

    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
    
    $reponse = $bdd->query('SELECT colonne1, colonne2, colonne3, colonne4, colonne5 FROM tableaucategorie Where ID = 2');
    
    
    while (que mettriez-vous pour dire "afficher les cases qui ne sont pas NULL")
    {
    
     <tr><th><?php echo "que mettriez-vous pour dire : afficher les colonnes"; ?></th></tr>
        
        
    <?php
    }
    
    $reponse->closeCursor(); 
    
    ?>
    J'essaye mille combinaisons possible mais je ne trouve pas la solution..
    Car il faut aussi que j'appelle une ligne en particulier, (en l'occurence la ligne à ID=2 ici).

    Merci d'avance à vous

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    je n'ai pas tout compris ; as-tu l'intention de mettre un en-tête par enregistrement ou les intitulés des colonnes sont fixes et tu ventiles les valeurs dans les emplacements appropriés ?

  3. #3
    Membre averti
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Par défaut
    Salut

    En fait, pour être plus clair, j'ai une table comprenant "colonne1, colonne2, colonne3, etc..." mais des entrées qui ne remplissent pas tous les champs, certains n'auront qu'une information sur "colonne1", d'autres sur toutes les colonnes, etc..
    HORS, ces informations servent à faire les noms des colonnes des tableaux, puisque que chaque entrée de ma table correspond à un type de tableau.

    Comme je veux pouvoir créer mon tableau grâce à une seule page php nommée "template-tableau", j'ai utilisé ce bout de code pour n'afficher que les colonnes non NULL, voici le code :
    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
    <?php
     
    $reponse = $bdd->query('SELECT colonne1, colonne2, colonne3, colonne4, colonne5, colonne6, colonne7, colonne8, colonne9, colonne10 FROM tabletableau Where ID = 2');
     
    // On affiche chaque entrée une à une
     
        if(isset($donnees['colonne1'])){
            echo '<thead><tr>'.$donnees['colonne1'].'</tr></thead>';
        }
     
    	if(isset($donnees['colonne2'])){
            echo '<thead><tr>'.$donnees['colonne2'].'</tr></thead>';
     
        }
     
    	if(isset($donnees['colonne3'])){
            echo '<thead><tr>'.$donnees['colonne3'].'</tr></thead>';
        }
     
        if(isset($donnees['colonne4'])){
            echo '<thead><tr>'.$donnees['colonne4'].'</tr></thead>';
        }
     
        if(isset($donnees['colonne5'])){
            echo '<thead><tr>'.$donnees['colonne5'].'</tr></thead>';
        }
     
        if(isset($donnees['colonne6'])){
            echo '<thead><tr>'.$donnees['colonne6'].'</tr></thead>';
        }
     
        if(isset($donnees['colonne7'])){
            echo '<thead><tr>'.$donnees['colonne7'].'</tr></thead>';
        }
     
        if(isset($donnees['colonne8'])){
            echo '<thead><tr>'.$donnees['colonne8'].'</tr></thead>';
        }
     
        if(isset($donnees['colonne9'])){
            echo '<thead><tr>'.$donnees['colonne9'].'</tr></thead>';
        }
     
        if(isset($donnees['colonne10'])){
            echo '<thead><tr>'.$donnees['colonne10'].'</tr></thead>';
        }
     
    ?>
     
     
     
    <?php
     
     
    $reponse->closeCursor(); 
     
    ?>
    Or, rien ne s'affiche alors même que j'ai bien vérifié que la ligne à l'ID2 possédait 3 entrées (colonne1, colonne2, colonne3).
    Ai-je mal utilisé "Isset" ?

    Merci d'avance en espérant avoir été assez clair et en remerciant mille fois ce genre de sites qui permettent à des noob de sortir un peu la tête de l'eau...

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    que te renvoie $bdd->query() ? Un tableau, PDOStatement...

    Ensuite, tu récupère le résultat dans $reponse et pour l'affichage tu utilises $donnees c'est pas cohérent.

    Enfin, un tableau en html se code ainsi :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <table>
        <thead>
            <tr>
                <th></th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td></td>
                <td></td>
            </tr>
        </tbody>
    </table>

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    au lieu de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($donnees['colonne1']))
    test plustôt ce que contient cette colonne car même si elle est null elle est quand même présente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( $donnees['colonne1'] !== null )
    EDIT :
    En re regardant ton code j'ai remarqué qu'il te manque le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($donnees = $reponse->fetch() )
    qui sert a parcourir chaque ligne retournée pas ta requête SQL.

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Exia93 Voir le message
    Bonjour,

    au lieu de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($donnees['colonne1']))
    test plustôt ce que contient cette colonne car même si elle est null elle est quand même présente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( $donnees['colonne1'] !== null )
    isset() détermine si une variable est définie ET est différente de NULL.
    Zieute un coup sur la doc

  7. #7
    Membre averti
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Par défaut
    Pour le code HTML, j'ai focalisé sur une partie de mon code pour l'afficher ici. Mais pour thead, c'est vrai, je dois l'enlever de la boucle, merci

    Vient ensuite le reste du tableau qui ne fait plus partie de cette requête et que je traite avec un autre bout de code php.

    Pour PDOStatement, cela veut dire que je ne vais pas écrire echo '<th>'.$reponse['colonne10'].'</th>'; mais plutôt un truc comme
    echo '<th>'.$PDOStatement::quelquechose['colonne10'].'</th>'; ?

    Désolé si je ne suis à la ramasse... Je cherche en même temps sur Google mais difficile de bien tout cerner.

    Merci pour ton intervention

  8. #8
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    que te renvoie $bdd->query() ? Un tableau, PDOStatement...
    Tu ne m'as pas répondu :snif:

  9. #9
    Membre averti
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Par défaut
    Ah ok ! Je croyais que tu affirmais que cela me donnait PDOStatement, du coup, j'ai répondu en disant "alors dans echo faut mettre PDOStatement::".

    Je ne sais pas comment savoir ce que me donne $bdd->query().. pour moi, cela va simplement chercher les informations précises à l'endroit précis que donne ma requête, à savoir toutes les données contenues dans les colonne1, colonne2.. mon niveau ne me permet pas d'avoir une réponse plus technique comme tu me le demandes... dsl..

    Du coup, dans ton deuxième message, tu utilises $donnees mais on est d'accord qu'il faut mettre $reponse ?

    Voici ce que me renvoie le serveur avec le code que j'ai affiché dans mon message précédent :
    Cannot use object of type PDOStatement as array

    J'imagine qu'il y a là une information importante qui échappe à mon niveau

    En tout cas, c'est cool qu'il existe encore des gens pour aider !
    Thx.

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

Discussions similaires

  1. [Tableaux] Sélection 1er champ
    Par pascalbout1 dans le forum Langage
    Réponses: 5
    Dernier message: 17/10/2007, 11h55
  2. Réponses: 3
    Dernier message: 21/05/2007, 15h31
  3. sélection de champs d'une table
    Par OBIWAN64 dans le forum Access
    Réponses: 2
    Dernier message: 23/01/2007, 17h07
  4. sélection des champs à imprimer
    Par gueyou dans le forum Access
    Réponses: 3
    Dernier message: 18/09/2006, 16h58
  5. Pb sélection avec Champ vide
    Par Luffy Duck dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/10/2005, 12h11

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