Affichage de la température selon l'heure

Eléphanteau du PHP | 11 Messages

06 oct. 2010, 16:31

Bonsoir,

Alors je vais tenter de m'exprimer afin d'être compris au maximum :

J'ai un bout de code php sur mon site qui indique la température de l'île ou je me trouve, cependant ce code php me donne les maxima et minima. Jusque ici tout va bien ...

Par contre, j'aimerais que de 08h00 à 17h00 s'affiche uniquement les maxima et ensuite bien évidement les minima.
Je ne sais pas trop comment je dois m'y prendre étant novice en php, alors je vous colle le code que j'utilise pour afficher les maxima et minima :

Code : Tout sélectionner

<? $compteurligne = 0; foreach($xml as $row) { echo "<tr><td COLSPAN=3><font color=gray><B>"; echo "</B></font></TD></TR>" ."<TR><TD>Max: ".conversiontemperature($row[0])."<br>Min: ".conversiontemperature($row[1])."<BR>" ."Humidit&eacute; (%) : ".$MeteoJours[$compteurligne*2-1][3]."</TD>"; echo "<TD><font size=2 color=gray>JOUR</font><BR><IMG SRC='./images/".$MeteoJours[$compteurligne*2-1][0].".png'BORBER=0 width=40 ALT='".$MeteoJours[$compteurligne*2-1][1]."'></TD>"; echo "<TD><font size=2 color=gray>NUIT</font><BR><IMG SRC='./images/".$MeteoJours[$compteurligne*2][0].".png'BORBER=0 width=40 ALT='".$MeteoJours[$compteurligne*2][1]."'></TD>"; echo "</TR>"; $compteurligne +=1; } ?>
alors il faut savoir aussi que je ne désire pas les images pour ce que je veux faire, juste la température maximale de 08h00 à 17h00 et la minimale de 17h00 à 08h00 !

ps : le script fonctionne parfaitement actuellement mais en affichant les minimale et maximale

Merci de votre aide

Eléphanteau du PHP | 11 Messages

06 oct. 2010, 19:49

je viens apporter une petite précision pour plus d'exactitude dans ce que je désire réaliser :

de 08h00 à 17h00 je veux que ma page utilise ce code :

Code : Tout sélectionner

<? $compteurligne = 0; foreach($xml as $row) { echo ""; echo "" ."".conversiontemperature($row[0]).""; echo ""; $compteurligne +=1; } ?>
et de 17h00 à 08h00 je veux que ma page utilise ce code :

Code : Tout sélectionner

<? $compteurligne = 0; foreach($xml as $row) { echo ""; echo "" ."".conversiontemperature($row[1]).""; echo ""; $compteurligne +=1; } ?>
voilà ce qui simplifie ma question je pense :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 oct. 2010, 22:37

A l'aide de la fonction date() de php, tu peux connaitre l'heure du serveur : $heure = date('H');

A partir de là, tu devrais pouvoir facilement faire appel au code que tu souhaites en fonction de l'heure de la journée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

07 oct. 2010, 05:18

A l'aide de la fonction date() de php, tu peux connaitre l'heure du serveur : $heure = date('H');

A partir de là, tu devrais pouvoir facilement faire appel au code que tu souhaites en fonction de l'heure de la journée :)
j'ai trouvé cette piste mais j'ai des erreurs que je ne maîtrise pas, besoin d'aide svp

Code : Tout sélectionner

<?php $time_h = date("H"); if ($time_h >= '08' AND $time_h <= '17') $compteurligne = 0; foreach($xml as $row) { echo ""; echo "" ."".conversiontemperature($row[0]).""; echo ""; $compteurligne +=1; if ($time_h >= '18' AND $time_h <= '07') $compteurligne = 0; foreach($xml as $row) { echo ""; echo "" ."".conversiontemperature($row[0]).""; echo ""; $compteurligne +=1; } } ?>
Warning: Invalid argument supplied for foreach() on line 7


et si j'essaie

Code : Tout sélectionner

<?php $time_h = date("H"); if ($time_h >= '08' AND $time_h <= '17') include "./maxima.php"; if ($time_h >= '18' AND $time_h <= '07') include "./minima.php"; ?>
maxima.php

Code : Tout sélectionner

