Optimiser code PHP - PHP - Programmation
Marsh Posté le 10-10-2009 à 11:28:45
Euh déjà simple question : tu fais une liste ul par item ?
parce que là, t'as 15 items, t'as 15 listes à chaque fois ... (et non une liste des 15 items ...)
Après, les puristes ici te diront que mélanger l'exécution de requêtes et l'affichage HTML saimal
Point de vue des boucles : je ne vois pas trop ce que tu peux améliorer, il faudra de toutes façons à un moment où à un autre faire les boucles pour afficher les items.
Ce que tu peux faire cependant, c'est préparer tes requêtes et tes dataset en amont du code, pour n'avoir au final que de l'affichage dans cette page (et non exécution + affichage).
càd
Code :
|
Je n'ai mis qu'un exemple ici. Et j'ai mis tous les items dans une seule liste.
Mais bon, là encore on ne connait pas le reste du code, si ça se trouve ya p-ê moyen de mettre les requêtes SQL ailleurs et de faire des belles fonctions GetEmissions() par exemple ...
Marsh Posté le 10-10-2009 à 13:54:32
Effectivement, je fais bien une liste <ul> par item, je n'ai pas trouvé d'autre moyen pour que les images, le texte, le résultat de la requête et la date soit exactement alignés (alors j'ai bidouillé le tableau html et le css pour que le contenu soit aligné horizontalement à mon résultat).
Merci pour cette nouvelle version de code, il reste cependant assez conséquent... Puisse que je n'affiche qu'un seul "pays" par page, n'y-a-t-il pas de moyens de "concaténer" le tout ?
Du genre
Code :
|
Marsh Posté le 10-10-2009 à 16:11:48
Ne connaissant pas la structure de ta table, et n'ayant pas plus d'aperçu, je ne peux pas dire "oui" avec certitude.
Rapatrier plusieurs champs dans une requête est tout à fait faisable, et c'est même mieux de prendre 3 champs plutôt que de faire 3 requêtes, mais ne sachant pas vraiment ce que tu vas afficher après ...
Je n'avais pas fait attention, dans tes requêtes, qu'elles allaient toutes prélever des données dans la même table (shame on me). Mais si on considère que pour 1 pays (France) tu rapatries 3 données pour remplir 3 cellules de tableau, c'est même bien mieux, en effet.
et tu n'as plus qu'à faire un while($rox = mysql_fetch_array($toutes_les_stats))
{
... ici tu affiches les colonnes prévues
}
Attention cependant à ne pas mélanger tableau et mise en forme ...
Marsh Posté le 10-10-2009 à 18:57:38
Je ne comprends pas ceci:
Code :
|
Sinon pour tout expliquer ma base est en fait une simple feuille excel avec en colonne les stats (txdef, emissdiox...) et en ligne les pays (france, us, portugal...). Dans ma méthode je demande de chercher txdef de pays france, puis je recommence ainsi de suite emissdiox de pays france... La raison de mon post était de simplifier le code des pages qui afficheront les résultats de toutes ces requêtes car je la trouvais un peu lourde comme le montre ceci : (!)
Code :
|
Marsh Posté le 11-10-2009 à 09:53:39
Ouais, relecture faire, je ne vois pas l'intérêt non plus de tes mysql_real_escape vu qu'il n'y a aucun %s dans tes sprintf ...
En clair : tu échappes une variable (dans le but de l'insérer dans la requête SQL) mais jamais tu ne l'insères ...
Bon puis faudrait mettre en ligne un exemple, là moi avec tous ces td (et surtout des horribles spacers) j'ai du mal à imaginer.
mais typiquement, tu peux faire qqch comme ceci :
Code :
|
Et avec les ajustements qu'il faut ... Mais encore, sans exemple "en ligne" difficile de voir.
Marsh Posté le 11-10-2009 à 11:53:58
Merci beaucoup pour ceci, je vais me pencher la dessus pour voir ce que ça donne mais ca m'a l'air déjà bien plus clean...
Si vous souhaitez voir un exemple, cliquez http://www.geopopulation.com/test/
A noter que les "cases" de ma base de données sont au format "text" et pas en "nombre" dans le but d'afficher ceci 1.000.000 au lieu de cela 1000000
Marsh Posté le 11-10-2009 à 21:43:38
ouais, enfin ça tu peux le faire avec la fonction number_format( de PHP.
Marsh Posté le 12-10-2009 à 08:38:43
au passage, ton utilisation de sprintf est farfelue...tu n'as aucune variable dans le 1er argument, et pourtant tu passes systématiquement en deuxième argument mysql_real_escape_string d'une variable qui n'existe pas...
http://fr2.php.net/manual/en/function.sprintf.php
[edit]
Ah ben je suis en retard là
Marsh Posté le 12-10-2009 à 19:00:28
Le premier code était vraiment horrible en effet ! Merci pour vos lumières...
Une petite question encore, j'en profite comme je suis ici et ce code est ma toute première utilisation de PHP, ou est ce que je dois insérer number_format( si je veux que mes résutats de requêtes s'affichent sous la forme 1.000.000 (séparateur de milliers : point) ?
Marsh Posté le 12-10-2009 à 19:58:29
$nombre_format_francais = number_format($number, 2, ',', '.');
Marsh Posté le 10-10-2009 à 10:07:27
Bonjour,
J'ai crée un code PHP me permettant d'extraire de ma base de données des statistiques... Voici à quoi ressemble actuellement mon code :
<table>
<tr>
<td><img class="blank" src="design/dossier/counter-env.jpg" width="145" height="50"></td>
<td><h3>ex : Environnement</h3></td>
</tr>
<tr>
<td><img class="blank" src="design/blank.gif" width="145" height="1"></td>
<td><img class="blank" src="design/blank.gif" width="435" height="1"></td>
</tr>
</table>
<table class="tabstats">
<tr>
<td><img class="blank" src="design/blank.gif" height="1"></td>
<td><img class="blank" src="design/blank.gif" height="1"></td> <td><img class="blank" src="design/blank.gif" width="492" height="1"></td>
<td><img class="blank" src="design/blank.gif" height="1" width="40"></td>
</tr>
<tr>
<td><img class="blank" src="design/absstat.jpg"></td>
<td><a href="emissions-dioxyde-carbone/"><img class="barmap" src="design/graph.jpg"></a></td>
<td>
<?php
$query = sprintf("SELECT emdiox FROM bddpays WHERE pays='France'",
mysql_real_escape_string($emdiox));
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
echo "<ul><li>Emissions de dioxyde de carbone industrielle (milliers de tonnes) : ".$row['emdiox']."</li></ul>";
}
?>
</td>
<td class="right">2000</td>
</tr>
<tr>
<td><img class="blank" src="design/absstat.jpg"></td>
<td><a href="nombre-reserves-biosphere/"><img class="barmap" src="design/graph.jpg"></a></td>
<td>
<?php
$query = sprintf("SELECT reservbio FROM bddpays WHERE pays='France'",
mysql_real_escape_string($reservbio));
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
echo "<ul><li>Nombre de réserves de biosphère (unités) : ".$row['reservbio']."</li></ul>";
}
?>
</td>
<td class="right">2004</td>
</tr>
<tr>
<td><img class="blank" src="design/absstat.jpg"></td>
<td><a href="/taux-deforestation/"><img class="barmap" src="design/graph.jpg"></a></td>
<td>
<?php
$query = sprintf("SELECT txdefores FROM bddpays WHERE pays='France'",
mysql_real_escape_string($txdefores));
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
echo "<ul><li>Taux de déforestation (%) : ".$row['txdefores']."</li></ul>";
}
?>
</td>
<td class="right">2000</td>
</tr>
</table>
<p><img class="blank" src="design/dossier/counter-popmond.jpg" width="1" height="45"></p>
<table>
<tr>
<td><img class="blank" src="design/dossier/counter-geo.jpg" width="145" height="50"></td>
<td><h3>ex2 Géographie</h3></td>
</tr>
<tr>
<td><img class="blank" src="design/blank.gif" width="145" height="1"></td>
<td><img class="blank" src="design/blank.gif" width="435" height="1"></td>
</tr>
</table>
<table class="tabstats">
<tr>
<td><img class="blank" src="design/blank.gif" height="1"></td>
<td><img class="blank" src="design/blank.gif" height="1"></td> <td><img class="blank" src="design/blank.gif" width="492" height="1"></td>
<td><img class="blank" src="design/blank.gif" height="1" width="40"></td>
</tr>
<tr>
<td><img class="blank" src="design/absstat.jpg"></td>
<td><a href="/longueur-littoral/"><img class="barmap" src="design/graph.jpg"></a></td>
<td>
<?php
$query = sprintf("SELECT lglit FROM bddpays WHERE pays='France'",
mysql_real_escape_string($lglit));
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
echo "<ul><li>Longueur du littoral (km) : ".$row['lglit']."</li></ul>";
}
?>
</td>
<td class="right">2003</td>
</tr>
<tr>
<td><img class="blank" src="design/absstat.jpg"></td>
<td><a href="/superficie-totale/"><img class="barmap" src="design/graph.jpg"></a></td>
<td>
<?php
$query = sprintf("SELECT suptot FROM bddpays WHERE pays='France'",
mysql_real_escape_string($suptot));
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
echo "<ul><li>Superficie totale (km²) : ".$row['suptot']."</li></ul>";
}
?>
</td>
<td class="right">2004</td>
</tr>
</table>
<p><img class="blank" src="design/dossier/counter-popmond.jpg" width="1" height="45"><img class="blank" src="design/dossier/counter-popmond.jpg" width="1" height="45"></p>
Comme vous pouvez le remarquer, je n'ai réussi qu'à faire des répétitions avec toutes les demandes de connection à la base et j'ai peur qu'avec ça mon hébergeur ne réagisse pas bien ! Croyez vous qu'il existe un moyen de ratraicir ce code ? Je pensais peut être à mieux méler les tableau dans le PHP mais n'étant pas experte avec ce langage, vous comprendrez la raison de ce post.
Merci beaucoup à ceux et/ou celles qui pourraient m'aider
A bientôt