Une requette assze complex

Mammouth du PHP | 19672 Messages

16 juin 2005, 11:12

Pour utiliser une variable, il faut commencer par la définir, c'est à dire lui assigner une valeur.
Si je fais:
$a = $b/100;
J'aurai une erreur parce que $b n'est pas définie: Si en revanche je fais ceci:
$b = 25;
$a = $b / 100;
Ça va fonctionner parce que je définis $b avant de l'utiliser.
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, 14:40

mais $b c temps d'on tu parle et elle est defini puisquelle est le resultat du calcule presedent

ou laors je vous pas de koi tu me parle

ViPHP
pjl
ViPHP | 2119 Messages

16 juin 2005, 14:46

Un petit effort dans l'écriture (je n'ose croire qu'à un niveau bac, on ne puisse écrire un peu mieux) et l'utilisation de la balise PHP pour mettre ton code en relief devraient aider les personnes qui te répondent.

Kma
Invité n'ayant pas de compte PHPfrance

17 juin 2005, 22:09

bon j'ai reussi a le faire pour le jour0 et j'ai dupliqué mais ca marche pas

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 524288 bytes) in /var/www/free.fr/f/f/horizonfm945/v4/test.php on line 208

la souce est la sivante

Code : Tout sélectionner

<html> <head> </head> <body> <? include("conf/conf.php"); $today = date ("w"); $start= "10800"; $end= 10800+86400; // 3h + 24h $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, debut, TIME_TO_SEC(fin) AS secfin, fin, emission FROM Emissions WHERE jour LIKE '1______' ORDER BY secdebut"; $resultat = mysql_query($requete,$connexion); while($data = mysql_fetch_array($resultat)) { $id= "0"; $secdebut= $data[secdebut]; $emission= $data[emission]; $secfin= $data[secfin]; if ($secdebut<10800) { $secdebut=$secdebut+86400; } if ($secfin<10800) { $secfin=$secfin+86400; } $bloc= ($secdebut-$start)/1800; if ($bloc!=0) { $jour0[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour0['.$id.']=""; $id++; } } $bloc= ($secfin-$secdebut)/1800; if ($bloc!=0) { $jour0[$id]='<td rowspan="'.$bloc.'">'.$emission.'</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour0['.$id.']=""; $id++; } } $start= $secfin; } $bloc= ($end-$secfin)/1800; if ($bloc!=0) { $jour0[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>';; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour0['.$id.']=""; $id++; } } $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, debut, TIME_TO_SEC(fin) AS secfin, fin, emission FROM Emissions WHERE jour LIKE '_1_____' ORDER BY secdebut"; $resultat = mysql_query($requete,$connexion); while($data = mysql_fetch_array($resultat)) { $id= "0"; $secdebut= $data[secdebut]; $emission= $data[emission]; $secfin= $data[secfin]; if ($secdebut<10800) { $secdebut=$secdebut+86400; } if ($secfin<10800) { $secfin=$secfin+86400; } $bloc= ($secdebut-$start)/1800; if ($bloc!=0) { $jour1[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour1[$id]=""; $id++; } } $bloc= ($secfin-$secdebut)/1800; if ($bloc!=0) { $jour1[$id]='<td rowspan="'.$bloc.'">'.$emission.'</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour1[$id]=""; $id++; } } $start= $secfin; } $bloc= ($end-$secfin)/1800; if ($bloc!=0) { $jour1[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>';; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour1[$id]=""; $id++; } } $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, debut, TIME_TO_SEC(fin) AS secfin, fin, emission FROM Emissions WHERE jour LIKE '__1_____' ORDER BY secdebut"; $resultat = mysql_query($requete,$connexion); while($data = mysql_fetch_array($resultat)) { $id= "0"; $secdebut= $data[secdebut]; $emission= $data[emission]; $secfin= $data[secfin]; if ($secdebut<10800) { $secdebut=$secdebut+86400; } if ($secfin<10800) { $secfin=$secfin+86400; } $bloc= ($secdebut-$start)/1800; if ($bloc!=0) { $jour2[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour2[$id]=""; $id++; } } $bloc= ($secfin-$secdebut)/1800; if ($bloc!=0) { $jour2[$id]='<td rowspan="'.$bloc.'">'.$emission.'</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour2[$id]=""; $id++; } } $start= $secfin; } $bloc= ($end-$secfin)/1800; if ($bloc!=0) { $jour2[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>';; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour2[$id]=""; $id++; } } $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, debut, TIME_TO_SEC(fin) AS secfin, fin, emission FROM Emissions WHERE jour LIKE '___1___' ORDER BY secdebut"; $resultat = mysql_query($requete,$connexion); while($data = mysql_fetch_array($resultat)) { $id= "0"; $secdebut= $data[secdebut]; $emission= $data[emission]; $secfin= $data[secfin]; if ($secdebut<10800) { $secdebut=$secdebut+86400; } if ($secfin<10800) { $secfin=$secfin+86400; } $bloc= ($secdebut-$start)/1800; if ($bloc!=0) { $jour3[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour3[$id]=''; $id++; } } $bloc= ($secfin-$secdebut)/1800; if ($bloc!=0) { $jour3[$id]='<td rowspan="'.$bloc.'">'.$emission.'</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour3[$id]=""; $id++; } } $start= $secfin; } $bloc= ($end-$secfin)/1800; if ($bloc!=0) { $jour3[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>';; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour3[$id]=""; $id++; } } $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, debut, TIME_TO_SEC(fin) AS secfin, fin, emission FROM Emissions WHERE jour LIKE '____1__' ORDER BY secdebut"; $resultat = mysql_query($requete,$connexion); while($data = mysql_fetch_array($resultat)) { $id= "0"; $secdebut= $data[secdebut]; $emission= $data[emission]; $secfin= $data[secfin]; if ($secdebut<10800) { $secdebut=$secdebut+86400; } if ($secfin<10800) { $secfin=$secfin+86400; } $bloc= ($secdebut-$start)/1800; if ($bloc!=0) { $jour4[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour4[$id]=""; $id++; } } $bloc= ($secfin-$secdebut)/1800; if ($bloc!=0) { $jour4[$id]='<td rowspan="'.$bloc.'">'.$emission.'</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour4[$id]=""; $id++; } } $start= $secfin; } $bloc= ($end-$secfin)/1800; if ($bloc!=0) { $jour4[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>';; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour4[$id]=""; $id++; } } $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, debut, TIME_TO_SEC(fin) AS secfin, fin, emission FROM Emissions WHERE jour LIKE '_____1_' ORDER BY secdebut"; $resultat = mysql_query($requete,$connexion); while($data = mysql_fetch_array($resultat)) { $id= "0"; $secdebut= $data[secdebut]; $emission= $data[emission]; $secfin= $data[secfin]; if ($secdebut<10800) { $secdebut=$secdebut+86400; } if ($secfin<10800) { $secfin=$secfin+86400; } $bloc= ($secdebut-$start)/1800; if ($bloc!=0) { $jour5[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour5[$id]=""; $id++; } } $bloc= ($secfin-$secdebut)/1800; if ($bloc!=0) { $jour5[$id]='<td rowspan="'.$bloc.'">'.$emission.'</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour5[$id]=""; $id++; } } $start= $secfin; } $bloc= ($end-$secfin)/1800; if ($bloc!=0) { $jour5[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>';; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour5[$id]=""; $id++; } } $requete= "SELECT TIME_TO_SEC(debut) AS secdebut, debut, TIME_TO_SEC(fin) AS secfin, fin, emission FROM Emissions WHERE jour LIKE '______1' ORDER BY secdebut"; $resultat = mysql_query($requete,$connexion); while($data = mysql_fetch_array($resultat)) { $id= "0"; $secdebut= $data[secdebut]; $emission= $data[emission]; $secfin= $data[secfin]; if ($secdebut<10800) { $secdebut=$secdebut+86400; } if ($secfin<10800) { $secfin=$secfin+86400; } $bloc= ($secdebut-$start)/1800; if ($bloc!=0) { $jour6[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour6[$id]=""; $id++; } } $bloc= ($secfin-$secdebut)/1800; if ($bloc!=0) { $jour6[$id]='<td rowspan="'.$bloc.'">'.$emission.'</td>'; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour6[$id]=""; $id++; } } $start= $secfin; } $bloc= ($end-$secfin)/1800; if ($bloc!=0) { $jour6[$id]='<td rowspan="'.$bloc.'">Rock non stop</td>';; // la case de l'émission $id++; for($i=1; $i !=$bloc ; $i++) { $jour6[$id]=""; $id++; } } ?> <table width="100%" border="2"> <tr> <td width="0px"></td> <!-- la colone pour faire les demi heure en rowspan--> <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].' '.$jour2[$id].' '.$jour3[$id].' '.$jour4[$id].' '.$jour5[$id].' '.$jour6[$id].' '.$jour0[$id].' </tr>'; $id++; echo '<tr> <td></td> '.$jour1[$id].' '.$jour2[$id].' '.$jour3[$id].' '.$jour4[$id].' '.$jour5[$id].' '.$jour6[$id].' '.$jour0[$id].' </tr>'; $id++; //Préparer le crénneau suivant $hd += 01; if ($hd == "24") { $hd= 0; } } ?> </table> </body> </html>

Mammouth du PHP | 19672 Messages

17 juin 2005, 23:30

Est-ce que tu réalises que tu fais 7 fois les mêmes opérations pour les 7 jours de la semaine...? Tu peux sûrement améliorer en réduisant le tout à une seule fois, mais en triant tes résultats lors de la requête et en te servant de logique et de tableaux. Tu nous envoies 470 lignes de code indigeste : tu as identifié le problème, c'est un début. Maintenant pourquoi ça marche pour le premier et pas pour les suivants ? Arriver à bouffer toute la mémoire allouée, c'est pas vraiment courant.

Essaye de réfléchir à une méthode sur la base d'une seule requête comme ceci:

Code : Tout sélectionner

SELECT jour, TIME_TO_SEC(debut) AS secdebut, debut, TIME_TO_SEC(fin) AS secfin, fin, emission FROM Emissions ORDER BY jour
Tu auras tout et il te suffira ensuite de trier en identifiant le jour de chaque ligne pour séparer les lignes lors de ton affichage.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: