Problème de pagination pour débutante

Résolu
Signaler
Messages postés
11
Date d'inscription
jeudi 10 novembre 2011
Statut
Membre
Dernière intervention
27 avril 2012
-
Messages postés
11
Date d'inscription
jeudi 10 novembre 2011
Statut
Membre
Dernière intervention
27 avril 2012
-
Bonjour à tous !

Je suis débutante à php et je me forme sur un site (qui tourne en local) d'annonces immobilières. J'ai un problème de pagination, il y a sans aucun doute une ou plusieurs erreurs dans mon code que je ne vois pas... Si quelqu'un pouvait jeter un oeil à mon code et me donner son avis, cela m'aiderait beaucoup car je bloque sur ce problème depuis plusieurs jours... en fait maintenant je ne sais plus par quel bout prendre le problème.

Désolée je sais que cette question a été posée 1000 fois mais je n'y arrive pas...

Voici mon code :
<?php
//connexion
$liaison = mysql_connect("localhost","root","") or die("erreur de connexion au serveur $host");
mysql_select_db("century21");

//Récupération le contenu de la requête dans $req1
$req1 = mysql_query('SELECT COUNT(*) AS total FROM annonce');
//On range retour sous la forme d'un tableau.
$donnees_total=mysql_fetch_assoc($req1);
//On récupère le total pour le placer dans la variable total.
$total=$donnees_total['total'];

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

//Nous allons maintenant compter le nombre de pages et en faire un chiffre rond.
$nombreDePages=ceil($total/$messagesParPage);

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

// Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
if($pageActuelle>$nombreDePages)
{
$pageActuelle=$nombreDePages;
}
}
else
{
// La page actuelle est la n°1
$pageActuelle=1;
}
// On calcule la première entrée à lire
$premiereEntree=($pageActuelle-1)*$messagesParPage;

// requete de sélection de toutes les annonces 'Vente' classé de manière décroissante
$req2 = mysql_query('SELECT * FROM annonce WHERE annonce_le_type!="Location" ORDER BY id DESC LIMIT '.$premiereEntree.','.$messagesParPage.'');
$annonces = mysql_query($req2);

mysql_close($liaison);

$compteur=0;$dernier_id=0;

@$img_type = "";
@$annonce_id = ""; //annonce_id
@$la_ref = ""; //annonce_la_ref
@$la_transaction = ""; //annonce_le_type
@$le_bien = ""; //annonce_le_bien
@$le_dep = ""; //annonce_le_dpt
@$le_prix = ""; //annonce_le_prix
@$lactivite = ""; //annonce_lactivite

