pagination sans passer par un bdd

dudo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 456
Inscription: 10 Jan 2004

pagination sans passer par un bdd

Message le Jeu Oct 16, 2008 12:42

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

slek
WRInaute discret
WRInaute discret
 
Messages: 51
Inscription: 15 Aoû 2005

Perte des performances

Message le Jeu Oct 16, 2008 12:53

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'....) ?
Dernière édition par slek le Jeu Oct 16, 2008 13:30, édité 2 fois.


e-kiwi
Modérateur
Modérateur
 
Messages: 15617
Inscription: 23 Déc 2003

Message le Jeu Oct 16, 2008 13:17

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


NxtGen
WRInaute impliqué
WRInaute impliqué
 
Messages: 762
Inscription: 24 Oct 2006

Message le Jeu Oct 16, 2008 13:27

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: Tout sélectionner
// 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 :)

dudo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 456
Inscription: 10 Jan 2004

Re: Perte des performances

Message le Jeu Oct 16, 2008 13:29

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


NxtGen
WRInaute impliqué
WRInaute impliqué
 
Messages: 762
Inscription: 24 Oct 2006

Message le Jeu Oct 16, 2008 13:32

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 ;)

slek
WRInaute discret
WRInaute discret
 
Messages: 51
Inscription: 15 Aoû 2005

pagination sans passer par un bdd

Message le Jeu Oct 16, 2008 13:33

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 !


e-kiwi
Modérateur
Modérateur
 
Messages: 15617
Inscription: 23 Déc 2003

Message le Jeu Oct 16, 2008 13:37

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


NxtGen
WRInaute impliqué
WRInaute impliqué
 
Messages: 762
Inscription: 24 Oct 2006

Message le Jeu Oct 16, 2008 13:42

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

slek
WRInaute discret
WRInaute discret
 
Messages: 51
Inscription: 15 Aoû 2005

pagination sans passer par un bdd

Message le Jeu Oct 16, 2008 14:14

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 !


e-kiwi
Modérateur
Modérateur
 
Messages: 15617
Inscription: 23 Déc 2003

Message le Jeu Oct 16, 2008 14:16

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

dudo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 456
Inscription: 10 Jan 2004

Message le Jeu Oct 16, 2008 14:18

NxtGen a écrit: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";


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Jeu Oct 16, 2008 14:53

dudo a écrit: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: Tout sélectionner
$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: Tout sélectionner
session_start();

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

}
else
{
   $infos = getInfosFromXML_or_BDD_or_File( ... );
    $_SESSION['infos'] = $infos;
}

slek
WRInaute discret
WRInaute discret
 
Messages: 51
Inscription: 15 Aoû 2005

Une solution

Message le Jeu Oct 16, 2008 15:21

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


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Jeu Oct 16, 2008 15:33

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


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités