pagination

pagination - PHP - Programmation

Marsh Posté le 10-02-2017 à 18:07:35    

bonjour,
 
j'ai programmer un minichat mais voila je voudrais faire une pagination avec les cases, précédents, les 3 pages autours de la pages actuel, suivant, je sais pas trop si vous avez compris donc voici un exemple :
précédent, 1, 2, 3, (page actuel: 4), 5, 6, 7, suivant
mais je ne sais pas du tout comment faire esque vous pourriez m'aidez a le faire ou carrément  me faire le code avec des commentaires pour que je puisse comprendre (seulement si vous avez le temp sinon pas grave) voici le code source
 
minichat.php

Citation :

<?php setcookie('pseudo', time() + 365*24*3600, null, null, false, true);  
 
if (isset($_POST['message']))
{
    $message = stripslashes($_POST['message']); // On enlève les slashs qui se seraient ajoutés automatiquement
    $message = htmlspecialchars($message); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
    $message = nl2br($message); // On crée des <br /> pour conserver les retours à la ligne
     
    // On fait passer notre message à la moulinette des regex
    $message = preg_replace('#\[b\](.+)\[/b\]#isU', '<strong>$1</strong>', $message);
    $message = preg_replace('#\[i\](.+)\[/i\]#isU', '<em>$1</em>', $message);
    $message = preg_replace('#\[color=(red|green|blue|yellow|purple|olive)\](.+)\[/color\]#isU', '<span style="color:$1">$2</span>', $message);
    $message = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $message);
}
?>
 
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Mini-chat</title>
    </head>
    <style>
    form
    {
        text-align:center;
    }
    </style>
    <body>
     
    <form action="minichat_post.php" method="post">
        <p>
        <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br />
        message :<br/>
        <textarea id="Message" name="message" rows="8" cols="35"></textarea><br />
        <p>Amusez-vous à utiliser du bbCode. Tapez par exemple :</p>
 
<blockquote style="font-size:0.8em">
<p>
    Je suis un Crystalien, et pourtant j'ai pas voter sur http://crystalcraft3.wixsite.com/crystal<br />
    Je vous [color=green]recommande[/color] d'aller sur ce site, c'est [color=purple]génial[/color] !
</p>
</blockquote>
 
        <input type="submit" name="action" value="Envoyer" />
    </p>
    </form>
 
<?php
try
{
$bdd = new PDO('mysql:host=****;dbname=****;charset=utf8', '****', '****');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}
 
 
 
$reponse = $bdd->query('SELECT pseudo, message, DATE_FORMAT(date_crea, \'%d/%m/%Y\') AS date_creation_fr, TIME_FORMAT(date_crea, \'%Hh%imin%ss\') AS time_creation_fr FROM minichat ORDER BY ID DESC LIMIT 0, 10');
 
while ($donnees = $reponse->fetch())
{
    echo '<p><strong>' . htmlspecialchars($donnees['date_creation_fr']) .' : ' . htmlspecialchars($donnees['time_creation_fr']) .' : ' . htmlspecialchars($donnees['pseudo']) . ' :   </strong>'.htmlspecialchars($donnees['message']).'</p>';
}
 
 
 
$reponse->closeCursor();
 
?>
    </body>
</html>


 
de plus j'aimerais savoir comment je peu placer le cookie ( ligne 1 ) dans le label pseudo de sorte a ce que dès que la personne entre son pseudo et envoie un message sons pseudo sois enregistrer dans un cookie et remplisse automatiquement le label pseudo avec son pseudo. en suite le bbCode ne marche pas et n'indique aucun message d'erreur.
 
merci d'avance

Reply

Marsh Posté le 10-02-2017 à 18:07:35   

Reply

Marsh Posté le 10-02-2017 à 23:32:15    

