Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Week Calendar PREV and NEXT

Posted on 2013-12-10
6
Medium Priority
?
1,307 Views
Last Modified: 2013-12-30
OK, I give up!  I'm not sure what I am doing wrong!

I have the following script that determines the date and shows a 1 week Calendar.
The Next Week Button and the PREV week button work 100%.  However, depending on the day, there is a query that pulls information from a DB and displays it on the correct date. This also works 100%.  However, when I click NEXT or PREVIOUS the Calendar itself does not change date. (At line 38)

function weekCalendar($date='Today')	{  //  METHOD
    $pdo = new PDO("");
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	
	
	
    $timestamp      = strtotime(date('Y-m-01', strtotime($date)));
    $caption     	= date("F Y", $timestamp);

	
	$date = !empty($_GET['d']) ? $_GET['d'] : 'Today';
	
	$ts = !empty($_GET['d']) ? strtotime($_GET['d']) : strtotime('Today');
	
	if (!$ts) $ts = strtotime('Today');
	$prev = date('Y-m-d', $ts - 60*60*24*7);
	$next = date('Y-m-d', $ts + 60*60*24*7);

	$prev_link = '<a href="' . $_SERVER['PHP_SELF'] . "?d=$prev" . '">Prev</a>' . PHP_EOL;
	$next_link = '<a href="' . $_SERVER['PHP_SELF'] . "?d=$next" . '">Next</a>' . PHP_EOL;
	
	$date_adv = date('Y-m', $ts);

?>

<table id="cal_nav">
	<tr>
		<td class="cal-nav-left"><h2><?php echo $prev_link; ?></h2></td>
		<td class="cal-nav-center"><h2><?php echo date('F Y', strtotime($date)); ?></h2></td>
		<td class="cal-nav-right"><h2><?php echo $next_link; ?></h2></td>
	</tr>
</table>

<?php	
    echo PHP_EOL;
	echo "<table class='full'><tr>";
	
	for($day=1; $day<=7; $day++) {
		echo '<td class="align-top"><strong>' .date('D M d', strtotime($date_adv.'-'.$day)).'</strong><br />';
		
		$this_date = date('Y-m-d', strtotime($date_adv.'-'.$day));
		echo $this_date;
		
		$sql = "SELECT schedule_id, first_name, last_name, asset_name, asset_type, start_date, workorder_id, color
				FROM schedule
				WHERE start_date = '$this_date'
				GROUP BY schedule_id DESC";

		$pdos = $pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
		
		try{
			$pdos->execute();
			
			if ($pdos) {
				while ($row = $pdos->fetch(PDO::FETCH_OBJ)) {
					$at = $row->asset_type;
					$fn = $row->first_name;
					$ln = $row->last_name;
					$sd = $row->start_date;
					$id = $row->schedule_id;
					$ac = $row->color;
 
					
					if ($sd == $this_date && $at == 'driver') {
						
						echo '<a href="view_workorder_print.php?id='.$id.'">'.$fn .''. $ln .'</a><br />';
						} 
					
				}  //  END WHILE
				
			}  //  END IF
			
			
		}  //  END TRY			          	
		catch(PDOException $e) {
   			echo 'ERROR: ' . $e->getMessage();
		}
		echo "<td>";	
	}  //  END FOR
	echo "</tr></table>";
		
	}
//  END WEEK CAKENDAR
}

Open in new window

0
Comment
Question by:rgranlund
  • 4
  • 2
6 Comments
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 39710262
Is this on a public-facing server where we can see the rendered HTML document?  If no, can you please put it in a test environment so we can see it in action?  Thanks, ~Ray
0
 
LVL 7

Author Comment

by:rgranlund
ID: 39710281
0
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 39710297
I think you want to follow the $this_date variable in the logic.  Not sure about that but it's getting late in the day here.  If you look at the PHP code and the generated HTML document closely, you may find that the HTML is not what you expected from running the PHP.  In particular, the HTML document starts with this:
</tr></table>


		
	}
//  END WEEK CAKENDAR
}
?><!DOCTYPE html>

Open in new window

0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 
LVL 111

Accepted Solution

by:
Ray Paseur earned 2000 total points
ID: 39711523
See if this is helpful.  It should work correctly even across leap year and daylight saving time.  Please post back if you still have questions, thanks.

<?php // RAY_temp_rgranlund.php
error_reporting(E_ALL);


// DEMONSTRATE PREVIOUS AND NEXT WEEKS
// SEE http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_28315321.html


// SET THE TIMEZONE
date_default_timezone_set('America/Chicago');

// IF THERE IS A URL ARGUMENT, USE IT PREFERENTIALLY, OR USE TODAY
$ts = !empty($_GET['d']) ? strtotime($_GET['d']) : FALSE;
if (!$ts) $ts = strtotime('TODAY');

// NORMALIZE TO THE ISO-8601 DATE WITHOUT TIME
$ymd = date('Y-m-d', $ts);
$day = date('D', $ts);

// THE WEEKLY CALENDAR WILL START ON SUNDAY
if ($day == 'Sun')
{
    $alpha = $ymd;
}
else
{
    $alpha = date('Y-m-d', strtotime($ymd . ' LAST SUNDAY'));
}

// THE WEEKLY CALENDAR WILL END ON SATURDAY
$omega = date('Y-m-d', strtotime($alpha . ' SATURDAY'));

// THE PREV AND NEXT WEEKS WILL BE COMPUTED FROM THE CURRENT DAY
$prev  = date('Y-m-d', strtotime("$ymd - 1 WEEK"));
$next  = date('Y-m-d', strtotime("$ymd + 1 WEEK"));

// MAKE THE URLS
$prev_uri = $_SERVER['PHP_SELF'] . "?d=$prev";
$next_uri = $_SERVER['PHP_SELF'] . "?d=$next";

// MAKE THE LINK TEXTS
$prev_lnk = '<a href="' . $prev_uri . '">Prev</a>';
$next_lnk = '<a href="' . $next_uri . '">Next</a>';

// MAKE THE REPRESENTATION OF THE WEEK
$week['prev'] = $prev_lnk;
while ($alpha <= $omega)
{
    // A TEXT VERSION OF THE WEEKDAY
    $day = date('D', strtotime($alpha));

    // HIGHLIGHT THE CURRENT DAY
    if ($alpha == $ymd)
    {
        $week[$day] = "<b>$alpha</b>";
    }
    else $week[$day] = $alpha;
    $alpha = date('Y-m-d', strtotime("$alpha + 1 DAY"));
}
$week['next'] = $next_lnk;

// SHOW THE REPRESENTATION OF THE WEEK
echo '<pre>';
print_r($week);

Open in new window

HTH, ~Ray
0
 
LVL 7

Author Comment

by:rgranlund
ID: 39713029
@Ray.  I was able to edit it into what I needed.  So strange.  I looked all over the internet for an example of how to do this, to no real avail.  Thanks again!
0
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 39713096
Glad to be able to help!  Thanks, ~Ray
0

Featured Post

Prepare for your VMware VCP6-DCV exam.

Josh Coen and Jason Langer have prepared the latest edition of VCP study guide. Both authors have been working in the IT field for more than a decade, and both hold VMware certifications. This 163-page guide covers all 10 of the exam blueprint sections.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Creating a Cordova application which allow user to save to/load from his Dropbox account the application database.
It’s a season to be thankful, and we’re thankful for users like you who engage on site, solve technology problems, and network with others in the industry. What tech are we most thankful for? Keep reading.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
Suggested Courses

916 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question