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?
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?
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.
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 } } ?>
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...
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?
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>.
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 } } ?>
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 ?
voici la tableavis.sql
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....
merci beaucoup pour le temps passé, excellent, merci encore
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager