...

View Full Version : Event Calendar help



Sparchy
09-13-2011, 04:48 PM
howdy ya,

i made myself a event calendar which works great except for one minor detail which i would like to fix. which is if 1 date lets say today's date 09/10/2011 has 3 events on it it only shows the most recent one posted.. i want it to post all 3 events..

here is what it looks like right now
http://imageshack.us/photo/my-images/854/event1.gif/

here is what i want it to kinda look like
http://imageshack.us/photo/my-images/821/event2.gif/

here is the script



<html>
<head>
<style type="text/css">
a.info{
position:relative; /*this is the key*/
z-index:24;
color:#FFFFFF;
text-decoration:none}

a.info:hover{z-index:25;
}

a.info span{display: none}

a.info:hover span{ /*the span will display just on :hover state*/
display:block;
position:absolute;
padding: 9px;
border:1px solid #FFFFFF;
background-color:#424242;
color:#FFFFFF;
font-size: 10px;
filter: progid:DXImageTransform.Microsoft.Shadow(color=gray,direction=145);
text-align: center}
</style>
</head>
<?php
$monthNames = Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$weekNames = Array("S", "M", "T", "W", "T", "F", "S");

if (!isset($_REQUEST["month"])) $_REQUEST["month"] = date("n");
if (!isset($_REQUEST["year"])) $_REQUEST["year"] = date("Y");

$cMonth = $_REQUEST["month"];
$cYear = $_REQUEST["year"];

$prev_year = $cYear;
$next_year = $cYear;
$prev_month = $cMonth-1;
$next_month = $cMonth+1;

if ($prev_month == 0 ) {
$prev_month = 12;
$prev_year = $cYear - 1;
}
if ($next_month == 13 ) {
$next_month = 1;
$next_year = $cYear + 1;
}
?>
<table width="120" bgcolor="414141" cellpadding="0" Cellspacing="0">
<tr align="center">
<td bgcolor="#414141" style="color:#FFFFFF">
</td>
</tr>
<tr>
<td align="center">
<table width="100%" height="10" border="1" cellpadding="2" cellspacing="2">
<tr align="center">
<td bgcolor="#999999" style="color:#000000"><a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $prev_month . "&year=" . $prev_year; ?>" title="Previous Month" style="color:#000000"><center><b>&laquo;</b></center></a></td>
<td colspan="5" bgcolor="#999999" style="color:#000000"><strong><?php echo $monthNames[$cMonth-1].' '.$cYear; ?></strong></td>
<td bgcolor="#999999" style="color:#000000"><a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $next_month . "&year=" . $next_year; ?>" title="Next Month" style="color:#000000"><center><b>&raquo;</b></center></a></td>
</tr>
<tr>
<?php
$i = 0;

foreach ($weekNames as $v) {
echo "<td align='center' bgcolor='#999999' style='color:#000000'><strong>$v</strong></td>";

$i++;
}
?>
</tr>
<?php
$timestamp = mktime(0,0,0,$cMonth,1,$cYear);
$maxday = date("t",$timestamp);
$thismonth = getdate ($timestamp);
$startday = $thismonth['wday'];
$today = date("j");
$currentmonth = date('n');
$currentyear = date("Y");

for ($i=0; $i<($maxday+$startday); $i++) {

if($cMonth < 10){
$month_formated = "0$cMonth";
}else{
$month_formated = $cMonth;
}

if(($i - $startday + 1) < 10){
$day_formated = "0".($i - $startday + 1)."";
}else{
$day_formated = ($i - $startday + 1);
}

$dato_formated = "$cYear-$month_formated-$day_formated";
include 'db.php';
$get_calendar_data = mysql_query("SELECT * FROM event WHERE dates='$dato_formated'");
$count_rows = mysql_num_rows($get_calendar_data);
while ($row = mysql_fetch_array($get_calendar_data)) {
$dates = $row['dates'];
$events = $row['events'];
$event_des = $row['event_des'];
$time = $row['time'];
$username = $row['username'];
$filter = $row['filter'];
}
if($count_rows > 0){
if($filter == "event"){
$bgcolor = "#0000FF";
}elseif($filter == "holiday"){
$bgcolor = "0066CC";
}
$link = "<a class='info' style='text-decoration:none;' href='#'>
<font color='#FFFFFF'><center>". ($i - $startday + 1) . "<span>".$events."<hr><br>".$event_des."<br><br>".$time."</span></center></font>
</a>";
}else{

$bgcolor = "#494949";
$link = "". ($i - $startday + 1) . "";
}

$calendar_data = mysql_fetch_assoc($get_calendar_data);
$heading = $calendar_data['heading'];


if(($i % 7) == 0 ) echo "<tr>\n";
if($i < $startday) echo "<td></td>\n";
else
if (($i - $startday + 1) == $today && $currentmonth == $cMonth && $currentyear == $cYear)
echo ("<td bgcolor='FF0000'><center><font color='FFFFFF'>".($i - $startday + 1)."</font></center></td>");
else
echo "
<td align='left' valign='top' height='20px' bgcolor='$bgcolor'><center>
$link
</center></td>\n";
if(($i % 7) == 6 ) echo "</tr>\n";
}
?>

</table>
</td>
</tr>
</table>


the problem is at line 116 -118
which is these lines here

$link = "<a class='info' style='text-decoration:none;' href='#'>
<font color='#FFFFFF'><center>". ($i - $startday + 1) . "<span>".$events."<hr><br>".$event_des."<br><br>".$time."</span></center></font>
</a>";

can someone please help me

Thank you
Sparchy

Rowsdower!
09-13-2011, 05:04 PM
I'll be honest, I'm being lazy and just posting what I think will work. I haven't tested this or done much more than look over the code you posted, but this seems like something that ought to fix the problem:


$link .= "<a class='info' style='text-decoration:none;' href='#'>
<font color='#FFFFFF'><center>". ($i - $startday + 1) . "<span>".$events."<hr><br>".$event_des."<br><br>".$time."</span></center></font>
</a>";

All I did was add that "." right before the "=" character to append to the $link variable's value for each trip through the loop. Without that, you are overwriting the existing value on each pass through, which means you are only getting the last value from the loop.

If that doesn't work let me know and I'll get off of my butt and take a closer look. :D

Sparchy
09-13-2011, 09:30 PM
Thanks for the reply but that didn't help it just on some of the numbers (mainly event dates) it showed the day before and the day of the event in one table row lol but it was something to try lol..

Sparchy

mlseim
09-13-2011, 09:39 PM
I'm guessing too ...

The closing bracket for the while loop needs to be moved ...

Change made ....


while ($row = mysql_fetch_array($get_calendar_data)) {
$dates = $row['dates'];
$events = $row['events'];
$event_des = $row['event_des'];
$time = $row['time'];
$username = $row['username'];
$filter = $row['filter'];

if($count_rows > 0){
if($filter == "event"){
$bgcolor = "#0000FF";
}elseif($filter == "holiday"){
$bgcolor = "0066CC";
}
$link = "<a class='info' style='text-decoration:none;' href='#'>
<font color='#FFFFFF'><center>". ($i - $startday + 1) . "<span>".$events."<hr><br>".$event_des."<br><br>".$time."</span></center></font>
</a>";
}else{

$bgcolor = "#494949";
$link = "". ($i - $startday + 1) . "";
}

} // closing bracket of while loop




.

Sparchy
09-13-2011, 09:45 PM
can't move the while bracket because all the code under that part is also needed in the while bracket as well

if needed i can put the sql in here so you guys can do some tests on it as well.

mlseim
09-13-2011, 09:50 PM
Doesn't make sense, because right now, this is your while loop ...

while ($row = mysql_fetch_array($get_calendar_data)) {
$dates = $row['dates'];
$events = $row['events'];
$event_des = $row['event_des'];
$time = $row['time'];
$username = $row['username'];
$filter = $row['filter'];
}


I don't follow your explanation of why the bracket cannot be moved.

EDIT:
The output of the events (echo) needs to be within the while loop.
How else will it print out more than one event?


.

Sparchy
09-13-2011, 10:01 PM
sorry i don't know where my mind is lol.. but if i move the bracket down it will only output just the event dates and not the calendar itself. i already tried that before a well lol..

BluePanther
09-13-2011, 10:25 PM
msleim is entirely correct. Just now, what you're doing is getting a resultset of events for a date, then reassigning your variables $dates etc. inside the while loop, so that you'll only get 1 result from that while loop - the last row found from your query. Your logic isn't all there.

What you need to do, is change it. You need to find the date (already doing that) then run the query for events in that date (already doing that) THEN you need to loop through the rows using a while loop (already looping through the rows) and output the results in your desired format INSIDE the while loop. Either that, or assign results inside the while loop to an array, which isn't always the best answer and probably not the best for this method. Count rows is not needed here, and should only be used if you're wanting to output the number of events.

An example:


while($row = mysql_fetch_array($get_calendar_data)){
echo '<div>'.$row['Somefield'].'</div>';
}

Sparchy
09-13-2011, 10:33 PM
i understand what you guys are saying but the way my script is set up if i put it in the while loop it will only output the event dates but not the whole calendar. i been down this road once trying to figure out how to get it to do that but its over my head lol.. if you run my script and look and edit yourself you will find out what im talking about.

here is the sql if you want to test it out

CREATE TABLE `event` (
`id` int(25) NOT NULL default '0',
`dates` date NOT NULL default '0000-00-00',
`events` varchar(255) collate latin1_general_ci NOT NULL default '',
`event_des` text collate latin1_general_ci NOT NULL,
`time` varchar(25) collate latin1_general_ci NOT NULL default '',
`username` varchar(255) collate latin1_general_ci NOT NULL default '',
`filter` varchar(255) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

BluePanther
09-13-2011, 10:47 PM
What I'm telling you to do is redo it with a thought about logic in your code design. Your while loop is definitely set up wrong, it is definitely giving you problems and needs changed.

mlseim
09-13-2011, 11:39 PM
I would create the calendar first ...
Then, when they mouse over or click a date, pop-up the events.
That is separate from the actual calendar.


.

mlseim
09-13-2011, 11:41 PM
I'm old school.
Comments consume bytes of memory.
Although good to have, we were taught to compress code as much as possible.
No white space, no comments. I guess it's not 1979 anymore.


.

BluePanther
09-14-2011, 12:51 AM
haha wrong thread msleim :D. But aye, I argued that in school but got a stern 'I NEED TO BE ABLE TO READ WHAT'S GOING ON' from my teacher, who didn't actually know the language haha.

mlseim
09-14-2011, 12:58 AM
a long day ... whew ... posting in the wrong thread. I'm done for the day.



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum