Générer un planning en php [Fermé]

Signaler
Messages postés
14
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
24 juin 2009
-
 Mathilde -
Bonjour,

Je vous expose d'abord mon problème: je dois réaliser une application servant à gérer les congés du personnel.
Ces dates de congés sont saisies dans un fomulaire, puis enregistrées dans une bdd.
A partir de ces dates, je souhaite générer un planning (type frise qu'on pourrait accrocher sur le mur) et je ne sais absolument pas comment faire.
Je développe en Php/Mysql

Merci d'avance pour vos réponses

2 réponses

Messages postés
853
Date d'inscription
mardi 12 décembre 2000
Statut
Membre
Dernière intervention
4 février 2011
46
Moi aussi, ce script pourrait bcp m'intéresser, mais j'ai aussi du mal à suivre .... :-(
Je suis en train de faire un site pour un centre de formation en langues
Je voudrais avoir une seule page qui m'affiche les stages d'une semaine, les week-ends, etc ...
Je pensais pouvoir trouver un script facilement, mais je ne trouve que des scripts qui affichent ça mois par mois :-(
Sachant que la finalité est que les formateurs puissent modifier leurs informations d'une année sur l'autre, il me faudrait ça en php/sql avec un formulaire
Quelqu'un aurait il une idée à me donner ?
Merci d'avance

Fañch
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 81030 internautes nous ont dit merci ce mois-ci

Messages postés
772
Date d'inscription
mardi 13 mars 2007
Statut
Membre
Dernière intervention
22 janvier 2014
152
C'est un problème ou la faignantise ?!
Explique ton soucis et on peut t'aider mais on ne fait pas des devoirs d'école !!
roro6219
Messages postés
14
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
24 juin 2009

pas de la fainéantise, ni des devoirs, juste quelqu'un qui essaye d'apprendre et qui pose des questions.
Il ne me semble pas avoir était incorrect dans mon post, merci de ne pas "m'envoyer chier"
Une solution évidente pour certain ne l'est pas forcément pour tout le monde....

Je peux réexpliquer mon problème si tu veux, mais j'ai l'impression que tu n'es pas venu pour m'aider....est-ce que je me trompe ?

Le personnel entre ces dates de congés via un formulaire dans une bdd, je voudrais générer à partir des données présentes dans la bdd le planning récapitulatif
Par exemple dans un tableau excel en manuel, on avait dans les colonnes les mois, dans les lignes le personnel, et on coloré pour chaque personnes les périodes où il ont posé congé.

Si quelqu'un peut m'aider....
> roro6219
Messages postés
14
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
24 juin 2009

Voici un exemple de planning 100% php qui utilise GD2.
En esprérant que cela puisse te servir. Il te suffit de copier ce code dans notepad et de le sauvegarder au format php dans un folder de ton serveur. Ups! j'allais oublier tu dois activer GD2 dans ton serveur pour qu'il fonctionne.
Voici le code à copier/coller et eventuellement à adapter. Bien à toi

<?php
//Formations NTTC HCB RA

require_once('../Connections/s3.php');

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

mysql_select_db($database_s3, $s3);
$query_Recordset1 = "SELECT * FROM planning where Annee like '2009' ORDER BY annee ASC";
$Recordset1 = mysql_query($query_Recordset1, $s3) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$an= $row_Recordset1['Annee'];

function evenement($pos,$mois,$j1,$j2,$color)
{//tracé d'un élément du planning
global $im,$margew,$margeh,$wcel,$hcel;
$nbj=$j2-$j1+1;
$x1=$margew+2*$wcel+($j1-1)*$wcel;
$y1=$margeh+$hcel+($mois-1)*$hcel+2+($pos-1)*7;
$x2=$x1+$nbj*$wcel;
$y2=$y1+5; //Epaisseur de la ligne évenement
Imagefilledrectangle($im,$x1,$y1,$x2,$y2,$color);
}

function fontcolor($li,$n,$color)
{//cellules en gris pour les jours non existants des mois
global $im,$margew,$margeh,$wcel,$hcel,$w;
$x1=$w-$margew-$n*$wcel;
$y1=$margeh+$li*$hcel;
$x2=$x1+$n*$wcel;
$y2=$y1+$hcel;
imagefilledrectangle($im,$x1,$y1,$x2,$y2,$color);
}

function fontcolor2($m,$j,$color)
{//cellules en jaune pour les WE (samedis et dimanches)
global $im,$margew,$margeh,$wcel,$hcel;
$x1=$margew+($j+1)*$wcel;
$y1=$margeh+$m*$hcel;
$x2=$x1+$wcel;
$y2=$y1+$hcel;
imagefilledrectangle($im,$x1,$y1,$x2,$y2,$color);
}



$wcel=30;//largeur d'une cellule du tableau (la 1ère est double)
$hcel=29;//hauteur d'une cellule du tableau
$margew=45;//marges gauche et droite du tableau
$margeh=35;//marges haut et bas
$margeb=120;//marges bas

//dimensions de l'image
$w=$wcel*33+$margew*2;
$h=$hcel*13+$margeh+$margeb;

//création de l'image
$im=ImageCreate($w,$h) or die ("Erreur lors de la création de l'image");
//ImageColorAllocate ($im, $_POST['rouge'], $_POST['vert'], $_POST['bleu']);

//couleurs utilisées
$blanc=ImageColorAllocate($im,255,255,255);
$rouge=ImageColorAllocate($im,255,0,0);
$gris1=ImageColorAllocate($im,80,80,80);
$gris2=ImageColorAllocate($im,233,233,233);
$noir=ImageColorAllocate($im,0,0,0);
$jaune=ImageColorAllocate($im,253,255,204);
$marron=ImageColorAllocate($im,225,115,45);
$bleu=ImageColorAllocate($im,130,30,255);
$vert=ImageColorAllocate($im,90,195,90);
$vertfonce=ImageColorAllocate($im,0,91,0);
$mauve=ImageColorAllocate($im,0,0,255);

//font gris pour les jours non existants des mois
//font jaune pour les WE
for($i=1;$i <= 12;$i++){
$nbj=date("t",mktime(0,0,0,$i,1,$an));//nbre de jours du mois $i
$jmoins=31-$nbj;
if($jmoins!=0) fontcolor($i,$jmoins,$gris2);
for($j=1;$j <= $nbj;$j++){
$nojs=strftime("%w",mktime(0,0,0,$i,$j,$an));//n° du jour de la semaine (dimanche 0)
if($nojs==0||$nojs==6) fontcolor2($i,$j,$jaune);
}
}
//tracé du tableau : cadre en noir
imagerectangle($im,$margew,$margeh,$w-$margew,$h-$margeb,$noir);
imagerectangle($im,$margew-1,$margeh-1,$w-$margew+1,$h-$margeb+1,$noir);

//tracé du tableau : lignes horizontales
for($x=1;$x < 2;$x++) {
imageline($im,$margew,$margeh+$x*$hcel,$w-$margew,$margeh+$x*$hcel,$noir);
imageline($im,$margew,$margeh+$x*$hcel+1,$w-$margew,$margeh+$x*$hcel+1,$noir);
}
for($x=2;$x < 13;$x++) {
$color=($x==1)?$rouge:$gris1;
imageline($im,$margew,$margeh+$x*$hcel,$w-$margew,$margeh+$x*$hcel,$color);
}
//tracé du tableau : 1ère ligne verticale
imageline($im,$margew+2*$wcel,$margeh,$margew+2*$wcel,$h-$margeb,$noir);
imageline($im,$margew+2*$wcel+1,$margeh,$margew+2*$wcel+1,$h-$margeb,$noir);

//tracé du tableau : autres lignes verticales
for($x=2;$x<32;$x++) imageline($im,$margew+($x+1)*$wcel,$margeh,$margew+($x+1)*$wcel,$h-$margeb,$gris1);

//police utilisée (vous devez remplacer ce chemin par celui du serveur)
$police="verdana.ttf";//adresse de la police en local (OS windows)
$policetitre="timesbi.ttf";//adresse de la police en local (OS windows)

//écriture n° des jours
for($i=1;$i < 10;$i++) Imagettftext($im,8,0,$margew+($i+1)*$wcel+13,$margeh+20,$noir,$police,$i);
for($i=10;$i < 32;$i++) Imagettftext($im,8,0,$margew+($i+1)*$wcel+9,$margeh+20,$noir,$police,$i);


//écriture des mois
$mois=array("","jan","fev","mar","avr","mai","jun","jul","aou","sep","oct","nov","dec");
for($i=1;$i < count($mois);$i++)
Imagettftext($im,9,0,$margew+9,$margeh+$i*$hcel+20,$noir,$police,ucfirst($mois[$i]));

//écriture de la légende des zones
$zonea="Selon l'unité organisatrice (pour plus d'info, voir Sv S3)";
$zoneb="Marche en Famenne - Moniteur : Lt Henin B";
$zonec="HCB RA - Moniteur : Lt Henin B";
$zoned="HCB RA - Moniteur : Lt Henin B";
Imagettftext($im,12,0,$margew,$h-100,$noir,$policetitre,"Légende : ");
Imagettftext($im,10,0,$margew,$h-80,$vertfonce,$police,"J-ICCS : ");
Imagettftext($im,8,0,$margew+3*$wcel+140,$h-80,$noir,$police,$zonea);
Imagettftext($im,10,0,$margew,$h-65,$mauve,$police,"NTTC TIR GP : ");
Imagettftext($im,8,0,$margew+3*$wcel+140,$h-65,$noir,$police,$zoneb);
Imagettftext($im,10,0,$margew,$h-50,$rouge,$police,"NTTC DRY GP de 1000 à 1200 Hr : ");
Imagettftext($im,8,0,$margew+3*$wcel+140,$h-50,$noir,$police,$zonec);
Imagettftext($im,10,0,$margew,$h-35,$rouge,$police,"NTTC DRY GP de 1300 à 1500 Hr : ");
Imagettftext($im,8,0,$margew+3*$wcel+140,$h-35,$noir,$police,$zoned);

//-------------------------------------------------------------------------------------------------------
//Formations organisées par l'HCB RA


$cpt = 0;
do {
if ($row_Recordset1['Couleur'] == 1)
{$color = $vert;}
else if($row_Recordset1['Couleur'] == 2)
{$color= $mauve;}
else
{$color= $rouge;}
evenement($row_Recordset1['Position'],$row_Recordset1['Mois'],$row_Recordset1['Debut'],$row_Recordset1['Fin'],$color);//position 2, juillet, du 13 au 14, couleur mauve
$cpt++; } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));

//écriture du titre
$titre="Planning des formations Ops pour l'année ".$an;
Imagettftext($im,20,0,$margew,20,$noir,$policetitre,$titre);

//écriture de l'année
Imagettftext($im,18,0,$margew+5,$margeh+22,$rouge,$policetitre,$an);

header("content-type: image/png");
ImagePNG($im);
ImageDestroy($im);
?>
> Philippe Huysmans
Bonjour Philippe,

Je suis très intéressée par ce programme car moi aussi je souhaite réaliser un planning en ligne du même type pour l'entreprise dans laquelle je fais mon stage.

C'est un chantier naval, et il faut que je fasse un planning avec le calendrier sur les colonnes, les bateaux sur les lignes et j'aimerai colorer les plages de durée que les différents bateaux passent au chantier.

Ma base de données contient uniquement le nom du bateau, la date d'arrivée au chantier et la date de départ.

Pourriez vous me donner des précisions sur l'exemple que vous avez donné: quelles sont les bases auxquelles vous vous connecté? Comment s'appelle les champs? Car je suis débutante en programmation et j'ai un peu de mal à faire l'analogie entre votre exemple et mon problème et donc je n'arrive pas bien a transformer votre programme pour l'adapter à mon cas.

J'espère que vous aurez le temps de m'aider.

Je vous remercie d'avance.

Mathilde.
> Mathilde
Bonjour Mathilde,
Désolé pour cette réponse tardive, j'avais perdu ce post de vue.

Voici la structure de la table planning
id Position Mois Debut Fin Couleur Annee
Tous les champ sont de type Int()
Exemple de donnée: 3 2 12 7 8 2 2009
Explication :
3 est l'ID (veleur auto_increment)
2 représente la position du trait de couleur qui sera dessiné dans l'image du planning. 4 position sont possibles ( de 1 à 4). Si tu souhaites avoir plus de quatre lignes par cellule, tu dois modifier la hauteur des cellules ($hcel=29;//hauteur d'une cellule du tableau ) sinon elle sera dessinée dans la cellule du mois suivant !
12 détermine le mois de la formation
7 représente le jour du mois du début de la formation
8 représente le jour du mois de la fin de la formation. Notre formation est ici de deux jours
2 représente le numéro de la couleur du trait (voir code du fichier php)
2009 représente l'année de la formation.

