Page 1 sur 1

problème pagination avec pseudo frame

Posté : 22 sept. 2014, 21:24
par lezarts
Bonjour à tous,
Voilà un bon bout de temps que je ne suis pas revenue sur ce forum,
et je tiens par cet écrit à remercier d'avance tous ceux qui mon aidé par le passé ...
Aujourd'hui php, MySQL et autres, on évolué ce qui pose un problème de remise à niveau pour le néophyte que je suis,
et qui de plus gérer un site tout seul (les images, le javascript, Jquery, le css, le php etc etc etc...), n'est pas forcément de bon aloi,
et cela me fait passer de nombreuses nuits blanches, pour rechercher les problèmes lier à l'évolution d'internet.

Bref..?
Voila mon problème du moment j'ai fait un système de pagination qui fonctionne en solo,
mais quand je l'intègre à mon site il ne fonctionne pas du fait que j'utilise les pseudo frame.

PAGE DE PAGINATION
<?php
require ($_SERVER['DOCUMENT_ROOT'].'connect.php');

	$req = $db->query('SELECT id FROM chineproverbe');
	
	$nbr_total_articles = $req->rowCount();
	
	$nbr_articles_par_page = 10;
	// nombre de numéro gauche et droite numéro page selectionées
	$nbr_articles_max_gauche_et_droite = 4;
	
	$last_page = ceil($nbr_total_articles / $nbr_articles_par_page);
	
	if(isset($_GET['p']) && is_numeric($_GET['p'])){
		$page_num = $_GET['p'];		
	}
	else{
		$page_num = 1;
	}
	if($page_num < 1){
		$page_num = 1;
	}
	else if($page_num > $last_page){
		$page_num = $last_page;		
	}
	
	$limit = 'LIMIT '.($page_num - 1) * $nbr_articles_par_page. ',' . $nbr_articles_par_page;
	
	$sql = "SELECT id,text FROM chineproverbe ORDER BY id ASC $limit";
	
	//Pagination
	$pagination = '';
	
	if($last_page != 1){
		if($page_num > 1){
			$previous = $page_num - 1;
			$pagination .= '<a href="?page='.$previous.'">Précédent</a> &nbsp; &nbsp;';
			
			for($i = $page_num - $nbr_articles_max_gauche_et_droite; $i < $page_num; $i++){
				if($i > 0){
					$pagination .= '<a href="?page='.$i.'">'.$i.'</a> &nbsp;';
				}
			}
		}
		
		$pagination .= '<span class="active">'.$page_num.'</span>&nbsp;';
		for($i = $page_num+1; $i <= $last_page; $i++){
			$pagination .= '<a href="?page='.$i.'">'.$i.'</a> ';
			if($i >= $page_num + $nbr_articles_max_gauche_et_droite){
				break;	
			}
		}
		if($page_num != $last_page){
			$next = $page_num +1;
			$pagination .= '<a href="?page='.$next.'"> &nbsp; &nbsp;Suivant</a>';
			
		}
	}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Pagination</title>
</head>

<body>
<?php
	echo "<p><strong>($nbr_total_articles)</strong> proverbes au total !</p><br />";
	echo "Page <b>$page_num</b> sur <b>$last_page</b>";

	echo "<ul class='proverbe'>";

		$req = $db->query($sql);
		while($data = $req->fetch())
		{
			echo '<li>'.$data['text'].'</li>';
		}

	echo "</ul>";

	echo '<div id="pagination">'.$pagination.'</div>';
?>
</body>
</html>

PAGE ACCUEIL.PHP
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Document sans titre</title>
</head>

<body>
<div class="entete" >[/html]
	<?php include('entete.php'); ?>
</div>
	<div class="colonneGauche" >
		<?php include('menu.php'); ?>
</div>
	<div class="colonneDroite">
		<?php
		   // Tableau contenant les pages autorisées
		   $pageOK = array('accueil' => 'accueil.php',
		   					'news' => 'news.php',
							'pagination' => 'pagination.php'
						   );

		  if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) 
		  {
			 include($pageOK[$_GET['page']]);
		  } 
		  else 
		  {
			include('accueil.php');
		  }
	?>
</div> 
<div class="pied">
	<?php include('pied.htm'); ?>
</div> 
</body>
</html>
Voilà,
la page index.php je l'ai minimiser pour l'exemple,
Maintenant si je lance ma page de pagination (je suis en local) l'url se présentera de la façon suivante :
localhost/site/index.php?page=pagination
Jusque là pas de problème.

Mais quand je pagine la page l'url se présente sous cette forme:
localhost/site/index.php?page=1
localhost/site/index.php?page=2
etc etc etc. pour tout les donnée appelée dans ma bdd, et cela me ramène à la page par default accueil.php.

Comment..? Dois-je procéder pour que ma pagination fonctionne sans être obliger de toucher à mon code de pseudo frame....????

Dans l'attente de votre aide je vous dis d'avance....

Un grand MERCI

Re: problème pagination avec pseudo frame

Posté : 22 sept. 2014, 23:40
par moogli
salut,

c'est logique c'est ce que tu demande ;)

tu utilise "page" comme variable d'url pour les deux ce n'est pas possible.

dans le code de la pagination du utilise $_GET['p'] pour savoir sur qu'elle page tu es mais aussi <a href="?page= ce n'est pas logique.

Le plus simple c'est d'utiliser 'p' pour le N° de page.

Et même dans ce cas cela ne fonctionnera pas il faut que tu pense a ajouter au lien que tu construit les paramètres déjà existant dans l'url.
tu peux avoir cette info très facilement avec $_SERVER['QUERY_STRING']

@+

Re: problème pagination avec pseudo frame

Posté : 23 sept. 2014, 00:32
par lezarts
Merci moogli de ta réponse,

