Page 1 sur 2

Carousel en PHP

Posté : 23 avr. 2021, 09:41
par JAG11
Bonjour
je cherche à faire un carrousel en PHP.
Je sais faire celui de BOOSTRAP mais j'aimerais que l’utilisateur puisse changer les images dont le lien serait stocker en BDD et l'image dans un dossier.

Après plusieurs recherches j'ai trouvé un post sur ce forum qui était indiqué comme résolu
Je l'ai adapté en fonction de ma BDD, mais j'ai encore un bug.

Code : Tout sélectionner

<!--Carroussel--> <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> <div class="carousel-inner"> <?php /*Extraction des données*/ $reponse = $db->query('SELECT * FROM t_carroussel ORDER BY Id ASC'); $counter = 1; while ($row = $reponse->fetch()) { ?> <div class="item<?php if ($counter <= 1) { echo " active"; } ?>"> <a href="<?php echo $row['Lien_image'] ?>" target="_blank"> <img alt="<?php echo $row['Legende_image'] ?>" src="/Carroussel/Normal/<?PHP echo $row['Lien_image'] ?>" /> </a> <div class="finlay-carousel-caption"> <h3><?php echo $row['Legende_image'] ?></h3> <p><?php echo $row['Legende_image'] ?></p> </div> </div> <?php $counter++; } ?> <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev"> <span class="ti-angle-left indicators-left" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next"> <span class="ti-angle-right indicators-right" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> </div> </div>
Erreur
rreur fatale: Erreur non interceptée: Appel à une fonction membre fetch () sur bool dans E: \ FFMO \ Utilisateur.php à la ligne 177
(!) Erreur: Appel à une fonction membre fetch () sur bool dans E: \ FFMO \ Utilisateur.php à la ligne 177
La ligne 177 correspond à

Code : Tout sélectionner

while ($row = $reponse->fetch()) {
J'avoue ne pas comprendre.
Pouvez m'aider encore une fois? merci

Re: Carousel en PHP

Posté : 23 avr. 2021, 11:57
par @rthur
Ce message d'erreur veut dire que $reponse est un booléen.
Quand c'est le cas, c'est souvent car une erreur a eu lieu là où tu initialises cette variable et du coup que ça a renvoyé false.

Pour faciliter le debugage des erreurs PDO, je te recommande d'utiliser la gestion d'erreur en mode PDO::ERRMODE_WARNING
https://www.php.net/manual/fr/pdo.error-handling.php

Re: Carousel en PHP

Posté : 28 avr. 2021, 15:25
par Shadowwera
Salut, dans ce genre de cas je serais plus tenter d'utiliser un foreach. Dans votre cas, cla ressemblerais à quelque chose du genre :
<?php
  $BDD = new BDD();
  $dbh = $BDD->getConnection();
  $stmt = $dbh->query('SELECT * FROM t_carroussel ORDER BY Id ASC');
  $counter = $stmt->rowCount();
  foreach($stmt as $row): ?>
<div <?php if($counter <= 1) echo 'class="active"'; ?> >
    <a href="<?= $row['Lien_image'] ?>" target="_blank">
        <img alt="<?= $row['Legende_image'] ?>" src="/Carroussel/Normal/<?= $row['Lien_image'] ?>" />
    </a>
    <div class="finlay-carousel-caption">
        <h3><?= $row['Legende_image'] ?></h3>
        <p><?= $row['Legende_image'] ?></p>
    </div>
</div>
<?php
  endforeach;
?>

Re: Carousel en PHP

Posté : 29 avr. 2021, 11:16
par JAG11
Bonjour Shadowwera , j'ai mis en pratique ton code ci-dessus....

Code : Tout sélectionner

<div id="carousel" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-inner"> <?php $stmt = $db->query('SELECT * FROM t_carroussel ORDER BY Id_carroussel ASC'); $counter = $stmt->rowCount(); foreach ($stmt as $row) : ?> <div <?php if ($counter <= 1) echo 'class="active"'; ?>> <a href="<?= $row['Lien_image'] ?>" target="_blank"> <img alt="<?= $row['Legende_image'] ?>" src="/Carroussel/<?= $row['Lien_image'] ?>" /> </a> <div class="finlay-carousel-caption"> <h3><?= $row['Legende_image'] ?></h3> <p><?= $row['Legende_image'] ?></p> </div> </div> <?php endforeach; ?> </div> </div>
...mais cela ne marche pas. Avec 3 images, j'ai 3 images et 3 Légendes affichées les uns au dessus des autres. Je n'ai pas de défilement.
Le code en HTML donne ceci

Code : Tout sélectionner

<div id="carousel" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-inner"> <div > <a href="Image/ffmo1619687406.png" target="_blank"> <img alt="Test image N°1" src="/Carroussel/Image/ffmo1619687406.png" /> </a> <div class="finlay-carousel-caption"> <h3>Test image N°1</h3> <p>Test image N°1</p> </div> </div> <div > <a href="Image/ffmo1619687436.png" target="_blank"> <img alt="Test image n°2" src="/Carroussel/Image/ffmo1619687436.png" /> </a> <div class="finlay-carousel-caption"> <h3>Test image n°2</h3> <p>Test image n°2</p> </div> </div> <div > <a href="Image/ffmo1619687473.png" target="_blank"> <img alt="Test image N°3" src="/Carroussel/Image/ffmo1619687473.png" /> </a> <div class="finlay-carousel-caption"> <h3>Test image N°3</h3> <p>Test image N°3</p> </div> </div> </div> </div>
Je remarque qu'il n' y a pas de div avec la classe "active". C'est peut être l'origine du problème?

Re: Carousel en PHP

Posté : 30 avr. 2021, 08:43
par Shadowwera
Salut JAG11,

Si tu affiche la variable $counter, que te retourne t'elle ?
Elle est supposé te donner le nombre d'entrée que tu as dans ta base `t_carroussel`, et lors de la première entrée ( if ($counter <= 1) ) alors la classe active lui est attribué (echo 'class="active")

S'il ne le fait pas, il doit y avoir soit un soucis avec la variable $counter, soit avec la condition

PS: Voici la doc concernant le rowCount()

Re: Carousel en PHP

Posté : 30 avr. 2021, 20:24
par JAG11
Bonsoir

le test sur la variable $counter renvoi 3 qui correspond à mon nombre d'image. Que faire ?

Re: Carousel en PHP

Posté : 04 mai 2021, 09:01
par Shadowwera
Salut !

D'accord je vois, dans ton cas le rowCount() ne servira donc pas
Remplace le par une incrémentation, initialise un $i = 1 avant le foreach, puis à la fin de ton foreach each tu l'incrémente $i++

Re: Carousel en PHP

Posté : 05 mai 2021, 12:04
par JAG11
Bonjour, j'ai appliqué ta remarque mais ça ne marche toujours pas. Voici le code:

Code : Tout sélectionner

<div id="carousel" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-inner"> <?php $stmt = $db->query('SELECT * FROM t_carroussel ORDER BY Id_carroussel ASC'); $i=1; foreach ($stmt as $row) : ?> <div <?php if ($i <= 1) echo 'class="active"'; ?>> <a href="<?= $row['Lien_image'] ?>" target="_blank"> <img alt="<?= $row['Legende_image'] ?>" src="/Carroussel/<?= $row['Lien_image'] ?>" /> </a> <div class="finlay-carousel-caption"> <h3><?= $row['Legende_image'] ?></h3> <p><?= $row['Legende_image'] ?></p> </div> </div> <?php $i++; endforeach; ?> </div>

Re: Carousel en PHP

Posté : 05 mai 2021, 12:14
par JAG11
En fait, je viens de le retravailler un peu pour le modifier comme ceci et là j'ai un défilement:

Code : Tout sélectionner

<div id="carousel" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-inner"> <?php $stmt = $db->query('SELECT * FROM t_carroussel ORDER BY Id_carroussel ASC'); $i = 1; foreach ($stmt as $row) : ?> <div <?php if ($i <= 1) echo 'class="carousel-item active"'; else echo 'class="carousel-item"' ?>> <img alt="<?= $row['Legende_image'] ?>" src="/Carroussel/<?= $row['Lien_image'] ?>" class="d-block w-100"> </a> <div class="finlay-carousel-caption"> <h3><?= $row['Legende_image'] ?></h3> <p><?= $row['Legende_image'] ?></p> </div> </div> <?php $i++; endforeach; ?> </div>
Il manquait
carousel-item
avec un else pour les ligne supérieurs à 1.

Ce qui en HTML donne ceci, plus proche du code BOOTSTRAP:

Code : Tout sélectionner

<div class="carousel-inner"> <div class="carousel-item active"> <a href="Normal/ffmo1619691050.png" target="_blank"> <img alt="Bienvenue sur le site de la FFMö" src="/Carroussel/Normal/ffmo1619691050.png" class="d-block w-100"> </a> <div class="finlay-carousel-caption"> <h3>Bienvenue sur le site de la FFMö</h3> <p>Bienvenue sur le site de la FFMö</p> </div> </div> <div class="carousel-item"> <a href="Normal/ffmo1619691091.png" target="_blank"> <img alt="Les 24 h du Mölkky" src="/Carroussel/Normal/ffmo1619691091.png" class="d-block w-100"> </a> <div class="finlay-carousel-caption"> <h3>Les 24 h du Mölkky</h3> <p>Les 24 h du Mölkky</p> </div> </div> <div class="carousel-item"> <a href="Normal/ffmo1619716741.png" target="_blank"> <img alt="Les Mölkkyades" src="/Carroussel/Normal/ffmo1619716741.png" class="d-block w-100"> </a> <div class="finlay-carousel-caption"> <h3>Les Mölkkyades</h3> <p>Les Mölkkyades</p> </div> </div> </div> </div>

Re: Carousel en PHP

Posté : 05 mai 2021, 12:17
par JAG11
Je viens de faire le test d'ajouter une image en BDD, ça fonctionne.

Re: Carousel en PHP

Posté : 05 mai 2021, 12:20
par JAG11
Merci beaucoup pour l'aide

Re: [RESOLU] Carousel en PHP

Posté : 05 mai 2021, 12:36
par JAG11
Le code corrigé type BOOTSTRAP

Code : Tout sélectionner

<!--carousel--> <div id="carousel" class="carousel slide carousel-fade" data-bs-ride="carousel"> <div class="carousel-inner"> <?php $stmt = $db->query('SELECT * FROM t_carroussel ORDER BY Id_carroussel ASC'); $i = 1; foreach ($stmt as $row) : ?> <div <?php if ($i <= 1) echo 'class="carousel-item active data-interval="1000"'; else echo 'class="carousel-item data-interval="1000"' ?>> <img alt="<?= $row['Legende_image'] ?>" src="/Carroussel/<?= $row['Lien_image'] ?>" class="d-block w-100"> </a> <div class="carousel-caption d-none d-md-block"> <h3><?= $row['Legende_image'] ?></h3> </div> </div> <?php $i++; endforeach; ?> </div> <button class="carousel-control-prev" type="button" data-bs-target="#carousel" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="visually-hidden">Previous</span> </button> <button class="carousel-control-next" type="button" data-bs-target="#carousel" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="visually-hidden">Next</span> </button> </div>

Re: [RESOLU] Carousel en PHP

Posté : 05 mai 2021, 12:36
par JAG11
Et encore un énorme merci

Re: [RESOLU] Carousel en PHP

Posté : 05 mai 2021, 15:20
par Shadowwera
Salut ! Ravi de t'avoir aidé !

Plutôt que d'écrire
<div <?php if ($i <= 1) echo 'class="carousel-item active data-interval="1000"';
else echo 'class="carousel-item data-interval="1000"' ?>>
Ecrit plutôt :
<div class="carousel-item<?php if ($i <= 1) echo ' active' ?> data-interval="1000">
Etant donné que tes classes carousel-item et data-interval="1000" sont constamment présente inutile le les inclure dans ton if :D

Re: [RESOLU] Carousel en PHP

Posté : 05 mai 2021, 15:54
par JAG11
J'ai essayé ça ne marche pas :non: