topical media & game development

talk show tell print

basic-web-php-PHP-Example03.php / php



  <?php
  
  // Set up the variables (today, month, year, cmd)
  //  today = m/d/y
  //  cmd = 1 (add month) or -1 (sub month)
  function setvars() {
  
    // Default is today
    today = getdate();
    month = today['mon'];
    year = today['year'];
    today = month."/".today['mday']."/".year;
  
    // Get POST data
    if (isset(_POST) && count(_POST) != 0) {
      if (isset(_POST['month'])) {
        month = _POST['month']; }
      if (isset(_POST['year'])) {
        year = _POST['year']; }
      if (isset(_POST['next'])) {
        cmd = 1; }
      if (isset(_POST['prev'])) {
        cmd = -1; }
    }
  
    // Get GET data
    if (isset(_GET) && count(_GET) != 0) {
      if (isset(_GET['month'])) {
        month = _GET['month']; }
      if (isset(_GET['year'])) {
        year = _GET['year']; }
      if (isset(_GET['next'])) {
        cmd = 1; }
      if (isset(_GET['prev'])) {
        cmd = -1; }
    }
  
    // If given a command (move month)
    //  act on it
    if (isset(cmd)) {
      month += cmd;
      // Adjust month over or underrun
      if (month >= 13) {
        month = 1;
        year += 1;
      } elseif (month <= 0) {
        month = 12;
        year -= 1;
      }
    }
  
    // Return vars in an array
    return array("today" => today,
                 "month" => month,
                 "year" => year,
                 "cmd" => cmd);
  
  }  // End setvars()
  
  // Do the document header
  function docheader(month,year) {
  
    // Set script to return to (form action)
    this_script = _SERVER['PHP_SELF'];
    month_text =  date("F",strtotime(month."/1/".year));
  
    // If content header has not been sent,
    //   send it
    if (!headers_sent()) {
      header('Content-type: text/html');
    }
  
  // Print the document header (up to first date row)
  print <<<HTML
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1.dtd">
  <html>
  <head>
    <title>Calendar - Month Year</title>
    <style type="text/css">
      tr.weekdays td { width: 100px;
                       text-align: center;
                     }
      tr.week td { width: 100px;
                   height: 100px;
                   color: black;  }
    </style>
  </head>
  <body>
  <form action="this_script" method="post">
  <table border="1">
  
  <!-- Controls and calendar title (month) -->
  <tr>
    <td colspan="1" align="left">
      <input type="submit" name="prev" value="&lt;&lt;" />
    </td>
    <td colspan="5" align="center">
      <strong>
        month_text year
      </strong>
      <input type="hidden" name="month" value="month" />
      <input type="hidden" name="year" value="year" />
    </td>
    <td colspan="1" align="right">
      <input type="submit" name="next" value="&gt;&gt;" />
    </td>
  </tr>
  
  <!-- Day of week header row -->
  <tr class="weekdays">
    <th>Sunday</th>
    <th>Monday</th>
    <th>Tuesday</th>
    <th>Wednesday</th>
    <th>Thursday</th>
    <th>Friday</th>
    <th>Saturday</th>
  </tr>
  
  <!-- Calendar (days) start here -->
  
  HTML;
  
  }  // End docheader()
  
  // Do the document footer (close tags, end doc)
  function docfooter() {
  
  print <<<HTML
  <!-- Close all open tags, end document -->
  </table>
  </form>
  </body>
  </html>
  
  HTML;
  
  } // End docfooter()
  
  // Print an empty day (cell)
  function emptyday() {
  
  print <<<HTML
    <td align="right" valign="top">&nbsp;</td>
  
  HTML;
  
  } // End emptyday()
  
  // Print a day cell
  function day(today,month,day,year) {
  
    curday = month."/".day."/".year;
    if (curday == today) {
      font = " style=\"color: red;\"";
    } else {
      font = "";
    }
  
  print <<< HTML
    <td align="right" valign="top" font>day</td>
  
  HTML;
  
  } // End day()
  
  // Open or close a row
  function weekrow(cmd) {
  
    switch (cmd) {
      case "open":
        print "<tr class=\"week\">\n";
        break;
      case "close":
        print "</tr>\n";
        break;
    }
  
  }  // End weekrow()
  
  // Main program body
  function main() {
  
    // Set the date vars by default, POST, or GET
    vars = setvars();
    today = vars['today'];
    month = vars['month'];
    year = vars['year'];
    cmd = vars['cmd'];
  
    // Do the header and open first row
    docheader(month,year);
    weekrow("open");
  
    // Set up first weekday and 1st day (m/1/y)
    first_weekday = date("w",strtotime(month."/1/".year)) + 1;
    day = 1;
  
    // Print empty days up to the first weekday of month
    for (weekday = 1; weekday < first_weekday; weekday++) {
      emptyday();
    }
  
    // Do rest of month while we have a valid date
    while (checkdate(month,day,year)) {
      // If SUN, open the row
      if (weekday == 1) {
        weekrow("open");
      }
      // Print day and increment
      day(today,month,day,year);
      weekday++;
      day++;
      // If SAT, close row reset weekday
      if (weekday > 7) {
        weekrow("close");
        weekday = 1;
      }
  
    }
  
    // Close current week
    while (weekday != 1 && weekday <= 7) {
      emptyday();
      weekday++;
    }
  
    // Close document
    docfooter();
  
  } // End main();
  
  // Kick it all off
  main();
  
  ?>
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.