Page 1 sur 1

Afficher le nombre de données

Posté : 07 janv. 2021, 21:39
par jeremygoldyn
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 !

Re: Afficher le nombre de données

Posté : 07 janv. 2021, 21:45
par jeremygoldyn
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>

Re: Afficher le nombre de données

Posté : 07 janv. 2021, 22:41
par or 1
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.

Re: Afficher le nombre de données

Posté : 08 janv. 2021, 14:52
par jeremygoldyn
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 !

Re: Afficher le nombre de données

Posté : 08 janv. 2021, 15:01
par or 1
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.

Re: Afficher le nombre de données

Posté : 08 janv. 2021, 16:27
par jeremygoldyn
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.

Re: Afficher le nombre de données

Posté : 09 janv. 2021, 11:07
par jeremygoldyn
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 !

Re: Afficher le nombre de données

Posté : 09 janv. 2021, 14:37
par or 1
SELECT l.lieu_nom FROM lieux
exécuté dans phpmyadmin, cela donne quoi ?

Re: Afficher le nombre de données

Posté : 09 janv. 2021, 22:25
par jeremygoldyn
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

Re: Afficher le nombre de données

Posté : 09 janv. 2021, 22:36
par jeremygoldyn
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 ?

Re: Afficher le nombre de données

Posté : 09 janv. 2021, 22:39
par or 1
en enlevant print($result); qui ne sert qu'à débuguer.

Re: Afficher le nombre de données

Posté : 09 janv. 2021, 22:44
par jeremygoldyn
Ca maaaaaarche ! :D
Merci tu es trop top !!!!!

Re: [RESOLU] Afficher le nombre de données

Posté : 09 janv. 2021, 22:54
par or 1
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.

Re: [RESOLU] Afficher le nombre de données

Posté : 10 janv. 2021, 10:00
par jeremygoldyn
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 !