Planning php gestion des dates
Résolu
Bonjour,
Je suis en stage, et je désire faire un planning mensuel pour plusieurs salarié. J'ai fait le tableau en statique cela me parait plutôt bien. Simplement pour simplifié, et aussi augmenter la durée de vie de mon application je souhaiterais que les dates s'affectent à des jours automatiquement.
Par exemple si je choisis le moi de janvier 2022 je voudrai qu'il me donne les dates du 1er au 31 janviers (ça pas trop compliqué) mais en plus que dans la case d'accoter il me donne le bon jour correspondant.
Y a t il un moyen simple de faire cela ?
Je suis en stage, et je désire faire un planning mensuel pour plusieurs salarié. J'ai fait le tableau en statique cela me parait plutôt bien. Simplement pour simplifié, et aussi augmenter la durée de vie de mon application je souhaiterais que les dates s'affectent à des jours automatiquement.
Par exemple si je choisis le moi de janvier 2022 je voudrai qu'il me donne les dates du 1er au 31 janviers (ça pas trop compliqué) mais en plus que dans la case d'accoter il me donne le bon jour correspondant.
Y a t il un moyen simple de faire cela ?
70 réponses
Résumé de la discussion
Un besoin concerne la génération automatique des dates mensuelles et l'affectation du jour correspondant dans un planning, en PHP, pour un mois donné. La solution privilégiée dans les échanges est de consulter un tutoriel sur un calendrier dynamique avec des événements stockés en base de données, notamment celui de Grafikart. Plusieurs interventions évoquent aussi les limites potentielles liées à la version de PHP et à l'utilisation éventuelle de PDO, ce qui peut influencer l'approche côté serveur. Pour compléter, le fil met en avant l'intérêt de lier le calendrier à une base pour récupérer des événements, afin d'améliorer la période et les données affichées.
-
Tu as des erreurs ?
-
oui j'ai fait :
$r[strtotime($d->date)][$d->id] = $d->libelle." ".$d->heuredebut." ".$d->heurefin;
et cela a marcher merci beaucoup le sujet est enfin résolu (j'espere juste que le code que j'ai fait marchera chez free :/) -
Tu rajoutes les champs que tu souhaites dans ta bdd, et tu les affiches avec le libellé :)
-
J'ai reussi à résoudre mon problème avec le code suivant :
function getEvents($year){
// connexion à la base
$base = mysql_connect ("localhost", "root", "") or die('Erreur de connexion '.mysql_error());
// sélection de la base
mysql_select_db('csc_apli',$base) or die('Erreur de selection '.mysql_error());
$sql = sprintf('SELECT * FROM planning WHERE YEAR(date) = %04d;', $year);
$res=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
/**
* Ce que je veux $r[TIMESTAMP][id] = title
*/
while($d=mysql_fetch_object($res)){
$r=array();
$r[strtotime($d->date)][$d->id] = $d->libelle;
//print_r($d);
}
return $r;
}
Du coup maintenant je ne comprend pas comment faire pour afficher les horaires de debut (heuredebut) et de fin (heurefin) en plus du libelle :/
Je pense que ce sera ma dernière erreur, on est presque au bout encore un grand merci pour tout le temps que tu as pris pour moi ! -
Il faut que id, date et libelle soit des champs de ta table, essaye avec un select id, date, libelle et non un select *
-
jeremy \0/ mon sauveur :)
Oui j'ai essayer avec un mysql_connect. Mais je galere vraiment pour l'affichage :/
Voilà le code que j'ai essayé :
function getEvents($year){
// connexion à la base
$base = mysql_connect ("localhost", "root", "") or die('Erreur de connexion '.mysql_error());
// sélection de la base
mysql_select_db('csc_apli',$base) or die('Erreur de selection '.mysql_error());
$sql = sprintf('SELECT * FROM planning WHERE YEAR(date) = %04d;', $year);
$r=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
/**
* Ce que je veux $r[TIMESTAMP][id] = title
*/
while($d=mysql_fetch_object($r)){
$r=array();
$r[strtotime($d->date)][$d->id] = $d->libelle;
print_r($d);
}
return $r;
}
Le soucis est qu'il m'affiche bien mon libelle, mais il m'affiche aussi cette erreur :
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\data\localweb\scripts\Application\date.php on line 22 -
Il faut que tu utilises mysql_connect à la place de PDO ;-)
-
En gros c'est bon la planning est terminée mais maintenant je n'arrive pas à afficher des chose contenu dans ma base de donnée en passant sur une date comme il le fait dans le tutoriel car lui utilise le PDO :/
Sachant que lui pour se connecter à la base il utilise :
<?php
try{
$DB = new PDO('mysql:host=localhost;dbname=tuto','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
}
catch(PDOException $e){
echo 'Base de donnée en vacance';
exit();
}
?>
et que pour afficher il utilise :
function getEvents($year){
global $base;
$sql = "SELECT id,libelle,date,heuredebut,heurefin FROM planning WHERE YEAR(date)='.$year)";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$r=mysql_query($sql);
print_r($r);
/**
* Ce que je veux $r[TIMESTAMP][id] = title
*/
while($d=mysql_fetch_array($r)){
print_r($r);
$r[strtotime($d->date)][$d->id] = $d->libelle;
}
return $r;
} -
J'ai réussi à faire le calendrier :) il donne a peux près ce que je souhaite (juste du Css à modifier :)) Maintenant j'ai un autre soucis car il utilise la méthode PDO pour aller cherche des informations dans sa base de données et que je ne peux pas utiliser le PDO. Je ne sais pas comment traduire ce PDO en procédurale :
function getEvents($year){
global $DB;
$req = $DB->query('SELECT id,title,date FROM events WHERE YEAR(date)='.$year);
$r = array();
/**
* Ce que je veux $r[TIMESTAMP][id] = title
*/
while($d = $req->fetch(PDO::FETCH_OBJ)){
$r[strtotime($d->date)][$d->id] = $d->title;
}
return $r; -
Faut bien choisir ces noms de variable ;-)
Je conseillerais même $tabDates c'est encore plus précis et moins embrouillant je trouve :)
-
Merci !!! oubli d'un "s" a un $dates. Oui je vais changer une des deux variables, je suivais le tuto à la lettre pour essayer de ne pas trop m'embrouiller mais je pense que cela m'éviteras des soucis.
-
Mmh tu joues entre $date et $dates, je sais pas si c'est intentionnel ou pas, mais je t'avoue que je ne vois pas la différence (j'ai pas accès au totu et cela quelque temps que je ne l'ai pas regardé)
-
le code :
<div class="periods">
<div class="year"><?php echo $year; ?></div>
<div class="months">
<ul>
<?php foreach ($date->months as $id=>$m): ?>
<li><a href="#" id="linkMonth<?php echo $id+1; ?>"><?php echo $m; ?></a></li>
<?php endforeach; ?>
</ul>
</div>
<?php $dates = current($dates); ?>
<?php foreach ($date as $m=>$days): ?>
<div class="month" id="month<?php echo $m; ?>">
<table>
<thead>
<tr>
<?php foreach ($date->days as $d): ?>
<th><?php echo substr($d,0,3) ?></th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<tr>
<?php foreach ($days as $d=>$w): ?>
<td><?php echo $d; ?></td>
<?php if($w == 7): ?>
</tr><tr>
<?php endif ?>
<?php endforeach; ?>
</tr>
</tbody>
</table>
</div>
<?php endforeach; ?>
</div>
Et ensuite oui erreur d'inatention mais cela ne change rien :/ -
Il manque une partie du code non ? Ya pas un foreach au dessus pour les mois ?
Et attention :
<div class="month" id="month<?php echo $m; ?>">
Jérémy -
Bah disons que je ne sais pas quel mois sont affiché correctement je sais juste qu'il m'en affiche que 2
-
Le problème viendrait du premier foreach ?
Tu n'as pas les entêtes des noms de jours pour chaque mois c'est ca ?
Si tu changes d'année, c'est toujours janvier et février qui sont affiché correctement ou ca change ?
-
Comme ceci :
<?php foreach ($date as $m=>$days): ?>
<div class="month" id"month<?php echo $m; ?>">
<table>
<thead>
<tr>
<?php foreach ($date->days as $d): ?>
<th><?php echo substr($d,0,3) ?></th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<tr>
<?php foreach ($days as $d=>$w): ?>
<td><?php echo $d; ?></td>
<?php if($w == 7): ?>
</tr><tr>
<?php endif ?>
<?php endforeach; ?>
</tr>
</tbody>
</table>
</div>
<?php endforeach; ?>
raison de l'edition : oublie d'une partie -
Bon bah ton tableau est bien construit, le problème ne vient pas de la.
C'est ton à l'afficher/traitement le problème.
Comment tu construis la table qui affiche le calendrier ?
-
le <pre>print_r</pre> du tableau me donne ceci :
Array
(
[1] => Array
(
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 1
[8] => 2
[9] => 3
[10] => 4
[11] => 5
[12] => 6
[13] => 7
[14] => 1
[15] => 2
[16] => 3
[17] => 4
[18] => 5
[19] => 6
[20] => 7
[21] => 1
[22] => 2
[23] => 3
[24] => 4
[25] => 5
[26] => 6
[27] => 7
[28] => 1
[29] => 2
[30] => 3
[31] => 4
)
[2] => Array
(
[1] => 5
[2] => 6
[3] => 7
[4] => 1
[5] => 2
[6] => 3
[7] => 4
[8] => 5
[9] => 6
[10] => 7
[11] => 1
[12] => 2
[13] => 3
[14] => 4
[15] => 5
[16] => 6
[17] => 7
[18] => 1
[19] => 2
[20] => 3
[21] => 4
[22] => 5
[23] => 6
[24] => 7
[25] => 1
[26] => 2
[27] => 3
[28] => 4
)
[3] => Array
(
[1] => 5
[2] => 6
[3] => 7
[4] => 1
[5] => 2
[6] => 3
[7] => 4
[8] => 5
[9] => 6
[10] => 7
[11] => 1
[12] => 2
[13] => 3
[14] => 4
[15] => 5
[16] => 6
[17] => 7
[18] => 1
[19] => 2
[20] => 3
[21] => 4
[22] => 5
[23] => 6
[24] => 7
[25] => 1
[26] => 2
[27] => 3
[28] => 4
[29] => 5
[30] => 6
[31] => 7
)
[4] => Array
(
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
[6] => 6
[7] => 7
[8] => 1
[9] => 2
[10] => 3
[11] => 4
[12] => 5
[13] => 6
[14] => 7
[15] => 1
[16] => 2
[17] => 3
[18] => 4
[19] => 5
[20] => 6
[21] => 7
[22] => 1
[23] => 2
[24] => 3
[25] => 4
[26] => 5
[27] => 6
[28] => 7
[29] => 1
[30] => 2
)
[5] => Array
(
[1] => 3
[2] => 4
[3] => 5
[4] => 6
[5] => 7
[6] => 1
[7] => 2
[8] => 3
[9] => 4
[10] => 5
[11] => 6
[12] => 7
[13] => 1
[14] => 2
[15] => 3
[16] => 4
[17] => 5
[18] => 6
[19] => 7
[20] => 1
[21] => 2
[22] => 3
[23] => 4
[24] => 5
[25] => 6
[26] => 7
[27] => 1
[28] => 2
[29] => 3
[30] => 4
[31] => 5
)
[6] => Array
(
[1] => 6
[2] => 7
[3] => 1
[4] => 2
[5] => 3
[6] => 4
[7] => 5
[8] => 6
[9] => 7
[10] => 1
[11] => 2
[12] => 3
[13] => 4
[14] => 5
[15] => 6
[16] => 7
[17] => 1
[18] => 2
[19] => 3
[20] => 4
[21] => 5
[22] => 6
[23] => 7
[24] => 1
[25] => 2
[26] => 3
[27] => 4
[28] => 5
[29] => 6
[30] => 7
)
[7] => Array
(
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
[6] => 6
[7] => 7
[8] => 1
[9] => 2
[10] => 3
[11] => 4
[12] => 5
[13] => 6
[14] => 7
[15] => 1
[16] => 2
[17] => 3
[18] => 4
[19] => 5
[20] => 6
[21] => 7
[22] => 1
[23] => 2
[24] => 3
[25] => 4
[26] => 5
[27] => 6
[28] => 7
[29] => 1
[30] => 2
[31] => 3
)
[8] => Array
(
[1] => 4
[2] => 5
[3] => 6
[4] => 7
[5] => 1
[6] => 2
[7] => 3
[8] => 4
[9] => 5
[10] => 6
[11] => 7
[12] => 1
[13] => 2
[14] => 3
[15] => 4
[16] => 5
[17] => 6
[18] => 7
[19] => 1
[20] => 2
[21] => 3
[22] => 4
[23] => 5
[24] => 6
[25] => 7
[26] => 1
[27] => 2
[28] => 3
[29] => 4
[30] => 5
[31] => 6
)
[9] => Array
(
[1] => 7
[2] => 1
[3] => 2
[4] => 3
[5] => 4
[6] => 5
[7] => 6
[8] => 7
[9] => 1
[10] => 2
[11] => 3
[12] => 4
[13] => 5
[14] => 6
[15] => 7
[16] => 1
[17] => 2
[18] => 3
[19] => 4
[20] => 5
[21] => 6
[22] => 7
[23] => 1
[24] => 2
[25] => 3
[26] => 4
[27] => 5
[28] => 6
[29] => 7
[30] => 1
)
[10] => Array
(
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 1
[8] => 2
[9] => 3
[10] => 4
[11] => 5
[12] => 6
[13] => 7
[14] => 1
[15] => 2
[16] => 3
[17] => 4
[18] => 5
[19] => 6
[20] => 7
[21] => 1
[22] => 2
[23] => 3
[24] => 4
[25] => 5
[26] => 6
[27] => 7
[28] => 1
[29] => 2
[30] => 3
[31] => 4
)
[11] => Array
(
[1] => 5
[2] => 6
[3] => 7
[4] => 1
[5] => 2
[6] => 3
[7] => 4
[8] => 5
[9] => 6
[10] => 7
[11] => 1
[12] => 2
[13] => 3
[14] => 4
[15] => 5
[16] => 6
[17] => 7
[18] => 1
[19] => 2
[20] => 3
[21] => 4
[22] => 5
[23] => 6
[24] => 7
[25] => 1
[26] => 2
[27] => 3
[28] => 4
[29] => 5
[30] => 6
)
[12] => Array
(
[1] => 7
[2] => 1
[3] => 2
[4] => 3
[5] => 4
[6] => 5
[7] => 6
[8] => 7
[9] => 1
[10] => 2
[11] => 3
[12] => 4
[13] => 5
[14] => 6
[15] => 7
[16] => 1
[17] => 2
[18] => 3
[19] => 4
[20] => 5
[21] => 6
[22] => 7
[23] => 1
[24] => 2
[25] => 3
[26] => 4
[27] => 5
[28] => 6
[29] => 7
[30] => 1
[31] => 2
)
) -
Et le <pre>print_r</pre> du tableau donne quoi ?
- 1
- 2
- 3
- 4
Suivant