[Résolu] Requete SQL dont les resultats ne s'affichent pas

Eléphanteau du PHP | 15 Messages

10 mai 2011, 21:12

Bonsoir,

Je suis quasiment certain que le problème a déjà été posé aussi veuillez m'excuser.
Je n'arrive pas à afficher les résultats de la requète.
Voici comment je procède:
1) j'affiche une première tranche de résultats
2) j'appele une nouvelle page avec la requète suivante

Code : Tout sélectionner

<?php while($row=mysql_fetch_object($result)){ echo "<tr style=\"cursor: hand;\" onmouseover=\"this.style.backgroundColor='#6C81B9'\" onmouseout=\"this.style.backgroundColor = ''\" onclick=\"javascript:window.open('pop_35127_1F1.php?id=$row->id&annee=$annee->1851&commune=$commune','popup','width=550,height=800,left=0,top=0,toolbar=no,menubar=no,resizable=no,scrollbars=yes');return(false);\">\n"; //TRAITEMENT DES AUTRES CHAMPS echo "<td>$row->nom</a></td>\n"; echo "<td>$row->prenom</td>\n"; echo "<td>$row->age</td>\n"; echo "<td>$row->lieu</td>\n"; $row->commune; echo "</tr>\n"; }
Le résultat ne s'affiche pas dans la nouvelle page. Les étiquettes son bien affichées mais pas le contenu.
Ce que je veux:
1) afficher les éléments communs aux fiches demandées soit commune, section, village
2) afficher la plus petite valeur de photo (si plusieurs valeur)
3) afficher dans un premier temps les éléments pour maison =1 si possible avec un décalage pour les lignes suivantes
4) afficher les autres lignes ayant une valeur identique en commune avec si possible le même problème de présentation

Voici le code récalcitrant. Je n'ai pas de message d'erreur.

Merci d'avance pour votre aide.

Code : Tout sélectionner

// Récupération des éléments transmis $id=$_REQUEST['id']; $annee=$_REQUEST['annee']; $commune=$REQUEST['commune']; //SELECTION DE LA BASE mysql_select_db($base,$mysql_id); //SELECTION DE LA TABLE $table = '35127_1F1'; //REQUETE SQL $qry="SELECT * FROM $table WHERE commune='".$commune."' AND annee='".$annee."' AND id='".$id."'"; //echo $qry; //EXECUTION DE LA REQUETE $result=mysql_query($qry); while($row=mysql_fetch_object($result)) { // REMPLISSAGE DU TABLEAU $Photo=$row->photo; $Nom=$row->nom; $Prenom=$row->prenom; $Age=$row->age; $Village=$row->lieu; $Section=$row->section; $Commune=$row->commune; $Nu_section=$row->nu_section; $Nu_village=$row->village; $Num_maison=$row->maison; $Profession=$row->profession; $Lien=$row->lien; $Situation=$row->situation; $Notes=$row->observation; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Recensement de population 1851</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <style type="text/css"> body{ background-color:#EAFFFF; font-family: Trebuchet MS,Verdana,Geneva,Arial,Helvetica,sans-serif; align:center; } span.bold{ font-weight: bold; } span.center { text-align: center; } </style> </head> <body> <span class="center"><h1>Ensemble des informations sur</h1> <h2>le logement <?php echo "$Numero <br />\n Section $Section <br />\n Lieu-dit $Village";?></h2></span> <?php echo "Photo: $Photo"; echo "<br />\n"; //On passe une ligne echo "<br />\n"; //On passe une ligne echo "<div style=\"padding-left: 15px;\"><span class=\"bold\">Chef de famille: </span>$Nom $Prenom<br> <span class=\"bold\">Âgé de </span>$Age<br> <span class=\"bold\">Profession: </span>$Profession<br> <span class=\"bold\">Situation maritale: </span>$Situation<br> <span class=\"bold\">Informations diverses: $Notes</span> </div>"; ?>
--
Yannick VOYEAUD
Modifié en dernier par yannig le 11 mai 2011, 21:35, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

