Calendrier en php avec base mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Calendrier en php avec base mysql

par guigui69 » 15 mars 2009, 21:12

Merci pour ta réponse.

J'ai regarder le code, j'ai trouver mes erreurs (indiqué dans le précédent post)mais je bloque au niveau ajout des événements.

Pour l'instant je mets des dates et des événements en dure (plusieurs à la même date). Et je voudrait pouvoir afficher plusieurs événement à la même date à la place de " plusieurs événement ce jour".

Dans le code j'ai vu la partie concernant le cas de plusieurs événement, j'ai essayer un peu de modifier le code mais je n'arrive pas, Il m'affiche le premier événement et c'est tout.

Je cherche déjà a afficher pour plusieurs événement.

Merci pour ton aide.
guigui69

par rolusseum » 06 mars 2009, 15:26

Prend le temps de comprendre le script. Cela te permettra de le personnaliser.
Ce que je comprend pas c'est au niveau des bouton mois suivant et précédent. j'ai beau indiqué le code ci-dessus) ou était situé les images (j'ai même renommer lol.jpg et bob.jpg pour des test) il me ressort toujours mois_suiv.jpg et mois_prec.jpg.
Si tu as téléchargé le script tel quel, dans la page index.php du répertoire calendrier inclus le fichier test.php à la place de calendrier.php pour faire fonctionner les flèches de navigation.
Et je n'arrive pas à mettre en place dans le calendrier des évènements.
Je me répète: prend le temps de comprendre le script. Cela te permettra de le personnaliser.
Les liens sont désactivés dans la classe calendrier.php

par guigui69 » 05 mars 2009, 10:05

Merci pour ton aide.

Question j'ai corrigé mon erreur.

Ce que je comprend pas c'est au niveau des bouton mois suivant et précédent. j'ai beau indiqué le code ci-dessus) ou était situé les images (j'ai même renommer lol.jpg et bob.jpg pour des test) il me ressort toujours mois_suiv.jpg et mois_prec.jpg.

Et je n'arrive pas à mettre en place dans le calendrier des évènements.

Si vous pourriez m'aiguiller pour que je corrige mes erreurs.

Merci

guigui69

---------------------------------------------
Maj

Je voudrait savoir comment je doit mettre la date pour que la class calendrier la reconnaisse. (elle sort de ma base comme ceci: AAAA-MM-JJ.

Merci

par rolusseum » 04 mars 2009, 22:57

mais je but enormement.
Bah, c'est normal que tu vois double :wink:

Blague à part, la classe calendrier inclus l'affichage du tableau (calendrier).
function affiche()
    {
        $this->prepare_calendrier();
        return $this->calendar;
    } 
Supprime
/**
 * Affiche le calendrier
 */
echo $calendrier->affiche(); 

par guigui69 » 04 mars 2009, 18:59

merci j'ai étudier le code mais je but enormement.


je voudrait savoir quel méthode employé pour utiliser ce calendrier.

En fait je recuperer de ma base Date, et commentaire et je voudrait les retrouver dans le calendrier.
J'ai étudier le code, mais je n'y arrive pas.

J'ai télécharger les sources installer pour le site intranet.

<span id="calendrier">';
include "../../calendar/calendrier.php";
echo '</span> ';
$query = sql_planning_client($id_client);
$res=mysql_query($query) or die('Erreur SQL !'.$query.'<br />'.mysql_error());
while ($row = mysql_fetch_array($res))
{
$calendrier->affec_day($row["date_planning"], '#','',''.$row["commentaire_planning"].'-'.$row["nom_user"].''.$row["prenom_user"].''); 
echo $row["date_planning"]; echo $row["commentaire_planning"];  echo $row["nom_user"]; echo $row["prenom_user"]; 

}

$mois = isset($_GET['mois']) ? $_GET['mois'] : date('m');
$annee = isset($_GET['annee']) ? $_GET['annee'] : date('Y');

/**
 * création du calendrier
 */
$calendrier = new calendrier($annee, $mois);

/**
 * définit les boutons suivant, précédent et l'évènement pas défaut
 */
$calendrier->affec_previous($mois, $annee, "mois_prec.jpg");
$calendrier->affec_next($mois, $annee,"mois_suiv.jpg");
$calendrier->affec_event_default("test",time());
/**
 * ajout d'évènement sur plusieurs jours
 * affec_periode($debut, $fin, $link='#', $class='',$titre='')
 */

/**
 * Affiche une première colonne permettant de sélectionner la semaine
 * affec_semaine($affiche=true, $link='#', $variable1="datedebut", $variable2="datefin", $titre=">")
 */
$calendrier->affec_semaine(false);

/**
 * Affiche le calendrier
 */
echo $calendrier->affiche();
calendrier.php
<?php
/**
 * @package Ajax-PHP
 */
/**
 * calendrier
 *
 * Class qui gérère un calendrier autonome.
 * <ul>
 * <li>Affichage possible, en popup, en inclusion, en div ...</li>
 * <li>Afficher un évènement avec le titre en rollover sur une date</li>
 * <li>Afficher un évènement s'étalant sur une période avec le titre en rollover sur une date</li>
 * <li>Définir un évènement par défaut</li>
 * <li>Affiche ou pas une sélection pour une semaine</li>
 * <li>Changer de mois sans recherger la page (merci ajax)</li>
 * </ul>
 *
 * @example test.php
 * @package sample
 * @author LE CORRE
 * @copyright Copyright (c) 2006
 * @version 1
 * @access public
 **/
class calendrier
{
    /**
     * Année de référence du calendrier.
     *
     * @var Int
     */
    var $year;
    /**
     * Mois de référence du calendrier.
     *
     * @var Int
     */
    var $month;
    /**
     * Jours du calendrier.
     *
     * @var Array
     */
    var $days;
    /**
     * Longueur de la chaine indiquant le nom du mois.
     *
     * @var Int
     */
    var $day_name_length;
    /**
     * Lien clicable vers un mois.
     *
     * @var String
     */
    var $month_href;
    /**
     * Position du premier jour du mois.
     *
     * @var Int
     */
    var $first_day;
    /**
     * Évènement à afficher.
     *
     * @var String
     */
    var $event;

    /**
     * calendrier::calendrier().
     *
     * Constructeur de la classe.
     * Définit les propriétés de l'objet
     *
     * @param  string $year
     * @param  string $month
     * @return Object calendrier
     * @access public
     */
    function calendrier($year=null, $month=null)
    {
        /**
         * Définit l'année par défaut
         */
        $this->year = isset($year) ? $year : date('Y');
        /**
         * Définit le mois pas défaut
         */
        $this->month = isset($month) ? $month : date('m');
        /**
         * tableau des jours cliquables
         */
        $this->day = array();
        /**
         * Définit le nombre de caractère pour afficher les semaines
         */
        $this->day_name_length = 3;
        /**
         * Contient le lien cliquable sur le mois
         */
        $this->month_href = null;
        /**
         * Définit le première jour
         */
        $this->first_day = 0;
        /**
         * Contient l'évènement à afficher par défaut
         */
        $this->event = "&nbsp;";
        /**
         * Valeur par défaut
         */
        $this->semaine= false;

		$this->calendar = "";

        /**
         * Définit la langue du calendrier
         */
        $oldlocale = setlocale(LC_TIME, NULL);
        setlocale(LC_TIME, 'fr_FR');
    }

    /**
     * calendrier::affec_previous().
     *
     * Permet de personnaliser le bouton "prévious" pour afficher le mois précédent.
     * Exemple :
     * <code><?php
     * $calendrier = new calendrier($annee, $mois);
     * $calendrier->affec_previous($mois, $annee, "mois_prec.jpg");
     * //...
     * ?></code>
     *
     * @param  mixed    $mois   mois en cours, sert à définir le mois précédent
     * @param  mixed    $annee  mois en cours, sert à définir l'année précédente
     * @param  string   $img    chemin de l'image du bouton précédent optionnel
     * @param  string   $alt    texte sur le lien optionnel par défaut "Mois précédent"
     * @param  string   $class  style css à appliquer au lien
     * @return Void
     * @access public
     */
    function affec_previous($mois, $annee, $img='lol.jpg', $alt='Mois précédent', $class='')
    {
        $precedentannee = $annee;
        $precedentmois = $mois-1;
        if($precedentmois==0)
        {
            $precedentmois = 12;
            $precedentannee = $annee-1;
        }

        $previous = "<span class=\"".$class."\"><a href=\"javascript: go(".$precedentmois.",".$precedentannee.");\">";
        if($img!="")
        {
            $previous.="<img src=\"".$img."\" alt=\"".$alt."\" />";
        }
        else
        {
            $previous.= "<";
        }
        $previous.="</a></span>&nbsp;";

        $this->previous = $previous;
    }

    /**
     * calendrier::affec_next().
     *
     * Permet de personnaliser le bouton next pour afficher le mois suivant.
     *
     * Exemple :
     * <code><?php
     * $calendrier = new calendrier($annee, $mois);
     * $calendrier->affec_previous($mois, $annee, "mois_prec.jpg");
     * $calendrier->affec_next($mois, $annee,"mois_suiv.jpg");
     * //...
     * ?></code>
     *
     * @param  String $mois     mois en cours, sert à définir le mois suivant.
     * @param  String $annee    mois en cours, sert à définir l'année suivante.
     * @param  String $img      chemin de l'image du bouton suivant optionnel.
     * @param  String $alt      texte sur le lien optionnel par défaut "Mois suivant".
     * @param  String $class    style css à appliquer au lien.
     * @return void
     * @access public
     */
    function affec_next($mois, $annee, $img='', $alt='Mois suivant', $class='')
    {
        $suivantmois = $mois+1;
        $suivantannee = $annee;
        if($suivantmois==13)
        {
            $suivantmois = 1;
            $suivantannee = $annee+1;
        }

        $next = "&nbsp;<span class=\"".$class."\"><a href=\"javascript: go(".$suivantmois.", ".$suivantannee.");\">";
        if($img!="")
        {
            $next.="<img src=\"".$img."\" alt=\"".$alt."\" />";
        }else{
            $next.= ">";
        }
        $next.="</a></span>";

        $this->next = $next;
    }

    /**
     * calendrier::affec_event_default()
     *
     * @param  mixed    $event  évènement à afficher par défaut
     * @param  mixed    $jour   date de l'évènement à afficher par défaut optionnel
     * @param  string   $link   lien de l'évènement à afficher par défaut optionnel
     * @param  string   $class  Class css de l'évènement à afficher par défaut optionnel
     * @return void
     * @access public
     */
    function affec_event_default($event,$jour='', $link='', $class='')
    {
        $this->event = $event;
        if($jour!="")
        {
            $this->affec_day($jour);
        }
    }

    /**
     * calendrier::affec_link_month()
     *
     * @param  mixed    $link   lien à mettre sur le mois en cours
     * @return void
     * @access public
     */
    function affec_link_month($link)
    {
        $this->month_href = $link;
    }

    /**
     * calendrier::affec_day()
     *
     * @param  mixed    $day    date d'un évènement
     * @param  mixed    $link   lien vers cette évènement optionnel
     * @param  string   $class  class css du lien optionnel
     * @param  string   $titre  titre à mettre sur le lien optionnel
     * @return void
     * @access public
     */
    function affec_day($day, $link='#', $class='',$titre='')
    {
        if(date('m',$day)==$this->month && date('Y',$day)==$this->year)
        {
            $jour = intval(date('d', $day));
            $lien = '<td'.($class ? ' class="'.htmlspecialchars($class).'">' : '>');
            if(isset($this->day[$jour]))
            {
                $onblur = ("onmouseover=\"document.getElementById('event').innerHTML='Plusieurs évènements ce jour'\" onmouseout=\"document.getElementById('event').innerHTML='".$this->event."'\"");
            }else{
                $onblur = ($titre ? "onmouseover=\"document.getElementById('event').innerHTML='".$titre."'\" onmouseout=\"document.getElementById('event').innerHTML='".$this->event."'\"" : "");
            }
            $lien .= ($link ? '<a href="'.htmlspecialchars($link).'" '.$onblur.'>'.$jour.'</a>' : $jour).'</td>';
            $this->day[$jour] = $lien;
        }
    }

    /**
     * calendrier::affec_periode()
     *
     * @param  mixed    $debut  date de début d'un évènelent
     * @param  mixed    $fin    date de fin de l'évènement
     * @param  mixed    $link   lien vers cette évènement optionnel
     * @param  string   $class  class css du lien optionnel
     * @param  string   $titre  titre à mettre sur le lien optionnel
     * @return void
     * @access public
     */
    function affec_periode($debut, $fin, $link, $class='', $titre='')
    {
        $premierdate = mktime(0,0,0,date('m', $debut), date('d', $debut), date('Y', $debut));
        $dernierdate = mktime(0,0,0,date('m', $fin), date('d', $fin), date('Y', $fin));
        $jour = date('d', $debut);
        while($premierdate<=$dernierdate)
        {
            //echo "date ajouter :".date("d/m/Y", $premierdate)."<br />";
            $this->affec_day($premierdate,"#",$class, $titre);
            $jour++;
            $premierdate = mktime(0,0,0,date('m', $debut), $jour, date('Y', $debut));
        }
    }

    /**
     * calendrier::affec_semaine()
     *
     * @param  Boolean  $affiche    active ou pas l'affichage de la colonne semaine
     * @param  string   $link       lien pour la semaine                             optionnel
     * @param  string   $variable1  nom de la première variabl à envoyer             optionnel
     * @param  string   $variable2  nom de la deuxième varaible à envoyer            optionnel
     * @param  string   $titre      libelle qui apparait dans la colonne             optionnel
     * @return void
     * @access public
     */
    function affec_semaine($affiche=true, $link='#', $variable1="datedebut", $variable2="datefin", $titre=">")
    {
        if($affiche)
        {
            $this->semaine = true;
            $this->semainelink = $link;
            $this->semainevariable1 = $variable1;
            $this->semainevariable2 = $variable1;
            $this->semainetitre = $titre;
        }
    }

    /**
     * calendrier::prepare_calendrier()
     *
     * @return void
     * @access public
     */
    function prepare_calendrier()
    {
        /**
         * définit le premier jour
         */
        $first_of_month = gmmktime(0,0,0,$this->month,1,$this->year);

        /**
         * initialise le calendrier
         */
        $day_names = array();
        for($n=0,$t=(3+$this->first_day)*86400; $n<7; $n++,$t+=86400)
        $day_names[$n] = ucfirst(gmstrftime('%A',$t));

        list($this->month, $this->year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
        $weekday = ($weekday + 7 - $this->first_day) % 7;
        $title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$this->year;

        /**
         * début de la création du tableau du calendrier
         */
        $this->calendar = '<table id="tabcalendrier" summary="Calendrier des évènements">'."\n";
        /**
         * affichage du mois
         */
        $this->calendar.= '<caption class="calendar-month">'.$this->previous.($this->month_href ? '<a href="'.htmlspecialchars($this->month_href).'">'.$title.'</a>' : $title).$this->next."\n";

        /**
         * affichage du titre de l'évènement s'il y en a un
         */
        $this->calendar.="<br /><span style='color: black' id=\"event\">".$this->event."</span>";
        /**
         * fin de l'entete du tableau
         */
        $this->calendar.= "</caption><thead><tr>";
        if($this->semaine) $this->calendar.="<th abbr=\"semaine\">&nbsp;</th>";
        /**
         * Affichage de le ligne de jour de la semaine
         */
        if($this->day_name_length)
        {
            foreach($day_names as $d)
            {
                $this->calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($this->day_name_length < 4 ? substr($d,0,$this->day_name_length) : $d).'</th>';
            }
            $this->calendar .= "</tr></thead>\n<tbody id=\"jours\"><tr>[semaine]";
        }

        /**
         * affichage des cellule vide avant le 1er jour
         */
        if($weekday > 0) $this->calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>';

        /**
         * boucle pour afficher l'ensemble de jour du mois
         */
        for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++)
        {
            if(!isset($premier_jour)) $premier_jour=$day;
            if($weekday == 7)
            {
                $weekday   = 0; #start a new week
                if($this->semaine)
                {
                    $liensemaine = "<a href=\"".$this->semainelink."?".$this->semainevariable1."=".$premier_jour."/".$this->month."/".$this->year."&".$this->semainevariable2."=".($day-1)."/".$this->month."/".$this->year."\">";
                    $this->calendar = str_replace("[semaine]", "<td>".$liensemaine.$this->semainetitre."</a></td>", $this->calendar);
                }else{
                    $this->calendar = str_replace("[semaine]","",$this->calendar);
                }

                $this->calendar .= "</tr>\n<tr>[semaine]";
                $premier_jour = $day;
            }
            if(isset($this->day[$day]))
            {
                $this->calendar.= $this->day[$day];

            }else{
                $this->calendar .= "<td>$day</td>";
            }
        }
        /**
         * affichage des cellule vide après le dernier jour du mois
         */
        if($weekday != 7) $this->calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; #remaining "empty" days
        if($this->semaine==true)
        {
            $liensemaine = "<a href=\"".$this->semainelink."?".$this->semainevariable1."=".$premier_jour."/".$this->month."/".$this->year."&".$this->semainevariable2."=".($day-1)."/".$this->month."/".$this->year."\">";
            $this->calendar = str_replace("[semaine]", "<td>".$liensemaine.$this->semainetitre."</a></td>", $this->calendar);
        }else{
            $this->calendar = str_replace("[semaine]","",$this->calendar);
        }
        /**
         * fin du tableau du calendrier
         */

        $this->calendar = $this->calendar."</tr>\n</tbody></table>\n";
    }

    /**
     * calendrier::affiche().
     *
     * Retourner le calendier.
     *
     * @return String   Code html du calendrier.
     * @access public
     */
    function affiche()
    {
        $this->prepare_calendrier();
        return $this->calendar;
    }
}

J'ai laisser dans le fichier calendrier.php la class pour créer le calendrier. et dans mon document php j'ai ajouter include puis j'ai essayer d'affiche le calendrier.

Premier probleme, il m'affiche 2 calendriers. Pourquoi ?
Suis-je partie sur de mauvaise base?
Quels sont mes erreurs ?

Merci

guigui69

par Ryle » 24 févr. 2009, 18:48

Tout est possible, tout est réalisable (ou presque ;)) et oui, il en existe déjà :)

Tu peux par exemple te pencher sur cette contribution de Cobaye :
http://www.phpfrance.com/forums/voir_su ... ndrier.php

Calendrier en php avec base mysql

par guigui69 » 24 févr. 2009, 17:27

Bonjour à tous,

je voudrait savoir si il existe des calendriers en php qui pourrait récupérer des informations d'une base de donnée.

Exemple: dans ma base j'aurai une table avec une date, nom personne, commentaire

Et je voudrait envoyer ces informations dans un calendrier php. Est-ce réalisable? Exist-il deja des calendriers php programmé?

Merci

guigui69