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 :

deux résultats avec une requête pdo [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut deux résultats avec une requête pdo
    Bonjour.

    Je tente de faire deux résultats dans une même requête.
    Le deuxième résultat, c'est d'avoir une liste de catégories
    pour en faire un menu.

    J'ai fais deux requêtes pour obtenir ce résultat.

    Voici mon image et 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
    58
    59
    60
    61
    62
     
    <?php
     
        $dbh = new PDO("mysql:host=localhost;dbname=philgalerie", 'root', '');
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
     
     
        $formulaire = $dbh->query("SELECT categorie FROM categorie");
        $formresultat = $formulaire->fetchAll();
        echo '<ul>';
        foreach($formresultat as $rowform)
        {
          echo '<li style="float:left;margin-left:30px"><a href="?catalog='.$rowform['categorie'].'">'.$rowform['categorie'].'</a></li>';
        }
      echo '</ul><br><br><br>';
     
      $categorie = isset($_GET['catalog']) ? $_GET['catalog'] : 'peinture' ;
     
        $stmt = $dbh->prepare('
                                                    SELECT
                                                        categorie.categorie,
                              users.id,
                                                        users.firstname,
                                                        users.lastname
                                                    FROM
                                                        categorie
                                                    INNER JOIN images ON categorie.id = images.categorieid
                                                    INNER JOIN users ON images.usersid = users.id
                                                    WHERE
                              categorie = :categorie
                                                    ORDER BY
                                                        categorie.id DESC,
                                                        users.id DESC
                           ');
     
      $stmt->bindValue(':categorie', $categorie, PDO::PARAM_STR);
      $stmt->execute();
     
      if (!$stmt->rowCount() == 0)
      {
     
          echo 'Total des enregistrements trouvés selon votre critère : '.$stmt->rowCount();
     
                $cat = "";
     
                while ($row = $stmt->fetchObject())
                {
                        if($row->categorie != $cat)
                        {
                            $cat = $row->categorie;
                            echo '<br><strong>'.$cat.'</strong>';
     
                        }
                        echo '<br>'.$row->firstname.' '.$row->lastname;
                }
      }
      else
      {
          echo 'Aucun enregistrement trouvé correspondant à votre requête.';
      }
    ?>
    Je suis bloqué à ce stade. C'est possible d'utiliser une seule requête?

    Ma prochaine étape serait de faire une pagination alors, je vais avoir
    à faire soit encore une requête ou un autre résultat.
    Images attachées Images attachées  
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ou es-tu "bloqué" exactement je ne comprends pas ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    J'ai deux requêtes. Je me demandais si je pouvais utiliser qu'une seule.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu utilises la deuxième sans la condition WHERE tu auras toutes les infos non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    J'ai vraiment besoin d'afficher les catégories et leurs contenus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     WHERE  categorie = :categorie
    Si je supprime, ça affiche tout mais je ne pourrai pas avoir par
    catégorie seul. J'ai testé. A moins qu'il y ait une autre façon.

    L'avantage tel qu’il est écrit, c'est que je peux ajouter d'autres détails.
    Comme vérifier s'il y a des catégories..

    Je tenais à savoir si c'était possible.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  6. #6
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    mais je ne pourrai pas avoir par
    catégorie seul
    Que veux-tu faire exactement ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Combiner mes deux requêtes pour en faire une seule.

    Mais, je vais mettre en AJAX la requête de donnée du contenu des
    catégories. Et par la suite paginer. Alors, j'aurais surement besoin
    de faire d'autres requêtes.

    Je voulais savoir si c'était possible de ne faire qu'une requête si je le voulais.

    Je tente de mettre en AJAX.

    Merci des réponses, c'est appréciés.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  8. #8
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Combiner mes deux requêtes pour en faire une seule.
    Oui ça j'avais bien compris mais pourquoi tu dis que la deuxieme requête seule ne réponds pas à ton besoin ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Le deuxième, fait apparaitre toutes les catégories.

    J'ai besoin de faire apparaitre que la catégorie choisie.

    Si j'enlève la clause WHERE, bien, je n'obtient pas le
    résultat souhaité.

    pour illustrer:

    Résultat avec la clause WHERE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Voici les catégories disponibles :
     
        Peinture
        Dessin
     
    Il y a 5 items dans cette catégorie :
     
    Peinture :jojo jjjjjojo jjjjjojo jjjjkiki lastkiki last
    Résultat sans la clause WHERE:
    ici, je ne veux que la catégorie choisie pas toutes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Voici les catégories disponibles :
     
        Peinture
        Dessin
     
    Il y a 8 items dans cette catégorie :
     
    Dessin :jo3jo jjjjjojo jjjjkiki last
     
    Peinture :jojo jjjjjojo jjjjjojo jjjjkiki lastkiki last
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  10. #10
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n'y a alors pas d'interet à faire une seule requête, les éléments souhaités ne sont pas communs aux deux requêtes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    A faire des tests, je constate la même chose.

    Pas évident d'inclure du Ajax pour mon code.

    c'est la partie url que j'ai de la misère.

    Je n'arrive pas à bien utiliser Ajax pour mon fichier pratique3.php
    qui lui utilise GET.

    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
     
    // Config for the javascript part
     
    var urlForPHP                 = "pratique3.php";
    var milsecondsTillRepeat     = 1000;
    var idForReplace            = "idForAJAXReplace";
     
    function startRefreshing()
    {
        setTimeout("startRefreshing()",milsecondsTillRepeat);
        reloadPHP();
    }
     
    /// the following code is based on http://www.w3schools.com/php/php_ajax_database.asp  but I shorted it quite some bit
    var xmlhttp;
     
    function reloadPHP()
    {
        xmlhttp=GetXmlHttpObject();
        if (xmlhttp==null)
        {
            alert ("Your Browser does not support HTTP Request");
            return;
        }
        var url=urlForPHP;
        url=url+"?catalog="+Math.random();
        xmlhttp.onreadystatechange=stateChanged;
        xmlhttp.open("GET",url,true);
        xmlhttp.send(null);
    }
     
    function stateChanged()
    {
        if (xmlhttp.readyState==4)
        {
        document.getElementById(idForReplace).innerHTML=xmlhttp.responseText;
        }
    }
     
    function GetXmlHttpObject()
    {
    if (window.XMLHttpRequest)
      {
      // code for IE7+, Firefox, Chrome, Opera, Safari
      return new XMLHttpRequest();
      }
    if (window.ActiveXObject)
      {
      // code for IE6, IE5
      return new ActiveXObject("Microsoft.XMLHTTP");
      }
    return null;
    }
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  12. #12
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    stateChanged est une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     xmlhttp.onreadystatechange=stateChanged();
    idForReplace n'est pas défini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(idForReplace).innerHTML=xmlhttp.responseText;
    Regarde les erreurs Javascript dans ton navigateur quand tu fais du Javascript
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    En javascript, je suis débutant et ce code c'est un exemple que j'ai pris.
    J'essaie plus de faire de quoi basique pour ensuite, l'évoluer.

    J'ai beau regarder .. je passe plusieurs heure à voir des tutos.

    ça me prends de quoi de basique pour commencer.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  14. #14
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    J'ai trouvé quelque chose qui fonctionne et que j'ai légèrement modifié.
    Ça fonctionne bien avec un formulaire mais je souhaite plus avoir des
    liens créé dynamiquement.

    J'ai créé un lien (ligne 47) mais je ne sais pas comment le faire pour remplacer le formulaire.


    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
     
    <html>
    <head>
    <script>
            function showUser(str)
            {
            if (str=="")
            {
                document.getElementById("txtHint").innerHTML="";
                return;
            }
            if (window.XMLHttpRequest)
            { // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else
            { // code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function()
            {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
                }
            }
            xmlhttp.open("GET","pratique4.php?catalog="+str,true);
            xmlhttp.send();
            }
    </script>
    </head>
    <body>
     
    <?php
        $dbh = new PDO("mysql:host=localhost;dbname=philgalerie", 'root', '');
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
     
        $formulaire = $dbh->query("SELECT categorie FROM categorie");
        $formresultat = $formulaire->fetchAll();
     
      if (!$formulaire->rowCount() == 0)
      {
                echo '<ul>';
                foreach($formresultat as $rowform)
                {
                    echo '<li style="float:left;margin-left:30px"><a href="JavaScript:ShowUser(this.value)">'.ucfirst($rowform['categorie']).'</a></li>';
                }
                echo '</ul><br>';
      }
      else
      {
          echo 'Aucune catégorie trouvée.';
      }
     
    ?>
     
    <form>
    <select name="users" onchange="showUser(this.value)">
    <option value="peinture">peinture</option>
    <option value="dessin">dessin</option>
    </select>
    </form>
    <br>
    <div id="txtHint"><b>Person info will be listed here.</b></div>
     
    </body>
    </html>
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  15. #15
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bonjour. J'ai besoin d'un avis éclairé.

    Que pensez-vous de mon 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?php session_start();
     
        $dbh = new PDO("mysql:host=localhost;dbname=asdf", 'root', '');
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
     
      $categorie = isset($_GET['catalog']) ? $_GET['catalog'] : 'peinture' ;
     
        $lenombre = $dbh->prepare("
                                                    SELECT
                                                        categorie.categorie,
                              users.id,
                                                        users.firstname,
                                                        users.lastname,
                                                        COUNT(*) AS nb
                                                    FROM
                                                        categorie
                                                    INNER JOIN images ON categorie.id = images.categorieid
                                                    INNER JOIN users ON images.usersid = users.id
                                                    WHERE
                              categorie = :categorie
                                                    ORDER BY
                                                        categorie.id DESC,
                                                        users.id DESC
                           ");
     
      $lenombre->bindValue(':categorie', $categorie, PDO::PARAM_STR);
      $lenombre->execute();
      while ($compte = $lenombre->fetchObject())
      { $_SESSION['compte'] = $compte->nb; } 
     
        $stmt = $dbh->prepare("
                                                    SELECT
                                                        categorie.categorie,
                              users.id,
                                                        users.firstname,
                                                        users.lastname
                                                    FROM
                                                        categorie
                                                    INNER JOIN images ON categorie.id = images.categorieid
                                                    INNER JOIN users ON images.usersid = users.id
                                                    WHERE
                              categorie = :categorie
                                                    ORDER BY
                                                        categorie.id DESC,
                                                        users.id DESC
                           ");
     
      $stmt->bindValue(':categorie', $categorie, PDO::PARAM_STR);
      $stmt->execute();
     
      if (!$stmt->rowCount() == 0)
      {
                $cat = "";
     
                while ($row = $stmt->fetchObject())
                { 
                        if($row->categorie != $cat)
                        {
                            $cat = $row->categorie;
                            echo 'Dans la catégorie «<strong>'.ucfirst($cat).'</strong>», il y en a <strong>'.$_SESSION['compte'].'</strong> :';
     
                        }
                        echo '<hr>'.$row->firstname.' '.$row->lastname;
                }
                echo '<hr>';
      }
      else
      {
          echo 'Aucun enregistrement trouvé correspondant à votre requête.';
      }
    ?>
    Je me suis senti obligé de faire deux requêtes préparées, le premier
    pour le nombre pour déterminer combien d'items au total dans la catégorie en question.

    Ici, je incertain mais ça marche bien. J'utilise une requête préparée
    pour une question de sécurité de la variable.

    La requête deux, c'est pour faire ressortir le résultat des requête en fonction des catégories.

    Mon fichier Ajax appelle le contenu de ce fichier. Et je me demande lors que je mettrai des liens pour la pagination, si ça va fonctionner.

    Merci d'avance pour vos avis.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

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

Discussions similaires

  1. [MySQL] Résultat insuffisant pour la différence deux dates avec une requête mysql
    Par onesat dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/08/2014, 13h14
  2. [PHP 5.3] Faire une classe avec une requête PDO
    Par dancom5 dans le forum Langage
    Réponses: 15
    Dernier message: 19/03/2014, 05h44
  3. Pb résultats d'une requête avec ou sans Recordset
    Par fredeau dans le forum Access
    Réponses: 3
    Dernier message: 24/04/2006, 14h07
  4. [MySQL] problème de résultat avec une requête
    Par jexl dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/03/2006, 23h23
  5. [SQL] Problème de résultat avec une requête
    Par raptorman dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/01/2006, 17h16

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