10 mai 2011, 22:32

Salut, peux-tu regarder ce sujet d'abord et suivre les conseils: sql-bases-donnees/php-sql-etapes-suivre ... 19378.html

Tu dis ne pas avoir de message d'erreur mais tu n'as pas demande a les afficher (je parle de ceux de MySQL). Tu as commente l'affichage de la requete alors que ca pourrait t'etre utile pour debugguer, et a nous aussi.

Eléphanteau du PHP | 15 Messages

10 mai 2011, 23:02

SELECT * FROM 35127_1F1 WHERE commune= AND annee=->1851 AND id=352
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /public_html/Travaux/Releves/BMS_NMD/Guignen/F/pop_35127_1F1.php on line 34

Merci de ton aide

--
Yannick

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

10 mai 2011, 23:11

Desole mais je vais te rebalancer le meme message car ce que tu me donnes, c'est une erreur PHP citee en tout debut de mon article (je pense d'ailleurs que tu devais l'avoir des ton premier message). Par consequent, en le suivant pas a pas tu devrais etre capable de corriger ton erreur, que moi je vois deja.
:arrow: sql-bases-donnees/php-sql-etapes-suivre ... 19378.html

Ou regarde bien ta requete :)

Eléphanteau du PHP | 15 Messages

10 mai 2011, 23:31

Re,

Tu as bien de la chance de voir mon erreur car cela va faire au moins 5 heures que je cherche.
Je dois reconnaître que je ne suis pas un pro et que je fais souvent du copié/collé de script que je sais marcher.

Si je réduit ma requête à seulement l'id que se passera-t-il? Je n'aurais pas le tri demandé où je ne veux QUE les éléments correspondants à commune de cette id.

Si tu pouvais me donner la solution ce serait sympa car franchement je n'y vois plus rien. Mais aussi avec l'explication de l'erreur pour éviter de la refaire.

Amitiés

Eléphanteau du PHP | 15 Messages

10 mai 2011, 23:43

Re,

J'ai fait des modifs (voir ci-dessous) et voici le nouveau message d'erreur
SELECT * FROM 35127_1F1 WHERE commune='' AND annee='->1851' AND id='352'Resource id #3

Il y a un truc qui me chiffonne c'est le résultat de annee qui me donne un truc non demandé '->' ou alors je suis complètement miro

Amitiés et merci d'avance

Code : Tout sélectionner

//REQUETE SQL $qry="SELECT * FROM $table WHERE commune='".$commune."' AND annee='".$annee."' AND id='".$id."'"; echo $qry; //EXECUTION DE LA REQUETE $result=mysql_query($qry); while($row=mysql_fetch_object($result)) { $Photo=$row->photo; $Nom=$row->nom; $Prenom=$row->prenom; $Age=$row->age; $Village=$row->lieu; $Section=$row->section; $Commune=$row->commune; $Nu_section=$row->nu_section; $Nu_village=$row->village; $Num_maison=$row->maison; $Profession=$row->profession; $Lien=$row->lien; $Situation=$row->situation; $Notes=$row->observation; } echo $result; ?>

Eléphanteau du PHP | 15 Messages

10 mai 2011, 23:58

Re,

J'ai un mieux mais ce n'est pas encore cela
J'ai modifié la ligne d'appel dans le premier script par ceci

Code : Tout sélectionner

echo "<tr style=\"cursor: hand;\" onmouseover=\"this.style.backgroundColor='#6C81B9'\" onmouseout=\"this.style.backgroundColor = ''\" onclick=\"javascript:window.open('pop_35127_1F1.php?id=$row->id&annee=$row->annee&commune=$row->commune','popup','width=550,height=800,left=0,top=0,toolbar=no,menubar=no,resizable=no,scrollbars=yes');return(false);\">\n";
Maintenant j'obtiens les informations de l'individu cliqué mais pas les autres habitants de commune

