Problème de pagination pour débutante

Résolu
dElwinn Messages postés 10 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 27 avril 2012 - 23 nov. 2011 à 10:42
dElwinn Messages postés 10 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 27 avril 2012 - 25 nov. 2011 à 09:54
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

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
23 nov. 2011 à 21:26
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.
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 nov. 2011 à 23:48
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
3
dElwinn Messages postés 10 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 27 avril 2012 1
23 nov. 2011 à 17:15
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 !
0
dElwinn Messages postés 10 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 27 avril 2012 1
24 nov. 2011 à 16:48
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
24 nov. 2011 à 17:05
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 !
0
dElwinn Messages postés 10 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 27 avril 2012 1
24 nov. 2011 à 17:26
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.
0
dElwinn Messages postés 10 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 27 avril 2012 1
25 nov. 2011 à 09:54
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 !
0
Rejoignez-nous