limiter le nombre d'affichage en coupant en plusieurs pages

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : limiter le nombre d'affichage en coupant en plusieurs pages

par mumulafrite » 09 févr. 2005, 17:57

Non cela ne fonctionne pas, jai verfier la requete et elle est bonne...
Bon je vais chercher un peu pour ne pas vous saouler et je reviendrais vous voir pour vous tenir au courant.

par @rthur » 09 févr. 2005, 15:23

$requete="select * from extrais WHERE cid = '".$codecat."' LIMIT 20, ".$_GET['start']." ";
$id_requete = mysql_query($requete,$id_connex ) or die("Erreur MySQL: ".mysql_error()."<br />Requète SQL: ".$requete); 
Essaye comme ça et si l'erreur persiste, teste ta requète dans phpmyadmin.
Pour le notice, c'est parce tu ne passe pas la variable start en paramètre, deux solutions, soit tu désactives l'affichage des notices, soit tu teste l'existence de $_GET['start'] avec la fonction isset()

par jeff » 09 févr. 2005, 14:05

j'ai peut etre oublié des quotes
<?php <?php $id_requete = mysql_query("select * from extrais WHERE cid = '".$codecat."' LIMIT 20, '".$_GET['start']."' ",$id_connex ) or die("Erreur MySQL: ".mysql_error()); 

par mumulafrite » 09 févr. 2005, 13:39

Non toujours pas toujours le meme probleme que le post précedent... :(

par jeff » 09 févr. 2005, 13:31

<?php $id_requete = mysql_query("select * from extrais WHERE cid = '".$codecat."' LIMIT 20, ".$_GET['start']." ",$id_connex ) or die("Erreur MySQL: ".mysql_error()); 

par mumulafrite » 09 févr. 2005, 13:16

Notice: Undefined index: start in c:\program files\easyphp1-7\www\extraits\divers.php on line 55
Erreur MySQL: Erreur de syntaxe près de '' à la ligne 1
voici la ligne 55
$id_requete = mysql_query("select * from extrais WHERE cid = ".$codecat." LIMIT 20, ".$_GET['start']." ",$id_connex ) or die("Erreur MySQL: ".mysql_error()); 
dsl :oops:

par @rthur » 09 févr. 2005, 13:15

Sans avoir l'erreur c'est assez difficile de faire un débugage :D

par mumulafrite » 09 févr. 2005, 13:14

Oh ca me rend fou!!!
La requete marchait avant que je fasse la modif. Cela maffichait tout ce que je voulais et je voulais limiter un affichage par page...

Bon jai une nouvelle erreur...
je te passe le code e entier pour que tu puisse voir ce qui se trime la dedant:
        <? 
		 function SplitPages($nbrow, $perpage = 20)
{
    //Compte le nombre de pages
    $nbpage = ceil($nbrow/$perpage);
    for($i=0;$i<$nbpage;$i++)
    {
 echo '<a href="page.php?start='.($i*$perpage).'">'.($i+1).'</a>';     }
} 
		$codecat = 8;  // inserer le code de la catégorie de musique
		$nombase="rikikifunkin";
$id_connex = mysql_connect("localhost","root","","rikikifunkin") or die("La connexion à echoué!");
mysql_select_db($nombase,$id_connex);
$id_requete = mysql_query("select * from extrais WHERE cid = ".$codecat." LIMIT 20, ".$_GET['start']." ",$id_connex ) or die("Erreur MySQL: ".mysql_error()); 
$compteur = mysql_query("SELECT * FROM extrais WHERE cid = $codecat",$id_connex);
$compteur1=mysql_num_rows($compteur);
echo '<strong><font color=\"#FFFFFF\">il y à ',$compteur1,' extraits dans divers .</font></strong> ';//affichage du nombre de musique de la catégorie
//affichage de tous les musique de la catégorie
if($id_requete)
{

echo '<TABLE WIDTH=100% BORDER=0.9 align="center" CELLPADDING=0 CELLSPACING=0 bordercolor="#000000" bgcolor="#798196">
  <tr background="/images/barre.gif"> 
    <td height="3" colspan="4" background="/images/barre.gif"><div align="left"> <font color="#FFFFFF"><strong>.::Catégorie divers</strong></div></td></tr>'
.'<tr>'
.'<td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Date</div></td>
    <td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Auteur</div></td>
    <td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Titre</div></td>
	<td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Ecouter</div></td>';
While($ligne = mysql_fetch_array ($id_requete)){
echo '<tr>'
.'<td width="15%" height="3" bgcolor="#000000"><div align="center"><font color="#FFFFFF" size="-1">'.$ligne['date'].' </A></td>'
.'<td width="40%" bgcolor="#000000"><div align="center"><font color="#FFFFFF">' .$ligne['auteur'].'</td>'
.'<td width="40%" bgcolor="#000000"><div align="center"><font color="#FFFFFF">' .$ligne['titre'].'</td>'
.'<td width="10%" bgcolor="#000000"><div align="center"><a href="extraits/fichiers/'.$ligne['nomfichier'].'.mp3"><img src="/images/reala.gif" width="15" height="15" border="0"></a></td></tr>';
echo '</tr>';
}
echo '</table>';
mysql_free_result($id_requete);
}
else
{
echo"impossible d'executer la requete";
}

mysql_close();
?>
Merci d'avance

par @rthur » 09 févr. 2005, 12:58

Il faut utiliser GET/POST et ton message impossible d'exécuter la requète est généré par ton code quelques lignes plus loin je suppose.
Teste ta requète dans phpMyAdmin pour t'assurer qu'elle soit ok.

Voila une modif pour récupérer start correctement et pour afficher l'erreur MySQL si ta requète ne s'exécute pas bien.
$id_requete = mysql_query("select * from extrais WHERE cid = $codecat LIMIT 20, $start ",$id_connex ); 
à remplacer par:
$id_requete = mysql_query("select * from extrais WHERE cid = ".$codecat." LIMIT 20, ".$_GET['start']." ",$id_connex ) or die("Erreur MySQL: ".mysql_error()); 

par Invité » 09 févr. 2005, 12:13

Non ca marche po, mais ca sameliore un peu
ma requete
$id_requete = mysql_query("select * from extrais WHERE cid = $codecat LIMIT 20, $start ",$id_connex );
Il me met deux messages derreur
Notice: Undefined variable: start in c:\program files\easyphp1-7\www\extraits\divers.php on line 54
et
impossible d'executer la requete
Voilà...

par @rthur » 09 févr. 2005, 11:56

Essaye de remplacer ça:
echo '<a href="page.php?start='.$i*$perpage.'">'.$i+1.'</a>'; 
par:
echo '<a href="page.php?start='.($i*$perpage).'">'.($i+1).'</a>'; 

par mumulafrite » 09 févr. 2005, 11:30

Bon ca marche pas....
jai mis la fonction et rajouté ce que tu mas dit a la requete
$id_requete = mysql_query("select * from extrais WHERE cid = $codecat LIMIT 20, $start ");
Ca me met une erreur de ce type
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in c:\program files\easyphp1-7\www\extraits\divers.php on line 48
à la ligne 48 c'est ca:
        echo '<a href="page.php?start='.$i*$perpage.'">'.$i+1.'</a>';
Voilà si tu peux maider et puis men dire un peu plus pour afficher la page parce que un if je sais ce que c'est mais pas du tout comment le mettre.

par ram2000 » 09 févr. 2005, 03:21

Bien trop compliqué pour faire un pauvre affichage de page!

Un truc simple comme ceci fonctionne

function SplitPages($nbrow, $perpage = 20)
{
    //Compte le nombre de pages
    $nbpage = ceil($nbrow/$perpage);
    for($i=0;$i<$nbpage;$i++)
    {
        echo '<a href="page.php?start='.$i*$perpage.'">'.$i+1.'</a>';
    }
}
?>
Dans la fonction le paramètre $perpage est facultatif, 20 par page par défaut si non spécifié.

Et dans ta requête tu ajoute la clause LIMIT 20, $start

Bien sur la fonction est de base, rien n'indique sur quelle page l'utilisateur se trouve, mais c'est pas tellement compliqué à ajouter, un ptit if dans la boucle et voilà ;)

par mumulafrite » 09 févr. 2005, 00:21

Jai trouvé ca sur le web
<?php
function barre_navigation ($nb_total,
        $nb_affichage_par_page,
        $debut,
        $nb_liens_dans_la_barre) {

    $barre = '';
    
    // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
    if ($_SERVER['QUERY_STRING'] == "") {
        $query = $_SERVER['PHP_SELF'].'?debut=';
    }
    else {
        $tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
        $nb_element = count ($tableau);
        if ($nb_element == 1) {
            $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
        }
        else {
            if ($tableau[0] == "") {
                $query = $_SERVER['PHP_SELF'].'?debut=';
            }
            else {
                $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
            }
        }
    }
    
    // on calcul le numéro de la page active
    $page_active = floor(($debut/$nb_affichage_par_page)+1);
    // on calcul le nombre de pages total que va prendre notre affichage
    $nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
    
    // on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
    // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
    if ($nb_liens_dans_la_barre%2==0) {
        $cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
        $cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
    }
    else {
        $cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
        $cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
    }
    
    if ($cpt_deb1 <= 1) {
        $cpt_deb = 1;
        $cpt_fin = $nb_liens_dans_la_barre;
    }
    elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
        $cpt_deb = $cpt_deb1;
        $cpt_fin = $cpt_fin1;
    }
    else {
        $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
        $cpt_fin = $nb_pages_total;
    }

    if ($nb_pages_total <= $nb_liens_dans_la_barre) {
        $cpt_deb=1;
        $cpt_fin=$nb_pages_total;
    }
    
    // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
    if ($cpt_deb != 1) {
        $cible = $query.(0);
        $lien = '<A HREF="'.$cible.'"><<</A>&nbsp;&nbsp;';
    }
    else {
        $lien='';
    }
    $barre .= $lien;

    // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
    for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
        if ($cpt == $page_active) {
            if ($cpt == $nb_pages_total) {
                $barre .= $cpt;
            }
            else {
                $barre .= $cpt.'&nbsp;-&nbsp;';
            }
        }
        else {
            if ($cpt == $cpt_fin) {
                $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
                $barre .= "'>".$cpt."</A>";
            }
            else {
                
                $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
                $barre .= "'>".$cpt."</A>&nbsp;-&nbsp;";
            }
        }
    }
    
    $fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
    if (($nb_total % $nb_affichage_par_page) == 0) {
        $fin = $fin - $nb_affichage_par_page;
    }

        // si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
    if ($cpt_fin != $nb_pages_total) {
        $cible = $query.$fin;
        $lien = '&nbsp;&nbsp;<A HREF="'.$cible.'">>></A>';
    }
    else {
        $lien='';
    }
    $barre .= $lien;

    return $barre;    
}
?>