Amitiés

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 mai 2011, 00:39

La requete n'est pas bonne, celle que tu affiches dans tes messages.

Tu n'as pas suivi pas a pas le lien que je t'ai donne, dommage...

Voici ton code :
$result=mysql_query($qry);
Extrait de l'article que je t'ai donne (point numero 1!):
mysql_query($requeteSQL) or die (mysql_error());
Donc si tu avais fait ca, tu aurais surement un message d'erreur disant que tu as une erreur de syntaxe dans ta requete, car :

1. la valeur "commune" est vide
2. l'operateur de comparaison =-> n'existe pas

Tu dis que tu fais souvent du copier/coller, ok on l'a tous fait mais a un moment il va falloir essayer de comprendre car sinon tu vas galerer longtemps comme ca, sur des trucs bidons (exemple parfait dans ce sujet). Fais au moins afficher un max de message d'erreur pour que ca te guide, et ce sera plus facile pour els forumeurs qui t'aideront.

Vu que tu n'as pas fait afficher les messages d'erreurs de MySQL, ce qui est pourtant le conseil numero 1 de l'article, j'en deduis que tu ne las pas lu et c'est bien dommage :(

Eléphanteau du PHP | 15 Messages

11 mai 2011, 01:51

La requete n'est pas bonne, celle que tu affiches dans tes messages.

Tu n'as pas suivi pas a pas le lien que je t'ai donne, dommage...

Voici ton code :
$result=mysql_query($qry);
Extrait de l'article que je t'ai donne (point numero 1!):
mysql_query($requeteSQL) or die (mysql_error());
Donc si tu avais fait ca, tu aurais surement un message d'erreur disant que tu as une erreur de syntaxe dans ta requete, car :

1. la valeur "commune" est vide
2. l'operateur de comparaison =-> n'existe pas

Tu dis que tu fais souvent du copier/coller, ok on l'a tous fait mais a un moment il va falloir essayer de comprendre car sinon tu vas galerer longtemps comme ca, sur des trucs bidons (exemple parfait dans ce sujet). Fais au moins afficher un max de message d'erreur pour que ca te guide, et ce sera plus facile pour els forumeurs qui t'aideront.

Vu que tu n'as pas fait afficher les messages d'erreurs de MySQL, ce qui est pourtant le conseil numero 1 de l'article, j'en deduis que tu ne las pas lu et c'est bien dommage :(
Re,

Je suis au regret de te décevoir mais j'ai lu le dit document!
Que je n'aie compris tout ce qui était écrit je ne pourrais en disconvenir. Je ne suis pas un pro.

Il me semble que dans les messages suivants je précisais avoir un peu avancé. J'ai rectifié le tir sur certains aspect que tu mentionnes ici
Aurais-tu omis de lire tous mes messages? Je n'ose penser que tu fasses ce que tu me reproches aussi vertement.
Ce qui te semble évident ne l'est pas pour tout le monde!

Cela va faire presque 12:00 que je suis sur ce dossier entre la finalisation des données, les premières ligne de ces pages.
Je vais aller me coucher et je verrais demain si une personne a de bonnes pistes pour m'aider en dehors du rtfm qui ne t'en déplaise est illisible pour un non spécialiste.

Bonne nuit
Merci quand même

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 mai 2011, 02:34

Non j'ai bien lu tous tes messages, sauf que pour moi il ne servait a rien de creuser avant d'avoir corrige ce probleme de requete. Quand au "RTFM" (j'avais quand meme pris d'ecrire un peu plus que ca...) qu'il ne soit pas parfait c'est fort possible mais qu'il soit "illisible" c'est quand meme un peu fort. Que veux-tu de plus ? Dans le point 1 tu as la fonction qui te permets d'afficher les erreurs MySQL, va voir dans le manuel PHP a quoi cela correspond ! C'est aussi (et surtout) pour toi, si tu sais corriger ces trucs la tout seul tu gagneras bien du temps.