PS : Il est impossible d'introduire une plage de dates à cheval sur deux mois ! (Ex : du 25 Jan au 10 Fev)
Dans ce cas, tu doit faire deux insertions du 25 jan au 31 Jan et du 01 Fev au 10 Fev

La ligne de code suivante doit être adaptée
require_once('../Connections/s3.php');
Le fichier S3. php est mon fichier de connection à la db. sa structure est la suivante:
<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_s3 = "localhost";
$database_s3 = "nom de la db";
$username_s3 = "nom de l'utilisateur"; #"root"
$password_s3 = "mot de passe";
$s3 = mysql_pconnect($hostname_s3, $username_s3, $password_s3) or trigger_error(mysql_error(),E_USER_ERROR);
?>
------------------------------------------------------------------------------------------------------------------------
Ci-dessous la code formulaire d'insertion des données (non commenté mais excessivement simple)

------------------------------------------------------------------------------------------------------------------
<?php require_once('../Connections/s3.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO planning (id, `Position`, Mois, Debut, Fin, Couleur, Annee) VALUES (%s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['id'], "int"),
GetSQLValueString($_POST['Position'], "int"),
GetSQLValueString($_POST['Mois'], "int"),
GetSQLValueString($_POST['Debut'], "int"),
GetSQLValueString($_POST['Fin'], "int"),
GetSQLValueString($_POST['Couleur'], "int"),
GetSQLValueString($_POST['Annee'], "text"));

