Avatar billede kimox Nybegynder
19. december 2005 - 09:53 Der er 42 kommentarer og
1 løsning

Nyheds sektion

Hej.


Har i mulighed for at hjælpe mig med at kunne oprette en nyheds sektion, hvor det er muligt at oprette en nyhed med en dato på hvornår nyheden skal starte med at vises og hvornår den skal slutte med at vises.. altså selve koden med at smide op i DB osv osv er nem nok.. men lige hvordan jeg skal sætte den til at starte med hjælp af dato osv?
Avatar billede jakobdo Ekspert
19. december 2005 - 10:01 #1
Du kunne lave følgende:
Startdato!
Antal dage!

mysql_query("SELECT * FROM nyheder WHERE dato >= NOW() AND ADDDATE(dato, INTERVAL +antaldage DAYS) <= NOW()");
Avatar billede kimox Nybegynder
19. december 2005 - 11:07 #2
Tjah det kunne kan også, så skriver man bare i tal hvor mange dage den skal vises eller?
Avatar billede jakobdo Ekspert
19. december 2005 - 11:12 #3
Jep!
Avatar billede kimox Nybegynder
19. december 2005 - 11:56 #4
okay, enkelt.. tror jeg.. men hvad gør jeg så når den skal hente datoen fra serveren og osv ? for det skal jo ikke være sådan så de kan sætte deres pc ur frem og så viser den nyheden.. jeg skal have en dato som man kan stole på :P
Avatar billede jakobdo Ekspert
19. december 2005 - 12:37 #5
Det klare sql'en ovenover!
Bemærk NOW() den henter tiden på serveren, så du bestemmer alt! :o)
Avatar billede kimox Nybegynder
19. december 2005 - 12:44 #6
aah kanon !.. det må jeg lige prøve om lidt så :D
Avatar billede jakobdo Ekspert
19. december 2005 - 13:54 #7
Virkede det?
Avatar billede kimox Nybegynder
20. december 2005 - 12:05 #8
hvordan kommer datoen til at se ud ? eller hvordan skal man skrive start datoen ind i DB ?

20052012

2005-20-12

20-12-2005

20122005

eller hvad?
Avatar billede jakobdo Ekspert
20. december 2005 - 12:42 #9
datoen lader du være i typen: date eller datetime
Så kan du altid kode det som du lyster bagefter!
Avatar billede kimox Nybegynder
20. december 2005 - 12:44 #10
okay, feltet skal være date eller datetime?

Det er bare hvad jeg skal skrive af dato hvis jeg først vil have den vist d. 29-01-06
Avatar billede jakobdo Ekspert
20. december 2005 - 12:47 #11
Så skal du skrive: 2006-01-29 mener jeg!
Avatar billede kimox Nybegynder
20. december 2005 - 13:05 #12
Jeps det ser vist meget rigtigt ud :D. jeg laver lige redigerings siden færdig, så laver jeg siden den skal hente nyhederne på .. så må lige se om jeg kan få den til at virke.

Man kan ikke teste den nogle steder kan man ? jeg skal vel minimum vente 1 dag ikke hehe?
Avatar billede jakobdo Ekspert
20. december 2005 - 13:09 #13
Om man kan teste den?
Hvad mener du?

Du kan jo bare ændre dato til at du har nogle nyheder som har en dato som er for gammel og en som er nyere!
Avatar billede kimox Nybegynder
20. december 2005 - 13:17 #14
jaja, men det var mere, med at være sikker på at den vil virker når man sætter den frem i fremtiden.. jeg mente at man måske kunne skrive "......DAYS) <= NOW(2006-01-01)");" for at se en fra d. 01-01-06 :o)
Avatar billede jakobdo Ekspert
20. december 2005 - 13:33 #15
Så kan du bruge adddate()
Avatar billede kimox Nybegynder
20. december 2005 - 13:45 #16
den siger:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in


som har noget med dette at gøre:
$query = mysql_query("SELECT * FROM cms_nyheder WHERE startdato >= NOW() AND ADDDATE(startdato, INTERVAL +antal DAYS) <= NOW() ORDER BY id DESC limit $vis_fra, $pr_side");
Avatar billede kimox Nybegynder
20. december 2005 - 13:47 #17
Jeg har sat en nyhed som skulle starte d. "2005-11-02" og køre i antaldage "81"

og det er der jo ikke gået :).. så den skulle jo vise den :)
Avatar billede jakobdo Ekspert
20. december 2005 - 13:48 #18
Prøv lige at ret til:
$query = mysql_query("SELECT * FROM cms_nyheder WHERE startdato >= NOW() AND ADDDATE(startdato, INTERVAL +antal DAYS) <= NOW() ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());

Og har du et felt som hedder antal?
Avatar billede kimox Nybegynder
20. december 2005 - 13:55 #19
jep.. den hedder kun antal
Avatar billede kimox Nybegynder
20. december 2005 - 13:56 #20
her skriver den:

Nyheder

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAYS) <= NOW() ORDER BY id DESC limit 0, 4' at line 1
Avatar billede jakobdo Ekspert
20. december 2005 - 14:01 #21
Jeg tror du skal rette DAYS til DAY
DATE_ADD(NOW(), INTERVAL -antal DAY)
Avatar billede kimox Nybegynder
20. december 2005 - 14:11 #22
Sådan, nu viser den i det mindste den som ikk må vises hehe.. altså den jeg har sat frem til at starte i morgen .. og den som der var sat til at skulle vises i november og 81 dage frem er skjult.. skal -antal så rettes til +antal ?
Avatar billede kimox Nybegynder
20. december 2005 - 14:11 #23
den ser sådan her ud nu:

$query = mysql_query("SELECT * FROM nyheder WHERE startdato >= NOW() AND DATE_ADD(NOW(), INTERVAL -antal DAY) <= NOW() ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());
Avatar billede jakobdo Ekspert
20. december 2005 - 14:43 #24
Tror muligvis den skal være sådan her:
SELECT * FROM nyheder WHERE startdato < NOW() AND DATE_ADD(startdato, INTERVAL +antal DAY) >= NOW() ORDER BY id DESC
Avatar billede kimox Nybegynder
20. december 2005 - 14:48 #25
yes det var meget bedre :D.. nu bliver det spændene at se om den virker her kl. 00 ;)


kan man godt lave et eller andet så kan siger "nyhed udløber om: xx dage" på en eller anden måde regner ud hvor mange dage der er tilbage?
Avatar billede jakobdo Ekspert
20. december 2005 - 14:59 #26
Ja, du kan alt! :o)
Avatar billede kimox Nybegynder
20. december 2005 - 17:40 #27
fedt nok .. vil du hjælpe med det ? eller skal jeg oprette et nyt spørgsmål ?

og smid bare et svar :)
Avatar billede jakobdo Ekspert
20. december 2005 - 21:10 #28
Jeg vil gerne hjælpe, det bliver bare ikke lige nu!
Og et svar!
Avatar billede jakobdo Ekspert
20. december 2005 - 21:25 #29
Så kommer den sgu lige her:

SELECT
    *,
    DATEDIFF(NOW(),DATE_ADD(startdato, INTERVAL +antal DAY)) AS antalDageTilbage
FROM
    nyheder
WHERE
    startdato < NOW()
AND
    DATE_ADD(startdato, INTERVAL +antal DAY) >= NOW()
ORDER BY
    id DESC
LIMIT
    $vis_fra, $pr_side

antalDageTilbage skulle gerne indeholder hvor mange dage du vil kunne se den endnu!
Avatar billede kimox Nybegynder
21. december 2005 - 18:10 #30
hmm det første script virker ikke helt.. den viser ikke datoen den dag den skal blive aktiveret..først dagen efter... altså idag skulle der have været en nyhed, men den er ikke kommet.. så har jeg lige oprettet en der skulle starte igår, og det virker fint
Avatar billede jakobdo Ekspert
21. december 2005 - 22:38 #31
Det forstår jeg ikke lige! :o(
Må lige tænke!
Avatar billede kimox Nybegynder
21. december 2005 - 23:07 #32
okay doki :/.. det må have noget med >=  el. =< eller noget :)
Avatar billede kimox Nybegynder
21. december 2005 - 23:55 #33
Kan man evt. ikke minus "dag" med 1 ? så den kommer en dag bagud, dvs. så vil den komme til at passe :D
Avatar billede jakobdo Ekspert
22. december 2005 - 08:09 #34
Ret:
startdato < NOW()
til:
startdato <= NOW()
Avatar billede kimox Nybegynder
22. december 2005 - 09:13 #35
Det virkede perfekt.. hmm jeg tænkte på .. hvis man nu skriver 00 i antal dage.. kan man så ikke lave den til at den skal vise den ALTID så den ikke udløber.. skal det være en ny query ?
Avatar billede jakobdo Ekspert
22. december 2005 - 09:19 #36
WHERE
    (startdato < NOW()
AND
    DATE_ADD(startdato, INTERVAL +antal DAY) >= NOW())
OR
antal == 0
Avatar billede jakobdo Ekspert
22. december 2005 - 09:20 #37
Det skal være: antal = 0
Avatar billede kimox Nybegynder
22. december 2005 - 11:22 #38
det virker perfekt..

jeg siger tusind tak for hjælpen.

God jul til dig.

-lukket-
Avatar billede jakobdo Ekspert
22. december 2005 - 11:23 #39
Og god jul til dig også! :o)
Avatar billede kimox Nybegynder
22. december 2005 - 11:24 #40
lige en hurtig ting .. ved denne:
SELECT
    *,
    DATEDIFF(NOW(),DATE_ADD(startdato, INTERVAL +antal DAY)) AS antalDageTilbage
FROM
    nyheder
WHERE
    startdato < NOW()
AND
    DATE_ADD(startdato, INTERVAL +antal DAY) >= NOW()


skal jeg bare kalde "antaldageTilbage" ud på denne måde: $antaldageTilbage

?
Avatar billede jakobdo Ekspert
22. december 2005 - 11:35 #41
Du skal jo lave udtræk med
$query = mysql_query("SELECT
    *,
    DATEDIFF(NOW(),DATE_ADD(startdato, INTERVAL +antal DAY)) AS antalDageTilbage
FROM
    nyheder
WHERE
    startdato < NOW()
AND
    DATE_ADD(startdato, INTERVAL +antal DAY) >= NOW()");
$row = mysql_fetch_assoc($query)
og så:
echo $row['antaldageTilbage'];
Avatar billede kimox Nybegynder
22. december 2005 - 11:37 #42
yes fino. takker igen :)
Avatar billede kimox Nybegynder
22. december 2005 - 11:51 #43
nå helt virker det ikke. jeg opretter lige en ny tråd :)
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