Jump to content

Got great help here, but having trouble implementing?

Go to solution Solved by Ch0cu3r,

Recommended Posts

I wanted to stop back by today and share something that finally dawned on me around 2:00 this morning, when I was still mulling why the calendar didn't look quite right.  In my fervor to have the calendar function, I thoughtlessly omitted including an echo to close the last row,  the table and 2 div tags.  I  corrected this in the code below and also added a bit to get the empty table rows (falling after the last day of the month) to continue to flesh out the table row so that the overall appearance is a bit neater.  So you'd compare this page to this page to see what I mean. 


Edited to include my omissions:


    $conn = ($GLOBALS["___mysqli_ston"] = mysqli_connect("localhost", "user", "password", "database_")) or die('Cannot connect to the database because: ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));
<!DOCTYPE html>
<html lang="en">
    <meta charset="utf-8">
   <link rel="stylesheet" type="text/css" media="screen" href="css/master.css"> 

    // calender entries. Use the date as the key (in YYYY/MM/DD format)
    $entries = array(
    '2014/8/16' => array(
    ) ,
    $currMonth = isset($_GET['month']) ? $_GET['month'] : date('n');
    $currYear = isset($_GET['year']) ? $_GET['year'] : date('Y');
    $today = (($currYear == date('Y')) && ($currMonth == date('n'))) ? date('j') : 0;
    $currMonth = sprintf('%02d', $currMonth); // pad currMonth with zero's
    // when using user input, always use prepared statements otherwise could lead to SQL injection attacks
    $stmt = $conn->prepare('SELECT startdt, description FROM events WHERE YEAR(startdt) = ? AND MONTH(startdt) = ?');
    $stmt->bind_param('ii', $currYear, $currMonth);
    $stmt->bind_result($date, $description);
    $entries = array();
    while ($stmt->fetch())
    $entries[$date][] = $description;
    $prevMonth = $currMonth == 1 ? 12 : $currMonth - 1;
    $nextMonth = $currMonth == 12 ? 1 : $currMonth + 1;
    $prevYear = $currMonth == 1 ? $currYear - 1 : $currYear;
    $nextYear = $currMonth == 12 ? $currYear + 1 : $currYear;
    $day1 = mktime(0, 0, 0, $currMonth, 1, $currYear);
    $dim = date('t', $day1);
    $dayN = mktime(0, 0, 0, $currMonth, $dim, $currYear);
    $dow1 = (date('w', $day1) + 0) % 7;
    $dowN = (date('w', $dayN) + 0) % 7;
    $calHead = date('F Y', $day1);
    echo <<<EOT
    <div class="calwrapper">
    <div class="container">
    <div class="fnl first"></div>
    <div class="adjust"></div>
    <div class="fnl last"></div>
    <div class="caldisplay">
    <table cellspacing="0">
    <td class="hd"><a class="cal_button" href="$_SERVER[PHP_SELF]?year=$prevYear&month=$prevMonth"> Prev </a></td>
    <td colspan="5" class="adjust">$calHead</td>
    <td class="hd"><a class="cal_button" href="$_SERVER[PHP_SELF]?year=$nextYear&month=$nextMonth"> Next </a></td>
    <th class="we">Sun</th>
    <th class="wd">Mon</th>
    <th class="wd">Tue</th>
    <th class="wd">Wed</th>
    <th class="wd">Thu</th>
    <th class="wd">Fri</th>
    <th class="we">Sat</th>
    for ($d=0;$d<$dow1;$d++) echo "<td class=\"hd\"> </td>";
    $c = $dow1;
    for ($d=1; $d<=$dim; $d++, $c++) {
    if ($c%7==0) echo "</tr><tr>";
    $cl = ($c%7==5) || ($c%7==6) ? 'we' : 'wd';
    $st = ($d == $today) ? "style='padding: 0px;'" : '';
    echo "<td class=\"$cl\" $st>\n";
    echo " $d ";
    $dateKey = sprintf('%04d-%02d-%02d',$currYear,$currMonth,$d);
    if(array_key_exists($dateKey, $entries))
    foreach($entries[$dateKey] as $entry)
    echo '<div class="has-tooltip">
    <span class="tooltip">'.$entry.'</span>
    while ($c++ % 7 != 0) echo '<td class=\"hd\"> </td>';
    echo "</tr></table>\n";
    echo '</div></div>';

(My table is "events".  Yours may be something else.)


And, yes, again, I cannot say enough about how appreciative I am of the patient time and effort taken to help me and to also educate me.  I'm so grateful.  :)

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.