<html>
<head>
<title>Les livres de la bibliothèque</title>
</head>

</body>
Les différents livres de la bibliothèque :<br /><br />
<?php
// on se connecte à notre base
$base = mysql_connect ('serveur', 'login', 'nom_base');
mysql_select_db ('nom_base', $base);

// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql  = 'SELECT count(*) FROM catalogue';

// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);

// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
    echo 'Aucune réponse trouvée';
}
else {
    echo '<table><tr><td><td>Description</td></tr>';
    
    // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
    if (!isset($_GET['debut'])) $_GET['debut'] = 0;
    
    $nb_affichage_par_page = 1;
    
    // Préparation de la requête avec le LIMIT
    $sql = 'SELECT titre, description FROM catalogue ORDER BY titre ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;

    // on exécute la requête
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

    // on va scanner tous les tuples un par un
    while ($data = mysql_fetch_array($req)) {
        // on affiches les résultats dans la <table>
        echo '<tr><td><td>' , stripslashes(htmlentities(trim($data['description']))) , '</td></tr>';
    }

    // on libère l'espace mémoire alloué pour cette requête
    mysql_free_result ($req);
    echo '</table><br />';

    // on affiche enfin notre barre
    echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
mysql_close ();
echo '</table><br />';
?>

</body>
</html>
Visible sur http://www.lephpfacile.com/howto/index.php?p=6 mais javoue que c pas phpfacile lol

par jeff » 09 févr. 2005, 00:16

moi je vois un truc comme ca
while($i!=%20)
{
affichage
$i++;
}
mais c'est pas terrible 2 boucles While imbriquer