简体   繁体   中英

PHP add events from database in calendar

I have a calendar in php and now I am trying to add events from the database table into the calendar. I want to make it so that the event gets shown at the date when its supposed to be. And also that info like the event description and customer are being displayed as well.

A screen of my db table: 在此处输入图片说明

And heres the code of my calendar.php

<?php
 class Calendar {  

/**
 * Constructor
 */
public function __construct(){     
    $this->naviHref = htmlentities($_SERVER['PHP_SELF']);
}

/********************* PROPERTY ********************/  
private $dayLabels = array("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");

private $currentYear=0;

private $currentMonth=0;

private $currentDay=0;

private $currentDate=null;

private $daysInMonth=0;

private $naviHref= null;

/********************* PUBLIC **********************/  

/**
* print out the calendar
*/
public function show() {
    $year  == null;

    $month == null;

    if(null==$year&&isset($_GET['year'])){

        $year = $_GET['year'];

    }else if(null==$year){

        $year = date("Y",time());  

    }          

    if(null==$month&&isset($_GET['month'])){

        $month = $_GET['month'];

    }else if(null==$month){

        $month = date("m",time());

    }                  

    $this->currentYear=$year;

    $this->currentMonth=$month;

    $this->daysInMonth=$this->_daysInMonth($month,$year);  

    $content='<div id="calendar">'.
                    '<div class="box">'.
                    $this->_createNavi().
                    '</div>'.
                    '<div class="box-content">'.
                            '<ul class="label">'.$this- 
                >_createLabels().'</ul>';   
                            $content.='<div class="clear"></div>';     
                            $content.='<ul class="dates">';    

                            $weeksInMonth = $this- 
            >_weeksInMonth($month,$year);
                            // Create weeks in a month
                            for( $i=0; $i<$weeksInMonth; $i++ ){

                                //Create days in a week
                                for($j=1;$j<=7;$j++){
                                    $content.=$this->_showDay($i*7+$j);
                                }
                            }

                            $content.='</ul>';

                            $content.='<div class="clear"></div>';     

                    $content.='</div>';

    $content.='</div>';
    return $content;   
}

/********************* PRIVATE **********************/ 
/**
* create the li element for ul
*/
private function _showDay($cellNumber){

    if($this->currentDay==0){

        $firstDayOfTheWeek = date('N',strtotime($this->currentYear.'-'.$this- 
             >currentMonth.'-01'));

        if(intval($cellNumber) == intval($firstDayOfTheWeek)){

            $this->currentDay=1;

        }
    }

    if( ($this->currentDay!=0)&&($this->currentDay<=$this->daysInMonth) ){

        $this->currentDate = date('Y-m-d',strtotime($this->currentYear.'- 
        '.$this->currentMonth.'-'.($this->currentDay)));

        $cellContent = $this->currentDay;

        $this->currentDay++;   

    }else{

        $this->currentDate =null;

        $cellContent=null;
    }


    return '<li id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' 
     start ':($cellNumber%7==0?' end ':' ')).
            ($cellContent==null?'mask':'').'">'.$cellContent.'</li>';
}

/**
* create navigation
*/
private function _createNavi(){

    $nextMonth = $this->currentMonth==12?1:intval($this->currentMonth)+1;

    $nextYear = $this->currentMonth==12?intval($this->currentYear)+1:$this- 
  >currentYear;

    $preMonth = $this->currentMonth==1?12:intval($this->currentMonth)-1;

    $preYear = $this->currentMonth==1?intval($this->currentYear)-1:$this- 
  >currentYear;

    return
        '<div class="header">'.
            '<a class="prev" href="'.$this->naviHref.'? 
   month='.sprintf('%02d',$preMonth).'&year='.$preYear.'">Zurück</a>'.
                '<span class="title">'.date('Y M',strtotime($this- 
      >currentYear.'-'.$this->currentMonth.'-1')).'</span>'.
            '<a class="next" href="'.$this->naviHref.'? 
           month='.sprintf("%02d", 
         $nextMonth).'&year='.$nextYear.'">Weiter</a>'.
        '</div>';
}

/**
* create calendar week labels
*/
private function _createLabels(){  

    $content='';

    foreach($this->dayLabels as $index=>$label){

        $content.='<li class="'.($label==6?'end title':'start title').' 
   title">'.$label.'</li>';

    }

    return $content;
}



/**
* calculate number of weeks in a particular month
*/
private function _weeksInMonth($month=null,$year=null){

    if( null==($year) ) {
        $year =  date("Y",time()); 
    }

    if(null==($month)) {
        $month = date("m",time());
    }

    // find number of days in this month
    $daysInMonths = $this->_daysInMonth($month,$year);

    $numOfweeks = ($daysInMonths%7==0?0:1) + intval($daysInMonths/7);

    $monthEndingDay= date('N',strtotime($year.'-'.$month.'-'.$daysInMonths));

    $monthStartDay = date('N',strtotime($year.'-'.$month.'-01'));

    if($monthEndingDay<$monthStartDay){

        $numOfweeks++;

    }

    return $numOfweeks;
   }

  /**
  * calculate number of days in a particular month
   */
  private function _daysInMonth($month=null,$year=null){

    if(null==($year))
        $year =  date("Y",time()); 

    if(null==($month))
        $month = date("m",time());

    return date('t',strtotime($year.'-'.$month.'-01'));
         }

   }

Got your code working.

   <?php
  class Calendar {  

/**
 * Constructor
 */
public function __construct(){     
    $this->naviHref = htmlentities($_SERVER['PHP_SELF']);
}

/********************* PROPERTY ********************/  
private $dayLabels = array("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");

private $currentYear=0;

private $currentMonth=0;

private $currentDay=0;

private $currentDate=null;

private $daysInMonth=0;

private $naviHref= null;

/********************* PUBLIC **********************/  

/**
* print out the calendar
*/
public function show() {

    // change this to your credentials
    $username = "root"; 
    $password = "usbw"; 
    $host = "localhost"; 
    $dbname = "test"; 

    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 

    try { $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); } 
    catch(PDOException $ex){ die("Failed to connect to the database: " . $ex->getMessage());} 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 


    $dates = array();

   foreach ($db->query("SELECT * FROM events") as $row){
       $event = array();

       $event['kundenname'] = $row['kundenname'];
       $event['auftrag'] = $row['auftrag'];
       if (array_key_exists($row['termin_datum'], $dates)){
           array_push($dates[$row['termin_datum']], $event);
       }
       else{
           $dates[$row['termin_datum']] = array();
            array_push($dates[$row['termin_datum']], $event);      
       }
     // now all events are inside an array
   }



    $year  = null;

    $month = null;

    if(null==$year&&isset($_GET['year'])){

        $year = $_GET['year'];

    }else if(null==$year){

        $year = date("Y",time());  

    }          

    if(null==$month&&isset($_GET['month'])){

        $month = $_GET['month'];

    }else if(null==$month){

        $month = date("m",time());

    }                  

    $this->currentYear=$year;

    $this->currentMonth=$month;

    $this->daysInMonth=$this->_daysInMonth($month,$year);  

  $content='<div id="calendar">'.
                '<div class="box">'.
                $this->_createNavi().
                '</div>'.
                '<div class="box-content">'.
                        '<ul class="label">'.$this->_createLabels().'</ul>';   
                        $content.='<div class="clear"></div>';     
                        $content.='<div class="dates">';    

                        $weeksInMonth = $this->_weeksInMonth($month,$year);
                        switch($month){
                            case "01":
                            $min = 0;    
                            break;
                             case "02":
                            $min = 3;    
                            break; 
                            case "03":
                            $min = 3;    
                            break;
                            case "04":
                            $min = 6;    
                            break;
                            case "05":
                            $min = 1;    
                            break;
                            case "06":
                            $min = 4;    
                            break;
                            case "07":
                            $min = 6;    
                            break;
                            case "08":
                            $min = 2;    
                            break;
                            case "09":
                            $min = 5;    
                            break;
                            case "10":
                            $min = 0;    
                            break;
                            case "11":
                            $min = 3;    
                            break;
                            case "12":
                            $min = 5;    
                            break;
                            // this are the numbers of empty fields
                            // you should get those numbers from somewhere, these numbers are only working for 2018. 
                            // replace these numbers by the number of empty fields where the month starts with.

                        }


                        // Create weeks in a month
                        for( $i=0; $i<$weeksInMonth; $i++ ){

                            //Create days in a week
                            for($j=1;$j<=7;$j++){
                                if (array_key_exists($year."-".$month."-".sprintf("%02d", $i*7+$j-$min), $dates)){

                                   $content.=$this->_showDay($i*7+$j, $dates[$year."-".$month."-".sprintf("%02d", $i*7+$j-$min)]);  
                                }
                                else{
                                    $content.=$this->_showDay($i*7+$j);
                                }
                            }
                        }

                        $content.='</div>';

                        $content.='<div class="clear"></div>';     

                $content.='</div>';

$content.='</div>';
    return $content;   
}

/********************* PRIVATE **********************/ 
/**
* create the li element for ul
*/
public function _showDay($cellNumber, $appointment = NULL){

if($this->currentDay==0){

    $firstDayOfTheWeek = date('N',strtotime($this->currentYear.'-'.$this->currentMonth.'-01'));

    if(intval($cellNumber) == intval($firstDayOfTheWeek)){

        $this->currentDay=1;

    }
}

if( ($this->currentDay!=0)&&($this->currentDay<=$this->daysInMonth) ){

    $this->currentDate = date('Y-m-d',strtotime($this->currentYear.'- 
    '.$this->currentMonth.'-'.($this->currentDay)));

    $cellContent = $this->currentDay;

    $this->currentDay++;   

}else{

    $this->currentDate =null;

    $cellContent=null;
}

if($appointment != NULL){
    $c = '<div id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' 
 start ':($cellNumber%7==0?' end ':' ')).
        ($cellContent==null?'mask':'').' busy"><span>'.$cellContent.'</span>';
        $c.= "<ul>";
        for($w=0;$w<count($appointment);$w++){
            $c.= "<li> - ".$appointment[$w]['kundenname']."</li>";
        }
        $c.= "</ul>";

        $c.= '</div>';
}
else{
    $c = '<div id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' 
 start ':($cellNumber%7==0?' end ':' ')).
        ($cellContent==null?'mask':'').' free"><span>'.$cellContent.'</span></div>';
}    


return $c;    

}

/**
* create navigation
*/
private function _createNavi(){

    $nextMonth = $this->currentMonth==12?1:intval($this->currentMonth)+1;

    $nextYear = $this->currentMonth==12?intval($this->currentYear)+1:$this->currentYear;

    $preMonth = $this->currentMonth==1?12:intval($this->currentMonth)-1;

    $preYear = $this->currentMonth==1?intval($this->currentYear)-1:$this->currentYear;

    return
        '<div class="header">'.
            '<a class="prev" href="'.$this->naviHref.'? 
   month='.sprintf('%02d',$preMonth).'&year='.$preYear.'">Zurück</a>'.
                '<span class="title">'.date('Y M',strtotime($this->currentYear.'-'.$this->currentMonth.'-1')).'</span>'.
            '<a class="next" href="'.$this->naviHref.'? 
           month='.sprintf("%02d", 
         $nextMonth).'&year='.$nextYear.'">Weiter</a>'.
        '</div>';
}

/**
* create calendar week labels
*/
private function _createLabels(){  

    $content='';

    foreach($this->dayLabels as $index=>$label){

        $content.='<li class="'.($label==6?'end title':'start title').' 
   title">'.$label.'</li>';

    }

    return $content;
}



/**
* calculate number of weeks in a particular month
*/
private function _weeksInMonth($month=null,$year=null){

    if( null==($year) ) {
        $year =  date("Y",time()); 
    }

    if(null==($month)) {
        $month = date("m",time());
    }

    // find number of days in this month
    $daysInMonths = $this->_daysInMonth($month,$year);

    $numOfweeks = ($daysInMonths%7==0?0:1) + intval($daysInMonths/7);

    $monthEndingDay= date('N',strtotime($year.'-'.$month.'-'.$daysInMonths));

    $monthStartDay = date('N',strtotime($year.'-'.$month.'-01'));

    if($monthEndingDay<$monthStartDay){

        $numOfweeks++;

    }

    return $numOfweeks;
   }

  /**
  * calculate number of days in a particular month
   */
  private function _daysInMonth($month=null,$year=null){

    if(null==($year))
        $year =  date("Y",time()); 

    if(null==($month))
        $month = date("m",time());

    return date('t',strtotime($year.'-'.$month.'-01'));
         }

   }

 $calendar = new Calendar(); 
echo $calendar->show();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM