PHP MYSQL Affichage resultats selon heure et

Fermé
Petitwebmaster - 11 déc. 2007 à 01:48
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 - 12 déc. 2007 à 14:41
Bonjour, c'est tres urgent pour une radio
Je doit imperativement afficher les résultats de la base de donnee selon l'heure, tout marche bien dansla journée sauf la nuit

de 00h à 23 heure, aucun probleme
mais de 23 heure à 07heure, gros prob

Aucun résultats sort de la base, il prend pas ne compte le jour suivant,

voici mon code PHP/Mysql

<?php

$heure=date("G");
$commaff= mysql_query("SELECT * FROM ".T_ANIMATEUR." WHERE heuredebut<='$heure' AND heurefin>='$heure'+1 LIMIT 1");

if (mysql_num_rows($commaff) == 0)

echo '<div align="center"><a href="playlist.php"><img src="images/playlis.png" alt="Ecouter la Playlist de Mona FM" width="250" height="176" border="0" /></a></div>
';

while ($donnees = mysql_fetch_array($commaff))
{

$jour=date("w");
$jourbd=$donnees['jour'];
$journee = explode(",", $jourbd);

$max=45;
$chaine=$donnees['bio'];
if(strlen($chaine)>=$max)
{
$chaine=substr($chaine,0,$max);
$espace=strrpos($chaine," ");
if($espace)
$chaine=substr($chaine,0,$espace);
$chaine .= ' ...';
}
$numero=$donnees[0];
for($i=0;$i<sizeof($journee);$i++)
{
if($jour==$journee[$i]){



echo'
'.stripslashes ($donnees['nomprenom']).'

';
}
}
}
?>
A voir également:

17 réponses

phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
11 déc. 2007 à 14:42
déjà bizarre que ta requête ne contient pas le jour. est-ce qu'il n'y a pas une fonction DateAdd dans php ?


<?
function dateadd($per,$n,$d) {
switch($per) {
case "yyyy": $n*=12;
case "m":
$d=mktime(date("H",$d),date("i",$d)
,date("s",$d),date("n",$d)+$n
,date("j",$d),date("Y",$d));
$n=0; break;
case "ww": $n*=7;
case "d": $n*=24;
case "h": $n*=60;
case "n": $n*=60;
}
return $d+$n;
}

$date2=dateadd($periode,$nombre,$date1);
?>


SELECT * FROM ".T_ANIMATEUR." WHERE date between date1 and date2
0
Petitwebmaster
11 déc. 2007 à 16:36
J'ai essayé avec ce code, mais rien ne donne, tout est pareil,

Merci quand même pour ta réponse, c'est sympat

Quelqun aurais t'il une autre solution SVPPPP ??
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
11 déc. 2007 à 16:53
$heure=date("G");

ceci te donne une heure en format 24 heures sans 0 dévant. je suppose que dans la base tu a un format avec 0, donc à 1 heure du mat ça donnerais (pour une comparaison texte) where '01:00' <= '1:00' and '02:00' >= '1:00'

une comparaison texte te donnerais donc le résultat que '02:00' est < '1:00' car 0 est plus petit que 1

Kes t'en panses ?


SELECT * FROM ".T_ANIMATEUR." WHERE heuredebut<='$heure' AND heurefin>='$heure'+1
0
Petitwebmaster
11 déc. 2007 à 17:04
J'ai essayé manuellement, ca marche,

En ce qui concerne ma base de données, je doit mettre mon champ datedebut et datefin en quel type ?

INT, VACHAR... ?

Merci encore de ton aide
0

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

Posez votre question
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
11 déc. 2007 à 17:15
connais pas MySQL, normalement type datatime sinon varchar avec yyy-mm-dd hh:nn:ss

mais je dirais qu'il faudrait faire un date("H") pour une date en dd/mm/yyyy


"J'ai essayé manuellement, ca marche", c'est quoi le manuel ? debug en step-by-step ou éditer la requête et la lancer avec la date mis manuelement car il faudrait voir ce cela donne:

WHERE heuredebut<='$heure' AND heurefin>='$heure'+1

tu pourrais poster ce morceau ?
0
Petitwebmaster
11 déc. 2007 à 17:35
Oups, ca marche pas en fait, je me suis trompé,

dans mysql, j'ai
heuredebut varchar(255) latin1_swedish_ci Oui NULL
heurefin varchar(255) latin1_swedish_ci Oui NULL


et mon php est comme ceci

j'ai essayé aussi avec un champ INT, mais c pareil sauf que je peut pas mettre de 0 de 5 pour faire 05heure du mat

C'est trop galere à faire, il me reste que ca à faire et le site est fini. mais c une chose super importante pour la radio

<?php

$heure=date("G");



$commaff= mysql_query("SELECT * FROM ".T_ANIMATEUR." WHERE heuredebut<='$heure' AND heurefin>='$heure'+1 ");

if (mysql_num_rows($commaff) == 0)
echo '<div align="center"><a href="playlist.php"><img src="images/playlis.png" alt="Ecouter la Playlist de Mona FM" width="250" height="176" border="0" /></a></div>
';

while ($donnees = mysql_fetch_array($commaff))
{

$jour=date("w");
$jourbd=$donnees['jour'];
$journee = explode(",", $jourbd);

$max=45;
$chaine=$donnees['bio'];
if(strlen($chaine)>=$max)
{
$chaine=substr($chaine,0,$max);
$espace=strrpos($chaine," ");
if($espace)
$chaine=substr($chaine,0,$espace);
$chaine .= ' ...';
}
$numero=$donnees[0];
for($i=0;$i<sizeof($journee);$i++)
{
if($jour==$journee[$i]){



echo'
<table id="Tableau_01" width="252" height="175" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><img src="images/encemoment_01.png" width="252" height="42" alt="" /></td>
</tr>
<tr>
<td><table width="252" height="117" border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign="top" background="images/encemoment_02.png"><div align="center">
<table width="87%" height="114" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="middle"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="6%" valign="top"><table width="81" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="81" valign="top" ><div> <span ><a href="'.$donnees['url'].' "><img src="images/animateur/'.$donnees['photo1'].' " width="80" height="80" border="0" class="glossy iradius"></a></span></div></td>
</tr>
</table></td>
<td width="94%" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><div align="left" ><strong><a href="'.$donnees['url'].'">'.stripslashes ($donnees['nomprenom']).'</a></strong><br>
<strong class="encemomentantenne">'.stripslashes ($donnees['age']).'</strong></div>
<em>de '.stripslashes ($donnees['heuredebut']).'h à '.$donnees['heurefin'].'h</em></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
</table>
</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><img src="images/encemoment_03.png" width="252" height="16" alt="" /></td>
</tr>
</table>

';
}
}
}
?>
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
11 déc. 2007 à 17:55
stp un example de "heuredebut" et "heurefin"
et un ou heuredebut<='$heure' AND heurefin>='$heure'+1 " ont été remplacé par les valeurs correspondantes


"SELECT * FROM ".T_ANIMATEUR." WHERE heuredebut<='$heure' AND heurefin>='$heure'+1 "

==>
par ex
"SELECT * FROM ".T_ANIMATEUR." WHERE '2007-12-11 01:00'<='1:00:00'AND '2007-12-11 02:00:00' >= '1:00:00'+1 "
0
petitwebmaster
11 déc. 2007 à 18:02
$heure=date("G");
$commaff= mysql_query("SELECT * FROM ".T_ANIMATEUR." WHERE 23>= $heure && $heure< 05");
Mon msn est wecords (at) hotmail.fr

Merci beaucoup
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
11 déc. 2007 à 18:11
donc à 1 heure de mat

$commaff= mysql_query("SELECT * FROM ".T_ANIMATEUR." WHERE 23>= 1 && 1 < 05");

ça te viens :)

23>= 1 aietch

faut pas faire comme ça, il faut comparer de dates entières rien à faire. ceci ne marchera jamais
0
petitwebmaster
11 déc. 2007 à 18:45
Non, je comprend pas

Pourrais tu me contacter par MSN, stp,
Je doi imperativement finir le site dans 3 joursn c urgent
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
11 déc. 2007 à 18:48
A une heure du matin

$commaff= mysql_query("SELECT * FROM ".T_ANIMATEUR." WHERE 23>= 1 && 1 < 05");
---------------------------------------------------------------------------------------------------^

depuis quand 23 est plus grand que 1

à demain
0
petitwebmaster
11 déc. 2007 à 19:31
Non, je ne comprend rien, je me melange les pinceaux
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
12 déc. 2007 à 11:23
Dans ce cas je te conseille d'apprendre un peu le SQL. Et je me repète peut-être mais il faut pas comparer seulement les heures, il faut comparer des dates entières. Ca sert à rien de vouloir l'essayer autrement.
Encore une fois il faut écrire le SQL comme ça :

SELECT * FROM ".T_ANIMATEUR." WHERE date BETWEEN date1 and date1 + 1 heure

utilise DateAdd pour resoudre "date1 + 1 heure"

et arrètes d'utiliser $heure = date("Q"), c'est $heure = date("H")

Puis, je ne sais toujours pas que contient le champ heuredebut/heurefin. Tu dis que c'est une date mais tu ne montre qu'un chifre là. Je ne peut pas croire ça. De même que date("Q") te fourni un chiffre au lieu d'une heure (datetime)
0
petitwebmaster
12 déc. 2007 à 13:36
J'ai fait comme ceci

$commaff= mysql_query("SELECT * FROM ".T_ANIMATEUR." WHERE ((heuredebut < heurefin) and heuredebut <= '$heure' and heurefin >='$heure') or (heuredebut > heurefin and ($heure >= heuredebut or $heure <= heurefin)) ");


Ca marche de 20h à 05h sans probleme. le seul sousis, c'est que si j'ai un animateur de 12hà15h et un autre de 15h à 18h
Il affichera les deux animateur de 15h à 15h59

Comment y remédier ?

le champ heuredébut en INT contient 1 ou deux chiffre = 5 ou 14 / heure
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
12 déc. 2007 à 13:52
tu es un cas sans espoir :(
0
petitwebmaster
12 déc. 2007 à 14:03
Je ne comprend pas ce que tu ve me dire par ca ?
______________________
Dans ce cas je te conseille d'apprendre un peu le SQL. Et je me repète peut-être mais il faut pas comparer seulement les heures, il faut comparer des dates entières. Ca sert à rien de vouloir l'essayer autrement.
Encore une fois il faut écrire le SQL comme ça :

SELECT * FROM ".T_ANIMATEUR." WHERE date BETWEEN date1 and date1 + 1 heure

utilise DateAdd pour resoudre "date1 + 1 heure"

et arrètes d'utiliser $heure = date("Q"), c'est $heure = date("H")

Puis, je ne sais toujours pas que contient le champ heuredebut/heurefin. Tu dis que c'est une date mais tu ne montre qu'un chifre là. Je ne peut pas croire ça. De même que date("Q") te fourni un chiffre au lieu d'une heure (datetime)211 message(s) posté(s) depuis le mercredi 21 novembre 2007
_______________________
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
12 déc. 2007 à 14:41
et moi je ne sais pas comment te l'éxpliquer si tu n'as pas un minimum de connaissances de ce que tu es en train de faire
0