Avatar billede qub- Novice
03. april 2008 - 16:51 Der er 14 kommentarer og
1 løsning

Event Calendar PHP - Viser kun 1 event fra DB

Hejsa.. Har efter diverse tutorials formået at bikse et lille simpelt kalender event script i php.

Men når jeg henter mine "events" ned fra databasen, og skal vise dem i kalenderen går det galt..
Mest af alt fordi jeg sku ikke rigtig lige ved hvorn jeg skal gøre det.. - Den viser nemlig kun det FØRSTE event stående i databasen..

Kode:

$d = (!$d) ? date("d",mktime()) : "$d";
$m = (!$m) ? date("m",mktime()) : "$m";
$y = (!$y) ? date("Y",mktime()) : "$y";

function mk_drawCalendar($m,$y,$cmd)
{
include("inc/inc_connection.php");

    if ($cmd=="booking")
    {
        $link = '&cmd=booking';
    }
   
    if ((!$m) || (!$y))
    {
        $m = date("m",mktime());
        $y = date("Y",mktime());
    }

    /*== get what weekday the first is on ==*/
    $tmpd = getdate(mktime(0,0,0,$m+1,0,$y));
    $month = $tmpd["month"];
    $firstwday= $tmpd["wday"];

    $lastday = mk_getLastDayofMonth($m,$y);

print '
<table cellpadding="5" cellspacing="0" border="1">
<tr>
    <td colspan="7">
        <table cellpadding="0" cellspacing="0" border="0" width="100%">
        <tr>';
?>
            <td class="content_top" align="left"><a class="admin" href="<? echo $_SERVER['PHP_SELF']; ?>?m=<?=(($m-1)<1) ? 12 : $m-1 ?>&y=<?=(($m-1)<1) ? $y-1 : $y ?>">&lt;&lt;</a></td>
            <td class="content_top" align="center"><b><?="$month $y"?></b></td>
            <td class="content_top" align="right"><a class="admin" href="<?php echo $_SERVER['PHP_SELF']; ?>?m=<?=(($m+1)>12) ? 1 : $m+1 ?>&y=<?=(($m+1)>12) ? $y+1 : $y ?>">&gt;&gt;</a></td>
<?
print '</tr></table>
</td></tr>

<tr>
    <td class="tcell"><b>Mandag</b></td>
    <td class="tcell"><b>Tirsdag</b></td>
    <td class="tcell"><b>Onsdag</b></td>
    <td class="tcell"><b>Torsdag</b></td>
    <td class="tcell"><b>Fredag</b></td>
    <td class="tcell"><b>Lørdag</b></td>
    <td class="tcell"><b>Søndag</b></td>
</tr>
';
   
    $d = 1;
    $wday = $firstwday;
    $firstweek = true;

    /*== loop through all the days of the month ==*/
    while ( $d <= $lastday)
    {

        /*== set up blank days for first week ==*/
        if ($firstweek) {
            echo "<tr>";
            for ($i=1; $i<=$firstwday; $i++)
            { echo "<td><font size=2>&nbsp;</font></td>"; }
            $firstweek = false;
        }

        /*== Sunday start week with <tr> ==*/
        if ($wday==0) { echo "<tr>"; }

        /*== check for event ==*/
        $query = mysql_query("Select * from $Tsite_calendar");
        $row = mysql_fetch_array($query);
       
        if (($row['day'] == $d) && ($row['month'] == $m) && ($row['year'] == $y)) {
print '
        <td align="center" class="tcell">
        <a href="'.$_SERVER['PHP_SELF'].'?show=all'.$link.'&id='.$row['id'].'" title="'.$row['event'].'">'.$d.'</a>
        </td>
';
        } else {
print '
        <td align="center" class="tcell">
        '.$d.'
        </td>
';

        }

        /*== Saturday end week with </tr> ==*/
        if ($wday==6) { echo "</tr>\n"; }

        $wday++;
        $wday = $wday % 7;
        $d++;
    }
print '
</tr></table>
';
/*== end drawCalendar function ==*/
}




/*== get the last day of the month ==*/
function mk_getLastDayofMonth($mon,$year)
{
    for ($tday=28; $tday <= 31; $tday++)
    {
        $tdate = getdate(mktime(0,0,0,$mon,$tday,$year));
        if ($tdate["mon"] != $mon)
        { break; }

    }
    $tday--;

    return $tday;
}


Har også pastet koden på pastebin hvis i bedre kan overskue det der: http://www.pastebin.org/27182

I behøver ikke kritisere mine manglende php evner, men hjælp til at det virker kunne være rart :)
Hvis i har ydeligere "modifikationer" til scriptet er i også velkomne til at kommentere..

// Casper
Avatar billede fant0mas Nybegynder
03. april 2008 - 17:26 #1
Sådan måske:
while($row = mysql_fetch_array($query)){
if (($row['day'] == $d) && ($row['month'] == $m) && ($row['year'] == $y)) {
print '
<td align="center" class="tcell">
<a href="'.$_SERVER['PHP_SELF'].'?show=all'.$link.'&id='.$row['id'].'" title="'.$row['event'].'">'.$d.'</a>
</td>
';
} else {
print '
<td align="center" class="tcell">'.$d.'</td>
';
}
}
Avatar billede qub- Novice
03. april 2008 - 17:50 #2
det fungere slet ik.. Nu viser den bare 4 af hver dag.. Altså 1 1 1 1 2 2 2 2 3 3 3 3

