简体   繁体   English

PHP从日历中的数据库添加事件

[英]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. 我在php中有一个日历,现在我正尝试将数据库表中的事件添加到日历中。 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 这是我的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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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