Non si tu veux faire un colspan, tu vas avoir besoin de
- la date de début
- le nombre de cases à remplir donc le nombre de jours entre la date de début et soit la date de fin soit la dernière date du tableau si elle est inférieure à la date de fin
Non si tu veux faire un colspan, tu vas avoir besoin de
- la date de début
- le nombre de cases à remplir donc le nombre de jours entre la date de début et soit la date de fin soit la dernière date du tableau si elle est inférieure à la date de fin
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
donc tous ces éléments je les ai:
date de debut: $objDatedebut
nombre de jour entre debut et fin via le date_diff
c'est au niveau du colspan qui faut renseigner ces infos?
Code : Sélectionner tout - Visualiser dans une fenêtre à part $nbJours= date_diff($objDatedebut ,$objDatefin);
Ton colspan il demarre à la position du jour de début pour une valeur de X jours.
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
en fait je préfère utiliser les périodes enregistrée dans la table, peux tu me dire si la synthaxe est bonne?
via cette ligne je vois bien le colspan se faire mais pour le moment comme il n'a pas de date de debut il commence a la premiere date du tableau,et rajoute des colonne hors dates(apres le 26/07/2015) avec les valeurs dans les cases
Code : Sélectionner tout - Visualiser dans une fenêtre à part $nbJours= date_diff(date_create($donnees['JOUR_DEBUT']),date_create($donnees['JOUR_FIN']) );
Code : Sélectionner tout - Visualiser dans une fenêtre à part <td colspan="<?php echo $nbJours ->format('%a');?>" ><?php echo $case ; ?></td>
Je ne t'ai jamais dit de faire autrementen fait je préfère utiliser les périodes enregistrée dans la table
Je t'ai dit que la valeur du colspan est
le nombre de jours entre la date de début et soit la date de fin, soit la dernière date du tableau si elle est inférieure à la date de fin
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
ici le colspan a une valeur de 6
Code : Sélectionner tout - Visualiser dans une fenêtre à part <td colspan= <?php echo $nbJours ->format('%a');?> ><?php echo $case ; ?></td>
Il faut aussi incrementer $date de 5 jours puisque tu as avancé de 5 jours dans le planning.
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
en fait je suis revenu a l'initial car j'avais une erreur que ne comprenais pas d'où:
de ce fait je n'ai pas besoin d'incrementer de 5 jours
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 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('+1day')) { $tableau[$donnees['SALLE']][$date->format('Y-m-d')] = $donnees['PRODUITS'];
je pense que je vais m'arreter là car déjà pour gérer des dates ce n'est pas évident ,mais faire du colspan en fonction des dates et lignes c'est trop compliqué
un grand merci à sabotage pour son aide et son temps passé .
Après tant d'efforts :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
68
69
70
71
72
73 <!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"); $objDatedebut = date_create(); if ($objDatedebut->format('N') != 1) { $objDatedebut->modify('last monday'); } $objDatefin = clone $objDatedebut; $objDatefin->modify('+ 6 day'); $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'=>$objDatedebut->format('Y-m-d'),':j_fin'=>$objDatefin->format('Y-m-d'))); while ($donnees = $sth->fetch(PDO::FETCH_ASSOC)) { $objDatedebut_produit = date_create($donnees['JOUR_DEBUT']); $objDatefin_produit = date_create($donnees['JOUR_FIN']); if ($objDatefin_produit > $objDatefin) { $njours = $objDatedebut_produit->diff($objDatefin); } else { $njours = $objDatedebut_produit->diff($objDatefin_produit); } $data[$donnees['SALLE']][$objDatedebut_produit->format('Y-m-d')] = array('produit'=>$donnees['PRODUITS'], 'njours'=>$njours->format('%a')); } $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($data); foreach ($tblSalles as $key=>$Salle) { echo '<tr> <td>' . $Salle . '</td>'; for ($date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { if ($key === 'Salles') { echo '<th>' . $case = $date->format('d/m/Y') . '</th>'; } else { if (isset($data[$key][$date->format('Y-m-d')])) { $values = $data[$key][$date->format('Y-m-d')]; echo '<td style="text-align:center;" colspan="' . ($values['njours'] + 1). '">' . htmlspecialchars($values['produit']) . '</td>'; $date->modify('+' . $values['njours'] . ' days'); } else { echo '<td></td>'; } } } echo '</tr>'; } ?> </table> </body> </html>
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
merci beaucoup,
mais je me suis aperçu n'était pas si fonctionnel que cela car je ne peux pas rentrer 2 valeurs sur la même salle.
alors j'ai éssayé un peu de réadapter ton code j'arrive à afficher une valeur mais elle ne va pas à la date désirée.à tout hazard je te laisse le code modifié.
dans ma table j'ai rajouté un champ produit_1, couleur_1,jour_debut_1 et jour_fin_1.
encore merci pour tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 <table id="tableau" border="1" cellspacing="1" cellpadding="40"> <?php $objDatedebut = date_create(); if ($objDatedebut->format('N') != 1) { $objDatedebut->modify('last monday'); } $objDatefin = clone $objDatedebut; $objDatefin->modify('+ 6 day'); $objDatedebut1 = date_create(); if ($objDatedebut1->format('N') != 1) { $objDatedebut1->modify('last monday'); } $objDatefin1 = clone $objDatedebut1; $objDatefin1->modify('+ 6 day'); $sth=$pdo->prepare("SELECT SALLE, PRODUITS, PRODUITS_1, JOUR_DEBUT, JOUR_FIN, JOUR_DEBUT_1, JOUR_FIN_1, COULEUR, COULEUR_1 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 AND JOUR_DEBUT_1 <=:j_fin1 AND JOUR_FIN_1 >=:j_debut1 "); $sth->execute(array(':j_debut'=>$objDatedebut->format('Y-m-d'), ':j_fin'=>$objDatefin->format('Y-m-d'), ':j_debut1'=>$objDatedebut1->format('Y-m-d'), ':j_fin1'=>$objDatefin1->format('Y-m-d') )); while ($donnees = $sth->fetch(PDO::FETCH_ASSOC)) { $objDatedebut_produit = date_create($donnees['JOUR_DEBUT']); $objDatefin_produit = date_create($donnees['JOUR_FIN']); $objDatedebut_produit1 = date_create($donnees['JOUR_DEBUT_1']); $objDatefin_produit1 = date_create($donnees['JOUR_FIN_1']); if ($objDatefin_produit > $objDatefin) { $njours = $objDatedebut_produit->diff($objDatefin); } else { $njours = $objDatedebut_produit->diff($objDatefin_produit); } $data[$donnees['SALLE']][$objDatedebut_produit->format('Y-m-d')] = array('produit'=>$donnees['PRODUITS'], 'colors'=>$donnees['COULEUR'], 'njours'=>$njours->format('%a')); if ($objDatefin_produit1 > $objDatefin1) { $njours1 = $objDatedebut_produit1->diff($objDatefin1); } else { $njours1 = $objDatedebut_produit1->diff($objDatefin_produit1); } $data1[$donnees['SALLE']][$objDatedebut_produit1->format('Y-m-d')] = array('produit1'=>$donnees['PRODUITS_1'], 'colors1'=>$donnees['COULEUR_1'], 'njours1'=>$njours1->format('%a')); } $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($data1); foreach ($tblSalles as $key=>$Salle) { echo '<tr> <td class="salle">' . $Salle . '</td>'; for ($date = clone $objDatedebut; $date <= $objDatefin; $date->modify('+1 day')) { if ($key === 'Salles') { echo '<th>' . $case = $date->format('d/m/Y') . '</th>'; } else { if (isset($data[$key][$date->format('Y-m-d')])) { $values = $data[$key][$date->format('Y-m-d')]; echo '<td class="back" style="background-color:'. ($values['colors']) .' "" colspan="' . ($values['njours'] + 1). '">' . htmlspecialchars($values['produit']) .'</td>'; $date->modify('+' . $values['njours'] . ' days'); } else { echo '<td></td>'; } } } for ($date = clone $objDatedebut1; $date <= $objDatefin1; $date->modify('+1 day')) { if ($key === 'Salles') { echo '<th>' . $case = $date->format('d/m/Y') . '</th>'; } else { if (isset($data1[$key][$date->format('Y-m-d')])) { $values1 = $data1[$key][$date->format('Y-m-d')]; echo '<td class="back" style="background-color:'. ($values1['colors1']) .' "" colspan="' . ($values1['njours1'] + 1). '">' . htmlspecialchars($values1['produit1']) .'</td>'; $date->modify('+' . $values1['njours1'] . ' days'); } } } echo '</tr>'; } ?> </table> </body> </html>
Bonjour,
Je suis intéressé par ce tableau,je me suis permis de reprendre le code de sabotage,mais effectivement il n'y a pas la possibilité de rentrer d'autre valeurs par ligne ,sinon cela supprime la valeur déjà existante.faut il vraiment faire du doublon de code comme a propose cubita?cela me Semble un peu lourd.
Si on est sur un système de réservation de salle, une salle ne peut pas être réservée pour deux choses en même temps non ?
Toutefois, sans le colspan c'est très simple d'écrire plusieurs événement pour une même cellule.
Avec le colspan evidemment ça devient complexe.
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
Nous sommes d'accord mais dans le principe de la réservation c'est d'avoir un tel qui réserve la salle 1 du 28 au 29 ,et une autre personne peut réserver cette même salle pour 3 jours suivants. De ce fait nous pouvons quand même avoir 2 colspan(un pour 2 jours et 1 pour 3 jours)?
Ca, ca fonctionne : plusieurs dates pour une seule salle.
Ce qui ne fonctionne pas c'est des chevauchements de planification (entre salles ou entre dates pour une meme salle)
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
via ton code l'adaptation est simple? faut il apporter des modifications à la table? peux tu m'expliquer le principe?Ca, ca fonctionne : plusieurs dates pour une seule salle.
Le code fonctionne avec la table fournie par cubita.
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
d'accord,mais je me suis mal exprimé, je voulais savoir si il fallait rajouter des champs type produits_1, jour_debut_1 et jour_fin_1 comme cubita l'a specifié sur son dernier post car le code m'avais l'air lourd le fait qu'il y ai des duplications de lignes.
je te pose cettte question car je suis dans l'optique de vouloir faire des reservations de salle mais en fonction de plusieurs date de réservations.
Je t'ai dit : mon code fonctionne tant qu'il n'y a pas de chevauchements dans les dates d'une salle.
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
J'ai essayé ton code avec la table de cubita,j'ai essayé de mettre 2produits sur la même salle avec des dates différentes .ce qui se passe,le produit qui a été affiché en premier c'est effacé et le 2 eme s'affiche avec la 2ème date renseigne
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager