Une requette assze complex

Mammouth du PHP | 19672 Messages

14 juin 2005, 12:07

Tu aurais combien de colonnes ? tu peux tout à fait générer un tableau de plusieurs colonnes avec un type de donnée par colonne: quand on aura compris ce que tu veux faire exactement, ce sera plus simple de te guider vers la solution.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Kma
Invité n'ayant pas de compte PHPfrance

14 juin 2005, 12:28

ba c pour un emploie du temps donc une collone par jour

Mammouth du PHP | 19672 Messages

14 juin 2005, 12:34

Ha, effectivement, c'est complexe. Pas impossible, je l'ai déjà fait. Il y a un autre post sur le sujet auquel j'ai répondu il y a peu de temps, je vais essayer de le retrouver et je mettrai le lien ici plutôt que de ré-écrire le code.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Kma
Invité n'ayant pas de compte PHPfrance

14 juin 2005, 12:34

ce que je ve c faire une requette pour arriver a decouper par demi heure ma bdd

donc j'ai une émission de 4h à 5h30 et qui s'apelle "Un matin" et je ve sortir ca de cette manière

Code : Tout sélectionner

jour[0]="<td rowspan="2">Musique</td>" (de 3h a 4h il y a rien) jour[1]="" (car le champs est identique au celui du dessu d'ou le rowspan de 2) jour[2]=<td rowspan="3">Un matin</td> rowspan de 3 car il y a treoi fois une demi heure) jour[3]="" jour[3]="" jour[4]=............................

Mammouth du PHP | 19672 Messages

14 juin 2005, 12:37

Tiens, regarde ce post, ça devrait t'inspirer pour développer ton application.

Il restera à déterminer la requête SQL correcte, mais tu verras sur ce post que le structure de la base est un peu différente. Ceci dit, c'est exactement la même chose quant à la présentation du résultat, en moins précis que le quart d'heure puisque c'est à l'heure, mais le principe est strictement le même.
Modifié en dernier par Cyrano le 14 juin 2005, 12:40, modifié 1 fois.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Kma
Invité n'ayant pas de compte PHPfrance

14 juin 2005, 12:39

ok je te remerci pour ton aides

Kma
Invité n'ayant pas de compte PHPfrance

14 juin 2005, 12:40

ya pas de lien

Kma
Invité n'ayant pas de compte PHPfrance

14 juin 2005, 12:49

ha si c bon firefox a du delirer

Kma
Invité n'ayant pas de compte PHPfrance

14 juin 2005, 14:42

bon j'ai essayer de taper un peu pour mon cas et voila ou j'en suis

Code : Tout sélectionner

<html> <head> </head> <body> <? include("conf/conf.php"); ?> <table width="100%" border="6" cellpadding="5" cellspacing="2" table background="images/fond2.gif"> <tr><th width="11%"> <? // heure debut et fin de type hh:mm:ss $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, debut, TIME_TO_SEC(fin) AS secfin, fin, jour, emission FROM Emissions"; $resultat = mysql_query($requete,$connexion); while ($row=mysql_fetch_assoc($resultat)) { $secdebut= $row['secdebut']; //heure de debut en seconde $start= $secdebut - 10800; // debut de l'emploi du temps a 3h soir 10800 seconde $bloc= $start / 1800; // un bloc (celule = 30 mn) // emission $emission= $row['emission']; $date =$row['date']; if ($date = "1______") // Diamnche { $njour= "0"; } if ($date = "_1_____") // Lundi { $njour= "1"; } if ($date = "__1____") // Mardi { $njour= "2"; } if ($date = "___1___") // Mercredi { $njour= "3"; } if ($date = "____1__") // Jeudi { $njour= "4"; } if ($date = "_____1_") // vendredi { $njour= "5"; } if ($date = "______1") // Samedi { $njour= "6"; } // On établit la durée du rendez-vous $secdefin= $row['secdefin']; $duree[$njour][$bloc]= $secdefin - $secdebut; // S'il y a une émission onair=1 $onair = 1; /* On construit le tableau $emission */ $ems[$njour][$bloc] = array($emission, $duree, $onair); } ?> </tr> <? //Ensuite on affiche les 48 lignes correspondants aux créneaux allant de 3H à 3H par demi heure //Les 48 crénneau peuvent être calculés automatiquement à partir de 3H $hd = 10800; //Heure de départ des créneaux d'un jour 10800=3h en sec for ($c=0; $c < 48 ; $c++) { //La première colonne de la ligne contient le crénneau calculé à partir de $hd ?> <tr> <th> <? //La durée affichée d'un crénneau est toujour 30MN $hf = $hd +1800; //par exemple $hf contient 9H si $hd contient 8H echo "$hd"."H"." à "."$hf"."H"; //Préparer le crénneau suivant $hd += 1800; //Correction pour le passage de 00h à 03h if ($secdebut < "1300") { $secdebut += 86400; } //La deuxieme partie de la ligne affichée contient les RDV des 5 jours for ($j=0; $j < 7 ; $j++) { //Attention: ne pas créer de céllule si le crénneau précédent l'a déjà consommée à cause d'une durée qui dépasse 1 heure //$c : le n° du crénneau et $j celui du jour du RDV if (!occupé($c,$j) ) { //voir la fonction occupé() qui determine si une céllule peut être créée //la céllule qui s'affiche peut consommer plusieurs lignes selon la durée du RDV planifié (c'est ROWSPAN qui s'en charge) //BGCOLOR permet de peindre le fond si le RDV existe //COLOR change de couleur de texte si le RDV existe ?> <td valign="middle" align="center" width="18%" rowspan=<? echo $duree[$njour][$bloc]>0?$duree[$njour][$bloc]:""; ?> bgcolor="<? echo $duree[$njour][$bloc]>0?"silver":""; ?>" style="color:<? echo $ems[$njour][$bloc]=="*"?"":"purple"; ?>"> <? echo $ems[$njour][$bloc]; } } } ?> </table> </body> </html>

l'ereur est la suivante
Fatal error: Call to undefined function: occupé() in /var/www/free.fr/f/f/horizonfm945/v4/test.php on line 97

Mammouth du PHP | 19672 Messages

14 juin 2005, 14:52

Ben ok, tu fait un appel vers fonction qui n'est nulle paret dans ton code: il faudrait peut-être ajouter l'include vers le fichier où se trouve cette fonction, tu ne crois pas ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

kma
Invité n'ayant pas de compte PHPfrance

14 juin 2005, 15:11

oui mais je la conanit pas cette fonction et aparamznt ce qu'il fait na rien a voir à ce dont j'ai besoin en fait donc je recommence tout depuis le debut

Kma
Invité n'ayant pas de compte PHPfrance

16 juin 2005, 03:30

bon j'ai bosser dessus apres tout le taf que j'ai eu a coter (c bien pbeau de faire dessite masi faut aussi faire le taf a coter et preparer le bac bref) et voila ou j'en suis aujourdh'ui

je te donne la source complette et des explication a la fin de la source

Code : Tout sélectionner

<html> <head> <link href="css/style.css" rel="stylesheet" type="text/css"> </head> <body> <? include("conf/conf.php"); $start= 10800; // start= 3h $id= 0; $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, TIME_TO_SEC(fin) AS secfin, emission FROM Emissions WHERE jour LIKE '_____1_'"; // test sur le vendredi DLMMJVS et metre un un sur le jour $resultat = mysql_query($requete,$connexion); while ($row=mysql_fetch_assoc($resultat)) { $secdebut= $row[secdebut]; $secfin= $row[secfin]; $emission= $row[emission]; if ($start= $debut) // une émission { $temps= $secfin - $secdebut; //calcule en secde du temps de l'émission $bloc= $temps/1800; // division du temps en demi heure = le nombre de ligne fusioné $jour1[$id]='<td rowspan="$bloc">emission</td>'; // la case de l'émission $id = $id++; for ($boucle=$bloc; $boucle>1; $boucle--) // la boucle pour les colone vide du rowspan { $jour1[$id]=''; $id = $id++; } $start = $fin; } else // pas d'emission { $temps= $debut - $start; //calcule en secde du temps de l'émission $bloc= $temps/1800; // division du temps en demi heure $jour1[$id]='<td rowspan="$bloc">Rock non Stop</td>'; $id = $id++; for ($boucle=$bloc; $boucle>1; $boucle--) // la boucle pour les colone vide du rowspan { $jour1[$id]=''; $id = $id++; } $start = $debut; //start = debut } } ?> <table width="100%" border="2"> <tr> <td width="0px"></td> <td> Heure </td> <td> Lundi </td> <td> Mardi </td> <td> Mercredi </td> <td> Jeudi </td> <td> Vendredi </td> <td> Samedi </td> <td> Dimanche </td> </tr> <? //Ensuite on affiche les 48 lignes correspondants aux créneaux allant de 3H à 3H par demi heure //Les 48 crénneau peuvent être calculés automatiquement à partir de 3H $hd = 03; //Heure de départ des créneaux d'un jour 10800=3h en sec $id= 0; for ($c=0; $c < 24 ; $c++) { //La première colonne de la ligne contient le crénneau calculé à partir de $hd echo'<tr> <td></td> <td rowspan="2">'.$hd.'H00</td> '.$jour1[$id].' <td valign="middle" align="center" rowspan="2"> ici le programlle du Mardi</td> <td valign="middle" align="center" rowspan="2"> ici le programlle du Mercredi</td> <td valign="middle" align="center" rowspan="2"> ici le programlle du Jeudi</td> <td valign="middle" align="center" rowspan="2"> ici le programlle du vendredi</td> <td valign="middle" align="center" rowspan="2"> ici le programlle du Samedi</td> <td valign="middle" align="center" rowspan="2"> ici le programlle du Dimanche</td> </tr>'; $id= $id++; '<tr> <td></td> '.$jour1[$id].' </tr>'; $id= $id++; //Préparer le crénneau suivant $hd += 01; if ($hd == "24") { $hd= 0; } } ?> </table> </body> </html>
donc en fait ca marche pas des masse car je pense que je m'y prend mal pour avoir mon champs type

Code : Tout sélectionner

$jour1[0]='<td rowspan"2">rock non sop</td>' $jour1[1]='' $jour1[2]='<td rowspan"3">$emission1</td>' $jour1[4]='' $jour1[4]='' $jour1[5]='<td rowspan"1">rock non stop</td>'
donc si vous pouviez me dire ou je fait fausse route

Kma
Invité n'ayant pas de compte PHPfrance

16 juin 2005, 03:48

Bon je vien de decortique et aparament ya un truc quelque part

Code : Tout sélectionner

[php] <html> <head> <link href="css/style.css" rel="stylesheet" type="text/css"> </head> <body> <? include("conf/conf.php"); $start= 10800; // start= 3h $id= 0; $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, TIME_TO_SEC(fin) AS secfin, emission FROM Emissions WHERE jour LIKE '____1__'"; // test sur le vendredi DLMMJVS et metre un un sur le jour $resultat = mysql_query($requete,$connexion); while ($row=mysql_fetch_assoc($resultat)) { $secdebut= $row[secdebut]; $secfin= $row[secfin]; $emission= $row[emission]; if ($start= "$secdebut") // une émission { $temps= $secfin - $secdebut; //calcule en secde du temps de l'émission $bloc= $temps/1800; // division du temps en demi heure = le nombre de ligne fusioné echo $id.' td rowspan='.$bloc.'>'.$emission.'</td <br>'; // la case de l'émission $id++; for ($boucle=$bloc; $boucle>1; $boucle--) // la boucle pour les colone vide du rowspan { echo $id.' <br>'; $id++; } $start = $secfin; } else // pas d'emission { $temps= $secdebut - $start; //calcule en secde du temps de l'émission $bloc= $temps/1800; // division du temps en demi heure = le nombre de ligne fusioné echo $id.' td rowspan='.$bloc.'>rock non stop</td <br>'; // la case de l'émission $id++; for ($boucle=$bloc; $boucle>1; $boucle--) // la boucle pour les colone vide du rowspan { echo $id.' <br>'; $id++; } $start = $secfin; } } ?>[/php]
et voila ce que je recupère


0 td rowspan=2>L'intégrale... ou presque !
1
2 td rowspan=6>Le matin c'est Béné
3
4
5
6
7
8 td rowspan=6>Vos debuts de soirée avec osmin
9
10
11
12
13
14 td rowspan=4>test de temps
15
16
17


donc il ne lirai pas bien mon if et ne part jamais dans le else

Mammouth du PHP | 19672 Messages

16 juin 2005, 08:05

Ligne 90 tu intercales une donnée entre deux cellules de ton tableau, et cette variable n'est définie nulle part:
$jour1[$id]
Lignes 98 et 101, tu mets
$id= $id++;
Si c'est juste pour incrémenter $i, tu peux tout simplement mettre:
$i++;
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Kma
Invité n'ayant pas de compte PHPfrance

16 juin 2005, 10:35

ell est n'est pas defini c'esta dire

dsl je sui un peut nvice ne la matière

ma commende if est-elle bonne