Req SQL PDO:recup nbr entrées et affichage

Résolu/Fermé
ClR555 - Modifié par ClR555 le 2/04/2011 à 20:56
 ClR555 - 7 avril 2011 à 00:50
Bonjour,

Alors voilà : mon code me sert à récupérer le nbr d'entrées dans ma base, compter les résultats et me les afficher sous la forme '5 résultats par page'.

Vous vous en doutez, ça ne fonctionne pas. En fait lors de son exécution mon code rentre dans :
if($reponse->rowCount() <1)
, bien q'il existe des enregistrements dans ma base.
Il n'en affiche aucun, juste le maudit message '0 enregistrement'...

Je ne trouve pas mon (mes) erreur(s). Comme je débute ça ne m'étonne pas trop. Si vous avez une piste... Merci :)

Voici mon bout de code. et la connexion à la base se fait bien...


//cpte nbr total de résultats ds req et calcul nbr de page  
$nombreDeMessagesParPage = 5;  

$reponse = $connexion->prepare('SELECT COUNT(*) AS nbr FROM messages' );   
$reponse->execute();  
$donnees = $reponse->fetch();  
$totalDesMessages = $donnees['nbr'];  

if($totalDesMessages<1)  
{  
 $msg='<p class="msg_erreur"> Aucun enregistrement de message n\'existe dans le forum.</p>';  
}  
else  
{  
 // On calcule le nombre de pages à créer  
 $nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);  

 // Puis on fait une boucle pour écrire les liens vers chacune des pages  
 echo 'Page : ';  
 for ($i = 1 ; $i <= $nombreDePages ; $i++)  
 {  
  $msg='<a href="'.$_SERVER['PHP_SELF'].'?page=' . $i . '">' . $i . '</a> ';  
 }  

 // Maintenant, on va afficher les messages  
 if (isset($_GET['page']))  
 {  
   $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse   
 }  
 else // La variable n'existe pas, c'est la première fois qu'on charge la page  
 {  
   $page = 1; // On se met sur la page 1 (par défaut)  
 }  
 // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL  
 $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;  
    
 $reponse = $connexion->prepare('SELECT * FROM messages  WHERE u_id = msg_exp DESC LIMIT :premierMessageAafficher,:nombreDeMessagesParPage  ORDER BY msg_date' );  

 $reponse->bindValue(':premierMessageAafficher',$premierMessageAafficher, PDO::PARAM_INT);  
 $reponse->bindValue(':nombreDeMessagesParPage',$nombreDeMessagesParPage , PDO::PARAM_INT);  
 $reponse->execute();  

 if($reponse->rowCount() <1)  
 {  
  $msg.='<p class="msg_erreur"> Aucun enregistrement de message n\'existe dans le forum.</p>';  
 }   
 else  
 {  
  $msg.='<div style="background:#f7f7f7">';  
  while ($info_msg = $reponse->fetch(PDO::FETCH_OBJ))  
  {  
   //ttt date  
   $ttt_date = date("d/m/Y \à H\hi",strtotime($info_msg->msg_date));  
   $msg.='<h5 style="display:inline; color :#cccccc;font-size:17px;">'.$info_msg->u_nom.'</h5><span class="font-size:11px;color:#999999"> le '.$ttt_date.'</span>  
      <p style="font-size:12px;color:black;">  
       '.$info_msg->msg_txt.'  
      </p>  
     <hr/>';  
  }  
  $msg.='</div>';  
 }  
 $reponse->closeCursor();  
}  
echo $msg; 
A voir également:

3 réponses

chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 9
2 avril 2011 à 23:05
hi,
pourquoi tous çà !

La clause LIMIT peut être utilisée pour limiter le nombre d'enregistrements retournés par la commande SELECT. LIMIT accepte un ou deux arguments numériques. Ces arguments doivent être des entiers constants.

Avec un argument, la valeur spécifie le nombre de lignes à retourner depuis le début du jeu de résultat. Si deux arguments sont donnés, le premier indique le décalage du premier enregistrement à retourner, le second donne le nombre maximum d'enregistrement à retourner. Le décalage du premier enregistrement est 0 (pas 1) :

Pour être compatible avec PostgreSQL, MySQL supporte aussi la syntaxe : LIMIT row_count OFFSET offset.

# Retourne les enregistrements 6 à 15
SELECT * FROM table LIMIT 5,10;

sava ??
0
Ben nan. lasavapa.
je comprends pas ni ou ni ce que je dois changer.
Si tu peux me donner des précisions...et pourquoi dis-tu "pourquoi tous çà !", aurais-tu une solution plus facile? moins tirée par les cheveux ? Y a t'il un chemin moins tordu?
je suis preneuse. tous les conseils seront les bienvenus ! ;)
Merci de ton aide en tout cas.
0
chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 9
Modifié par chabacha109 le 6/04/2011 à 23:25
okay don't worry
voila un exemple qui répond a ta premiére ligne

principe:
index.php initialise les paramétres de la clause LIMIT et redirige vers affiche.php
la page affiche.php affiche 5 enregistrement de votre base a chaque chargement

index.php:    
<?php    
session_start();    
//initialisation des variables de debut et fin     
$_SESSION['debut']=0;//afficher  a partir l'enreg d'indice 0    
$_SESSION['fin']=5;//  5 enreg    

//redirection vers la page d'affichage, lets go !    
header("location:affiche.php");    
?>    


affiche.php:    
<?php    
session_start();    

//alors ici on va utilser les variables session     
$deb=$_SESSION['debut'];    
$fin=$_SESSION['fin'];    

     $dbh = new PDO('mysql:host=localhost;dbname=hotel','root','');//ouvre une connexion    
     //voila comment utiliser la clause LIMIT 

 $aux=$dbh->query("SELECT * FROM client LIMIT $deb,$fin");    
 $tab=$aux->fetchAll();    
 $count=count($tab);    
     
 for($i=0;$i<$count;$i++)    
 {    
 echo $tab[$i]['cin']."<br>";    
 }    
 $_SESSION['debut']+=5;//en incriment l'indice de debut pour !    

     
 //tu peut ici faire un liens pour afficher les 5 enreg suivant....    
 echo "<a href='affiche.php'>afficher les 5 suivant==></a>";    
?>


j'ai testé ceci avec easyphp 5

dit moi ca répond a votre prob ?
0
Bonsoir et merci. Oui-oui ça y réponds. IMPEC :) merci bcp !
je vais essayer d'adapter tout ça à mon code, mais sans passer par les variables de session et tenter de faire ça sur une seule page, qui ajouterait ou enlèverait 5 à suivant / précédent.
je me demande ce qu'il se passe avec la page 1 -5 messages... Je vais bien voir ! Je mets le sujet en résolu, et je te remercie encore. Bonne soirée
0
Quelqu'un aurait-il une idée ?
0
sculderoy Messages postés 78 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 24 septembre 2018 15
6 avril 2011 à 15:38
As tu dumpé (var_dump()) la variable $donnees ? Que donne $donnees[0]['nbr']; ?
0