:/
Avatar billede qub- Novice
03. april 2008 - 17:53 #3
og det er jo siger jo også sig selv når der er 4 events i databasen :P
Avatar billede fant0mas Nybegynder
03. april 2008 - 18:12 #4
Fedt! :P
Avatar billede fant0mas Nybegynder
03. april 2008 - 18:38 #5
Nå, jeg troede den var fin - hehe.
Hvad så med:

/*== check for event ==*/
if (($row['day'] == $d) && ($row['month'] == $m) && ($row['year'] == $y)) {
print '<td align="center" class="tcell">';
$query = mysql_query("Select * from $Tsite_calendar WHERE day = '$d' AND month = '$m' AND year = '$y'");
while($row = mysql_fetch_array($query)){
echo '<a href="'.$_SERVER['PHP_SELF'].'?show=all'.$link.'&id='.$row['id'].'" title="'.$row['event'].'">'.$d.'</a></td>';
}
} else {
print '<td align="center" class="tcell">'.$d.'</td>';
}
Avatar billede fant0mas Nybegynder
03. april 2008 - 18:41 #6
Hov, lige en overset </td>
Sådan:
/*== check for event ==*/
if (($row['day'] == $d) && ($row['month'] == $m) && ($row['year'] == $y)) {
print '<td align="center" class="tcell">';
$query = mysql_query("Select * from $Tsite_calendar WHERE day = '$d' AND month = '$m' AND year = '$y'");
while($row = mysql_fetch_array($query)){
echo '<a href="'.$_SERVER['PHP_SELF'].'?show=all'.$link.'&id='.$row['id'].'" title="'.$row['event'].'">'.$d.'</a>';
}
print '</td>';
} else {
print '<td align="center" class="tcell">'.$d.'</td>';
}
Avatar billede qub- Novice
03. april 2008 - 18:49 #7
virker stadig ikke :/
Avatar billede fant0mas Nybegynder
03. april 2008 - 18:53 #8
Hehe, pinligt :P
/*== check for event ==*/
print '<td align="center" class="tcell">';
$query = mysql_query("Select * from $Tsite_calendar WHERE day = '$d' AND month = '$m' AND year = '$y'");
$num_rows = mysql_num_rows($query);
if($num_rows > 0){
while($row = mysql_fetch_array($query)){
echo '<a href="'.$_SERVER['PHP_SELF'].'?show=all'.$link.'&id='.$row['id'].'" title="'.$row['event'].'">'.$d.'</a>';
}
}else{
echo $d;
}
print '</td>';
Avatar billede qub- Novice
03. april 2008 - 19:09 #9
Nu virker det.. !

Hurra hurra..

Ved godt jeg ik har skrevet det med i spørgsmålet, men mon ik jeg kan lokke dig til at hjælpe alligevel..?

Hvis jeg poster to events på samme dato, så poster den jo datoen 2 gange.. Det skal den jo helst ikke :/

Men kun vise de 2 events når man vælger den dag.. Hvis du forstår?
Avatar billede fant0mas Nybegynder
03. april 2008 - 19:16 #10
if($num_rows > 0){
echo $d;
while($row = mysql_fetch_array($query)){
echo ' <a href="'.$_SERVER['PHP_SELF'].'?show=all'.$link.'&id='.$row['id'].'" title="'.$row['event'].'">'.$row['event'].'</a><br>';
}
Avatar billede qub- Novice
04. april 2008 - 06:32 #11
tror du misforstod mig.. nu skriver den jo eventsne også..

Den sku bare selvfølgelig kun skrive datoen.. og så henter jeg jo de 2 events ud når jeg trykker på datoen.. :P
Avatar billede fant0mas Nybegynder
04. april 2008 - 08:30 #12
/*== check for event ==*/
print '<td align="center" class="tcell">';
$query = mysql_query("Select * from $Tsite_calendar WHERE day = '$d' AND month = '$m' AND year = '$y'");
$num_rows = mysql_num_rows($query);
if($num_rows > 0){
echo '<a href="'.$_SERVER['PHP_SELF'].'?show=all'.$link.'&id='.$row['id'].'" title="'.$row['event'].'&mode=open">'.$d.'</a>';
if($_GET['mode'] == open){
while($row = mysql_fetch_array($query)){
    echo $row['event'];
}
}
}else{
echo $d;
}
print '</td>';
Avatar billede qub- Novice
04. april 2008 - 10:02 #13
Så nu fungere det sku..

Måtte tilpasse det lidt, og har rettet lidt i den måde den henter eventsne på, så nu ser det sådan her ud:

    /*== check for event ==*/
print '<td align="center" class="tcell">';
$query = mysql_query("Select * from $Tsite_calendar WHERE day = '$d' AND month = '$m' AND year = '$y'");
$row2 = mysql_fetch_array($query);
$num_rows = mysql_num_rows($query);
if($num_rows > 0){
echo '<a href="'.$_SERVER['PHP_SELF'].'?show=all'.$link.'&day='.$row2['day'].'&month='.$row2['month'].'&year='.$row2['year'].'">'.$d.'</a>';
}else{
echo $d;
}
print '</td>';


Smid et svar, så får du dine points.. mange tak for hjælpen
Avatar billede fant0mas Nybegynder
04. april 2008 - 10:08 #14
Den henter kun 1 event.
Men her er svaret!
Avatar billede fant0mas Nybegynder
04. april 2008 - 10:08 #15
...Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester