Pagination, help me please

Résolu/Fermé
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017 - Modifié par Lucryio le 29/01/2014 à 20:07
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017 - 30 janv. 2014 à 17:51
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 mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
29 janv. 2014 à 20:34
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
29 janv. 2014 à 20:43
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 mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
29 janv. 2014 à 20:57
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
29 janv. 2014 à 21:14
ç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 mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
29 janv. 2014 à 22:50
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
29 janv. 2014 à 23:20
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
30 janv. 2014 à 00:23
<?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 mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par mpmp93 le 30/01/2014 à 09:53
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 30/01/2014 à 09:54
Salut,

$resultat = mysql_query($dn);

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

while ( $dnn = mysql_fetch_assoc($resultat) ) ...
0
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
30 janv. 2014 à 10:05
ç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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
30 janv. 2014 à 10:12
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 mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par mpmp93 le 30/01/2014 à 14:04
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