Pagination sans passer par un bdd

WRInaute impliqué
Bonjour,

Je voudrais savoir si il est possible de faire une pagination sans passer par une BDD et SQl, n'étant pas un expert en php.
Je m'explique, si je dispose d'une liste de 100 descriptions
que je mets dans un array
$array=array(/*Le contenu à paginer*/);

Est'il possible et surtout comment diviser cela en en 10 * 10 lignes puis
de d'afficher cela en Page 1 - 2 - 3 - 4 etc.

Je suppose que certains utilisent ce type de script mais je n'ai
pas réussie a le trouver pour le moment

ludo merci
 
WRInaute discret
Perte des performances

Le but de la pagination est de ne sélectionner que les données à afficher.

Car avec ta méthode tu va sélectionner dans la BDD tous les éléments pour en afficher seulement 10 donc perte de l'intéret de la pagination donc des performances.

En plus tu sera obligé de passer de page en page ton tableau (de la page 1 à la page 2 etc...)

Extrait tu tes données à afficher d'une BDD ?
Ou elles sont en dur dans ton code ($tableau={'description 1','description 2'....) ?
 
WRInaute accro
c'est tout a fait possible en Ajax, mais tu t'y connais assez ? car c'est peut-etre plus compliqué de faire de l'ajax que faire une requete conditionnée à une base de données en php
 
WRInaute impliqué
en php, c'est tout simple a faire avec une boucle for :)

admettons que t'a page se nomme index.php?p=x (x est le numéro de la page à afficher)

Code:
// Nombre de résultats par page
$nb = 10

// On affiche les résultats
$start = $i*$nb
$end = $start+$nb
for ( $i=$start; $i<=$end; $i++ ) {
    echo $array[$i];
    }

En gros avec ca tu devrais pouvoir te débrouiller :)
 
WRInaute impliqué
Re: Perte des performances

Extrait tu tes données à afficher d'une BDD ? Si oui je peu t'expliquer facilement comment il faut faire ?


Je crois que vais rester sur une solution de bdd, mais du coup
il faut que je rentre mes infos sur une bdd. Peux tu me donner
un exemple de code stye pour rentrer des news automatiquement
dans une bdd ?
Ensuite l'extraction cela je sais faire

ludo
 
WRInaute impliqué
Pour insérer des infos dans une BDD, ca se passe avec INSERT INTO...

Mais je vois pas trop le rapport avec ta premiere question ;)
 
WRInaute discret
Pour insérer tes données dans une table MYSQL

mysql_query("INSERT INTO <table> (colonne1,colonne2) VALUES ('valeur1','valeur2')");

Comme dit NxtGen pas grand rapport avec ta question !
 
WRInaute accro
NxtGen> non, ta réponse n'est pas correcte, car quand tu passes en page 2, tu le récupère ou ton tableau vu qu'il n'y a pas de BDD. son tableau est crée à la volée dans la page, donc une fois que t as cliqué sur ton pager, t as plus de tableau ...

lis bien la question : sans BDD / SQL
 
WRInaute impliqué
il le sors d'ou son tableau ?
si au départ il a un array('texteA', 'texteB', ...) qu'il a généré à la main par exemple, et qu'il est présent sur la page index.php avant le code que j'ai donné plus haut, ca fonctionne bien correctement
 
WRInaute discret
Sans BDD la solution de NxtGen marchera parfaitement, sinon bien entendu au niveau performance il faut utiliser une solution avec BDD pour effectuer une simple requête plutôt que de charger toutes les infos à chaque page et parcourir un tableau !
 
WRInaute accro
ah bien sur tout dépend de comment est généré le tableau ... dans ce cas la solution marche, il faudrait connaitre dans son cas d'ou il vient
 
WRInaute impliqué
NxtGen a dit:
Pour insérer des infos dans une BDD, ca se passe avec INSERT INTO...

Mais je vois pas trop le rapport avec ta premiere question ;)


J'ai posé deux questions car en fait, je ne sais pas encore quelle solution choisir
En fait, je parse un document xml, je controle le nombre de retour de réponses 100 maxi,
mais lorsque j'interroge, je n'ai pas de variable pour limiter l'affichage par page.
Donc soit j'insere ces données sur une bdd, puis je pagine, soit je pagine en utilisant un array.
un exercice que je connais mal

foreach($parser->document->categories[0]->category[0]->items[0]->product as $product){

echo "Les infos que l'on me transmet";
 
WRInaute impliqué
dudo a dit:
Donc soit j'insere ces données sur une bdd, puis je pagine, soit je pagine en utilisant un array.
un exercice que je connais mal

paginer avec un array, c'est pas un soucis au niveau performance, accéder à la page 10 ou 50 c'est pareil, pour peux que ton tableau soit construit comme il faut :
Code:
$infos = array();
$infos[] = array( "champ1" => "valeur1", "champ2" => "valeur2", "champ3" => "valeur3", [...], "champn" => "valeurn");
$infos[] = array( "champ1" => "valeur1", "champ2" => "valeur2", "champ3" => "valeur3", [...], "champn" => "valeurn");
$infos[] = array( "champ1" => "valeur1", "champ2" => "valeur2", "champ3" => "valeur3", [...], "champn" => "valeurn");
$infos[] = array( "champ1" => "valeur1", "champ2" => "valeur2", "champ3" => "valeur3", [...], "champn" => "valeurn");
ensuite y a un moyen simple de conserver des infos de page en page : la session

Code:
session_start();

if( isset($_SESSION['infos'] )
{
   $infos = $_SESSION['infos'];

}
else
{
   $infos = getInfosFromXML_or_BDD_or_File( ... );
    $_SESSION['infos'] = $infos;
}
 
WRInaute discret
Une solution

1 - Parser ton XML et enregistrer au fur et a mesure tes données dans la BDD (INSERT INTO)


2 - appel de la page :

"index.php?page=1", "index.php?page=2"... (boucle en fonction du nombre de description pour afficher le nombre total de pages)


3 - recup de la page à afficher :

$start=$_GET['page']


4 - recup dans la bdd des infos :

SELECT info FROM description LIMIT $start,10


Pas d'utilisation de session, on charge que les infos utiles, pas de parcours de tableau. Les BDD servent a structurer l'information, beaucoup plus performant qu'une gestion des données via tableau php
 
WRInaute impliqué
je suis pas tout à fait d'accord sur le principe d'aller chercher les infos au fur et à mesure page en page.
Un jour mon chef me dit tu connais l'algorithme du clou ?
- je lui dis non c'est quoi ?
il me répond c'est ce que tu as codé
- je lui dis ah bon et c'est quoi l'algorithme du clou ?
il me répond c'est d'aller chercher 1000 fois un clou alors que tu pourrais rapporter 1 fois 1000 clous
[...]

donc si tu sais pertinemment que tes internautes vont paginer, c'est beaucoup plus optimum de pré charger et de conserver quelques pages d'avance en session, après combien c'est un juste calcul à faire en tenant compte du poids des infos
 
Discussions similaires
Haut