Partitionner un affichage sur des lien

Résolu
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014 - 25 avril 2010 à 17:05
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014 - 27 avril 2010 à 00:38
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

joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
27 avril 2010 à 00:38
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 '

';
?>
3
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
26 avril 2010 à 11:08
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é.

++
0
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
26 avril 2010 à 17:43
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);

?>
0
Rejoignez-nous