Page 1 sur 2

limiter le nombre d'affichage

Posté : 02 juil. 2005, 19:46
par pingoo
Bonjour,
Mon probléme est simple et malgré avoir fouillé dans le forum je n'ais pas trouvé de solution concrète.
Ce que je cherche c'est de limiter l'affichage d'une mysql à 5 résultats avec le choix de la page (precedent 1 2 3 ... suivant).
Voici mon code :
require_once("config_script_categorie.php");
$secteur_activite= $_POST['secteur_activite'];
$lieu= $_POST['lieu'];
$type_de_contrat=$_POST['type_de_contrat'];
$parution=$_POST['parution_emploi'];
$mots_cle=addslashes($_POST['mots_cle']); 
$date1= date("Y-m-d", strtotime("  -1 day"));  // aujourd'hui
$date2= date("Y-m-d", strtotime("  -1 week"));  // 1semaine
$date3= date("Y-m-d", strtotime("  -2 week"));  // 2semaine
$date4= date("Y-m-d", strtotime("  -3 week"));  // 3semaine
$date5= date("Y-m-d", strtotime("  -4 week"));  // 1mois
$tri_date= "ORDER BY 'id' DESC"; //tri par date
$select  = "SELECT secteur_activite, fonction, lieu, type_de_contrat, id, societe,  DATE_FORMAT(date, '%d.%m.%y') date, SUBSTRING(profil_rechercher,1,200) AS profil_rechercher, profil_entreprise, debut, salaire, contact, adresse_societe, web FROM fk_offre_emploi "; 
switch ($parution) {
 case "toutes":
 	$select .= "where date ";break;
 case "aujourdhui":
 	$select .= "where date > '". $date1 ."' ";break;
 case "1semaine":
 	$select .= "where date > '". $date2 ."' ";break;
 case "2semaines":
 	$select .= "where date > '". $date3 ."' ";break;
 case "3semaines":
 	$select .= "where date > '". $date4 ."' ";break;
 case "1mois":
 	$select .= "where date > '". $date5 ."' ";break;
	}
if ($mots_cle != "") {
 	$select .= "AND (secteur_activite LIKE '%". $mots_cle ."%' OR fonction LIKE '%". $mots_cle ."%' OR societe LIKE '%". $mots_cle ."%' OR profil_rechercher LIKE '%". $mots_cle ."%' OR profil_entreprise LIKE '%". $mots_cle ."%' OR reference LIKE '%". $mots_cle ."%' OR lieu LIKE '%". $mots_cle ."%' OR debut LIKE '%". $mots_cle ."%' OR salaire LIKE '%". $mots_cle ."%' OR contact LIKE '%". $mots_cle ."%' OR adresse_societe LIKE '%". $mots_cle ."%' OR type_de_contrat LIKE '%". $mots_cle ."%') ";
	}
$result = mysql_query($select) or die ('Erreur : '.mysql_error() ); 
$total = mysql_num_rows($result); 
Merci pour votre aide

Posté : 02 juil. 2005, 20:06
par ouckileou
itu dois utiliser :

Code : Tout sélectionner

SELECT * FROM table LIMIT n1, n2
n1 et n2 sont des entiers
n1 : numéro de l'enregistrement à partir duquel débuter l'affichage
n2 : nombre d'enregistrements à afficher

il te suffit donc de page en page de transmettre la valeur de n1 ;)