mysql_select_db($database_s3, $s3);
$Result1 = mysql_query($insertSQL, $s3) or die(mysql_error());
}

mysql_select_db($database_s3, $s3);
$query_Recordset1 = "SELECT * FROM planning";
$Recordset1 = mysql_query($query_Recordset1, $s3) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<style type="text/css">
<!--
.Style1 {color: #FF0000}
body {
background-image: url(../Images/bg_centre.png);
}
-->
</style>
</head>

<body>
<h1 align="center" class="Style1">Ajouter une Fmn Ops</h1>
<p align="center" class="Style1"> </p>
<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
<table align="center">
<tr valign="baseline">
<td nowrap="nowrap" align="right"><div align="left">Formation:</div></td>
<td><select name="Position">
<option value="1" <?php if (!(strcmp(1, ""))) {echo "SELECTED";} ?>>J-ICCS</option>
<option value="2" <?php if (!(strcmp(2, ""))) {echo "SELECTED";} ?>>NTTC TIR GP</option>
<option value="2" <?php if (!(strcmp(2, ""))) {echo "SELECTED";} ?>>NTTC TIR FNC</option>
<option value="2" <?php if (!(strcmp(2, ""))) {echo "SELECTED";} ?>>Moniteur NTTC</option>
<option value="2" <?php if (!(strcmp(2, ""))) {echo "SELECTED";} ?>>Recyclage Moniteur NTTC</option>

<option value="3" <?php if (!(strcmp(3, ""))) {echo "SELECTED";} ?>>NTTC DRY GP 1000 - 1300 Hr</option>
<option value="4" <?php if (!(strcmp(4, ""))) {echo "SELECTED";} ?>>NTTC DRY GP 1300 - 1500 Hr</option>
</select> </td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right"><div align="left">Annee:</div></td>
<td><select name="Annee">
<option value="2009" >2009</option>
<option value="2010" >2010</option>
<option value="2011" >2011</option>
<option value="2012" >2012</option>
<option value="2013" >2013</option>
<option value="2014" >2014</option>
<option value="2014" >2015</option>
</select> </td>
</tr>

<tr valign="baseline">
<td nowrap="nowrap" align="right"><div align="left">Mois:</div></td>
<td><select name="Mois">
<option value="1" <?php if (!(strcmp(1, ""))) {echo "SELECTED";} ?>>Janvier</option>
<option value="2" <?php if (!(strcmp(2, ""))) {echo "SELECTED";} ?>>Février</option>
<option value="3" <?php if (!(strcmp(3, ""))) {echo "SELECTED";} ?>>Mars</option>
<option value="4" <?php if (!(strcmp(4, ""))) {echo "SELECTED";} ?>>Avril</option>
<option value="5" <?php if (!(strcmp(5, ""))) {echo "SELECTED";} ?>>Mai</option>
<option value="6" <?php if (!(strcmp(6, ""))) {echo "SELECTED";} ?>>Juin</option>
<option value="7" <?php if (!(strcmp(7, ""))) {echo "SELECTED";} ?>>Juillet</option>
<option value="8" <?php if (!(strcmp(8, ""))) {echo "SELECTED";} ?>>Aout</option>
<option value="9" <?php if (!(strcmp(9, ""))) {echo "SELECTED";} ?>>Septembre</option>
<option value="10" <?php if (!(strcmp(10, ""))) {echo "SELECTED";} ?>>Octobre</option>
<option value="11" <?php if (!(strcmp(11, ""))) {echo "SELECTED";} ?>>Novembre</option>
<option value="12" <?php if (!(strcmp(12, ""))) {echo "SELECTED";} ?>>Décembre</option>
</select> </td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right"><div align="left">Debut:</div></td>
<td><input type="text" name="Debut" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right"><div align="left">Fin:</div></td>
<td><input type="text" name="Fin" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right"><div align="left">Couleur:</div></td>
<td><select name="Couleur">
<option value="1" <?php if (!(strcmp(1, ""))) {echo "SELECTED";} ?>>Vert</option>
<option value="2" <?php if (!(strcmp(2, ""))) {echo "SELECTED";} ?>>Bleu</option>
<option value="3" <?php if (!(strcmp(3, ""))) {echo "SELECTED";} ?>>Rouge</option>
<option value="4" <?php if (!(strcmp(4, ""))) {echo "SELECTED";} ?>>Noir</option>
<option value="5" <?php if (!(strcmp(4, ""))) {echo "SELECTED";} ?>>Vert foncé</option>
<option value="6" <?php if (!(strcmp(4, ""))) {echo "SELECTED";} ?>>Gris Clair</option>
<option value="4" <?php if (!(strcmp(4, ""))) {echo "SELECTED";} ?>>Gris foncé</option>


</select> </td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right"> </td>
<td> </td>
</tr>
<tr valign="baseline">
<td colspan="2" align="right" nowrap="nowrap"><div align="center">
<input type="submit" value="Insérer l'enregistrement" />
</div></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1" />
</form>
<p> </p>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
> Philippe Huysmans
Bonjour Philippe.
Entre temps j'ai réussi à me débrouiller autrement mais merci beaucoup d'avoir pris le temps de me répondre. C'est très gentil de votre part.