Bonjour, je travaille actuellement sur un système de note avec commentaire pour mon site internet, j'arrive à stocker ce dont j'ai besoin (note, commentaire, auteur) dans ma bdd via un formulaire sur une autre page et j'arrive aussi à récupérer le tout avec une boucle pour pouvoir faire un système ou les commentaires défile dans la page d'accueille, jusque la tout va bien mais il y a un mais..

Car malgré mes recherches je ne voie pas comment je peut sélectionné à la fois l'auteur et le commentaire associé dans la même ligne ou j'ai inclus un ID

Par exemple voici mon code :

<?php
// Connexion à la base de données
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=mabase;charset=utf8', 'root', 'root');
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

// On récupère le tout
$req = $bdd->query('SELECT id, auteur, commentaire, note FROM livredor ORDER BY note DESC LIMIT 0, 5');

while ($donnees = $req->fetch())
{
?>

<section class="testimonials_area section-padding">
    <div class="container">
        <div class="row">
            <div class="col-xs-12 col-sm-10 col-text-center">
                <div class="section-title text-center">
                    <h2 class="white-color">TÉMOIGNAGES</h2>
                    <hr class="white-bg t_underline"/>
                    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
                </div>
            </div>
        </div>
        <div class="row">
            <div id="testimonials_slider" class="owl-carousel owl-theme">
                <div class="item">
                    <div class="col-xs-12 col-sm-6">
                        <div class="single_testi">
                            <div class="testi_text">
                                <img src="images/testimonial/client1.png" alt="" />
                                <p><?php echo $donnees['commentaire'] ?></p>
                            </div>
                            <div class="testi_title">
                                <h5><?php echo $donnees['auteur'] ?></h5>
                            </div>
                        </div>
                    </div>
                    <div class="col-xs-12 col-sm-6">
                        <div class="single_testi">
                            <div class="testi_text">
                                <img src="images/testimonial/client2.png" alt="" />
                                <p><?php echo $donnees['commentaire'] ?></p>
                            </div>
                            <div class="testi_title">
                                <h5><?php echo $donnees['auteur'] ?></h5>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="item">
                    <div class="col-xs-12 col-sm-6">
                        <div class="single_testi">
                            <div class="testi_text">
                                <img src="images/testimonial/client3.png" alt="" />
                                <p><?php echo $donnees['commentaire'] ?></p>
                            </div>
                            <div class="testi_title">
                                <h5><?php echo $donnees['auteur'] ?></h5>
                            </div>
                        </div>
                    </div>
                    <div class="col-xs-12 col-sm-6">
                        <div class="single_testi">
                            <div class="testi_text">
                                <img src="images/testimonial/client4.png" alt="" />
                                <p><?php echo $donnees['commentaire'] ?></p>
                            </div>
                            <div class="testi_title">
                                <h5><?php echo $donnees['auteur'] ?></h5>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</section>

<?php
} // Fin de la boucle des billets
$req->closeCursor();
?>

J'ai plusieurs DIV ou chacune correspond à un commentaire (une sorte de bulle) je voudrais dans chaque DIV(Bulle) avoir un commentaire et un auteur différent et le tout dans l'ordre des 5 dernière meilleur note car la actuellement j'ai que la meilleur note qui s'affiche dans chaque bulle.

Merci à vous

12 réponses


SimonDevelop
Réponse acceptée

Normal, tu dois afficher ton code html (de t'es commentaires, notes, bulles, auteurs ect...) dans t'a boucle while php qu'une seul fois, car je vois que tu répète ça 5 fois, t'a boucle while vas répéter l'affichage des t'es commentaires avec les données des 5 commentaires que tu as récupérés dans ta requête précédemment.

Genre tu devrais faire ça:

<section class="testimonials_area section-padding">
    <div class="container">
        <div class="row">
            <div class="col-xs-12 col-sm-10 col-text-center">
                <div class="section-title text-center">
                    <h2 class="white-color">TÉMOIGNAGES</h2>
                    <hr class="white-bg t_underline"/>
                    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
                </div>
            </div>
        </div>
        <div class="row">
        <div id="testimonials_slider" class="owl-carousel owl-theme">

<?php
while ($donnees = $req->fetch())
{
?>
                <div class="item">
                    <div class="col-xs-12 col-sm-6">
                        <div class="single_testi">
                            <div class="testi_text">
                                <img src="images/testimonial/client1.png" alt="" />
                                <p><?php echo $donnees['commentaire'] ?></p>
                            </div>
                            <div class="testi_title">
                                <h5><?php echo $donnees['auteur'] ?></h5>
                            </div>
                        </div>
                    </div>

<?php
} // Fin de la boucle des billets
?>
    </div>
</section>

Pour t'es images client1, client2 ect, tu peux gérer le chiffre de l'image avec une variable comme compteur.
PS: il se peut que j'ai oublier des </div>, essaye de bien séparer avec des espace chaque item car quand tu collle tout t'es très vite perdu.

Ah merci ! effectivement la boucle duplique le html autant de fois que j'ai demandé, cela mavais echapé..

Par contre la

<div class="item">

affiche un bouton pour selectionner la bulle dans le slider

Exemple : http://bootstrap.twit.free.fr/tutov3_3/carousel03.html au milieu en bas

Dans le html de base il y a un ITEM pour deux bulles, hors la j'ai pas trop le choix de faire 1 item par bulle..

Une solution à me proposer ?

Voici mon code actuel :

// On récupère le tout
$req = $bdd->query('SELECT id, auteur, commentaire, note FROM livredor ORDER BY note DESC LIMIT 0, 5');

?>

    <section class="testimonials_area section-padding">
        <div class="container">

            <div class="row">
                <div class="col-xs-12 col-sm-10 col-text-center">
                    <div class="section-title text-center">
                        <h2 class="white-color">TÉMOIGNAGES</h2>
                        <hr class="white-bg t_underline"/>
                        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
                    </div>
                </div>
            </div>

            <div class="row">
                <div id="testimonials_slider" class="owl-carousel owl-theme">
<?php
while ($donnees = $req->fetch())
{
?>

                    <div class="item">
                        <div class="col-xs-12 col-sm-6">
                            <div class="single_testi">
                                <div class="testi_text">
                                    <img src="images/testimonial/client1.png" alt="" />
                                    <p><?php echo $donnees['commentaire'] ?></p>
                                </div>
                                <div class="testi_title">
                                    <h5><?php echo $donnees['auteur'] ?></h5>
                                </div>
                            </div>
                        </div>
                    </div>
    <?php
} // Fin de la boucle
?>
                </div>
            </div>

        </div>
    </section>

Tu joue avec une variable en tant que compteur et une condition pour gérer tout les 2 tours.

Merci de ta reponse mais sur le coup je ne voie pas dutout comment faire, j'ai apris recement le php donc je ne suis pas a l'aise dutout avec les boucles et les conditions.. ce que j'ai posté ici est tiré de tutos a droite a gauche et le theme viens de bootstrap..

Ta boucle while répète ton code que tu as mis à l'intérieur.
Sauf ton objet $donnees qui contient les données récupérées dans ta requête précédemment, limité à 5 d'ailleurs, donc t'a boucle while se répète 5 fois.

Tu as juste à ajouter un compteur comme par exemple $compteur = 0; avant t'a boucle while et dans ta boucle while mettre au début $compteur++; pour augmenter le nombre de ta variable, et c'est grace à ça que tu peux mettre dans ta boucle while une conditon if, par exemple si $compteur = 2 alors tu fait un echo de la fermeture de la div etc...

C'est la base quand même, je n'est pas envie de faire tout ton code car d'un côté c'est pas mon boulot, et tu risque de rien appendre si tu pratique pas assé, je t'es donné toute les clés pour réussir àa résoudre ton problème.

Vraiment sympa de ta part tout ces informations mais apres plusieurs heures de combat je ne parviens pas à afficher 2 bulles pas page comme d'origine.. j'ai decortiqué le php dans tout les sens et j'ai essayer de voir coté css mais en vain..

Voici mon code actuel :

<?php
// Connexion à la base de données
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=mabase;charset=utf8', 'root', 'root');
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

// On récupère le tout
$req = $bdd->query('SELECT id, auteur, commentaire, note FROM livredor ORDER BY note DESC LIMIT 0, 5');

?>

    <section class="testimonials_area section-padding">
        <div class="container">

            <div class="row">
                <div class="col-xs-12 col-sm-10 col-text-center">
                    <div class="section-title text-center">
                        <h2 class="white-color">TÉMOIGNAGES</h2>
                        <hr class="white-bg t_underline"/>
                        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
                    </div>
                </div>
            </div>

            <div class="row">
                <div id="testimonials_slider" class="owl-carousel owl-theme">
<?php
$Compteur = 0;
for ($donnees = $req->fetch(); $Compteur <= 2; $Compteur++)
{
?>

                    <div class="item">
                        <div class="col-xs-12 col-sm-6">
                            <div class="single_testi">
                                <div class="testi_text">
                                    <img src="images/testimonial/client1.png" alt="" />
                                    <p><?php echo $donnees['commentaire'] ?></p>
                                </div>
                                <div class="testi_title">
                                    <h5><?php echo $donnees['auteur'] ?></h5>
                                </div>
                            </div>
                        </div>
                    <?php if ($Compteur = 2) { echo '</div>'; } ?>
<?php
} // Fin de la boucle
?>

            </div>
        </div>
    </section>

Tu dois garder t'a boucle while, et jouer avec ton $compteur++ avec des conditions dans ta boucle.
Je n'est jamais dis qu'il fallait le faire avec une boucle for.

Effectivement il y a mieux a faire

J'en suis ici


        <div class="row">
            <div id="testimonials_slider" class="owl-carousel owl-theme">

                <div class="item">
<?php
$Compteur = 0;
while ($donnees = $req->fetch())
{
?>
    <?php $Compteur++ ?>
                    <div  class="col-xs-12 col-sm-6">
                        <div class="single_testi">
                            <div class="testi_text">
                                <img src="images/testimonial/client1.png" alt="" />
                                <p><?php echo $donnees['commentaire'] ?></p>
                            </div>
                            <div class="testi_title">
                                <h5><?php echo $donnees['auteur'] ?></h5>
                            </div>
                        </div>
                    </div>

    <?php if ($Compteur = 2) { echo '</div>'; } ?>

                <?php
                } // Fin de la boucle
                ?>
            </div>
            </div>
</section>

Je pense que le code est correctement fait mais il y a un gros probleme d'affichage.. les div se decale sans prendre en compte la div dans mon echo car depuis PhpStorm les codes couleur m'indique que la DIV class="row" et la DIV id= "Testimo..." sont relié a la dernière DIV juste au dessus de section

Moi je met mes balises html que je veux dupliqué dans un echo, qui lui se répète dans ta boucle while.
Certe c'est moche, mais ça marche x')