Dans les liens hypertextes pour passer d'une page à l'autre, il faut mettre un paramètre (genre https://mapage.fr?page=2
Dans ton script, tu vas récupérer le n° de page via $_GET["page"] que tu utilisera ensuite dans la clause LIMIT de ta requête SQL. Connaissant le nb de messages affichés par page, ton LIMIT sera de la forme :  
$page = $_GET[#page"];
$nbrecords = 10;
 
SELECT...FROM...LIMIT ($page-1)*$nbrecords, $nbrecords


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-02-2017 à 12:28:01    

bonjour,
 
j'ai mis sa
 

Citation :

$bdd = new PDO('mysql:host=***;dbname=***;charset=utf8', '****', '***');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}
 
try
{
    $count='SELECT count(id) as nb_ligne FROM minichat';
    $reponse = $bdd->prepare($count);
    $reponse->execute();
    $nb_enregistrement_total=$reponse->fetch();
}
 
catch(Exception $e)
{  
    die('Erreur : '.$e->getMessage());
}
$ligne_affichage=10;
/* on va calculer le nombre de page que cela va donner */
$nombreDePages = ceil($nb_enregistrement_total['nb_ligne'] / $ligne_affichage);
/* On contrôle le bon format du GET et si il exist si c'est le cas on le reprend bien sinon ou le définit la limite basse de 0 */
if(isset($_GET['page']) and is_numeric($_GET['page']) and $_GET['page']>0) $_GET['page']=intval($_GET['page']); else $_GET['page']=0;
/* si on est dans une limite supérieur on prend les deux bornes */
if($_GET['page']<$nb_enregistrement_total['nb_ligne']) $depart=$ligne_affichage.' OFFSET '.$_GET['page'];
/* sinon on fait un limit simple avec le Nb d'enregistrement de page défini */
else { $depart=$ligne_affichage;}
/* on va maintenant s'occuper de la requête qui intègre les limites */
$nombreDePages = $_GET['page'];  
$ligne_affichage = 10;
try
{  
    $liste='SELECT id,pseudo,message, DATE_FORMAT(date_crea, \'%d/%m/%Y\') AS date_creation_fr, TIME_FORMAT(date_crea, \'%Hh%imin%ss\') AS time_creation_fr FROM minichat LIMIT ($page-1)*$nbrecords, $nbrecords '.$depart;
    $reponse = $bdd->prepare($liste);
    $reponse->execute();
}
 
catch(Exception $e)
{  
    die('Erreur : '.$e->getMessage());
}
 
$reponse = $bdd->query('SELECT pseudo, message, DATE_FORMAT(date_crea, \'%d/%m/%Y\') AS date_creation_fr, TIME_FORMAT(date_crea, \'%Hh%imin%ss\') AS time_creation_fr FROM minichat ORDER BY ID DESC LIMIT ($page-1)*$nbrecords, $nbrecords');


 
et sa me met sa
Fatal error: Call to a member function fetch() on boolean in /home/u609801953/public_html/minichat.php on line 97

Reply

Marsh Posté le 11-02-2017 à 16:47:15    

Merci d'utiliser la balise [code]. Ton code est illisible :o
Ensuite, t'as pas initialisé les variables que je t'ai proposées : $page et $nbrecords. Par ailleurs, tu écris  
LIMIT ($page-1)*$nbrecords, $nbrecords '.$depart;  
Ca risque pas de marcher :/
 
T'as regardé au moins la syntaxe de la clause LIMIT de Mysql :??:
Quand il y a 2 arguments, le 1er, c'est le n° de l'enregistrement à partir duquel commencer à récupérer, et le 2ème, le nb d'enregistrements à récupérer.
Donc construis une requête SQL valide et ça ira mieux. Une petite aide : fait un echo $liste; afin de vérifier dans PhpMyAdmin que la syntaxe de ta requête est OK. Tu verras aussi si ça te remonte les bons enregistrements.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-02-2017 à 17:22:35    

je ne peu pas mettre les variables $page et $nbrecords sa me met  
Parse error: syntax error, unexpected ';', expecting ']' in /home/u609801953/public_html/minichat.php on line 82
et a la ligne 82 il y a

Code :
  1. $nbrecords = 10;


pour la balise [code] je savais pas que sa exister je n'ai pas l'option de cette balise j'ai juste la balise [cpp].
 

Citation :

T'as regardé au moins la syntaxe de la clause LIMIT de Mysql :??:  
Quand il y a 2 arguments, le 1er, c'est le n° de l'enregistrement à partir duquel commencer à récupérer, et le 2ème, le nb d'enregistrements à récupérer.  
Donc construis une requête SQL valide et ça ira mieux. Une petite aide : fait un echo $liste; afin de vérifier dans PhpMyAdmin que la syntaxe de ta requête est OK. Tu verras aussi si ça te remonte les bons enregistrements.


je voit pas ce que tu veu dire

Reply

Marsh Posté le 11-02-2017 à 23:43:37    

La chaîne de caractère qui contient ta requête SQL n'est pas construite correctement !
'SELECT pseudo, message, DATE_FORMAT(date_crea, \'%d/%m/%Y\') AS date_creation_fr, TIME_FORMAT(date_crea, \'%Hh%imin%ss\') AS time_creation_fr FROM minichat ORDER BY ID DESC LIMIT ".($page-1)*$nbrecords.", $nbrecords"
-> fais bien attention à la différence d'utilisation du ' et du " surtout quand on mets une variable php à l'intérieure !!!  
ex :
$page = 1;
echo '$page';
-> ça va t'afficher $page
 
echo "$page";
-> ça va t'afficher 1


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-02-2017 à 12:42:57    

ok merci je vais voir sa

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed