Avatar billede abemand Nybegynder
16. november 2003 - 18:49 Der er 19 kommentarer og
1 løsning

Kalenderspgm: vis ugenummer og indeværende dag II

Ref.: http://www.eksperten.dk/spm/428209

Er der nogen evt. detox, der kan fortælle mig, hvordan jeg smider et array med danske månedsnavne ind i denne smarte løkke?

Jeg har også brug for en idé til, hvordan jeg kan koble de listede datoer sammen med output fra min db. Er det smartest at hente indholdet i den angivne periode og så liste det fra et array elelr skal jeg hellere hente posterne med adskilte queries for de datoer, hvor der er et indhold?
Avatar billede detox Nybegynder
16. november 2003 - 19:03 #1
Til dit første spørgsmål, vil jeg mene du kan bruge noget i den her stil:

<?
$danske = array('januar','februar','marts','april','maj','juni','juli','august','september','oktober','november','december');
$start = date('w') ? date('w')-1: 6;
echo $danske[date('n')-1]."<br />";
echo "Uge: ".date('W')."<br /><hr>";
for ($i=0;$i<7;$i++) {
    echo date('D d-m-Y',time()-$start*60*60*24)."<br />";
    $start--;
}
?>
Avatar billede detox Nybegynder
16. november 2003 - 19:04 #2
Vedrørende at hente data, kan du godt hente data fra en given periode. Hvilken felttype bruger du til dine datoer?
Avatar billede abemand Nybegynder
16. november 2003 - 19:16 #3
date
Avatar billede abemand Nybegynder
16. november 2003 - 19:26 #4
Jeg var nok lidt hurtig; jeg mente egentlig ugedagene ;-) Kan du klare den også?
Avatar billede detox Nybegynder
16. november 2003 - 19:35 #5
Ok, så kan du selv tage det du kan bruge:

$danske = array('januar','februar','marts','april','maj','juni','juli','august','september','oktober','november','december');
$ugedage = array('søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag');
$start = date('w') ? date('w')-1: 6;
echo $danske[date('n')-1]."<br />";
echo "Uge: ".date('W')."<br /><hr>";
for ($i=0;$i<7;$i++) {
    $tid = time()-$start*60*60*24;
    echo $ugedage[date('w', $tid)].": ";
    echo date('d-m-Y',$tid)."<br />";
    $dag[$i] = $tid;
    $start--;
}
$start_dag = date('Y-m-d', $dag[0]-60*60*24);
$slut_dag = date('Y-m-d', $dag[6]+60*60*24);
echo "<br />";
require 'db.php';// Forbindelse til database
$res = mysql_query("select * from tabel where dato_felt between '$start_dag' and '$slut_dag'") or die(mysql_error());
Avatar billede detox Nybegynder
16. november 2003 - 20:04 #6
Men er tanken den at du vil bruge formateringen ved visningen af dine data fra tabellen?
Avatar billede abemand Nybegynder
16. november 2003 - 23:50 #7
Tanken er, at jeg får hevet de poster frem som svarer til den aktuelle uges datoer, men indtil videre lykkes det mig kun at hive alle poster indenfor tidsrummet ud i een vælling.
Avatar billede abemand Nybegynder
16. november 2003 - 23:51 #8
Tror du ligefrem det er nødvendigt for mig, at skulle lave en query for hver gang den tæller de 7 dage op i løkken? Det sker jo ofte, at der er mere end en post pr. dato...
Avatar billede detox Nybegynder
16. november 2003 - 23:56 #9
Nej, du kan bruge ORDER BY:

$res = mysql_query("select * from tabel where dato_felt between '$start_dag' and '$slut_dag' ORDER BY dato_felt") or die(mysql_error());
Avatar billede detox Nybegynder
16. november 2003 - 23:58 #10
Vil du have hver enkelt dags poster adskilt?
Avatar billede abemand Nybegynder
17. november 2003 - 00:01 #11
ja, altså sådan at den udskriver ugen som du allerede har klaret - og så efter hver dag skal den liste de poster der passer til datoen, inden den skriver næste dato i den aktuelle uge.

Forstår du det eller mumler jeg?
Avatar billede detox Nybegynder
17. november 2003 - 00:06 #12
Nej, jeg tror jeg ser tegningen. Spørgsmålet er bare om du skal lave et udtræk, som du deler op, eller om du skal lave en forespørgsel for hver dag i ugen.
Avatar billede abemand Nybegynder
17. november 2003 - 00:11 #13
Nemlig. Det virker umiddelbart omsonst at skulle lave 7 forespørgsler, men omvendt kan jeg ikke se, hvordan jeg kan komme mere snedigt omkring det.
Avatar billede detox Nybegynder
17. november 2003 - 00:30 #14
Hmmm, nej jeg ser lige på det.
Avatar billede detox Nybegynder
17. november 2003 - 00:37 #15
Jeg tror jeg har fundet en metode, hvor du kun behøver et udtræk:

<?
define('DAG', 60*60*24);
$ugedage = array('søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag');
$start = date('w') ? date('w')-1: 6;
echo "Uge: ".date('W')."<br /><hr>";
for ($i=0;$i<7;$i++) {
    $tid = time()-$start*DAG;
    $dag[$i] = $tid;
    $start--;
}
$start_dag = date('Y-m-d', $dag[0]-DAG);
$slut_dag = date('Y-m-d', $dag[6]+DAG);
echo "<br />";
require 'db.php';// Forbindelse til database
$res = mysql_query("select * from tabel where dato between '$start_dag' and '$slut_dag' order by dato") or die(mysql_error());
while ($row[] = mysql_fetch_assoc($res)) {
}
$j = 0;
for ($i=0;$i<7;$i++) {
    echo $ugedage[date('w', $dag[$i])].": " . date('d-m-Y',$dag[$i])."<br />";
    while (date('Y-m-d', $dag[$i]) == $row[$j]['dato']) {
        echo $row[$j]['text']."<br />";
        $j++;
    }
    echo "<hr>";
}
?>
Avatar billede detox Nybegynder
17. november 2003 - 00:39 #16
I eksemplet bruger jeg et datofelt kaldet 'dato' og et tekstfelt kaldet 'text. Det kan du jo rette til, ligesom tabellen bliver kaldt for 'tabel'
Avatar billede detox Nybegynder
17. november 2003 - 00:49 #17
Og så kunne du evt. tilføje:

while ($row[] = mysql_fetch_assoc($res)) {
}
mysql_free_result($res);// Tilføjes

og til sidst:

    echo "<hr>";
}
unset($row);// Tilføjes
Avatar billede abemand Nybegynder
22. januar 2004 - 16:52 #18
detox; smider du ikke lige et svar?
Avatar billede detox Nybegynder
22. januar 2004 - 17:00 #19
Jo da.
Avatar billede abemand Nybegynder
22. januar 2004 - 19:55 #20
Tak for hjælpen :-)
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