Effectivement c'est moi qui a du mal a en venir a bout mais on avance (grace a toi) c'est deja tres bien ! j'en suis ici

       <div class="row">
            <div id="testimonials_slider" class="owl-carousel owl-theme">

                <div class="item">
<?php
$Compteur = 0;
while ($donnees = $req->fetch())
{
?>
    <?php $Compteur++ ?>
                    <div  class="col-xs-12 col-sm-6">
                        <div class="single_testi">
                            <div class="testi_text">
                                <img src="images/testimonial/client1.png" alt="" />
                                <p><?php echo $donnees['commentaire'] ?></p>
                            </div>
                            <div class="testi_title">
                                <h5><?php echo $donnees['auteur'] ?></h5>
                            </div>
                        </div>
                    </div>

    <?php if ($Compteur == 2) { echo '</div>'; } ?>

                <?php
                } // Fin de la boucle
                ?>
            </div>
            </div>
</section>

En fait la chose qui me bloqué cest le fait qu'il faut mettre un double egal à mon ($Compteur ==2) donc maintenant ça fontionne mais j'ai que deux commentaires sur la premiere page et les suivantes toujours 1 seul par page.

Tu réinitialise ton compteur à 0 dans ta condition:

<?php
if ($Compteur == 2) {
echo '</div>'; 
$Compteur = 0 ;
}
?>

Ca fonctionne correctement ! merci a toi le sujet est sur-résolut dans ce cas ;) un grand merci !