[RESOLU] Afficher le nombre de données

Eléphant du PHP | 61 Messages

07 janv. 2021, 21:39

Hello tout le monde,

J'essaie d'afficher un nombre (le nombre de lieux à visiter) provenant de ma base de données mais je n'y arrive pas.
Au moment ou j'affiche la ligne suivante de code, toutes les vignettes disparaissent ; voir image ici : https://drive.google.com/file/d/1KTmk83 ... sp=sharing

Image de la base données: https://drive.google.com/file/d/1xrHsPw ... sp=sharing

Code : Tout sélectionner

<div class="textelieu"> <?php $reponse = $bdd->query('SELECT COUNT * FROM lieu_ID'); ?></div>
Si je la retire, tout fonctionne mais je n'ai pas le nombre de lieux.

Photo normale du projet: https://drive.google.com/file/d/1vI0oq2 ... sp=sharing

code complet:

Code : Tout sélectionner

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="styleR.css" /> <title>Visit Earth</title> </head> <body> <div id="bloc_page"> <header> <p><img src="img/logo.png" alt="logo" id="logo"></p> <h1>Découvrez les meilleures choses à voir et à faire dans les Monde. </h1><br /> </header> <?php try { // On se connecte à MySQL $bdd = new PDO('mysql:host=localhost;dbname=visitearth;charset=utf8', 'root', 'root'); } catch(Exception $e) { // En cas d'erreur, on affiche un message et on arrête tout die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT l.comte_nom, l.lieu_nom, l.pays_nom, p.flag_nom, l.lieu_url FROM lieux l LEFT JOIN pays p ON l.pays_nom = p.pays_nom LIMIT 56'); ?> <div id="filters"> <div class="labeltheme"> <div>Thèmes</div> <select name="lieux"> <option value="lieux" class= "boxtheme" selected>Lieux à découvrir</option> </select></div> <div class="labelpays"> <div>Pays</div> <select name="pays"> <option value="<?php echo $donnees['pays_nom']; ?>"></option> </select></div> <div> <div class="labeltype">Types</div> <select name="tri"> <option value="montagne" selected>Montagnes</option> </select></div> </div> <br> <br /> <div class="textelieu"> <?php $reponse = $bdd->query('SELECT COUNT * FROM lieu_ID'); ?></div> <div class="titrelieu">ENDROITS À DÉCOUVRIR</p></div> <?php while ($donnees = $reponse->fetch()) { ?> <div class="vignette"> <img src="<?php echo $donnees['lieu_url']; ?>" alt="Lieu" class="imglieu"/> <div class="overlay"></div> <div class="lieu"><?php echo $donnees['lieu_nom']; ?></div> <div class="pays"><?php echo $donnees['pays_nom']; ?>, <?php echo $donnees['comte_nom']; ?></div> <img src="<?php echo $donnees['flag_nom']; ?>" alt="drapeau" class="flag"/> </div> <?php } ?> </body> </html>
Une idée de pourquoi ?
Merci !

Eléphant du PHP | 61 Messages

07 janv. 2021, 21:45

UPDATE**

J'ai essayé aussi ceci (ca me parait peut etre plus logique).
Mais ca n'affiche toujours pas de résultats.

Code : Tout sélectionner

<div class="textelieu"> <?php echo $donnees['COUNT lieu_ID']; ?></div>

Mammouth du PHP | 2703 Messages

07 janv. 2021, 22:41

https://www.php.net/manual/fr/pdostatement.fetchall.php pour récupérer le résultat de la bonne requête sous la forme d'un tableau.
https://www.php.net/manual/fr/function.count.php pour avoir le nombre d'éléments du tableau.

Eléphant du PHP | 61 Messages

08 janv. 2021, 14:52

Hello Or1 !

Merci pour ta réponse.

J'ai fait ceci :

Code : Tout sélectionner

<div class="textelieu"> <?php $nombre_de_lieux = array('l.lieu_ID'); echo count($nombre_de_lieux)?> ENDROITS À DÉCOUVRIR</div>
Et là, ca m'affiche le résultat 1 !
Je suis déjà content :p

Mais bon c'est pas le bon nombre :lol:

Au début de mon code j'ai déjà appelé la base de données mais pas avec "prepare" mais avec "bdd--> quesry".

Du coup j'ai essayé de faire le truc avec le tableau du premier lien que tu as envoyé en mettant le code comme ceci dedans mais je me doute qu'il doit y avoir une erreur vu que plus rien ne s'affiche :

Code : Tout sélectionner

<div class="textelieu"> <?php $sth = $dbh->prepare("SELECT lieu_ID FROM lieux"); $sth->execute(); $result = $sth->fetchAll(); print_r($result); $nombre_de_lieux = array('l.lieu_ID'); echo count($nombre_de_lieux)?> ENDROITS À DÉCOUVRIR</div>
Merci de ton aide !

Mammouth du PHP | 2703 Messages

08 janv. 2021, 15:01

print_r($result);
n'affiche rien ?
le résultat de la requête est dans $result
c'est donc dans count($result) que l'on a le nombre de résultat.

Eléphant du PHP | 61 Messages

08 janv. 2021, 16:27

Je ne suis pas sur de comprendre.

Si je fais juste ceci:

Code : Tout sélectionner

<div class="textelieu"> <?php $sth = $dbh->prepare("SELECT lieu_ID FROM lieux"); $sth->execute(); $result = $sth->fetchAll(); print_r($result); ?> ENDROITS À DÉCOUVRIR</div>
Je n'ai plus aucun résultats.

Je dois faire quoi ?

Merci.

Eléphant du PHP | 61 Messages

09 janv. 2021, 11:07

Hello Or1,

J'ai travaillé sur ce point car j'ai mieux compris comment utiliser les requêtes SQL dans PHP grâce à l'exemple avec les filtres.

Du coup, au lieu de prendre un exemple tout fait, j'ai essayé de travailler avec ce que j'avais déjà.
Je voulais compter le nombre d'ID dans ma colonne (du moins c'est ce que j'aimerais faire) mais je vais travailler avec le nombre de lieu car au moins c'est déjà présent dans la requête de base.

J'ai essayé ceci mais ca ne fonctionne pas (plus rien ne s'affiche).

