Partitionner un affichage sur des lien [Résolu]

Signaler
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014
-
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014
-
salut tt le monde ,j'ai un problème dans un bout de code.après avoir collecter les produits existants dans ma base,je veux limiter l'affichage à 4 produits par page puis afficher des liens automatiques en bas de pages.voici le code:
<?php
$link=mysql_connect("localhost","root","")or die("echec seveur");
$db=mysql_select_db('exact')or die("echec BD");
$requet=mysql_query("select * from articles where categorie='$cat'")or die("echec requete");
$nb=mysql_num_rows($requet);
if($nb==0)
{
echo "<center>Désolé, il n'y a pas des articles disponibles</center>";
}
else
{
$i=0;
while($tab=mysql_fetch_row($requet) AND $i<4)
{
$image=$tab[3];
$prix=$tab[1];
$des=$t=$tab[2];
echo '
';
echo '



<LABEL>',$prix,' DT TTC</LABEL>



<!--fiche de pc-->

',$des,'
',$carcat,'



';

?>

3 réponses

Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

j'ai trouvé le bon code le voila:

<?php
$nom=$_POST['cherche'];
//Connexion à la base de données
mysql_connect('localhost', 'root', '');
mysql_select_db('exact');

$messagesParPage=4; //Nous allons afficher 5 messages par page.

//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query("SELECT COUNT(*) AS total FROM articles where designation like '%$nom%'"); //Nous récupérons le contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.

//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);

if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);

if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
}

$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire

// La requête sql pour récupérer les messages de la page actuelle.
$retour_messages=mysql_query("SELECT * FROM articles where designation like '%$nom%' LIMIT ".$premiereEntree.", 4");

while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
{
//Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre design...
//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
$image=$donnees_messages['image'];
$prix=$donnees_messages['prix'];
$des=$donnees_messages['designation'];
$carac=$donnees_messages['caracteristique'];
echo '
';
echo '



<LABEL>'.$prix.' DT TTC</LABEL>



<!--fiche de pc-->

'.$des.'
'.$carac.'



';

if(isset($_SESSION["log"])){
echo '
[# ]';
}



echo '
';

//J'ai rajouté des sauts à la ligne pour espacer les messages.
}
$nb=mysql_num_rows($retour_messages);
if($nb=0){
echo '
Aucun article ne correspond à votre recherche';
}
else
{
echo '
Page : '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
{
//On va faire notre condition
if($i==$pageActuelle) //Si il s'agit de la page actuelle...
{
echo ' [ '.$i.' ] ';
}
else //Sinon...
{

echo '[?cherche='.$nom.'&page='.$i.' '.$i.'] ';
}
}}
echo '

';
?>
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014

C'est au niveau de ta requête SQL que cela va se jouer. Regarde du côté de LIMIT.

Ensuite passe une variable en POST, GET, SESSION, qui indique la page Courante, et à partir de celle-ci il sera très facile de calculer le nombre de page la suivante, la précédente etc.

Hop une piste

J'espère que cela t'as aidé.

++
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

D'abord merci bien pour votre aide,en faite j'ai essayé un bout de code mais ça n'a pas marché,car par exemple en cherchant des portatif sur ma base,il m'affiche tous les enregistrements même ceux ne correspondant pas à ma recherche.voici le code:
1)la variable $nom prend le mot écrit dans un champ texte nommé "recherche".
<?php

$nom=$_GET['cherche'];
// connexion à la base
$db = mysql_connect("localhost", "root","") or die ('Erreur de connexion '.mysql_error());


// sélection de la base
mysql_select_db("exact",$db) or die ('Erreur de selection '.mysql_error());

/********************************** DEBUT PAGINATION *************************************/
// on va afficher 4 résultats par page, vous pouvez modifier ce chiffre selon votre souhait
$userperpage =4;
//Nombre indiquant le départ de la requete
$start = isset($_GET['start'])?$_GET['start']:0;
// Nom de la page
$page = basename(__FILE__);
// Compte les enregistrements

$select = "SELECT count(*) as total FROM articles where designation like '%$nom%' ";
// DEBUT > Protection des caractères spéciaux d'une commande SQL

// FIN > Protection des caractères spéciaux d'une commande SQL
$result = mysql_query($select,$db) or die ('Erreur : '. mysql_error());
$row = mysql_fetch_array($result);
$total2 = $row['total'];
/********************************** FIN PAGINATION *************************************/

if($total2 > 0) {
// requête SQL qui récupère tous les enregistrements
$select = "SELECT * FROM articles where designation like '%$nom%' LIMIT ".$start.",".$userperpage."";
$result = mysql_query($select,$db) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);
// Nombres de colonnes max
$NB_COLS = 4;
$i = 0;
echo "\";
while($row = mysql_fetch_array($result))
{
if ($i == 0)
echo \"----
\";
echo '

<LABEL>'.$row[1].' DT TTC</LABEL>

<!--fiche de pc-->

'.$row[0].'
'.$row[2].'
, ';
if (++$i == $NB_COLS) {
echo \"\";

$i = 0;
}
}
echo "
";
}
else
echo "Désolé";

/********************************** DEBUT PAGINATION N° *************************************/
// Génération des liens pour l'affichage des pages
echo '

Page : ';
$nb_pages = ceil( $total2 / $userperpage );
for($i = 0 ; $i < $nb_pages ; $i++)
{
if ($start != $i * $userperpage) {
echo '[?start='. ($i * $userperpage).' '. ($i + 1) .'] ';
} else {
echo ($i + 1) .' ';
}
}
echo'
';

mysql_free_result($result);

?>