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 :

requête qui ne renvoie qu'une donnée


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 295
    Points : 71
    Points
    71
    Par défaut requête qui ne renvoie qu'une donnée
    Bonsoir,

    grâce a séb j'ai pu faire un moteur de recherche mais j'ai un problèmes,

    quand je tests mon moteur la requête me renvoie qu'une valeur alors que si je tests dans phpmyadmin il me renvoie bien les lignes que je recherche,je vois pas ou peut se trouver le problèmes

    merci pour votre aide

    Code php : 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
    <?php   
     
    $query = $db->prepare("SELECT nom,prix,lien,image,designation
    						FROM articles
    						INNER JOIN types ON id_articles = id_types
    						WHERE nom LIKE '%$recherche%'");
     
    $query->bindvalue(':recherche',$recherche, pdo::PARAM_STR);
    $query->execute() or die(print_r($query->errorInfo()));
    $data = $query->fetch();
    print_r($data);
     
    ?>
    <h3>Résultats de votre recherche.</h3>
     
     
     
    	<br/>
     
     
     
     
              <table>
                         <tr>
                                  <th class="lien">image cliquable</th>
    				 <th class="nom">nom</th>
    				 <th class="prix">prix</th>
    			        <th class="lien">lien</th>
    				 <th class="des">designation</th>
     
    			</tr>
    	   </table>	
    <?php
     
        switch ($mode)
     
       {	
     
           case "manga":
     
     
                                    echo'<td class="lien"><center>
                                   <a href="'.$data['lien'].'"<img src="../image/image /'.$data['image'].'" alt="image de l\'article" />
    				<a href="'.$data['lien'].'"<img src="../image/image/'.$data['image'].'" alt="image de l\'article" /></td>
    				<td class="nom"><center>'.$data['nom'].'</center>
    				<td class="nom"><center>'.$data['nom'].'</center></td><br/>
    				<td class="nom"><center>'.$data['prix'].'€</center>
    				<td class="nom"><center>'.$data['prix'].'€</center></td>
    				<td class="lien"><center>
    				<a href="'.$data['lien'].'"></a></center></td>
    				<a href="'.$data['lien'].'"></a></center></td>
    				<td class="des"><center>'.$data['designation'].'</center>  
    				<td class="des"><center>'.$data['designation'].'</center></td>';
     
     
        break;

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 201
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 201
    Points : 8 426
    Points
    8 426
    Billets dans le blog
    17
    Par défaut
    PDOStatement::fetch( ) ne retourne qu'un enregistrement à la fois.
    Pour parcourir l'ensemble du jeu de résultats il faut appeler fetch tant qu'elle ne retourne pas FALSE.

    Pour récupérer tout d'un coup tu peux utiliser PDOStatement::fetchAll( ).

    http://fr2.php.net/manual/fr/pdostatement.fetch.php
    http://fr2.php.net/manual/fr/pdostatement.fetchall.php

  3. #3
    Membre régulier Avatar de eaglesnipe
    Homme Profil pro
    Ingénieur Etudes et Développement
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes et Développement
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    Bonsoir,

    http://php.net/manual/fr/pdostatement.fetch.php
    http://www.php.net/manual/fr/pdostatement.fetchall.php

    La méthode fetch permet de ne récupérer qu'un unique enregistrement.
    Pour récupérer un jeu d'enregistrements, utilise la fonction fetchAll, ça devrait regler le problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data = $query->fetchAll();
    EDIT : Erf, y'a eu plus rapide que moi ! ^^ Mais l'essentiel, c'est qu'on suggère la même solution...

    Bonne soirée !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 295
    Points : 71
    Points
    71
    Par défaut
    merci pour les réponses en double je vais testé sa et merci séb pour l'aide apporté sur les jointures

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 295
    Points : 71
    Points
    71
    Par défaut
    alors le fetchall me sort bien mes données mais de la ligne 43 a 53 me donne un indefini index,si je met le fetch complet a un while, il me donne bien se que je demande mais en double et sur différente colonne voir l'image,



    je voudrais que mes données soit dans un mêmes tableau,pour info il y a qu'un seul nom du manga son neuf et son occasion

    merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 295
    Points : 71
    Points
    71
    Par défaut
    personne pour m'aider sur comment faire fonctionner le fetchall car sur le net c'est pas très précis

    merci et joyeux noel

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    J'ai repris ton code, (il faut être un peu plus rigoureux quand même)
    Tu verras par toi-même le fonctionnement de fetchAll()
    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
    <?php
     
    $sql = "
    SELECT
       nom,prix,
       lien,
       image,
       designation
    FROM
       articles
          INNER JOIN types ON id_articles = id_types
    WHERE
       nom LIKE '%" . mysql_real_escape_string($recherche) . "%'";
     
    $query = $db->prepare($sql);
     
    $query->bindvalue(':recherche', $recherche, pdo::PARAM_STR);
    $query->execute() or die(print_r($query->errorInfo()));
    $data = $query->fetchAll();
    ?>
    <h3>Résultats de votre recherche.</h3>
    <br/>
    <table>
       <thead>
          <tr>
             <th class="lien">image cliquable</th>
             <th class="nom">nom</th>
             <th class="prix">prix</th>
             <th class="lien">lien</th>
             <th class="des">designation</th>
          </tr>
       </thead>
       <tbody>
       <?php foreach($data as $row): ?>
          <tr>
             <?php if ($mode === 'manga'): ?>
             <td class="lien"><center><a href="<?php echo $row['lien']; ?>"><img src="../image/image/<?php echo $row['image']; ?>" alt="image de l'article" /></a></center></td>
             <td class="nom"><center><?php echo $row['nom']; ?></center></td>
             <td class="nom"><center><?php echo $row['prix']; ?> €</center></td>
             <td class="lien"><center><a href="<?php echo $row['lien']; ?>"></a></center></td>
             <td class="des"><center><?php echo $row['designation']; ?></center></td>
             <?php elseif ($mode === 'abc'): ?>
     
             <?php endif; ?>
          </tr>
       <?php endforeach; ?>
       </tbody>
    </table>

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 295
    Points : 71
    Points
    71
    Par défaut
    je ne connaissais pas cette forme de requete ni le fetch all

  9. #9
    Membre régulier Avatar de eaglesnipe
    Homme Profil pro
    Ingénieur Etudes et Développement
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes et Développement
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par arckaniann Voir le message
    je ne connaissais pas cette forme de requete ni le fetch all
    Le fetchAll renvoie un ensemble de résultats, sous forme d'un tableau, il parait donc logique de mettre en place une boucle pour les parcourir...

    Faut avoir le réflexe de parcourir la doc sur php.net lorsqu'on n'obtient pas le résultat escompté... La solution est rarement bien loin..

    Bonnes fêtes à tous et toutes !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 295
    Points : 71
    Points
    71
    Par défaut
    merci beaucoup pour votre aide si précieuse,mon moteur de recherche fonctionne a merveille par contre j'aurais voulu mettre une phrase quand il y a pas de recherche mais je n'y arrive pas

  11. #11
    Membre régulier Avatar de eaglesnipe
    Homme Profil pro
    Ingénieur Etudes et Développement
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes et Développement
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    FetchAll retournant un tableau (de résultats), s'il n'y en a pas, le tableau retourné par la fonction sera donc vide. Il suffit alors d'effectuer un traitement sur cette condition particulière.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //...
    $query->execute() or die(print_r($query->errorInfo()));
    $data = $query->fetchAll();
     
    if (!empty($data)){
         // Traitements relatifs aux données
    } else {
        echo 'Aucun résultat !';
    }
    //...

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par eaglesnipe Voir le message
    FetchAll retournant un tableau (de résultats), s'il n'y en a pas, le tableau retourné par la fonction sera donc vide. Il suffit alors d'effectuer un traitement sur cette condition particulière.
    Pas du tout nécessaire. Utiliser directement foreach() sur un jeu de données vide produira le même effet que empty() (la boucle ne sera jamais exécutée). Donc, pas besoin dans ce cas d'intercepter un tableau vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $data = array();
    if ( ! empty($data)) {
       foreach($data as $row) { ... }
    }
    est simplifiable en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data = array();
    foreach($data as $row) { ... }

  13. #13
    Membre régulier Avatar de eaglesnipe
    Homme Profil pro
    Ingénieur Etudes et Développement
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes et Développement
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    @rawsrc

    En effet, le résultat sera similaire dans la mesure ou la portion de code de traitement des données ne sera pas exécutée.

    En revanche, ce que cherche à faire arckaniann est de pouvoir marquer un message particulier lorsqu'il n'obtient aucun résultats sur sa requête. Se contenter de laisser un foreach permettra en effet de ne pas traiter le jeu de données puisque la boucle ne sera pas exécutée, mais ne permettra par contre pas d'afficher un message spécifique, d'où l'utilité de ce petit test supplémentaire...

    A moins qu'il existe en PHP un équivalent à for: else: de Python que je ne connaîtrais pas ?? (mais dans ce cas je suis preneur ! :-D)

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 295
    Points : 71
    Points
    71
    Par défaut
    merci pour l'aide

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

Discussions similaires

  1. Un getter qui ne renvoie qu'une fois les données pas à chaque fois
    Par tonytrua dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 17/12/2011, 22h05
  2. requête qui me renvoie des 0
    Par ballantine's dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/02/2010, 12h09
  3. [SQL-Server] Requête qui ne renvoie rien PHP5 et SQL SERVER 2000
    Par Sytchev3 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/05/2009, 09h46
  4. Réponses: 5
    Dernier message: 18/07/2008, 11h52
  5. [ODBC] Connection pour MSSQL qui ne renvoie pas de données
    Par Jabbal'H dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/07/2007, 17h10

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