webForumDet fria alternativet

Aktivera artikel inom tidsram?

PHP

10 svar · 416 visningar · startad av streetrobban

Medlem sedan jan. 20011 140 inlägg
Frågan#1

Hejsan,

Jag gör ett artikelscript där man ska kunna välja att en artikel kan vara aktiv mellan två datum, date_start och date_stop. Men vart ska man lägga en funktion som kollar om artiklar är aktiva eller inte, och aktiverar/avaktiverar vid behov. Och hur kan en sådan funktion se ut?

Tack på förhand.

Medlem sedan dec. 20025 483 inlägg
#2

Är inte det bästa att direkt i SQL-frågan välja ut de artiklar som faller inom tidsramen?

Medlem sedan jan. 20011 140 inlägg
#3

Hmm det kanske är bäst. Då måste man ju kolla så att dagens datum är äldre än date_start och yngre än date_stop.

$get = mysql_query("SELECT * FROM articles WHERE date_start < $date && date_stop > $date");

Kan det funka?

Medlem sedan dec. 20025 483 inlägg
#4

Helt klart. Däremot kanske AND är att föredra framför &&.

Sedan kan man fundera på om samtliga artiklar skall omfattas av en tidsram. Vissa kanske alltid är giltiga, vissa kanske har startdatum men inte slutdatum o.s.v. Skulle så vara fallet kan NULL sparas som värde för datumkolumnerna och SQL-frågan får modiferas en aning.

Medlem sedan dec. 20014 239 inlägg
#5

Har samma sak mot en Accessdatabas som fungerar..

Där ser SQL satsen ut:

"SELECT * FROM Nyhet WHERE NMain = TRUE AND publDatum <= #"  &  datum &"# AND endDatum > #" & datum & "# ORDER BY publDatum DESC"

/r
Så vid inmatning måste båda datumena sättas i databasen för att det ska fungera.

Medlem sedan jan. 20011 140 inlägg
#6

Tack för era svar!

Jag testade detta, och det funkade:

$get = mysql_query("SELECT * FROM articles WHERE date_start < $date AND date_stop > $date || date_start = '$date' || date_stop = '$date'");

Det stämmer dock som du skriver Peter, vissa artiklar kanske inte har något slutdatum. Men hur menar du att man ska ändra på SQL-frågan då?

Medlem sedan dec. 20025 483 inlägg
#7

Typ så här:

select *
  from articles a
 where (a.date_start is null and a.date_stop is null)   -- ingen tidsram
    or (a.date_start is null and $date <= a.date_stop)  -- giltig t.o.m. ett visst datum
    or ($date >= a.date_start and a.date_stop is null)  -- giltig fr.o.m. ett visst datum
    or ($date >= a.date_start and $date <= a.date_stop) -- giltig inom en viss tidsram
Medlem sedan jan. 20011 140 inlägg
#8

När jag använder den SQL-frågan så skrivs ingenting ut :(

Medlem sedan dec. 20025 483 inlägg
#9

Du kanske måste ha apostrofer kring $date. Vad blir resultatet om du skriver ut frågan?

Medlem sedan jan. 20011 140 inlägg
#10

Du kanske måste ha apostrofer kring $date.

Där hade vi svaret :) Tack för era svar. Nu ska jag lägga till lite artiklar och se hur det funkar några dagar framöver :)

Medlem sedan dec. 20025 483 inlägg
#11

(y)

262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)