Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2011, 23h29   #1
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 154
Points : 16
Points : 16
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 :
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;
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/12/2011, 23h51   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
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
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 23h54   #3
Nouveau Membre du Club
 
Avatar de eaglesnipe
 
Homme Yoann Rousseau
Ingénieur Etudes et Développement
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Nom : Homme Yoann Rousseau
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 : 46
Points : 35
Points : 35
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 :
$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 !
eaglesnipe est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 22/12/2011, 00h01   #4
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 154
Points : 16
Points : 16
merci pour les réponses en double je vais testé sa et merci séb pour l'aide apporté sur les jointures
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 13h29   #5
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 154
Points : 16
Points : 16
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
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 13h37   #6
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 154
Points : 16
Points : 16
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
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/12/2011, 14h33   #7
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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 :
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>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/12/2011, 14h42   #8
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 154
Points : 16
Points : 16
je ne connaissais pas cette forme de requete ni le fetch all
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 14h56   #9
Nouveau Membre du Club
 
Avatar de eaglesnipe
 
Homme Yoann Rousseau
Ingénieur Etudes et Développement
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Nom : Homme Yoann Rousseau
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 : 46
Points : 35
Points : 35
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 !
eaglesnipe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 23h58   #10
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 154
Points : 16
Points : 16
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
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 08h27   #11
Nouveau Membre du Club
 
Avatar de eaglesnipe
 
Homme Yoann Rousseau
Ingénieur Etudes et Développement
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Nom : Homme Yoann Rousseau
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 : 46
Points : 35
Points : 35
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 :
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 !';
}
//...
eaglesnipe est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/12/2011, 09h26   #12
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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 :
1
2
3
4
$data = array();
if ( ! empty($data)) {
   foreach($data as $row) { ... }
}
est simplifiable en :
Code :
1
2
$data = array();
foreach($data as $row) { ... }
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/12/2011, 09h35   #13
Nouveau Membre du Club
 
Avatar de eaglesnipe
 
Homme Yoann Rousseau
Ingénieur Etudes et Développement
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Nom : Homme Yoann Rousseau
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 : 46
Points : 35
Points : 35
@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)
eaglesnipe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 19h20   #14
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 154
Points : 16
Points : 16
merci pour l'aide
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h38.


 
 
 
 
Partenaires

Hébergement Web