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 :

Requete special dans bdd [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut Requete special dans bdd
    Bonjour,

    Je cherche à faire une requete qui me permettrais de récupérer mes variable en dehors de ma boucle while et une à une.

    Pour le moment je sait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($donnees..etc..))
    {
    affiche les $donnees
    }
    Mais je suis obligé d'intégrer ma bouclee while la ou je veut mes $donnees.

    Comment je pourrais faire par 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
     
    while($donnees..etc..))
    {
    variable1= $donnee1
    variable2= $donnee2
    variable3= $donnee3
    }
    //ici je sort du code php
     
    affiche variable1
     
    // plus loin encore
     
    affiche variable1 et variable 3 etc..
    Je subbodorre qu'il faut passer par un tableau ? Mais comment ?

    D'avance merci pour votre aide.

  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
    Les tableaux sont des éléments essentielles de PHP.
    Il est donc essentiel que tu apprennes à les manipuler.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while($donnees = ....))
    {
        $tableau[]= $donnees['tacolonne'];
    }
     
    echo $tableau[2]; // affiche la valeur de la troisième ligne.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Mieux, il existe des fonctions qui te retourne directement l'ensemble des résultats sans passer par un une boucle pour traiter tes résultat un à un :

    mysql_fetch_array si tu utilises l'api mysql originale ou PDOStatement::fetchAll si tu ulises PDO (c'est mieux d'utiliser PDO au passage, l'extension mysql est devenue obsolète )

  4. #4
    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
    Ce n'est pas mieux, cela dépend de ce que l'on veut faire.
    Et en général un tableau indexé avec le numéro de la ligne ne va pas servir à grand chose.

    Pour reprendre mon exemple, on a plutôt d'indexer par un id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($donnees = ....))
    {
        $tableau[$donnees['tacolonne_id']]= $donnees['tacolonne_valeur'];
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Ca dépend, si l'on fait des order by judicieux ça suffit parfois aussi.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    Bonsoir,

    Tout d'abord merci pour vos réponses.

    Donc j'ai modifié et adapté les parties que vos m'avez mises en 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
     
    $date_1 = $_POST['date1'];
    $date_2 = $_POST['date2'];
     
    $sqlpdo=$connexion->query("SELECT * FROM ma_bdd WHERE date_deb_emp BETWEEN '$date_1'
    AND '$date_2' AND etat != ''");
    while ($data_bg = $sqlpdo->fetch(PDO::FETCH_OBJ))
     
    {
        $tableau[] = $data_bg->etat;
    } 
     
    echo $tableau[0]."<br>";
    echo $tableau[1]."<br>";
    echo $tableau[2]."<br>";
    echo $tableau[3]."<br>";
    echo $tableau[4]."<br>";
     
    echo $tableau[5]."<br>";
    echo $tableau[6]."<br>";
    echo $tableau[7]."<br>";
    Ce qui m'amène à poser une autre question...
    Comment dimensionner le tableau automatiquement ?
    Parce dans l'exemple ci-dessus après echo $tableau[4]."<br>"; j'ai un message d'erreur : Notice: Undefined offset: 5 in C:\WWW\datacamp\reservation.php on line 30
    bon en fait c'est normal puisque après $tableau[4] il n'y a plus rien.

    Quelle est la fonction pour dimensionner le tableau automatiquement en fonction du contenu de la BdD ?

    D'avance merci.

  7. #7
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach ($ableau as $value) {
        echo $value;
    }
    Foreach permet de parcourir un tableau. Les fonctions de manipulation sur les tableaux sont les plus classiques, il ne serait pas une mauvaise idée de les apprendre

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    Tout à fait ! Je vais le faire mais pour le moment merci pour ta réponse mais c'est pas ce que je recherche parce que le foreach et l'équivalent du while tel quel il me renvoie la globalité des données.

  9. #9
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    On ne peut fixer la taille d'un tableau en php, celui-ci est forcément de taille dynamique.

    Si tu ne veux pas avoir d'erreur notice il faut tester avant si ton index de tableau existe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($tableau[4])) echo $tableau[4];
    Ou pour n'afficher que les 4 premiers éléments, revenir sur une boucle for classique.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    ok merci je vais voir dans ce sens la alors.

    Sinon encore une question...

    Si je veut indexer une valeur sur une autre dans le genre ou :

    $data_bg->etat (= res) et $data_bg->emplacement (= 10) <- les parenthèse correspondent aux valeurs dans la bdd.

    j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sqlpdo=$connexion->query("SELECT * FROM datacamp_emplacement WHERE date_deb_emp BETWEEN '$date_1'
    AND '$date_2' AND etat != '' ORDER BY emplacement DESC");
    while ($data_bg = $sqlpdo->fetch(PDO::FETCH_OBJ))
    {
    $tableau_etat[] = $data_bg->etat;
    $tableau_emp[] = $data_bg->emplacement;
    }
    Donc je récupère deux tableaux.

    Il n'existe pas une manière de mettre les deux tableaux dans un seul et d'indexer "etat" sur "emplacement" ?

    J'ai vu des exemples mais j'ai pas trop compris...

  11. #11
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tableau[$data_bg->emplacement][] = $data_bg->etat;
    De la manipulation de tableau tout ça, rien de sorcier, juste de la manipulation de tableau

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    Désolé mais ça fonctionne pas...

    un echo $tableau[3]."<br>"; par exemple me renvoie : Notice: Undefined offset: 3 in C:\WWW\...etc

  13. #13
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    C'est tout à fait logique si aucun emplacement n'a la valeur 3.

    Je t'invite à utiliser la fonction print_r pour regarder le contenu de ton tableau.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    Avec n'importe quel ofset ça ne fonctionne pas.. pourtant j'ai 6 entrées dans la bdd.

  15. #15
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Que donne print_r($tableau) ?

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    Ca me dit qu'il y a des données dans mon tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Array ( [17] => Array ( [0] => oqp ) ) Array ( [17] => Array ( [0] => oqp ) [37] => Array ( [0] => res ) ) Array ( [17] => Array ( [0] => oqp ) [37] => Array ( [0] => res [1] => oqp ) ) Array ( [17] => Array ( [0] => oqp ) [37] => Array ( [0] => res [1] => oqp ) [4] => Array ( [0] => res ) ) Array ( [17] => Array ( [0] => oqp ) [37] => Array ( [0] => res [1] => oqp ) [4] => Array ( [0] => res ) [8] => Array ( [0] => oqp ) ) Array ( [17] => Array ( [0] => oqp ) [37] => Array ( [0] => res [1] => oqp ) [4] => Array ( [0] => res ) [8] => Array ( [0] => oqp [1] => oqp ) )
    Donc j'utilise mal le echo $tableau....

  17. #17
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Je te propose ceci :
    Dis-nous si c'est bon...
    Et sinon, teste ton sql à part dans ton phpmyadmin avant de l'utiliser dans ton code.

    Un résultat de requêtes, c'est un tableau de tableaux.
    Il y a d'abord un tableau associatif par ligne, du genre $data['nom']='DUPONT', $data['prenom']='Louise' etc.
    et un tableau de tous ces tableaux là : ce qui donnera
    $data[0]['nom']=>'DUPONT'
    $data[0]['prenom']=>'Louise'
    $data[1]['nom']=>'DURAND'
    $data[1]['prenom']=>'Mickaël'

    et ainsi de suite... tant qu'il y a des résultats...

    Si l'on veut se passer de la double boucle à la construction, comme à la convocation du tableau, on utilise FETCH_ASSOC qui est bien pratique...

    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
    $sqlpdo=$connexion->query("SELECT etat,emplacement
     FROM datacamp_emplacement 
    WHERE date_deb_emp BETWEEN '$date_1' AND '$date_2' AND etat != ''
    ORDER BY emplacement DESC");
     
    $data=array();//initialise ton tableau 
     
    while ($row = $sqlpdo->fetch(PDO::FETCH_ASSOC))//pour chaque ligne, tu auras un tableau associatif avec les champs que tu as demandé dans le SQL
    {
       array_push($data,$row);//affecte ton tableau
    }
     
    $sqlpdo=NULL;//coupe la connexion
     
    echo '<pre>';//affiche ton tableau lisiblement pour le développeur
    print_r($data);
    echo '</pre>';
     
    //pour le convoquer en vue de construire un tableau HTML plus tard
    //ça commencera comme ça
    foreach($data as $row){
       echo $row['etat'].' '.$row['emplacement'].'<br/>';
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    Cool merci bcp Dendrite ! IMPECCABLE exactement ce que je cherchais à faire !

    Et de plus cela me permet d'avancer dans la connaissance des tableaux qui est fort basique...

    Encore merci à tous pour vos aides.

    Cordialement.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/12/2014, 17h36
  2. Requete en boucle si variable déjà présente dans BDD
    Par Augustule dans le forum Langage
    Réponses: 8
    Dernier message: 30/07/2010, 22h48
  3. Requete parametrée dans BdD
    Par kabil.cpp dans le forum Windows Forms
    Réponses: 9
    Dernier message: 26/08/2009, 12h45
  4. Réponses: 7
    Dernier message: 02/04/2004, 10h47
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 10h43

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