Pb Affichage page par page

Squall
Invité n'ayant pas de compte PHPfrance

07 juin 2005, 09:20

Bonjour tout le monde,

Je me suis aidé du cours de phpdébutant pour afficher le resultat de ma requête par pages.

J'explique :

on est sur un formulaire de selection, on selectionne ce que l'on désire afficher, et dans le résultat de l'affichage, j'ai mis ma limite à 6. Donc si j'ai 14 resultat, ça me donne 3 pages.

Pour totu ça c'est Ok. Le problème s'est qd on affiche la dernière page. J'obtiens bien pour 14 resultats les deux derniers sur la page 3. Mais quand j'affiche la page 3, la fonction affiche pages me met non plus 1 2 3 mais 1234567 avec 7 en page active et la limite de 2 3 4 5 6 ki sont respectivement à 2 4 6 8 10 et 12 pour 7.

Et donc voilà le pb que je rencontre pourkoi cela me fait ça !

J'en appelle a votre savoir, j'ai deja fait le tour de mon entourage en programation mais personne ne voit do'u ça vient.

Voici les codes php :

pages Affi_skins_manga.php :
<? 
	require('fonctions.php');
	require('compteurclic/compteur.php');
	require('connexion.php');
	
	$num_manga = $_POST['num_manga'];
	if ($num_manga == NULL)
	{
  		$chaine=urldecode($_SERVER['QUERY_STRING']);
  		$couples=split("&", $chaine);
  		$t=array();
  		while (list(, $v)=each($couples))
  		{
  			list(, $valeur) = explode("=", $v);
  			array_push($t, $valeur);
  		}
		$num_manga=$t[0];
  		$limite=$t[1];
	}
	if( !isset($limite)) $limite = 0;
	$sql="SELECT * FROM skin_nom_anime WHERE num_anime=".$num_manga;
	$id=mysql_query($sql, $link);
	$ligne=mysql_fetch_array($id);
	$nom_anime=$ligne['nom_anime'];

	require('header.php');
	require('menu.php');
	require('partenaires.php');
	echo '<div id="centre">';
		echo '<div class="SkinManga">';
						
			$nombre = 6;
			$num_manga_save = $num_manga;
			// si limite n'existe pas on l'initialise à zéro
			if (!$limite) $limite = 0; 
			// on cherche le nom de la page.
			$path_parts = pathinfo($_SERVER['PHP_SELF']);
			$page = $path_parts["basename"];
			$select = 'SELECT count(num_skin) FROM skin_manga WHERE num_anime='.$num_manga_save;
			$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
			$row = mysql_fetch_row($result);
			$total = $row[0];
			
			$verifLimite= verifLimite($limite,$total,$nombre);
			// si la limite passée n'est pas valide on la remet à zéro
			if(!$verifLimite)
			{
			    $limite = 0;
			}

			echo '<p>';
			echo 'Skins Winamp : '.$nom_anime;
			echo '<br>';
			echo '<br>';
						
				//--- Requête Nom de Skin---//
				$sql='SELECT skin_manga.nom_skin AS nomskin, skin_manga.url AS urlskin, pds_down.id AS iddl, pds_down.total AS totaldl FROM skin_manga, pds_down WHERE skin_manga.num_anime='.$num_manga_save. ' AND pds_down.num_image=skin_manga.num_image ORDER BY nomskin ASC LIMIT '.$limite.','.$nombre;
				//--- Résultat ---//
				$res=mysql_query($sql, $link);
				if($total)
			{
				while($skin = mysql_fetch_assoc($res))
				{
					$tablo[]= $skin; //--- mettre les données dans un tableau
				}
				$nbcol=2; //--- détermine le nombre de colonnes
				
				echo '<table>';
				$nb = count($tablo);
				for($i=0;$i<$nb;$i++)
				{
					//--- les valeurs que l'on souhaite afficher
					$valeur1 = $tablo[$i]['nomskin'];
					$valeur2 = $tablo[$i]['urlskin'];
					$valeur3 = $tablo[$i]['iddl'];
					$valeur4 = $tablo[$i]['totaldl'];
					
					if($i%$nbcol==0)
					echo '<tr>';
					echo '<td align=center><a href=compteurclic/out.php?id=',$valeur3,' class="SkinManga"><img src=',$valeur2,'><br/><font class="SkinManga">',$valeur1,' - Nb de dl : ',$valeur4,'</font><br><br></td></a>';
					
					if($i%$nbcol==($nbcol-1))
					echo '</tr>';
				}
				echo '</table>';
			}
			else echo 'Pas d\'enregistrements dans cette table...';
			mysql_free_result($res);
				
			if($total > $nombre)
			{
				// affichage des liens vers les pages
				affichePages($num_manga,$nb,$page,$total,$limite);
				// affichage des boutons
				//displayNextPreviousButtons($limite,$total,$nombre,$page);
			}
			echo '<br><br><a href="skins_manga.php" class="SkinManga">Retour vers la sélection</a>';
			echo '</p>';
echo '</div>';
echo '</div>';
require 'footer.php';
?>
Voici mes fonctions :
<?
function affichePages($num_manga,$nb,$page,$total,$numpage)
{
        $nbpages=ceil($total/$nb);
        $numeroPages = 1;
        $compteurPages = 1;
        $limite  = 0;
        echo '<table border = "0" align=center><tr>'."\n";
        while($numeroPages <= $nbpages)
		{
				if( $numeroPages != (($numpage/$nb)+1))
			{
				echo '<td><a href = "'.$page.'?manga='.$num_manga.'&limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
			}
			else
			{
				echo '<td><a href = "'.$page.'?manga='.$num_manga.'&limite='.$limite.'"><font color="#000000">'.$numeroPages.'</font></a></td>'."\n";
			}
			$limite = $limite + $nb;
			$numeroPages = $numeroPages + 1;
			$compteurPages = $compteurPages + 1;
            if($compteurPages == 10)
			{
				$compteurPages = 1;
				echo '<br>'."\n";
			}
        }
        echo '</tr></table>'."\n";
}

function verifLimite($limite,$total,$nombre)
{
    if(is_numeric($limite)) // je verifie si limite est un nombre.
	{
		// si $limite est entre 0 et $total, $limite est ok
        // sinon $limite n'est pas valide.
        if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0))
		{
			$valide = 1; // j'assigne 1 à $valide si $limite est entre 0 et $max
        }    
        else
		{
            $valide = 0; // sinon j'assigne 0 à $valide
        }
    }
    else
	{
		$valide = 0; // si $limite n'est pas numérique j'assigne 0 à $valide
    }
return $valide; // je renvois $valide
}
?>

Squall
Invité n'ayant pas de compte PHPfrance

08 juin 2005, 09:25

Bon je vois que personne ne peut m'aider.

Ce n'est pas grave, j'ai fini par trouver l'erreur !

Dans la fonction remplacait $nb par $nombre, pour que la division ne soit pas différentes pour la dernière pages.

Voilà.

Mammouth du PHP | 1776 Messages

08 juin 2005, 18:05

Bon je vois que personne ne peut m'aider.

Ce n'est pas grave, j'ai fini par trouver l'erreur !

Dans la fonction remplacait $nb par $nombre, pour que la division ne soit pas différentes pour la dernière pages.

Voilà.
24 heures de délai...c'est encore raisonnable !
Nous sommes en période d'exams et pas mal de monde est absent !
Pour ce qui est de ton script, enjoy qu'il fonctionne. Pense a mettre [resolu] a ton post :wink:

Invité
Invité n'ayant pas de compte PHPfrance

09 juin 2005, 08:28

Bon je vois que personne ne peut m'aider.

Ce n'est pas grave, j'ai fini par trouver l'erreur !

Dans la fonction remplacait $nb par $nombre, pour que la division ne soit pas différentes pour la dernière pages.

Voilà.
24 heures de délai...c'est encore raisonnable !
Nous sommes en période d'exams et pas mal de monde est absent !
Pour ce qui est de ton script, enjoy qu'il fonctionne. Pense a mettre [resolu] a ton post :wink:
C'est vrai que je n'ai pas laissé bcp de tps, mais g t presser. Enfin pas grave, et comme tu le dis vous etes en Examen, mais moi j'y pensais mm po car pr moi c fini depuis bien longtps cette corvée ^^

Enfin je reviendrai surement pour d'autres prb ou solution.

Et pour finir M**** à ceux qui ont des Exams !

See You Soon !