limiter le nombre d'affichage

pingoo
Invité n'ayant pas de compte PHPfrance

02 juil. 2005, 19:46

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

02 juil. 2005, 20:06

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 ;)

pingoo
Invité n'ayant pas de compte PHPfrance

02 juil. 2005, 21:41

Merci pour ton aide mais cela ne fonctionne pas.
Je ne vois pas comment faire. :(

pingoo
Invité n'ayant pas de compte PHPfrance

02 juil. 2005, 21:42

Merci pour ton aide mais cela ne fonctionne pas.
Je ne vois pas comment faire. :(

Mammouth du PHP | 19672 Messages

02 juil. 2005, 21:52

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

pingoo
Invité n'ayant pas de compte PHPfrance

02 juil. 2005, 22:05

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:

Mammouth du PHP | 19672 Messages

02 juil. 2005, 22:21

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

pingoo
Invité n'ayant pas de compte PHPfrance

02 juil. 2005, 22:36

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

Mammouth du PHP | 19672 Messages

02 juil. 2005, 22:39

Autant pour moi, j'aurais du corriger: remplace $nb_lignes par $na et ça devrait fonctionner
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

pingoo
Invité n'ayant pas de compte PHPfrance

02 juil. 2005, 22:47

Mon lien ne fonctionne pas pour passer à la page suivante?
Comment dois-je le coder?
Merci beaucoup :lol:

Mammouth du PHP | 19672 Messages

02 juil. 2005, 22:49

Fais voir ce que tu as codé...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

pingoo
Invité n'ayant pas de compte PHPfrance

02 juil. 2005, 22:53

$suivant=$pge=+1;
echo "<a href=\"?pge=$suivant\">

Mammouth du PHP | 19672 Messages

02 juil. 2005, 22:54

Et comment as-tu initialisé $pge ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

pingoo
Invité n'ayant pas de compte PHPfrance

02 juil. 2005, 23:05

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?

Mammouth du PHP | 19672 Messages

02 juil. 2005, 23:13

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 ???
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: