IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Afficher des commentaires en plusieurs fois


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Points : 86
    Points
    86
    Par défaut Afficher des commentaires en plusieurs fois
    Bonjour,
    j'aimerai afficher par exemple les commentaires de 5 en 5 et un bouton afficher la suite pour ajouter les 5 suivants
    ma question:
    c'est possible avec une requette mysql ou il faut du code?

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 413
    Points : 4 859
    Points
    4 859
    Par défaut
    Salut,

    Oui bien sûr que c'est possible si tu as une table mysql dans laquelle tu enregistre les données puis tu lances une requête avec un limit start , 5 dont start=0 au premier chargement de la page, puis à chaque fois que tu cliques sur suivant tu incrémentes le start de 5 pour arriver à limit 0 , 5, limit 5 , 5, limit 10 , 5 .... ET bien sûr un code serveur pour gérer la récupération des commentaires de la requête mysql.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Points : 86
    Points
    86
    Par défaut
    ok, merci je vais essayer

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Points : 86
    Points
    86
    Par défaut
    J'ai fait ce que vous préconisez et j'ai essayà d'incrémenter le limit avec une variable de 3 en 3 mais le premier passage ca marche et après ca ne marche plus, ca incrémente pas de 3?
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    $i = 0;
      $avis = $bdd -> query("SELECT * FROM avis WHERE id_ann_avis='$id' ORDER BY id_avis DESC LIMIT 0,3");
        while ($lavis = $avis -> fetch())
          //$image=$lavis['emo_avis'];
        {
          ?>
          //la je met les commentaires
          <?php 
         } 
       ?>
       <!--input type="submit" value="Avis suivants ->" name="go" /-->
       <?php
     
       $avis2 = $bdd -> query("SELECT * FROM avis WHERE id_ann_avis='$id' ORDER BY id_avis ");
       $compteuravis2=$avis2->rowCount();
       $compteuravis=$avis->rowCount();
       if($compteuravis>0 and ($compteuravis2!=$compteuravis)){
        ?>
        <form method="POST" action="visualiserAnnonce2.php?id=<?php echo $id;?>#commentaires">
          <input type="submit" name="go"  value="Avis suivants ->">
        </form> 
        <?php
      }else{
        ?>
        <input type="button" id="go" name="go" value="Avis suivants ->" style="display:none" />
        <?php
      }
     
          if(isset($_POST['go'])){
          $i=$i+3;
          $avis = $bdd -> query("SELECT * FROM avis WHERE id_ann_avis='$id' ORDER BY id_avis DESC limit 0,".$i."");
     
        while ($lavis = $avis -> fetch())
          //$image=$lavis['emo_avis'];
        {
          ?>
          //la je met les commentaires
           <?php 
         } 
       }
       ?>

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 413
    Points : 4 859
    Points
    4 859
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $avis = $bdd -> query("SELECT * FROM avis WHERE id_ann_avis='$id' ORDER BY id_avis DESC limit 0,".$i."");

    limit start , offset, la variable $i doit représenter le start et pas l'offset et c'est le start qui s'incrémente et le offset reste toujours à 3 si tu veux afficher 3 commentaires par 3.

    Donc la requête doit être comme suite :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $avis = $bdd -> query("SELECT * FROM avis WHERE id_ann_avis='$id' ORDER BY id_avis DESC limit ".$i." , 3 ");

    Une autre remarque, tes requêtes ne sont pas préparées, mais bon pour l'instant je ne vais pas te compliquer les choses...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Points : 86
    Points
    86
    Par défaut
    ok, merci

    j'ai essayé mais ça n'affiche que 3 commentaires même quand je clic sur le bouton? avant il y en avait 3 commentaires au début et quand je clic sur le bouton il y en a 6, mais le problème est que quand je clic encore il n'affiche pas les suivants? j'ai l'impression que le $i ne s'incrémente pas?

  7. #7
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 413
    Points : 4 859
    Points
    4 859
    Par défaut
    oui le $i ne s'incrémente pas, parce que à chaque fois tu appelle le script le $i = 0; s’initialise à 0 au début.

    il va falloir trouver un moyen pour sauvegarder la valeur de $i dans un input hidden de ton <form>.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Points : 86
    Points
    86
    Par défaut
    voilà le nouveau code mais ca marche toujours pas?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
     
      $avis = $bdd -> query("SELECT * FROM avis WHERE id_ann_avis='$id' ORDER BY id_avis DESC LIMIT 0,3");
        while ($lavis = $avis -> fetch())
          //$image=$lavis['emo_avis'];
        {
          ?>
          //ici les commentaires
          <?php 
         } 
       ?>
       <!--input type="submit" value="Avis suivants ->" name="go" /-->
       <?php
     
       $avis2 = $bdd -> query("SELECT * FROM avis WHERE id_ann_avis='$id' ORDER BY id_avis ");
       $compteuravis2=$avis2->rowCount();
       $compteuravis=$avis->rowCount();
       if($compteuravis>0 and ($compteuravis2!=$compteuravis)){
        ?>
        <form method="POST" action="visualiserAnnonce2.php?id=<?php echo $id;?>#commentaires">
          <input type="submit" name="go"  value="Avis suivants ->">
          <input type="hidden" name="vA" value="<?php echo $i=0; ?>"/>
        </form> 
        <?php
      }else{
        ?>
        <input type="button" id="go" name="go" value="Avis suivants ->" style="display:none" />
        <?php
      }
     
          if(isset($_POST['go'])){
          $i=$i+3;
          $avis = $bdd -> query("SELECT * FROM avis WHERE id_ann_avis='$id' ORDER BY id_avis DESC limit ".$i.",3");
     
        while ($lavis = $avis -> fetch())
          //$image=$lavis['emo_avis'];
        {
          ?>
          //ici les commentaires
           <?php 
         } 
       }
       ?>

  9. #9
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 413
    Points : 4 859
    Points
    4 859
    Par défaut
    tu n'as pas compris le principe.

    Peux-tu Exporter ta base de donnée dans un fichier .sql afin que je puisse tester ton code ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Points : 86
    Points
    86
    Par défaut
    voici la tableavis.sql

  11. #11
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 413
    Points : 4 859
    Points
    4 859
    Par défaut
    Bonsoir,

    Si le script s’exécute sur la même page visualiserAnnonce2.php, voilà une solution simple pour gérer l'affichage des commentaires 3 par 3 :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
     
    <?php
        try{
    	$bdd=new PDO('mysql:host=localhost;dbname=nomBase', 'root', 'motdepasse'
    	    , array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION /* cette option permet d'afficher les avertissements/exceptions, il faut TOUJOURS  l'utiliser ! */
                      ,PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8') /* cette option permet l'encodage des caractères spéciaux, comme les accents et autres caractères .... */
            );
       }catch(Exception $e){
    	echo "Erreur oonnection à la base : ".$e->getMessage();
            exit();/* si la connection à la base échoue, on quitte le script et on s'arrête ici */
       }
       $id=isset($_POST['id'])?$_POST['id']:376;//récupération de l'id utilisateur
       $offset=isset($_POST['offset'])?$_POST['offset']+3:3;//si la valeur de offset est récupérée depuis le  <input name='offset' ../>, on l'incrémente +3, sinon (au premier chargement) par défaut c'est 3 
       /*La préparation des requêtes est TOUJOURS nécessaires lorsqu'on traite des variables récupérés avec $_POST ou $_GET !*/
       $avis = $bdd -> prepare("SELECT count(*) FROM avis WHERE id_ann_avis=:id");//compter le nombre totale des commentaires appartenant à $id
       $avis->bindParam(":id",$id,PDO::PARAM_INT);
       $avis->execute();
       $compteuravis=$avis->fetchColumn();//stocker le nombre dans $compteuravis
     
     
        if($compteuravis>0){
        ?>
        <form method="POST" action="visualiserAnnonce2.php"><!-- Reste en post, pas la peine de mettre ?id dans l'action -->
    	<?php if($offset<$compteuravis){?>
                    <!-- indiquer à l'utilisateur le nombre des commentaires masqués (restants)-->
    		<input type='submit' name='go' value='<?php echo $compteuravis-$offset>1?($compteuravis-$offset)." commentaires restants":" 1 commentaire restant";?>' />
    	<?php } ?>
    		<input type='hidden' name="id" value="<?=$id?>" /> <!-- c ici qu'il faut stocker le $id ....-->
    		<?php 
    			$avis = $bdd->prepare('SELECT * FROM avis WHERE id_ann_avis = :id ORDER BY id_avis DESC LIMIT :offset ');
    			$avis->bindParam(":id",$id,PDO::PARAM_INT);
    			$avis->bindParam(":offset",$offset,PDO::PARAM_INT);
    			$avis->execute();
                            $nbr=$avis->rowCount();
    			$compteur=0;
    			while ($lavis = $avis -> fetch()){
    				$compteur++;
    			  ?>
    			  <div>
    				<p>id_avis : <?=$lavis["id_avis"];?></p>
    				<?php
    				if($compteur==$nbr){//à chaque fois qu'on appuie sur go, on ajoute un input dans lequel on stock le nombre de commentaires affichés, seulement si c'est le dernier message affiché.
    				?>
    				<input type='hidden' name='offset' value="<?=$compteur;?>" /><!-- Le plus important c'est ça, la value de l'input... -->
    				<?php 
    				} ?>
    			  </div>
    			  <?php
    			} 
     
     
    		?>
    	</form>
    	<?php }
             else {
    		echo "aucun commentaire pour l'id ".$id;
    	}

    Remarque : Ce script recharge la page à chaque fois que tu cliques sur le bouton submit, et le nombre de résultat dépend toujours de l'offset et réellement si l'offset est 6, là on récupère 6 enregistrements et pas 3....

    Au début ça commence par 3, après 6 puis après 9 et ainsi de suite...., la même chose pour 12,15 et 18....

    Si j'étais à ta place je l'aurais fait avec XMLHttpRequest (en pur javascript) ou bien avec jQuery.ajax (en jQuery) pour ne récupérer que 3 lignes à chaque fois et sans rechargement de page

    select * from avis where id_avis<:dernier_id_avis_visible limit 3....

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Points : 86
    Points
    86
    Par défaut
    merci beaucoup pour le temps passé, excellent, merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher des commentaires associés à un post
    Par nico44530 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/04/2014, 23h50
  2. Réponses: 7
    Dernier message: 29/11/2013, 00h03
  3. Mon JTable affiche la même ligne plusieurs fois
    Par hamzawhy dans le forum Général Java
    Réponses: 6
    Dernier message: 19/03/2012, 22h56
  4. [XL-2007] [Novice] Afficher des données dans plusieurs CheckBox
    Par fasedan dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 29/12/2011, 22h10
  5. Réponses: 3
    Dernier message: 17/03/2008, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo