Avatar billede smeier Nybegynder
27. oktober 2004 - 16:05 Der er 18 kommentarer og
1 løsning

liste som angiver måned.

Hej eksperter.
Jeg skal lave en månedlig indsamling af data. Min problem er at jeg vil lave en liste som går fra hjemmesidens startdato (f.eks et år siden) til dags dato.
f.eks
2003 dec
2004 jan
2004 feb
osv.
Ud fra hvert punkt skal så være en indikator som siger om der er indtastet for den pågældende måned.

Først og fremmest vil jeg bare gerne kunne lave listen med måneder. Nogen forslag?
Avatar billede detox Nybegynder
27. oktober 2004 - 16:21 #1
Fx:

<?php
$startdato = mktime(0,0,0,12,1,2003); // 1/12 2003
setlocale( LC_TIME, "da", "dan", "da_DK", "da_DK.ISO8859-1", "danish" );
while ($startdato<=time()) {
    echo ucwords(strftime('%Y %B',$startdato)) . "<br />";
    $startdato = strtotime("+1 month", $startdato);
}
?>
Avatar billede detox Nybegynder
27. oktober 2004 - 16:22 #2
Eller mere præcist:

<?php
$startdato = mktime(0,0,0,12,1,2003); // 1/12 2003
setlocale( LC_TIME, "da", "dan", "da_DK", "da_DK.ISO8859-1", "danish" );
while ($startdato<=time()) {
    echo strftime('%Y %b',$startdato) . "<br />";
    $startdato = strtotime("+1 month", $startdato);
}
?>
Avatar billede smeier Nybegynder
27. oktober 2004 - 16:26 #3
Det er smukt. Venter lige fem med at accepterer. Skal lige prøve at ændre lidt på det og se om jeg får fejl. I orden?
Avatar billede detox Nybegynder
27. oktober 2004 - 16:34 #4
Det er klart.
Avatar billede smeier Nybegynder
27. oktober 2004 - 16:43 #5
Nu er jeg bikset det her sammen. Kan det lave lettere måske via nogen joins. Det er ikke min stærke side.

<?php
$user_name = $_SESSION['user_name'];
$query = "SELECT user_id
                FROM user
                WHERE user_name = '$user_name'";
                $result = mysql_query($query) or die(mysql_error());
                while ($data = mysql_fetch_row($result)) {
                $user_id = "$data[0]";
                }
           
$startdato = mktime(0,0,0,12,1,2003); // 1/12 2003
setlocale( LC_TIME, "da", "dan", "da_DK", "da_DK.ISO8859-1", "danish" );
while ($startdato<=time()) {
    echo strftime('%Y %B',$startdato) . "<img src=\"$farve.jpg\"><br />";
$query = "SELECT user_id
                FROM dataindsamling
                WHERE moened = '$startdato' AND user_id = '$user_id'";
                $result = mysql_query($query) or die(mysql_error());
                while ($data = mysql_fetch_row($result)) {
                $ID = "$data[0]";
                }
if (!$ID)
{
$farve = 'Rod';
}
else
{
$farve = 'gron'
}
    $startdato = strtotime("+1 month", $startdato);
   
    }
    ?>
Avatar billede smeier Nybegynder
27. oktober 2004 - 16:50 #6
kan se at den ikke helt holder med $startdato i mit link. Kan du hjælpe der?
Avatar billede detox Nybegynder
27. oktober 2004 - 16:58 #7
Hvilke data har du i kolonnen: 'moened'?
Avatar billede smeier Nybegynder
27. oktober 2004 - 17:00 #8
$moened = date("Y-F", mktime(0, 0, 0,  date('m')-1, 0, date('Y')));
Avatar billede detox Nybegynder
27. oktober 2004 - 17:04 #9
Altså data med formatet: "2003-December"?
Avatar billede smeier Nybegynder
27. oktober 2004 - 17:05 #10
Ja.
Avatar billede smeier Nybegynder
27. oktober 2004 - 17:06 #11
Men så kan jeg jo godt se at der ihvertfald mangler en - bindestreg
Avatar billede detox Nybegynder
27. oktober 2004 - 17:12 #12
Det er temmelig besværligt at arbejde med ukorrekte formater. Du skal så vidt muligt bruge DATE, TIEM, DATETIME, TIMESTAMP eller evt. INT (med et unix timestamp) til datoer og tidspunkter. Du kan så altid formatere til måned med fx: MONTH(dato).
Avatar billede detox Nybegynder
27. oktober 2004 - 17:13 #13
TIEM = TIME ;O)
Avatar billede smeier Nybegynder
27. oktober 2004 - 17:19 #14
hmmm det må jeg vel hellere kigge lidt på. Den ukorrekte dato opstod fordi at jeg skal  adderer og trække en måned fra den aktuelle dato. Så fik jeg hjælp herinde hvor der blev sagt at mktime() var løsningen. Så er lidt på herrens mark.
Avatar billede detox Nybegynder
27. oktober 2004 - 17:22 #15
Du kan måske bruge noget lign.:

<?php
$user_name = $_SESSION['user_name'];
setlocale( LC_TIME, "da", "dan", "da_DK", "da_DK.ISO8859-1", "danish" );
$query = "SELECT user_id
                FROM user
                WHERE user_name = '$user_name'";
$result = mysql_query($query) or die(mysql_error());
while ($data = mysql_fetch_row($result)) {
    $startdato = mktime(0,0,0,12,1,2003); // 1/12 2003
    $user_id = "$data[0]";
    while ($startdato<=time()) {
        $smoened = date('Y-F', $startdato);
        $query = "SELECT user_id
                FROM dataindsamling
                WHERE moened = '$smoened' AND user_id = '$user_id'";
                $result = mysql_query($query) or die(mysql_error());
                while ($data = mysql_fetch_row($result)) {
                    $ID = "$data[0]";
                    if (empty($ID)) {
                        $farve = 'Rod';
                    } else {
                        $farve = 'gron';
                    }
        echo strftime('%Y %B',$startdato) . "<img src=\"$farve.jpg\"><br />";
        }
        $startdato = strtotime("+1 month", $startdato);
    }
}
?>
Avatar billede detox Nybegynder
27. oktober 2004 - 17:26 #16
Men jeg vil helt klart anbefale du bruger et andet format, fx DATE (eller et unix timestamp i et INT felt).

Du kan få et unix timestamp minus en måned med:

$for_en_maaned_siden = strtotime("-1 month");
Avatar billede detox Nybegynder
27. oktober 2004 - 17:28 #17
Og fx et DATE format med:

$date_format = date('Y-m-d', strtotime("-1 month"));
Avatar billede smeier Nybegynder
27. oktober 2004 - 17:32 #18
Det vidste jeg sq ik man kunne. Ser lige på hvor stort et projekt det vil være at ændre datoen. Men tak for hjælpen.
Avatar billede detox Nybegynder
27. oktober 2004 - 17:42 #19
Ok velbekommen for nu ;o)
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