<?php $compteurligne = 0; foreach($xml as $row) { echo ""; echo "" ."".conversiontemperature($row[0]).""; echo ""; $compteurligne +=1; ?>
minima.php

Code : Tout sélectionner

<?php $compteurligne = 0; foreach($xml as $row) { echo ""; echo "" ."".conversiontemperature($row[1]).""; echo ""; $compteurligne +=1; ?>
rien ne s'affiche ...

Mammouth du PHP | 1967 Messages

07 oct. 2010, 08:33

Code : Tout sélectionner

<?php $time_h = date("H"); if ($time_h >= '08' AND $time_h <= '17') include "./maxima.php"; if ($time_h >= '18' AND $time_h <= '07') include "./minima.php"; ?>
La fonction date te retourne une chaine de caractère, et non pas un nombre. Cela n'a pas de sens de tester >= sur une chaine de caractère.
De plus, ta 2ème instruction ne "pourrait" jamais être juste, comment être supérieure à 18 et inférieure à 7 ?

La solution consiste à tester ta chaine de caractère donné par date() avec une série d'autre chaine de caractère avec par exemple
in_array($time_h,array('07','08', ... );
et pas besoin de tester de 18 à 7, un else simple suffira

Sinon, utilise la fonction idate('H'),

Code : Tout sélectionner

<?php $time_h = idate("H"); if ($time_h >= 8 AND $time_h <= 17) {include "./maxima.php";} else {include "./minima.php";} ?>
En bonus, tu n'a vraiment pas besoin de passer par des includes, et le code posté ci -dessus (rappelé ici
<?php

$time_h = date("H");

if ($time_h >= '08' AND $time_h <= '17') $compteurligne = 0;

foreach($xml as $row) {
    echo "";

    echo ""    ."".conversiontemperature($row[0])."";
   
    echo "";
    $compteurligne +=1;

if ($time_h >= '18' AND $time_h <= '07') $compteurligne = 0;

foreach($xml as $row) {
    echo "";

    echo ""    ."".conversiontemperature($row[0])."";
   
    echo "";
    $compteurligne +=1;
}

}
?>
Présente pas mal de faute :
-le premier 'if' ne fera que instancier la variable compteurligne à 0
-quoiqu'il arrive avec ce if, le foreach sera éxecuté
raison : Après un if, seule la première instruction est incluse sauf si le bloc d'instruction est contenu entre accolade {}
-Les accolades du 1er foreach comprenne tous le codes qu'il y a en dessous, pluto que de s'arreter après l'incrémentation de compteurligne
-les lignes echo ""; n'ont pas de sens, tu demande à php de n'afficher rien autant ne rien lui demander.
-instancier compteurligne à 0 dans chaque if ne sert à rien puisque quelle que soit la valeur de time_h, tu lui donne la même valeur, autant ne l'instancier qu'une fois avant ton if / else
-tu affiche dans les deux cas row[0]

Ces remarques sont à but instructif uniquement
en prime voici le code que j'utiliserais
<?php
$time_h = idate("H");
$compteurligne = 0;
if ($time_h >= 8 AND $time_h <= 17) {
   foreach($xml as $row) {
      echo conversiontemperature($row[0]);
      $compteurligne +=1;
   }
}
else {
   foreach($xml as $row) {
      echo conversiontemperature($row[1]);
      $compteurligne +=1;
   }
}
?>
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

07 oct. 2010, 17:44

Et bien merci pour cette réponse.

Je ne suis pas du genre à poster mon problème et m'éclipser quand j'ai eu la solution, j'ajouterais que explicitation m'a permis d'évoluer dans le langage php que j'apprends par moi-même en tentant de déchiffrer les variables et les fonctions, chose pas toujours évidente ...

Je vais maintenant tenter de pousser un peu plus le code afin d'améliorer le rendu des infos météorologique que j'offre aux visiteurs de mon site et si je m'en sors pas je reviendrais vers toi si je puis me permettre en n'abusant pas trop de temps biensur :)

Mammouth du PHP | 1967 Messages

08 oct. 2010, 08:13

Et bien voila une réponse qui est très gai à lire, merci. N'hésite pas à revenir dès que tu bute sur un problème, la communauté sera surement t'aider à progresser.

Bonne continuation
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube