PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 20-01-2012 18:31:47

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Problème pagination

Bonjour,
J'ai créée une page avec une base de données. Sur ma page je voulais afficher mon tableau de données avec un système de pagination automatique. J'ai récupérer le script sur ICI. J'ai tout réécris mais j'ai une erreur que je n'arrive pas à résoudre. Voici mon script php :

<h1> Liste des clients </h1> 
<?php

//Connexion à la base de données
if (!connexion())
{
  echo "erreur de connexion à la base".mysql_error();
}
else
{
 
 
  $messagesParPage=5; //Nous allons afficher 5 messages par page.

  //Une connexion SQL doit être ouverte avant cette ligne...
  $retour_total=mysql_query('SELECT COUNT(*) AS total FROM clients'); //Nous récupérons le contenu de la requête dans $retour_total
  $donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
  $total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.

  //Nous allons maintenant compter le nombre de pages.
  $nombreDePages=ceil($total/$messagesParPage);

  if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
  {
    $pageActuelle=intval($_GET['page']); //intval -> retourne la valeur entière
     
    if ($pageActuelle > $nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
    {
      $pageActuelle = $nombreDePages; //on reste sur la dernière page
    }
   
  }
  else // Sinon
  {
    $pageActuelle=1; // La page actuelle est la n°1    
  }

  $premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire

  // La requête sql pour récupérer les messages de la page actuelle.
  $retour_messages=mysql_query('SELECT * FROM clients ORDER BY id DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'');

 
            echo 'Nombre d\'enregistrement : '.$total;
      echo '<table id="tableau">'."\n";
      echo '<tr>';
      echo  '<td> NOM </td>';
      echo  '<td> PRENOM </td>';
      echo  '<td> TELEPHONE </td>';
      echo  '<td> E-MAIL </td>';
      echo  '<td> NOTE </td>';
      echo '</tr>';
  while($donnees_messages=mysql_fetch_array($retour_messages)) // On lit les entrées une à une grâce à une boucle
  {//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
      echo '<tr>';
      echo  '<td class="nomC">'.stripslashes($donnees_messages['nom']).'</td>';
      echo  '<td>'.stripslashes($donnees_messages['prenom']).'</td>';
      echo  '<td>'.stripslashes($donnees_messages['telephone']).'</td>';
      echo  '<td>'.stripslashes($donnees_messages['mail']).'</td>';
      echo  '<td>'.stripslashes($donnees_messages['note']).'</td>';
      echo '</tr>';
           
   
  }
  echo '</table>';
  echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
  for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
  {
    //On va faire notre condition
    if($i==$pageActuelle) //Si il s'agit de la page actuelle...
    {
      echo ' [ '.$i.' ] ';
    }
    else //Sinon...
    {
      echo ' <a href="index.php?nompage=listeClients&page='.$i.'">'.$i.'</a> ';
    }
  }
  echo '</p>';
}
?>

Et voici ma page avec mon Erreur :

Liste des clients

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in F:\EASY\EasyPHP-5.3.8.1\www\ZEN ATTITUDE\pages\admin\listeClients.php on line 43

Page : 1 2 3

De plus, j'ai essayer le script avec la base de donnée sur une autre page du tuto que je vous ai mis en lien, et il marche parfaitement. Du coup, j'ai fais copier-coller de mon script qui marche sur ma page souhaité et j'ai ce message d'erreur donc je ne comprends absolument pas.
Si vous pouviez m'aider cela serait adorable big_smile.
Merci d'avance

Dernière modification par soft57 (20-01-2012 18:33:13)

Hors ligne

#2 21-01-2012 09:04:34

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Re : Problème pagination

Please neutral

Hors ligne

#3 21-01-2012 09:35:22

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pagination

A quelle ligne de ton script correspond la ligne 43 ?

Par ailleurs, merci de ne pas raviver la guerre des étoiles.

Enfin, avant de sombrer dans une totale obsolescence, il faudrait se mettre à PDO.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 21-01-2012 09:43:52

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Re : Problème pagination

Il n'y a rien à la ligne 43, mais si c'est pour la ligne 41 il affiche les données de ma requête selon la limite et le nombre de données que je souhaite par page.
Je vais attendre encore un peu pour le PDO ^^ ça m'a l'air assez complexe pour le moment.

Hors ligne

#5 21-01-2012 10:13:47

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pagination

Ne te fie pas aux numéros de lignes du bout de script posté ici, il s'agit du script global parsé par PHP.
Ce qu'il faudrait savoir c'est quelle variable, de $retour_total ou de $retour_messages, est  "boolean instead of resource"


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 21-01-2012 10:17:54

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pagination

soft57 a écrit :

Je vais attendre encore un peu pour le PDO ^^ ça m'a l'air assez complexe pour le moment.

Tu ne tarderas pas à comprendre que la vie, elle-même, n'est pas simple. Est-ce une raison suffisante pour procrastiner face à toute difficulté ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 21-01-2012 10:49:20

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Re : Problème pagination

D'après le message d'erreur, ça serait cette ligne :

while($donnees_messages=mysql_fetch_array($retour_messages))

Hors ligne

#8 21-01-2012 11:19:11

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pagination

Alors modifie provisoirement ton script comme ceci

  $retour_messages=mysql_query('SELECT lesnomsdescolonnesquivontbien FROM clients ORDER BY id DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'')
or die(mysql_error());
print_r($retour_messages);

et dis-nous ce qu'il en advient.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 21-01-2012 11:22:42

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Re : Problème pagination

J'obtiens ceci

Erreur de syntaxe près de '-5, 5' à la ligne 1

Hors ligne

#10 21-01-2012 13:08:26

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pagination

Hé bien voilà, revois la construction de ta requête.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#11 23-01-2012 09:15:55

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Re : Problème pagination

Je ne suis pas sûr que le problème vienne de la requête. J'ai modifié les "$GET_['page'] et mes 5 premières données sont bien affichées sur la première page. Mais lorsque je clique sur la 2ème page, j'ai une page vide. Voilà mon code modifié :

<h1> Liste des clients </h1> 
<?php

//Connexion à la base de données
if (!connexion())
{
  echo "erreur de connexion à la base".mysql_error();
}
else
{
 
 
  $messagesParPage=5; //Nous allons afficher 5 messages par page.

  //Une connexion SQL doit être ouverte avant cette ligne...
  $retour_total=mysql_query('SELECT COUNT(*) AS total FROM clients'); //Nous récupérons le contenu de la requête dans $retour_total
  $donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
  $total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.

  //Nous allons maintenant compter le nombre de pages.
  $nombreDePages=ceil($total/$messagesParPage);

  if(isset($_GET['index.php?nompage=listeClients&page'])) // Si la variable $_GET['page'] existe...
  {
    $pageActuelle=intval($_GET['index.php?nompage=listeClients&page']); //intval -> retourne la valeur entière
     
    if ($pageActuelle > $nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
    {
      $pageActuelle = $nombreDePages; //on reste sur la dernière page
    }
   
  }
  else // Sinon
  {
    $pageActuelle=1; // La page actuelle est la n°1    
  }

  $premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire

  // La requête sql pour récupérer les messages de la page actuelle.
  $retour_messages=mysql_query('SELECT nom, prenom, telephone, mail, note FROM clients ORDER BY id DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'')
or die(mysql_error());
//print_r($retour_messages);

 
            echo 'Nombre d\'enregistrement : '.$total;
      echo '<table id="tableau">'."\n";
      echo '<tr>';
      echo  '<td> NOM </td>';
      echo  '<td> PRENOM </td>';
      echo  '<td> TELEPHONE </td>';
      echo  '<td> E-MAIL </td>';
      echo  '<td> NOTE </td>';
      echo '</tr>';
  while($donnees_messages=mysql_fetch_array($retour_messages)) // On lit les entrées une à une grâce à une boucle
  {//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
      echo '<tr>';
      echo  '<td class="nomC">'.stripslashes($donnees_messages['nom']).'</td>';
      echo  '<td>'.stripslashes($donnees_messages['prenom']).'</td>';
      echo  '<td>'.stripslashes($donnees_messages['telephone']).'</td>';
      echo  '<td>'.stripslashes($donnees_messages['mail']).'</td>';
      echo  '<td>'.stripslashes($donnees_messages['note']).'</td>';
      echo '</tr>';
           
   
  }
  echo '</table>';
  echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
  for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
  {
    //On va faire notre condition
    if($i==$pageActuelle) //Si il s'agit de la page actuelle...
    {
      echo ' [ '.$i.' ] ';
    }
    else //Sinon...
    {
      echo ' <a href="index.php?nompage=listeClients&page='.$i.'">'.$i.'</a> ';
    }
  }
  echo '</p>';
}
?>

Dernière modification par soft57 (23-01-2012 09:17:10)

Hors ligne

#12 23-01-2012 09:47:50

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pagination

C'est quoi ça :

    $pageActuelle=intval($_GET['index.php?nompage=listeClients&page']); //intval -> retourne la valeur entière

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#13 23-01-2012 09:56:07

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Re : Problème pagination

C'est pour convertir le numéro de la page en entier, mais effectivement je ne pense pas que cela serve à grand chose ici.

Hors ligne

#14 23-01-2012 10:27:50

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pagination

D'autant que le numéro de page c'est $_GET['page']


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#15 23-01-2012 11:43:26

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Re : Problème pagination

Oui mais quand je mets $_GET['page'] aucune données ne s'affiche

Hors ligne

#16 23-01-2012 12:09:27

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pagination

Ça c'est un autre problème, mais $_GET['index.php?nompage=listeClients&page'], ça n'existe pas.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#17 24-01-2012 09:14:47

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Re : Problème pagination

Peut-être bien, mais je souhaiterai résoudre mon problème

Hors ligne

#18 24-01-2012 15:34:41

soft57
Membre
Inscription : 20-01-2012
Messages : 10

Re : Problème pagination

Mon soucis est résolu, ça venez d'une variable qui se trouver dans mon index et qui prenez la priorité sur mon script de pagination. Merci quand même

Hors ligne

Pied de page des forums