J'avais modifier le code en mettant p?= partout pour être différent de $pageOK = array()
mais j'ai oublie de remettre page dans le $_GET[p] et de plus c'est vrai que cela ne fonctionnait pas de cette manière,
et voilà pourquoi je suis de retour sur le forum.
Merci pour la remarque...

Bon je vais faire quelques lecture sur $_SERVER['QUERY_STRING'] et essayer de comprendre,
au cas ou bin je repasserai pour de plus ample information....

Encore merci

Re: problème pagination avec pseudo frame

Posté : 23 sept. 2014, 22:35
par moogli
la query string c'est ce qu'il y après le ? dans l'url ;)

Si tu pense que le sujet est résolus peux tu cliquer sur le bouton vert à droite du titre "mettre le sujet en tant que résolu" :)

@+

Re: problème pagination avec pseudo frame

Posté : 25 sept. 2014, 13:10
par Invité
Yop,

pour l'instant quand j'appel la page pagination l'url ce présente de cette façon

page=pagination

Ensuite quand je passe aux pages suivantes l'url ce présente de cette façon

page=1
page=2
etc etc etc

ce que je voudrais c'est que l'url se présente de la façon suivante pour chaque page,

page=pagination-1
page=pagination-2
page=pagination-3
page=pagination-4

Pour cela est-ce que je dois faire un url rewriting ou est-ce que je peux le déclarer dans le code php

Re: problème pagination avec pseudo frame

Posté : 27 sept. 2014, 07:11
par Invité
Re yop,

Après moult recherche, lecture et divers testes,
je me pose tout un tas de question :

1.- Serait-il possible avec un preg_match de renommer l'url Si oui..? Comment faire et ou le placer dans le code php.

2.- Dans un fichier htacces dont j'ai essayé plusieurs rewriteurl et qui n'ont donné aucun résultat escompté comment faire.

Pour mémoire dans le code pagination j'utilise la fonction is_numeric et actuellement je l'ai changer pour la fonction is_string,
ce qui devrait me permettre de mettre des caractère alphabétique et numérique dans l'url ce qui n'était pas le cas avant....

car actuellement dans mon code de pseudo frame je dois déclarer ma pagination en tant que numériques
$pageOK = array('accueil' => 'accueil.php',
                          'news' => 'news.php',
                          'pagination' => 'pagination.php'
                          '1' => 'pagination.php'
                          '2' => 'pagination.php'                                              
                          '3' => 'pagination.php'   
                          etc etc etc.....                                             
                          );
Bref..?

Ce qui m'empêche de pouvoir mette une autre page en pagination, dans le code de pseudo frame
car cela m'amènerai un conflit because..? Deux fois des lien numérique identique serait déclarer...
alors après toutes ces question dont je recherche une solution la mieux adapté que faire, à part d'ouvrir le débat...

Dans l'attente de votre aide merci d'avance

Re: problème pagination avec pseudo frame

Posté : 27 sept. 2014, 15:30
par tesmet
La suggestion déjà faite du second paramètre dédié à la pagination me semble la plus logique.
// les pseudo frame
$pageOK = array('accueil' => 'accueil.php', 'news' => 'news.php', 'pagination' => 'pagination.php');

// générer des liens pour tester
foreach($pageOK as $page => $include) {
  if($page != 'accueil') {
    if($page == 'news') $pagination = range(1, 2);
    else $pagination = range(1, 4);
    foreach($pagination as $numero) {
      echo '<a href="?page=', $page, '&p=', $numero, '">', $numero, '</a>', PHP_EOL;
    }
    echo '<a href="?page=', $page, '&p=fausse">fausse</a>', PHP_EOL;
  }
  else echo '<a href="?page=', $page, '">', $page, '</a>', PHP_EOL;
}
echo '<a href="?page=faux&p=2">faux-2</a>', PHP_EOL;

// évaluer l'inclusion et les paginations
$page = isset($_GET['page']) ? $_GET['page'] : 'accueil';
$include = isset($pageOK[$page]) ? $pageOK[$page] : $pageOK['accueil'];
$p = isset($_GET['p']) ? is_numeric($_GET['p']) ? $_GET['p'] : 1 : 1;

// afficher le résultat
echo 'include(', $include, ') et $page = ', $page, '; et $p = ', $p, PHP_EOL;
mais s'il y a vraiment une limitation pour n'avoir qu'un seul et unique paramètre page.
// les pseudo frame
$pageOK = array('accueil' => 'accueil.php', 'news' => 'news.php', 'pagination' => 'pagination.php');

// générer des liens pour tester
foreach($pageOK as $page => $include) {
  if($page != 'accueil') {
    if($page == 'news') $pagination = range(1, 2);
    else $pagination = range(1, 4);
    foreach($pagination as $numero) {
      echo '<a href="?page=', $page, '-', $numero, '">', $numero, '</a>', PHP_EOL;
    }
    echo '<a href="?page=', $page, '-fausse">fausse</a>', PHP_EOL;
  }
  else echo '<a href="?page=', $page, '">', $page, '</a>', PHP_EOL;
}
echo '<a href="?page=faux-2">faux-2</a>', PHP_EOL;

// évaluer l'inclusion et les paginations
$page = isset($_GET['page']) ? $_GET['page'] : key($pageOK);
$explode = explode('-', $page);
$page = isset($explode[0]) ? $explode[0] : 'accueil';
$include = isset($pageOK[$page]) ? $pageOK[$page] : $pageOK['accueil'];
$_GET['page'] = isset($explode[1]) ? is_numeric($explode[1]) ? $explode[1] : 1 : $page;

// afficher le résultat
echo 'include(', $include, ') et $_GET[\'page\'] = ', $_GET['page'], PHP_EOL;