Ma requete de base

Code : Tout sélectionner

$reponse = $bdd->query('SELECT l.comte_nom, l.lieu_nom, l.pays_nom, p.flag_nom, l.lieu_url FROM lieux l LEFT JOIN pays p ON l.pays_nom = p.pays_nom LIMIT 630');

Code : Tout sélectionner

<div class="textelieu"> <?php $requete = 'SELECT l.lieu_nom FROM lieux'; $nombre_de_lieux = $bdd->query($requete); $result = $nombre_de_lieux->fetchAll(); print_r($result); echo count($result)?> ENDROITS À DÉCOUVRIR</div>
Tu sais me dire pourquoi ?
Merci !

Mammouth du PHP | 2703 Messages

09 janv. 2021, 14:37

SELECT l.lieu_nom FROM lieux
exécuté dans phpmyadmin, cela donne quoi ?

Eléphant du PHP | 61 Messages

09 janv. 2021, 22:25

Salut Or1,

J'ai testé la requête dans SQL et il y avait une erreur.
l.lieu_nom était pas bon.
J'ai remplacé par "lieu_nom" simplement.
Du coup il m'affiche tous les lieux avec Array devant.
Voir affichage ici: https://drive.google.com/file/d/1KptMSG ... sp=sharing

Code:

Code : Tout sélectionner

<div class="textelieu"> <?php $requete = 'SELECT lieu_nom FROM lieux'; $nombre_de_lieux = $bdd->query($requete); $result = $nombre_de_lieux->fetchAll(); print_r($result); echo count($result)?> ENDROITS À DÉCOUVRIR</div>
Mais à la fin il affiche bien le chiffre "633" !

voir ici: https://drive.google.com/file/d/1m0m-G6 ... sp=sharing

Eléphant du PHP | 61 Messages

09 janv. 2021, 22:36

UPDATE:

Ah en faisant ca j' y arrive presque.
J'ai mis "print" au lieu de "print_r" et la ligne de "close cursor" à la fin.

Code : Tout sélectionner

<div class="textelieu"> <?php $requete = 'SELECT lieu_nom FROM lieux'; $nombre_de_lieux = $bdd->query($requete); $result = $nombre_de_lieux->fetchAll(); print($result); echo count($result); $nombre_de_lieux->closeCursor(); ?> ENDROITS À DÉCOUVRIR</div>
Mais il y a le mot "array" random qui est là.
Comment l'enlever ?

Mammouth du PHP | 2703 Messages

09 janv. 2021, 22:39

en enlevant print($result); qui ne sert qu'à débuguer.

Eléphant du PHP | 61 Messages

09 janv. 2021, 22:44

Ca maaaaaarche ! :D
Merci tu es trop top !!!!!

Mammouth du PHP | 2703 Messages

09 janv. 2021, 22:54

procéder ainsi pour obtenir seulement le nombre de lieux n'est pas optimisé. une requête sql avec un count est un choix plus judicieux. l’intérêt du fetchall, c'est de faire la requête qui permet l'affichage du résultat, et en plus d'afficher le nombre de lieux.

Eléphant du PHP | 61 Messages

10 janv. 2021, 10:00

Ah ! Mais du coup il faudrait écrire quoi ?
La meme chose ne enlevant le FetchAll ?
PS: je compte faire un affichage dynamique.
Il serait possible de montrer X résultats sur 633 ?
Comment devrais je faire ca ?
(d'abord je vais essayer de résoudre la pagination; voir autre topic ;-)).
Merci !