Pagination, help me please

Résolu
Lucryio Messages postés 224 Statut Membre -  
Lucryio Messages postés 224 Statut Membre -
Bonsoir,

Tous d'abord, voila mon code de ma page :

<?php
include('config.php');
include('header2.php');


?> <div id="content">
        <div class="content_item">
<!-- modifier ci-dessous le titre qui apparaît dans la barre du navigateur entre > et <   -->
<div id="corps100">
<div id="users"><?php
//On affiche un message de bienvenue, si lutilisateur est connecte, on affiche son pseudo
?>
<div id="left"><?php if(isset($_SESSION['username'])){echo 'Je te souhaite une bonne visite ' .htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');}
else 
{
echo 'Bienvenue cher visiteur, inscrivez-vous <a href="sign_up.php">ici</a> ou connectez vous <a href="connexion.php">ici</a>, Bonne visite.';
}
?>
<?php
//Si lutilisateur est connecte, on lui donne un lien pour modifier ses informations, pour voir ses messages et un pour se deconnecter
if(isset($_SESSION['username']))
{
//On affiche les liens
if(isset($_SESSION['username']))
?>
<?php
}
else
{
//Sinon, on lui donne un lien pour sinscrire et un autre pour se connecter
?></br>
<a href="sign_up.php">Inscription</a><br />
<a href="connexion.php">Se connecter</a></br></br></br></br>
<?php

// Numero de page (1 par <span class="uir593eqc" id="uir593eqc_18">défaut</span>)
if( isset($_GET['page']) && is_numeric($_GET['page']) )
 $page = $_GET['page'];
else
 $page = 1;

// Nombre d'info par page
$pagination = 10;
// Numéro du 1er enregistrement à lire
$limit_start = ($page - 1) * $pagination;

// Préparation de la requête
$sql = "SELECT * FROM users LIMIT $limit_start, $pagination";

// Requête SQL
$resultat = mysql_query($sql);

// Traitement et affichage des données
while ( $donnee = mysql_fetch_assoc($resultat) ) {

}

?>
</div>
 <div class="content">
<mark>Voici la liste des utilisateurs inscrits sur le site : </mark>
<table>
    <tr>
     <th>Pseudo</th>
        <th>Rang</th>
  <th>Date d'inscription</th>
     
    </tr>
<?php
//On recupere les identifiants, les pseudos et les emails des utilisateurs
$req = mysql_query('select id, username, email, DATE_FORMAT( signup_date, "%d/%m/%Y") as dt, rang from users ORDER BY "rang" ');
while($dnn = mysql_fetch_array($req))
{
?>
 <tr>
     <td class="left"><?php echo htmlentities($dnn['username'], ENT_QUOTES, 'UTF-8'); ?></a>  </td>      
  <td class="left"><?php echo htmlentities($dnn['rang'], ENT_QUOTES, 'UTF-8'); ?>     </td>
  <td class="left"><?php echo htmlentities($dnn['dt'], ENT_QUOTES, 'UTF-8'); ?>  </td>
    </tr>
 <?php
}
}

// Nb d'enregistrement total
$nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM users');
$nb_total = mysql_fetch_array($nb_total);
$nb_total = $nb_total['nb_total'];

// Pagination
$nb_pages = ceil($nb_total / $pagination);

echo '<p>[ Page :';
// Boucle sur les pages
for ($i = 1 ; $i <= $nb_pages ; $i++) {
 if ($i == $page )
  echo " $i";
 else
  echo " <a href=\"?page=$i\">$i</a> ";
}
echo ' ]</p>';

?>
</table>
  </div>
</div></div></div></div>
  <?php include('info-flash.php');?>


Je fais appel à vous car, ce code me fais cela comme erreur :

Notice: Undefined variable: pagination in C:\wamp\www\FC-LUCRYIO\user.php on line 90


Soit sur cette ligne :

$nb_pages = ceil($nb_total / $pagination);


Sachant qu'elle est déclaré à la ligne 43, soit cette ligne :
$pagination = 10;


Il me met aussi cette erreur :

Warning: Division by zero in C:\wamp\www\FC-LUCRYIO\user.php on line 90


ce qui correspond à cette ligne :
$nb_pages = ceil($nb_total / $pagination);


Je suppose que cette erreur est dû à la non déclaration de la variable "$pagination" qui est pourtant déclaré.

Si vous pouviez m'aider.

Merci par avance.

4 réponses

  1. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
     
    Bonsoir,

    en lignes 81 et 82 il y a des accolades qui correspondent à des structures if qui neutralisent l'instanciation de votre variable $pagination

    A+
    0
  2. Lucryio Messages postés 224 Statut Membre
     
    Si je les retires, ça me met une erreur et ma page ne s'affiche pas.

    Si quelqu'un d'autre aurait une idée, je suis preneur.

    Merci par avance.
    0
    1. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
       
      C'est pas une question de les retirer, c'est un problème d'imbrication des tests if et tout le toutim.... Cherchez un peu
      0
    2. Lucryio Messages postés 224 Statut Membre
       
      ça fais déjà 2h que je cherche, du moins ça faisait au moins 2h que je cherchais mon erreur avant de poster mon message.

      Je suis perdu là.
      0
    3. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
       
      Cherches encore petit scarabée. ...

      Une piste: mettez

      echo "xxx";

      Sur la ligne qui instancie la variable

      Puis executez le script. Si xxx s affiche pas c'est que un if execute mal la partie de code ou se trouve echo

      Bon courage
      0
  3. Lucryio Messages postés 224 Statut Membre
     
    Le souci que j'ai c'est que ma variable "pagination" n'est soit disant pas déclarée alors qu'elle l'est.

    Et là, je ne trouve pas ou est le problème.

    Pouvez-vous m'aider sur mon code ?

    Merci par avance.
    0
  4. Lucryio Messages postés 224 Statut Membre
     
    <?php
    include('config.php');
    include('header2.php');
    
    
    ?> <div id="content">
            <div class="content_item">
    <!-- modifier ci-dessous le titre qui apparaît dans la barre du navigateur entre > et <   -->
    <div id="corps100">
    <div id="users">
    <?php
    //On affiche un message de bienvenue, si lutilisateur est connecte, on affiche son pseudo
    ?>
    <div id="left"><?php if(isset($_SESSION['username'])){echo 'Je te souhaite une bonne visite ' .htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');}
    else 
    {
    echo 'Bienvenue cher visiteur, inscrivez-vous <a href="sign_up.php">ici</a> ou connectez vous <a href="connexion.php">ici</a>, Bonne visite.';
    }
    ?>
    <?php
    //Si lutilisateur est connecte, on lui donne un lien pour modifier ses informations, pour voir ses messages et un pour se deconnecter
    if(isset($_SESSION['username']))
    {
    //On affiche les liens
    if(isset($_SESSION['username']))
    ?>
    <?php
    }
    else
    {
    //Sinon, on lui donne un lien pour sinscrire et un autre pour se connecter
    ?></br>
    <a href="sign_up.php">Inscription</a><br />
    <a href="connexion.php">Se connecter</a></br></br></br></br>
    <?php
    }
    
    ?></div>
     <div class="content">
    <mark>Voici la liste des utilisateurs inscrits sur le site : </mark>
    <table>
        <tr>
        	<th>Pseudo</th>
            <th>Rang</th>
    		<th>Date d'inscription</th>
        	
        </tr>
    <?php
    
    // Numero de page (1 par <span class="s7p7oe5766j" id="s7p7oe5766j_18">défaut</span>)
    if( isset($_GET['page']) && is_numeric($_GET['page']) )
    	$page = $_GET['page'];
    else
    	$page = 1;
    
    // Nombre d'info par page
    $pagination = 20;
    // Numéro du 1er enregistrement à lire
    $limit_start = ($page - 1) * $pagination;
    
    // Préparation de la requête
    $dn = 'SELECT id, username, email, DATE_FORMAT( signup_date, "%d/%m/%Y %H:%i:%s") as dt, rang from users ORDER BY "rang"  LIMIT $limit_start, $pagination';
    
    // Requête SQL
    $resultat = mysql_query($dn);
    
    // Traitement et affichage des données
    while ( $dnn = mysql_fetch_assoc($resultat) ) {
    	?>
    	<tr>
        	<td class="left"><a href="profile.php?id=<?php echo $dnn['id']; ?>"><?php echo htmlentities($dnn['username'], ENT_QUOTES, 'UTF-8'); ?></a></td>     
    		<td class="left"><?php echo htmlentities($dnn['rang'], ENT_QUOTES, 'UTF-8'); ?>     </td>
    		<td class="left"><?php echo htmlentities($dnn['dt'], ENT_QUOTES, 'UTF-8'); ?>  </td>
        </tr>
    <?php
        
    
    }
    
    // Nb d'enregistrement total
    $nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM users');
    $nb_total = mysql_fetch_array($nb_total);
    $nb_total = $nb_total['nb_total'];
    
    // Pagination
    $nb_pages = ceil($nb_total / $pagination);
    
    echo '<p>[ Page :';
    // Boucle sur les pages
    for ($i = 1 ; $i <= $nb_pages ; $i++) {
    	if ($i == $page )
    		echo " $i";
    	else
    		echo " <a href=\"?page=$i\">$i</a> ";
    }
    echo ' ]</p>';
    
    ?>
    </table>
    		</div>
    </div></div></div></div>
    		<?php include('info-flash.php');?>


    Voila mon nouveau code, alors j'ai un souci qui me dit ça :

    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\FC-LUCRYIO\user.php on line 68


    ce qui correspond à cette ligne :
    while ( $dnn = mysql_fetch_assoc($resultat) )


    Pouvez-vous m'aider ?

    Merci par avance.
    0
    1. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
       
      script revu et corrigé à tester:

      <?php
      include('config.php');
      include('header2.php');
      ?>
      <div id="content">
          <div class="content_item">
              <!-- modifier ci-dessous le titre qui apparaît dans la barre du navigateur entre > et <   -->
              <div id="corps100">
                  <div id="users">
                  <?php
                  //On affiche un message de bienvenue, si lutilisateur est connecte, on affiche son pseudo
                  ?>
                      <div id="left">
                          <?php if (isset($_SESSION['username'])): ?>
                              Je te souhaite une bonne visite <?php echo htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8'); ?>
                          <?php else: ?>
                              Bienvenue cher visiteur, inscrivez-vous <a href="sign_up.php">ici</a> ou connectez vous <a href="connexion.php">ici</a>,
                              Bonne visite
                          <?php endif; ?>
      
                          <?php if (isset($_SESSION['username'])): ?> 
                              <!-- Si lutilisateur est connecte, on lui donne un lien pour modifier ses informations, pour voir ses messages et un pour se deconnecter
                              //On affiche les liens -->
                          <?php else: ?>
                          <!-- Sinon, on lui donne un lien pour sinscrire et un autre pour se connecter -->
                              <br/>
                              <a href="sign_up.php">Inscription</a><br />
                              <a href="connexion.php">Se connecter</a></br></br></br></br>
                          <?php endif; ?>
                      </div>
                      <div class="content">
                          <mark>Voici la liste des utilisateurs inscrits sur le site : </mark>
                          <table>
                              <tr>
                                  <th>Pseudo</th>
                                  <th>Rang</th>
                                  <th>Date inscription</th>
                              </tr>
                              <?php
                              // Numero de page (1 par <span class="s7p7oe5766j" id="s7p7oe5766j_18">défaut</span>)
                              if (isset($_GET['page']) && is_numeric($_GET['page'])) {
                                  $page = $_GET['page'];
                              } else {
                                  $page = 1;
                              }
      
                              // Nombre d'info par page
                              $pagination = 20;
                              // Numéro du 1er enregistrement à lire
                              $limit_start = ($page - 1) * $pagination;
      
                              // Préparation de la requête
                              $dn = "SELECT id, username, email, "
                                  . "DATE_FORMAT( signup_date, '%d/%m/%Y %H:%i:%s') as dt, "
                                  . "rang from users ORDER BY 'rang'  LIMIT $limit_start,$pagination ";
      
                              // Requête SQL
                              $resultat = mysql_query($dn);
      
                              // Traitement et affichage des données
                              ?>
                              
                              <?php while ($dnn = mysql_fetch_assoc($resultat)): ?>
                                  <tr>
                                      <td class="left"><a href="profile.php?id=<?php echo $dnn['id']; ?>"><?php echo htmlentities($dnn['username'], ENT_QUOTES, 'UTF-8'); ?></a></td>     
                                      <td class="left"><?php echo htmlentities($dnn['rang'], ENT_QUOTES, 'UTF-8'); ?>     </td>
                                      <td class="left"><?php echo htmlentities($dnn['dt'], ENT_QUOTES, 'UTF-8'); ?>  </td>
                                  </tr>
                              <?php endwhile; ?>
                          </table>
                          <?php
                          // Nb d'enregistrement total
                          $nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM users');
                          $nb_total = mysql_fetch_array($nb_total);
                          $nb_total = $nb_total['nb_total'];
      
                          // Pagination
                          $nb_pages = ceil($nb_total / $pagination);
                          ?>
                          <p>[ Page :
                          <?php for ($i = 1; $i <= $nb_pages; $i++): ?>
                              <?php if ($i == $page): ?>
                                  <?php echo $i; ?>
                              <?php else: ?>
                                  <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a>
                              <?php endif; ?>
                          <?php endfor; ?>
                          ]</p>
                      </div>
                  </div>
              </div>
          </div>
      </div>
      <?php include('info-flash.php'); ?>
      0
    2. Pitet Messages postés 2845 Statut Membre 530
       
      Salut,

      $resultat = mysql_query($dn);
      
      if (!$resultat) {
          die('Erreur sql : ' . mysql_error());
      }
      
      while ( $dnn = mysql_fetch_assoc($resultat) ) ...
      
      0
    3. Lucryio Messages postés 224 Statut Membre
       
      ça fonctionne nikel, merci beaucoup pour ton aide et ta patience.

      j'ai vue que tu avais mis des "." dans la requête SELECT pour la date ?
      tu pourrais me dire par MP pourquoi faut faire comme ça ? j'ai pas très bien compris en faite.
      0
    4. Pitet Messages postés 2845 Statut Membre 530
       
      Je n'ai affiché aucune requête SQL.

      Le caractère "." en php est le caractère de concaténation : https://www.php.net/manual/fr/language.operators.string.php

      Les "..." après le while n'existe pas en php, c'est juste pour indiquer de mettre la suite de ton code.
      0
    5. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
       
      Les "." sont des cncaténations;

      Au lie d'écrire

      echo "ceci est une très longue phrase"

      on fait

      echo "ceci est "
      . "une très longue "
      . "phrase";

      Ca rend le code SQL plus lisible
      0