Avatar billede tlunde Nybegynder
09. februar 2008 - 11:08 Der er 15 kommentarer og
1 løsning

Et par spørgsmål til en kalender?

Hej,
Jeg sidder og er ved at opbygge en kalender, hvor dato gemmes med et timestamp. Det fungere også fint nok, men lige nu printer den alle måneder ud, også dem der er tomme. Hvordan undgår jeg at få vist de måneder der ikke indeholder noget? Og ville sådan set også gerne have den til at man i toppen, hvor der står "2008", kan skifte frem til 2009, 2010 osv. Og så tilbage selvfølgelig, men ikke længere tilbage end det år vi er i nu :-)

Min kode ser pt. sådan ud:
$year_txt = array(1 => "Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");

echo"
<h1>$current_year</h1><br>
    <table cellspacing='0' cellpadding'3' width='100%' border='0'>";
    ## Printer alle månederne ud i året.
    foreach ($year_txt AS $month) {
        echo"
        <tr>
            <td style='border-bottom:1px solid #000000;'><b>".$month."</b></td>
        </tr>
        <tr>
            <td>";
            $sql = "SELECT * FROM kalender ORDER BY dato";
            $query = mysql_db_query($dbName, $sql);
            while ($row = mysql_fetch_array($query)) {
                if ($year_txt[date("n", $row[dato])] == $month) {
                echo date("j.", $row['dato'])." - ".stripslashes($row['overskrift'])."<br>";
                }   
            }                   
            echo"<br><br>
            </td>
        </tr>
        ";
    }
    echo"
    </table>
    ";

Kalenderen, som den ser ud nu, kan ses her:
http://www.marieogthomas.dk/index.php?tekst_id=17

Håber i har tid til at hjælpe mig lidt :-)
Avatar billede dkfire Nybegynder
09. februar 2008 - 11:23 #1
Du bliver nok nød til at vise hele din kode. Kan ikke lige se hvor $current_year kommer fra.
Avatar billede tlunde Nybegynder
09. februar 2008 - 16:31 #2
$current_year er bare en variabel jeg har sat lige over $year_txt som ser sådan her ud:

$current_year = date("Y");
Avatar billede jakobdo Ekspert
10. februar 2008 - 17:05 #3
Prøv at test følgende kode til at starte med:

<?php
$current_year = date("Y");
$year_txt = array(1 => "Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");
echo '<h1>'.$current_year.'</h1>';
echo '<table cellspacing="0" cellpadding="3" width="100%" border="0">';
## Printer alle månederne ud i året.
foreach ($year_txt AS $month_num => $month_name) {
    $sql = "SELECT * FROM kalender WHERE YEAR(dato) = '".$current_year."' AND MONTH(dato) = '".$month_num."' ORDER BY dato";
    $query = mysql_db_query($dbName, $sql);
    if(mysql_num_rows($query) > 0) {
        echo '<tr><td style="border-bottom:1px solid #000000;"><b>'.$month_name.'</b></td></tr>';
        echo '<tr><td>';
   
        while ($row = mysql_fetch_array($query)) {
            echo date("j.", $row['dato'])." - ".stripslashes($row['overskrift'])."<br>";
        } 
    }                 
    echo"<br><br></td></tr>";
}
echo '</table>';
?>
Avatar billede tlunde Nybegynder
10. februar 2008 - 21:36 #4
Tak fordi du gider hjælpe mig igen, men dit forslag returnere slet ingen rækker. Har prøvet at smide en: echo mysql_error(); ind, men den returnere heller ikke noget, så der er ikke en SQL fejl som sådan?
Avatar billede jakobdo Ekspert
10. februar 2008 - 21:40 #5
Mit forsøg var kun at trække de rækker ud, som matcher den pågælende måned og år.
Prøv at udskriv $current_year og $month_num i hver række.
Sker der noget der?
Avatar billede tlunde Nybegynder
10. februar 2008 - 21:48 #6
Den printer stadig kun $sql sætningen ud.
Du kan se det her: http://www.marieogthomas.dk/index.php?tekst_id=17
Avatar billede tlunde Nybegynder
10. februar 2008 - 22:00 #7
Og mine datoer i databasen er skrevet ind som timestamps. Skulle det have noget at sige?
Avatar billede jakobdo Ekspert
10. februar 2008 - 22:03 #8
timestamps?
Hvad indeholder feltet dato ?
Avatar billede tlunde Nybegynder
10. februar 2008 - 22:06 #9
i dato feltet i databasen indeholder juleaften i år eks: 1230116400.
Jeg har bare set i mange af de eksempler der er på nettet med YEAR() og MONTH(), der bruger de eks. YEAR(24-12-08), og ikke timestamp som dato.
Avatar billede jakobdo Ekspert
11. februar 2008 - 08:01 #10
Er dit timestamp = unix_timestamp så?
Avatar billede tlunde Nybegynder
11. februar 2008 - 08:24 #11
Ja, det burde det vel være.
Bruger time() til at indsætte tiden i databasen...
Avatar billede jakobdo Ekspert
11. februar 2008 - 08:47 #12
Hvis du valgte at bruge datetime formattet og NOW() når du skal indsætte tiden nu, så ville det være nemmere. (ihf. lige i dette tilfælde) :o)
Avatar billede tlunde Nybegynder
11. februar 2008 - 08:51 #13
I databasen bruger jeg lige nu bare INT(11) og så indsætter med time();.
Hvad er forskellen på at bruge datetime og så now(); ??
Avatar billede jakobdo Ekspert
11. februar 2008 - 09:08 #14
datetime er netop et datatype lavet til at gemme dato og tid.
Og der er så netop funktioner som MONTH(), YEAR(), DAY() og lign, som kan bruges til at trække måned, år og dag ud af en dato.
Avatar billede tlunde Nybegynder
16. november 2008 - 20:18 #15
Har fundet en anden og mere funktionel løsning...
Avatar billede jakobdo Ekspert
16. november 2008 - 20:23 #16
Hvad blev din løsning ?
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