Je ne dis pas que tout cela est evident, mais comme tu n'as pas mis en place ce qui est indique dans le sujet, ni pose de questions pour reussir a le faire, j'en deduis que tu ne l'as pas fait. Si tu ne comprends pas, demande. Si ca peut etre ameliore, propose. Mais ces conseils de debuggage sont le B-A BA du boulot...

Quant a d'autres pistes (en dehors de la requete) je t'en aurais bien donne mais comme tu n'as pas redonne de code je ne sais pas ou tu en es, je ne sais pas si tu as regle ce probleme de commune vide par exemple.

Eléphanteau du PHP | 15 Messages

11 mai 2011, 13:18

Bonjour,

Voici le code tel qu'il est à cet instant donc il annule et remplace les précédents

Code d'appel
<?php 
while($row=mysql_fetch_object($result)){
echo "<tr style=\"cursor: hand;\" onmouseover=\"this.style.backgroundColor='#6C81B9'\" onmouseout=\"this.style.backgroundColor = ''\" onclick=\"javascript:window.open('pop_35127_1F1.php?id=$row->id&annee=$row->annee&commune=$row->commune','popup','width=550,height=800,left=0,top=0,toolbar=no,menubar=no,resizable=no,scrollbars=yes');return(false);\">\n";
//TRAITEMENT DES AUTRES CHAMPS
echo "<td>$row->nom</a></td>\n";
echo "<td>$row->prenom</td>\n";
echo "<td>$row->age</td>\n";
echo "<td>$row->lieu</td>\n";
echo "<td>$row->commune</td>\n";
echo "</tr>\n";
}
?>
Code à exécuter

// Récupération des éléments transmis
$id=$_REQUEST['id'];
$annee=$_REQUEST['annee'];
$commune=$_REQUEST['commune'];

//SELECTION DE LA BASE
mysql_select_db($base,$mysql_id);

//SELECTION DE LA TABLE
$table = '35127_1F1';

//REQUETE SQL 
$qry="SELECT * FROM $table WHERE commune='".$commune."' AND annee='".$annee."'";
echo $qry;

//EXECUTION DE LA REQUETE
//$result=mysql_query($qry);
mysql_query($qry) or die (mysql_error());

$result=mysql_query($qry);
while($row=mysql_fetch_object($result)) {
$Photo=$row->photo;
$Nom=$row->nom;
$Prenom=$row->prenom;
$Age=$row->age;
$Village=$row->lieu;
$Section=$row->section;
$Commune=$row->commune;
$Nu_section=$row->nu_section;
$Nu_village=$row->village;
$Num_maison=$row->maison;
$Profession=$row->profession;
$Lien=$row->lien;
$Situation=$row->situation;
$Notes=$row->observation;
}

echo $result;
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Recensement de population 1851</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
....
</style>
</head>

<body>

<span class="center"><h1>Ensemble des informations sur</h1>
<h2>le logement <?php echo "$Commune <br />\n
Section $Section <br />\n  Lieu-dit $Village";?></h2></span>
<?php echo "Photo: $Photo";
echo "<br />\n"; //On passe une ligne
echo "<br />\n"; //On passe une ligne
?>
<!-- EN-TÊTES DU TABLEAU-->
<table class="result">
<tr>
<td class="nom">Nom</td>
<td class="prenom">Prénom</td>
<td class="age">Âge</td>
<td class="lien">Lien de<br>parenté</td>
<td class="profession">Profession</td>
<td class="situation">Situation<br>maritale</td>
<td class="information">Informations<br>diverses</td>
</tr>
<!-- FIN EN-TÊTES DU TABLEAU -->

<!-- REMPLISSAGE DU TABLEAU -->
<?php 
while($row=mysql_fetch_object($result)){
echo "<tr style=\"cursor: hand;\" onmouseover=\"this.style.backgroundColor='#6C81B9'\" onmouseout=\"this.style.backgroundColor = ''\" ;return(false);\">\n";
//TRAITEMENT DES AUTRES CHAMPS
echo "<td>$Nom</a></td>\n";
echo "<td>$Prenom</td>\n";
echo "<td>$Age</td>\n";
echo "<td>$Lien</td>\n";
echo "<td>$Profession</td>\n";
echo "<td>$Situation</td>\n";
echo "<td>$Notes</td>\n";
echo "</tr>\n";
}
?>
</table>
<!-- FIN REMPLISSAGE DU TABLEAU -->
<?php 
echo "<div style=\"padding-left: 15px;\"><span class=\"bold\">Chef de famille: </span>$Nom $Prenom<br>
     <span class=\"bold\">Âgé de </span>$Age ans<br>
     <span class=\"bold\">Profession: </span>$Profession<br>
     <span class=\"bold\">Situation maritale: </span>$Situation<br>
     <span class=\"bold\">Informations diverses: $Notes</span>
</div>";
?> 
Réponse à ta commande (si elle est bien rédigée)
SELECT * FROM 35127_1F1 WHERE commune='654' AND annee='1851'Resource id #4 
Si je mets exactement ce que tu dis cad mysql_query($requeteSQL) or die (mysql_error());
SELECT * FROM 35127_1F1 WHERE commune='654' AND annee='1851'Query was empty

J'envisage de changer mon fusil d'épaule en générant un tableau avec toutes les entrées sans faire de présentation
Si dans le premier code je vire la référence à l'id et que je maintiens annee et commune normalement je devrais avoir le bon résultat mais ne serait-il pas judicieux que je définisse, dans la base, commune comme index? Actuellement je n'ai que id comme index.

Amitiés et merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 mai 2011, 15:15

On voit que tu as une erreur : "Query was empty" ce qui est un peu bizarre. Si tu copies-colles le code SQL affiche directement dans phpMyAdmin (est-ce que tu as cet outil?) qu'est-ce que ca donne? Il faudrait en fait valider que ta requete renvoie des resultats, et de bons resultats, avant que tu te prennes la tete avec le PHP.

ViPHP
ViPHP | 2577 Messages

11 mai 2011, 15:43

Bonjour,

Le fait d'avoir commune et annee comme index améliorerai le temps d'exécution de ta requête.

Je suis étonné de ton code commune '654', si tu utilises le code INSEE, il faudrai le département devant.

Eléphanteau du PHP | 15 Messages

11 mai 2011, 19:16

Bonsoir,

C'est fait mon code marche correctement.
Si certains le veulent je peux mettre à disposition le code fonctionnel.

Mazarini
Oui tu as pensé juste mais ce n'est pas le code de commune que j'entre.
En fait il s'agit d'un dépouillement de recensement de population et ce chiffre correspond au rang de l'habitation dans la commune. Je me sers donc de ce champ pour afficher tous les habitants d'un même foyer.
En me servant de ce mode opératoire je pourrais aussi proposer le listage des habitants d'un village.
Je pense que je vais donc valider ces deux nouveaux index

ouckileou
J'avais des erreurs dans les variables.
Merci quand même de ton aide.
Hier soir, enfin ce matin, je finissais par être trop crevé pour voir mes anomalies.
Toutefois j'ai opté pour la solution d'un tableau pour afficher l'ensemble des réponses. Cela évite une grosse prise de tête pour la présentation.
Je m'excuse pour ce midi mais j'ai été obligé de partir rapidement.

Amitiés

--
Yannick

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 mai 2011, 20:29

Hier soir, enfin ce matin, je finissais par être trop crevé pour voir mes anomalies.
C'est parfois la meilleure solution : /quit dodo
Et le lendemain comme par miracle, on met le doigt dessus.

N'hesite pas a poster ton code, ca pourrait servir a quelqu'un. Je vais aussi changer le sujet pour quelque chose de plus explicite. Pense aussi a tagguer ton sujet en "Resulu" (il y a un bouton pour ca) et a utiliser les balises
 lors de tes prochains sujets.