//Boucle
while(($annonce=mysql_fetch_assoc($annonces))!==false){

$annonce_id=$annonce["annonce_id"];
$la_ref=$annonce["annonce_la_ref"];
$la_transaction=$annonce["annonce_le_type"];
$le_bien=$annonce["annonce_le_bien"];
$le_dep=$annonce["annonce_le_dpt"];
$le_prix=$annonce["annonce_le_prix"];
$lactivite=$annonce["annonce_lactivite"];
$la_photo=$annonce["annonce_les_photos"];

$img_type = array();
$img_type[] = 'alimentaire.jpg';
$img_type[] = 'autre.jpg';
$img_type[] = 'bar.jpg';
$img_type[] = 'boutique.jpg';
$img_type[] = 'cafe-salon-de-the.jpg';
$img_type[] = 'hotel.jpg';
$img_type[] = 'pme.jpg';
$img_type[] = 'restaurant.jpg';
$img_type[] = 'restauration-rapide.jpg';
$img_type[] = 'services.jpg';
$img_type[] = 'tabac.jpg';

@$le_titre = $lactivite." - ".$le_dep." - ".$la_transaction." - ".$le_bien;

//echo $annonce_id;
echo("\");
echo(\"----
".$le_titre.", \");
echo(\"----
");

switch($lactivite)
{
case "Alimentaire":
echo("");
break;
case "Bar brasserie":
echo("");
break;
case "Commerce détail boutique":
echo("");
break;
case "Café hotel restaurant":
echo("");
break;
case "Hotel":
echo("");
break;
case "Pme":
echo("");
break;
case "Restaurant":
echo("");
break;
case "Restauration rapide":
echo("");
break;
case "Services":
echo("");
break;
case "Tabac presse loto":
echo("");
break;
default:
echo("");
break;
}
echo(", \");
echo(\"Réf : ".$la_ref.", \");
echo(\"".$le_prix." euros, \");
echo(\"<li>- Département ".$le_dep."</li>");
echo("<li>- Activité : ".$lactivite."</li>");
echo("<li>- Type de bien : ".$le_bien."</li>");
echo("<li>- ".$la_transaction."</li>, \");
echo(\"Détails, \");
echo("

");

$compteur++;
}
?>

7 réponses

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

Une chose capitale pour apprendre a programmer est de savoir lire. Parce que je susi particulièrement de bonne humeur je vais te faire la lecture.

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in *** on line 179.

Ligne 179 tu as une fonction mysql_fetch_assoc() qui attend une ressource mysql. À la place de lui passer uen ressource tu lui as passé un bool, ce qui a généré le warning. Bien que tu n'ai fourni qu'un extrait de code on peux facilement retrouver la ligne fautive sans son numéro :
while(($annonce=mysql_fetch_assoc($annonces))!==false){

Donc $annonces est un bool (certainement false). Alors on regarde le dernier moment où on lui assigne une valeur :
$req2 = mysql_query('SELECT * FROM annonce WHERE annonce_le_type!="Location" ORDER BY id DESC LIMIT '.$premiereEntree.','.$messagesParPage.'');
$annonces = mysql_query($req2);

Tient, c'est donc mysql_query() qui nous a retourné un bool. Alors on regarde la documentation de mysql_query() et on se rend compte que :
- En temps normal, elle retourne bien uen ressource mysql.
- En cas d'erreur elle retourne false qui est un bool .
On en déduit qu'il y a donc eu une erreur lors de l'exécution de la requête.

Que faire ? Simple, afin de débuger ta requêtes tu as deux chsoes à faire :
- Afficher la requête elel même afin de la contrôler.
- Afficher l'erreur exacte à l'aide de mysql_error().

Et voila. Est-ce que c'était si dur que ça d'isoler l'erreur ? On s'est contenté de lire et réfléchir un minimum, aucune connaissance technique n'a été demandé, même quelqu'un ne connaissant pas ou très mal le php aurait pu le faire.
Messages postés
14833
Date d'inscription
vendredi 14 mars 2003
Statut
Non membre
Dernière intervention
7 décembre 2021
157
Bonjour,

dElwinn, ne te fâches pas.

En général, une recherche fourni pas mal de piste, ensuite, pour diagnostiquer, rechercher la doc des fonctions et apprendre à lire cette documentation aide pas mal.

La lecture et la traduction des informations trouvées sur le net, sont une base de l'apprentissage de la programmation.

Dans un certain nombre de cas, il y a même pas besoin d'ouvrir un sujet, juste un peu de lecture permet d'apprendre par soi même.

Petite astuce, en PP, il y a print_r() et var_dump() te permettront de voir le contenu des variables et donc de pouvoir repérer la source d'un problème.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
11
Date d'inscription
jeudi 10 novembre 2011
Statut
Membre
Dernière intervention
27 avril 2012
1
J'ai oublié de préciser l'erreur générée...
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in *** on line 179.

Erreur affichée et répétée pour chaque annonce.
La ligne correspond à la boucle qui affiche toutes les annonces.

Voila, merci d'avance !
Messages postés
11
Date d'inscription
jeudi 10 novembre 2011
Statut
Membre
Dernière intervention
27 avril 2012
1
Bonjour TychoBrahe,

Je te remercie de ta réponse, qui me donne une belle leçon de méthodologie. J'ai bien compris tes explications et vais les appliquer.

Je vais tacher aussi d'apprendre à lire, pour ne plus jamais devoir faire appel à des gens aussi prétentieux et méprisants que toi.
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Je vais tacher aussi d'apprendre à lire, pour ne plus jamais devoir faire appel à des gens aussi prétentieux et méprisants que toi.

Ouf, et j'espère que d'autres vont faire de même. Rien que cette erreur là je la vois revenir très régulièrement, au bout d'un moment on commence a croire que les gens qui postent ça se foutent de notre gueule. Et oui, si on demande à google on trouve plus de 3 millions de résultats !
Messages postés
11
Date d'inscription
jeudi 10 novembre 2011
Statut
Membre
Dernière intervention
27 avril 2012
1
Et oui, je sais bien que cette question a été posée des centaines de fois mais quand on apprend seul, la moindre expression de langage, la moindre erreur sql ou autre et la moindre explication à cette erreur peuvent être déroutantes. Il n'y a rien de mieux qu'une explication au cas par cas et, à la base, c'était un privilège pour moi que quelqu'un comme toi me conseille.

Alors désolée de faire partie de la foule d'ignares que tu te tapes.
Messages postés
11
Date d'inscription
jeudi 10 novembre 2011
Statut
Membre
Dernière intervention
27 avril 2012
1
Bonjour NHenry,

C'est juste que je n'accepte plus qu'on me fasse/dise ce que je ne me permettrais pas de faire/dire... bref. Aujourd'hui on t'agresse partout, dehors, en voiture, sur le net, au travail... On peut remettre les gens à leur place poliment, comme tu viens de le faire par exemple.

Merci pour ces tuyaux ! , tu as raison :
La lecture et la traduction des informations trouvées sur le net, sont une base de l'apprentissage de la programmation.

J'y travaille, et ne poserai plus de question sur un sujet déjà traité. Bonne continuation !