Pagination, help me please

Résolu
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention   -  
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention   -
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

mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
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
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
ç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
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
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
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
<?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
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

$resultat = mysql_query($dn);

if (!$resultat) {
    die('Erreur sql : ' . mysql_error());
}

while ( $dnn = mysql_fetch_assoc($resultat) ) ...
0
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
ç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
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
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
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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