C'est toi qui écrit les dates à la main dans le code que tu me montres donc je ne vois pas pourquoi tu ne peux pas les ecrire au format AAAA-MM-DD.
Version imprimable
C'est toi qui écrit les dates à la main dans le code que tu me montres donc je ne vois pas pourquoi tu ne peux pas les ecrire au format AAAA-MM-DD.
en uinversant cela ne change rien,pas d'affichage
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 $sth->execute(array(':j_debut'=>'2015-07-20',':j_fin'=>'2015-07-20')); while ($donnees = $sth->fetch(PDO::FETCH_ASSOC)) { $objDatedebut = date_create('2015-07-20'); $objDatefin = date_create('2015-07-20'); for( $date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { $tableau[$donnees['SALLE']][$date->format('Y-m-d')][] = $donnees['PRODUITS']; var_dump($tableau); } } ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"> <head> <meta http-equiv="Refresh" content="10" > <title>Gestion des Salles</title> </head> <body> <form method="post" action=""> <table border="1" cellspacing="1" cellpadding="30"> <?php $objDatedebut = date_create('2015-07-20'); $objDatefin = date_create('2015-07-26'); $objDatedebut = date_create(); if ($objDatedebut->format('N') != 1) { $objDatedebut->modify('last monday');
Tu n'as plus le tableau du planning ?
voici le code:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"> <head> <meta http-equiv="Refresh" content="10" > <title>Gestion des Salles</title> </head> <body> <table border="1" cellspacing="1" cellpadding="30"> <?php $objDatedebut = date_create('2015-07-20'); $objDatefin = date_create('2015-07-26'); $objDatedebut = date_create(); if ($objDatedebut->format('N') != 1) { $objDatedebut->modify('last monday'); } $tblSalles = array( 0 => 'Salles', 1 => 'Salle 1', 2 => 'Salle 2', 3 => 'Salle 3', 4 => 'Salle 4', 5 => 'Salle 5', 6 => 'Cours', 7 => 'Vestiaires' ); foreach ($tblSalles as $key=>$Salle) { echo '<tr> <td>' . $Salle . '</td>'; for ($date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { if ($key == 0) { $case = $date->format('y/m/d'); } else { $case = isset($tableau[$Salle][$date->format('Y-m-d')]) ? $tableau[$Salle][$date->format('Y-m-d')] : ''; } echo '<td>' . $case .'</td>'; } echo '</tr>'; } ?> </table> </body> </html>
Je voulais dire : tu n'as plus rien du tout en affichage ?
je n'ai rien qui s'affiche,j'ai peut être une indication,
ici le var_dump( $tableau); affiche bien les valeurs .Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 foreach ($tblSalles as $key=>$Salle) { echo '<tr> <td>' . $Salle . '</td>'; for ($date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { if ($key == 0) { $case = $date->format('Y/m/d'); } else { $case = isset($tableau[$Salle][$date->format('Y-m-d')]) ? $tableau[$Salle][$date->format('Y-m-d')] : ''; var_dump( $tableau); var_dump( $case); } echo '<td>' . $case .'</td>';
par contre var_dump( $case); m'affiche
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 string '' (length=0) string '' (length=0) string '' (length=0) string '' (length=0) string '' (length=0) string '' (length=0) string '' (length=0) .....
Si tu retires la premiere partie concernant la base de données tu retrouves le planning ou non ?
juste pour faire un point avant modif de ce que tu me demandes visuellement j'ai bien mon tableau avec mes salles et les dates sur 7 jours.mais je n'ai aucun affichage a l'interieur correspondant au salles et dates.d'ou le post precedent pour te montrer que $case est vide donc il affiche rien.
Exprime bien ce que tu obtiens au moins, "pas d'affichage" ca n'est pas vraiment pareil que "les cases ne se remplissent pas".
Il faut une correspondance avec le libellé dans le base de donnée ; tu peux utiliser la clef du tableau :
Code:
1
2
3
4
5
6
7
8
9
10 $tblSalles = array( 0 => 'Salles', 'Salle_1' => 'Salle 1', 'Salle_2' => 'Salle 2', 'Salle_3' => 'Salle 3', 'Salle_4' => 'Salle 4', 'Salle_5' => 'Salle 5', 'Cours' => 'Cours', 'Vestiaires' => 'Vestiaires' );
Code:$case = isset($tableau[$key][$date->format('Y-m-d')]) ? $tableau[$key][$date->format('Y-m-d')] : '';
Mais bon comme je te l'ai suggéré tout au début, une table de reference des salles serait la bonne solution.Code:$tableau[$donnees['SALLE']][$date->format('Y-m-d')] = $donnees['PRODUITS'];
bon, comme l'affichage est vide malgré la modification apportée, j'ai crée une table s'appelant SALLES avec 2 champs (id, salles)mais comment inseres tu la 2 eme table dans la requête sachant qu'il faut en condition les dates jour début et jour fin qui sont sur la première table?
Tu pourrais me faire un export de ta table de donnée, ça sera plus facile.
voici les tables salles et planning
On en revient au tout début : ou est la salle dans la table planning ?
Le code fonctionne bien sous reserve evidemment d'avoir une colonne SALLE
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"> <head> <meta http-equiv="Refresh" content="10" > <title>Gestion des Salles</title> </head> <body> <table border="1" cellspacing="1" cellpadding="30"> <?php $sth=$pdo->prepare("SELECT SALLE, PRODUITS, JOUR_DEBUT, JOUR_FIN FROM planning WHERE SALLE IN ('Salle_1','Salle_2','Salle_3','Salle_4','Salle_5','Cours','Vestiaires') AND JOUR_DEBUT <=:j_fin AND JOUR_FIN >=:j_debut"); $sth->execute(array(':j_debut'=>'2015-07-20',':j_fin'=>'2015-07-20')); while ($donnees = $sth->fetch(PDO::FETCH_ASSOC)) { $objDatedebut = date_create($donnees['JOUR_DEBUT']); $objDatefin = date_create($donnees['JOUR_FIN']); for( $date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { $tableau[$donnees['SALLE']][$date->format('Y-m-d')] = $donnees['PRODUITS']; } } $objDatedebut = date_create('2015-07-20'); $objDatefin = date_create('2015-07-26'); $objDatedebut = date_create(); if ($objDatedebut->format('N') != 1) { $objDatedebut->modify('last monday'); } $tblSalles = array( 'Salles' => 'Salles', 'Salle_1' => 'Salle 1', 'Salle_2' => 'Salle 2', 'Salle_3' => 'Salle 3', 'Salle_4' => 'Salle 4', 'Salle_5' => 'Salle 5', 'Cours' => 'Cours', 'Vestiaires' => 'Vestiaires' ); var_dump($tableau); foreach ($tblSalles as $key=>$Salle) { echo '<tr> <td>' . $Salle . '</td>'; for ($date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { if ($key === 'Salles') { $case = $date->format('d/m/Y'); } else { $case = isset($tableau[$key][$date->format('Y-m-d')]) ? $tableau[$key][$date->format('Y-m-d')] : ''; } echo '<td>' . $case .'</td>'; } echo '</tr>'; } ?> </table> </body> </html>
En fait j'ai enlevé le champ salle de la table planning,donc je doit la remettre avec toutes les salles
après avoir rajouter la colonne salle dans ma table planning et avoir apporte les modifications que tu m'as suggère via ton code je me retrouve dans le même cas de figure, avec les cases vides. Effectivement le var_dump( $tableau); affiche bien les valeurs correspondantes du tableau. D'autre part j'ai modifié une ligne du code car je n'avais plus les dates de la semaine.
enCode:if ($key === 'Salles') {
via cette partie de code je joint une capture d'écranCode:if ($key == 'Salles') {
Pièce jointe 183572Code:
1
2
3
4
5
6
7
8
9 if ($key == 'Salles') { $case = $date->format('d/m/Y'); } else { $case = isset($tableau[$key][$date->format('Y-m-d')]) ? $tableau[$key][$date->format('Y-m-d')] : 'vide'; } echo '<td>' . $case .'</td>';
as-tu bien repris le code que je t'ai donné ?
Le modification if ($key === 'Salles') { était dedans
quand je suis dans ce cas de figure voici l'affichage du tableau (mon tableau affiche vide partout ,je n'ai plus les dates
Pièce jointe 183610Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 foreach ($tblSalles as $key=>$Salle) { echo '<tr> <td>' . $Salle . '</td>'; for ($date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { if ($key === 'Salles') { $case = $date->format('d/m/Y'); } else { $case = isset($tableau[$key][$date->format('Y-m-d')]) ? $tableau[$key][$date->format('Y-m-d')] : 'vide'; } echo '<td>' . $case .'</td>'; } echo '</tr>'; } ?>
Le code que je t'ai donné fonctionne (en remettant la connexion à la base de donnée) avec la table planning que je t'ai donné en ajoutant seulement la colonne "SALLE" donc si ça ne fonctionne pas chez toi c'est que tu as mal recopié quelque chose.
c'est incomprehensible car j'ai fait un copier collé de ton code ,remis la colonne SALLE dans la table planning et pas le résultat que tu as obtenu,j'ai retrouvé mes dates de la semaine, mais mes case affiche vide
as tu obtenu des valeurs venant de la table correspondant a la salle et a la date?
Que donne le var_dump($tableau) ?
voici le var_dump
Code:
1
2
3
4
5
6
7
8
9
10 array (size=3) 'Salle_1' => array (size=1) '2015-07-20' => string 'testsssss' (length=9) 'Salle_4' => array (size=1) '2015-07-20' => string 'ok' (length=2) 'Salle_5' => array (size=1) '2015-07-20' => string 'test' (length=4)
Debug en faisant
Au passage je te repete que les dates de la requête, doivent être les mêmes que celles du planning sinon ça n'a pas de sens.Code:$case = isset($tableau[$key][$date->format('Y-m-d')]) ? $tableau[$key][$date->format('Y-m-d')] : 'rien pour ' . $key . ' - ' . $date->format('Y-m-d')];
voici la capture d'ecran du debug
Pièce jointe 183678
Tu n'as pas mis les _ dans les clefs de ton tableau $tblSalles.
voici la capture corrigée
Pièce jointe 183680
Comment tu expliques que les _ étaient manquant ?
en fait a un moment je penses avoir fais un mauvais copier coller
Tu peux vérifier tes copier/coller? Tous les messages depuis ce matin c'est pour te faire rectifier des choses que tu as mal recopié.
voici le code
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"> <head> <meta http-equiv="Refresh" content="10" > <title>Gestion des Salles</title> </head> <body> <table border="1" cellspacing="1" cellpadding="30"> <?php require_once("connexionsallesMysql.php"); $sth=$pdo->prepare("SELECT SALLE, PRODUITS, JOUR_DEBUT, JOUR_FIN FROM planning WHERE SALLE IN ('Salle_1','Salle_2','Salle_3','Salle_4','Salle_5','Cours','Vestiaires')AND JOUR_DEBUT <=:j_fin AND JOUR_FIN >=:j_debut"); $sth->execute(array(':j_debut'=>'2015-07-20',':j_fin'=>'2015-07-20')); while ($donnees = $sth->fetch(PDO::FETCH_ASSOC)) { $objDatedebut = date_create($donnees['JOUR_DEBUT']); $objDatefin = date_create($donnees['JOUR_FIN']); for( $date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { $tableau[$donnees['SALLE']][$date->format('Y-m-d')][] = $donnees['PRODUITS']; } } $objDatedebut = date_create('2015-07-20'); $objDatefin = date_create('2015-07-26'); $objDatedebut = date_create(); if ($objDatedebut->format('N') != 1) { $objDatedebut->modify('last monday'); } $tblSalles = array( 'Salles' => 'Salles', 'Salle_1' => 'Salle 1', 'Salle_2' => 'Salle 2', 'Salle_3' => 'Salle 3', 'Salle_4' => 'Salle 4', 'Salle_5' => 'Salle 5', 'Cours' => 'Cours', 'Vestiaires' => 'Vestiaires' ); var_dump($tableau); foreach ($tblSalles as $key=>$Salle) { echo '<tr> <td>' . $Salle . '</td>'; for ($date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { if ($key === 'Salles') { $case = $date->format('d/m/Y'); } else { $case = isset($tableau[$key][$date->format('Y-m-d')]) ? $tableau[$key][$date->format('Y-m-d')] : 'rien pour ' . $key . ' - ' . $date->format('Y-m-d'); } echo '<td>' . $case .'</td>'; } echo '</tr>'; } ?> </table> </body> </html>
Ba ce n'est pas le code que je t'ai fourni. Je vois au moins une différence :
Toutefois ce code ne donne pas le résultat que tu nous montres car on a bien un affichage pour salle 1 au 20/07.Code:$tableau[$donnees['SALLE']][$date->format('Y-m-d')] = $donnees['PRODUITS'];
Donc je ne sais pas ce que tu as fais avec ta bdd mais ça ne va pas.
effectivement ,j'ai resolu mon problème ,j'ai bien mon affichage concernant la salle en fonction de la date du 20/07.
par contre ce qui me gène c'est de rentrer dans le code pour modifier la date pour avoir l'affichage des semaines
Code:$sth->execute(array(':j_debut'=>'2015-07-20',':j_fin'=>'2015-07-20'));
Code:$sth->execute(array(':j_debut'=>$_POST['JOUR_DEBUT'],':j_fin'=>$_POST['JOUR_FIN']));
Citation:
Notice: Undefined index: JOUR_DEBUT
Notice: Undefined index: JOUR_FIN
Je t'ai déjà montré sur la première page comment avoir les dates du lundi au dimanche.
Je t'ai déjà ensuite redis avant hier que le code était sur la première page.
Et je t'ai dis que $_POST n'avait rien à faire dans ton histoire.
Je suppose que la prochaine étape est que je te redise encore qu'il faut avoir les mêmes dates dans la requête et dans le planning.
pour les dates du lundi au dimanche:
et pour les meme dates:Code:
1
2
3 $objDatedebut = date_create('2015-07-20'); $objDatefin = date_create('2015-07-26');
autrement j'essaie de faire une meilleure presentation en voulant mettre du colspan en fonction de la periode debut et fin.Code:$sth->execute(array(':j_debut'=>'2015-07-20',':j_fin'=>'2015-07-26'));
est ce que je suis dans la bonne direction pour utiliser le colspan?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 function nbJours($debut, $fin){ $nbSecondes= 60*60*24; $debut_ts= strtotime($debut); $fin_ts= strtotime($fin); $diff= $fin_ts - $debut_ts; return round($diff / $nbSecondes); } $nbJours= nbJours('2015-07-20' ,'2015-07-26'); foreach ($tblSalles as $key=>$Salle) { echo '<tr> <td style="background:#FF5862;">' . $Salle . '</td>'; for ($date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { if ($key === 'Salles') { $case = $date->format('d/m/Y'); } else { $case = isset($tableau[$key][$date->format('Y-m-d')]) ? $tableau[$key][$date->format('Y-m-d')] : ' ' ; } echo '<td colspan= $nbJours >' . $case .'</td>'; } echo '</tr>'; }
Actuellement la boucle qui lit la base de données inscrit une valeur par jour de la plage.
Si tu veux une seule cellule, le tableau $tableau n'a plus qu'à contenir le jour de début et le nombre de jours.
Utilise datediff pour avoir le nombre de jours plutôt que ton horrible fonction nbJours.
avec le date_diff ,effectivement c'est beaucoup moins lourd
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 <?php $nbJours= date_diff($objDatedebut ,$objDatefin); foreach ($tblSalles as $key=>$Salle) { echo '<tr> <td style="background:#FF5862;">' . $Salle . '</td>'; for ($date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { if ($key === 'Salles') { $case = $date->format('d/m/Y'); } else { $case = isset($tableau[$key][$date->format('Y-m-d')]) ? $tableau[$key][$date->format('Y-m-d')] : ' ' ; }?> echo '<td colspan= <?php echo $nbJours ->format('%a');?> ><?php echo $case ; ?></td>'; <?php } echo '</tr>'; } ?> </table> </body> </html>
Citation:
Si tu veux une seule cellule, le tableau $tableau n'a plus qu'à contenir le jour de début et le nombre de jours.
j'ai essayé également cela mais pas top au niveau résultat:Code:$tableau[$donnees['SALLE']][$date= new datetime('2015-07-20 +5 day')] = $donnees['PRODUITS'];
Code:$tableau[$donnees['SALLE']][$date= strtotime(date("Y-m-d",strtotime($date)). "+ 5 day")] = $donnees['PRODUITS'];
j'ai trouvé pour rajouter 5 jours a la date mais j'ai une erreur
Citation:
Fatal error: Call to a member function modify() on a non-object
Code:
1
2
3
4
5
6 while ($donnees = $sth->fetch(PDO::FETCH_ASSOC)) { $objDatedebut = date_create($donnees['JOUR_DEBUT']); $objDatefin = date_create($donnees['JOUR_FIN']); for( $date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { $tableau[$donnees['SALLE']][$date=(date("Y-m-d",strtotime('+5day')))] = $donnees['PRODUITS'];
Ta syntaxe est complétement fantaisiste.
Mais pourquoi cherches-tu à ajouter 5 jours ?
En fait je voulait déjà voir si cela me rajouter des jours, est ce que le nombre de jours peut être en variable?
Tu veux ajouter des jours à quoi ?
J'avais pu comprendre qu'il fallait que je rajoute des jours à la date pour que je puisse afficher en 1 cellule les cas où ma période était supérieure à 1 journée.