Posté : 02 juil. 2005, 21:41
par pingoo
Merci pour ton aide mais cela ne fonctionne pas.
Je ne vois pas comment faire. :(

Posté : 02 juil. 2005, 21:42
par pingoo
Merci pour ton aide mais cela ne fonctionne pas.
Je ne vois pas comment faire. :(

Posté : 02 juil. 2005, 21:52
par Cyrano
Tu vas devoir faire ta requête en deux fois:
- la première fois avec te requête telle que tu l'as montée pour avoir le nombre de lignes avec mysql_num_rows($result) donc tel qu'est ton code actuellement;
- La seconde fois après avoir ajouté un élément a ta requête:
$select .= " LIMIT ".$depart.", ".$nb_lignes;
Là seulement tu vas pouvoir utiliser un mysql_fetch_array dans une boucle while pour afficher le nombre de ligne et avec le code nécessaire afficher les numéros de page pour naviguer dans les résultats. Mais en fin de compte, tu exécute deux requêtes.

Posté : 02 juil. 2005, 22:05
par pingoo
OK pour l'affichage de la première page avec les 5 résultats, mais comment je fait pour passer d'une page à l'autre et surtout sachant que je ne sais combien de page j'aurrais.
Désolé je ne suis pas très fort. MERCI :oops:

Posté : 02 juil. 2005, 22:21
par Cyrano
je vais essayer de te faire un shéma sommaire:

La première chose, c'est la requête telle que tu l'as jusqu'au mysql_num_rows() : là tu as le nombre de lignes de résultat.

Tu as également défini quelque part dans un fichier de configuration ou ailleurs dans la page même le nombre maximum de résultat à afficher par page.

Appelons le nombre de résultats $total et le nombre de ligne affiches $na. Là, tu te crées une petite fonction après avoir défini le nombre de résultat. Quelque chose du genre:
/* Récupération du nombre de résultats */
$total = mysql_num_rows($result);
/* Nombre de lignes qui seront affichés par page */
$na = 5;
/* Calcul du nombre de pages. */
if($total >0)
{
    $nb_pages = ceil($total/$na);
}
Bon, il manque encore un élément, c'est dans ta clause LIMIT le point de départ. Il faut le définir par exemple comme ceci:
/* On définit le point de départ pour la requête : 
Si le nombre a été envoyé en paramètre, on initialise notre 
départ avec, sinon le départ sera à 0 par défaut */
$depart = isset($_GET['page']) ? $_GET['page'] * $na : 0;

$select .= " LIMIT ".$depart.", ".$nb_lignes;
Ça veut dire en bas de page, tu auras les liens vers les autres page qui comporteront dans l'url un paramètre "page" avec un numéro correspondant à la page recherchés. Depuis la page par défaut lors de l'ouverture, le point de départ sera par défaut 0, mais les liens pointeront vers l'url ./tapage.php?page=1 par exemple. Si tu regarde comment j'initialise le point de départ: soit le paramètre $_GET['page'] existe et dans ce cas je ne multiplie par le nombre de ligne à afficher par page, soit le paramètre n'est pas défini et le point de départ sera établi à 0.

Est-ce que ça te semble moins compliqué comme ça ?

Posté : 02 juil. 2005, 22:36
par pingoo
Merci de ton aide.
Mais je n'arrive pas à comprendre ce qu'est la variable "$nb_lignes", est cela me donne une erreur lorsque j'essaye d'afficher la page suivante.
Je pourrais me :tir2: .
Merci

Posté : 02 juil. 2005, 22:39
par Cyrano
Autant pour moi, j'aurais du corriger: remplace $nb_lignes par $na et ça devrait fonctionner

Posté : 02 juil. 2005, 22:47
par pingoo
Mon lien ne fonctionne pas pour passer à la page suivante?
Comment dois-je le coder?
Merci beaucoup :lol:

Posté : 02 juil. 2005, 22:49
par Cyrano
Fais voir ce que tu as codé...

Posté : 02 juil. 2005, 22:53
par pingoo
$suivant=$pge=+1;
echo "<a href=\"?pge=$suivant\">

Posté : 02 juil. 2005, 22:54
par Cyrano
Et comment as-tu initialisé $pge ?

Posté : 02 juil. 2005, 23:05
par pingoo
voila comment je l'ais codé :
$pge=0;
if ($pge>0){
$suivant=$pge+1;
	echo  '<a href="?pge='.$suivant.'">suivant</a>';
	}
Et mon erreur se troiuve à $pge.
Comment l'initialiser?

Posté : 02 juil. 2005, 23:13
par Cyrano
Si tu es parti du code que j'ai mis plus haut, il est possible que l'erreur vienne de ce que tu as mis $pge au lieu de $page ???