0
votes

I am creating a PHP events calendar. I have the calendar working perfectly however none of my events will show (right now I only have one test event on 02/28/2013)

I have a feeling it has to do with the DATE_FORMAT, but any help I could get would be greatly appreciated.

You can view the calendar at http://nitelifeconcepts.com/scrg/calendar.php

The orignal code came from http://davidwalsh.name/php-event-calendar. reading through the comments it looks like other people had the same problems however none of their solutions seem to have worked for me

And my code:

<html>
<head>
<title>SCRG EVENTS</title>
<link rel="stylesheet" type="text/css" href="calendar.css">
<script type="text/javascript">
    var GB_ROOT_DIR = "http://nitelifeconcepts.com/scrg/greybox/";
</script>
<script type="text/javascript" src="greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/gb_scripts.js"></script>
<link href="greybox/gb_styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
/* Open up a connection to the mysql database on the same server as website */
$db_link = mysql_connect(XXXX, XXX, XXX)
    or die("Unable to connect to mysql database");

/* Select our database (there is more than one in my server) */
mysql_select_db("db156115_scrg", $db_link);
/* draws a calendar */
function draw_calendar($month,$year,$events = array()){

  /* draw table */
  $calendar = '<table cellpadding="0" cellspacing="0" class="calendar">';

  /* table headings */
  $headings =   array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
  $calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td   class="calendar-day-head">',$headings).'</td></tr>';

  /* days and weeks vars now ... */
  $running_day = date('w',mktime(0,0,0,$month,1,$year));
  $days_in_month = date('t',mktime(0,0,0,$month,1,$year));
  $days_in_this_week = 1;
  $day_counter = 0;
  $dates_array = array();

  /* row for week one */
  $calendar.= '<tr class="calendar-row">';

  /* print "blank" days until the first of the current week */
  for($x = 0; $x < $running_day; $x++):
    $calendar.= '<td class="calendar-day-np">&nbsp;</td>';
    $days_in_this_week++;
  endfor;

  /* keep going with days.... */
  for($list_day = 1; $list_day <= $days_in_month; $list_day++):
    $calendar.= '<td class="calendar-day"><div style="position:relative;height:100px;">';
      /* add in the day number */
      $calendar.= '<div class="day-number">'.$list_day.'</div>';

    $event_day = $year.'-'.$month.'-'.$list_day;
      if(isset($events[$event_day])) {
        foreach($events[$event_day] as $event) {
          $calendar.= '<div class="event">'.$event['Title'].'</div>';
        }
      }
      else {
        $calendar.= str_repeat('<p>&nbsp;</p>',2);
      }
    $calendar.= '</div></td>';
    if($running_day == 6):
      $calendar.= '</tr>';
      if(($day_counter+1) != $days_in_month):
        $calendar.= '<tr class="calendar-row">';
      endif;
      $running_day = -1;
      $days_in_this_week = 0;
    endif;
    $days_in_this_week++; $running_day++; $day_counter++;
  endfor;

  /* finish the rest of the days in the week */
  if($days_in_this_week < 8):
    for($x = 1; $x <= (8 - $days_in_this_week); $x++):
      $calendar.= '<td class="calendar-day-np">&nbsp;</td>';
    endfor;
  endif;

  /* final row */
  $calendar.= '</tr>';


  /* end the table */
  $calendar.= '</table>';

  /** DEBUG **/
  $calendar = str_replace('</td>','</td>'."\n",$calendar);
  $calendar = str_replace('</tr>','</tr>'."\n",$calendar);

  /* all done, return result */
  return $calendar;
}

function random_number() {
  srand(time());
  return (rand() % 7);
}

/* date settings */
$month = ($_GET['month'] ? $_GET['month'] : date('m'));
$year = ($_GET['year'] ? $_GET['year'] : date('Y'));
if($month < 10)
  $month = '0'.$month;

/* select month control */
$select_month_control = '<select name="month" id="month">';
for($x = 1; $x <= 12; $x++) {
  $select_month_control.= '<option value="'.$x.'"'.($x != $month ? '' : '   selected="selected"').'>'.date('F',mktime(0,0,0,$x,1,$year)).'</option>';
}
$select_month_control.= '</select>';

/* select year control */
$year_range = 7;
$select_year_control = '<select name="year" id="year">';
for($x = ($year-floor($year_range/2)); $x <= ($year+floor($year_range/2)); $x++) {
  $select_year_control.= '<option value="'.$x.'"'.($x != $year ? '' : '    selected="selected"').'>'.$x.'</option>';
}
$select_year_control.= '</select>';

/* "next month" control */
$next_month_link = '<a href="?month='.($month != 12 ? $month + 1 : 1).'&year='.($month !=   12 ? $year : $year + 1).'" class="control">Next Month &gt;&gt;</a>';

/* "previous month" control */
$previous_month_link = '<a href="?month='.($month != 1 ? $month - 1 : 12).'&year='.($month   != 1 ? $year : $year - 1).'" class="control">&lt;&lt;   Previous Month</a>';


/* bringing the controls together */
$controls = '<form method="get">'.$select_month_control.$select_year_control.'&nbsp;<input    type="submit" name="submit" value="Go"   />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$previous_month_link.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.      $next_month_link.' </form>';

/* get all events for the given month */
$events = array();
$query = "SELECT Title, DATE_FORMAT(eventDate,'%y-%m-%d') AS eventDate FROM eventcalendar    WHERE eventDate LIKE '$year-$month'";
$result = mysql_query($query,$db_link) or die('cannot get results!');
while($row = mysql_fetch_assoc($result)) {
  $events[$row['eventDate']][] = $row;
}

echo '<h2 style="float:left; padding-  right:30px;">'.date('F',mktime(0,0,0,$month,1,$year)).' '.$year.'</h2>';
echo '<div style="float:left;">'.$controls.'</div>';
echo '<div style="clear:both;"></div>';
echo draw_calendar($month,$year,$events);
?>
</body>
</html>

Again thank you for any help you can offer

1
PHP date('Y') returns a 4 digit year, MySQL DATE_FORMAT's %y returns a 2 digit year. I think this might be your problem. I cannot be sure without testing all of your code. Could you try using %Y in the DATE_FORMAT call?andyb
You probably shouldn't post your database password online. (Even if @andyb edited it, you should probably still change this password now, because it is in the revision history of this post forever.)Patrick James McDougle
You also shouldn't be using the mysql family of functions they are going to be deprecated. Please use mysqli or the superior PDO. php.net/manual/en/intro.mysql.phpPatrick James McDougle
Good spot @PatrickJamesMcDougle. I've edited them out so any scraping will hopefully not find them. @pistone10 I strongly suggest you change the password to your database now (and pick something more secure!)andyb
Good call on the password guys, I had been up all night and didn't even think about itpistone10

1 Answers

0
votes

Try changing your date settings bit to this:

if(isset($_GET['month'])) {
$month = $_GET['month'];
} else {
$month = date('m');
}
$month = str_pad($month,2,0,STR_PAD_LEFT);

if(isset($_GET['year'])) {
$year = $_GET['year'];
} else {
$year = date('Y');
}

And get rid of this bit...

if($month < 10)
$month = '0'.$month;

I should warn you that I'm not much of a coder!!!