webForumDet fria alternativet

Förfallodatum

12 svar · 509 visningar · startad av leancuisine

leancuisineMedlem sedan jan. 2002160 inlägg
#1

Kanske något att bita i? Eller enkelt?

Jag håller på med en annonsmarknad där användaren väljer att annonsen är giltig i 5, 10 eller 15 dagar och sedan "förfaller" den, dvs raderas och ska inte finnas med mer.

Måste erkänna att jag inte alls kommer på något bra sätt att tackla det här.

Jag ser två delproblem,

det mindre enklare är:
Kan man lagra dagens datum (publiceirngsdatum) plus t ex 10 dagar? Finns det någon bra funktion för det? Vad händer om det är den 25 i månaden. Måste man skriva en egen funktion som kollar hur många dagar månaden har (28, 30 eller 31) och sedan:

Om dagens datum plus 10 är större än 31 och månadstyp är månad_med_31dagar SÄTT förfallodatum till 10-(31-dagensdatum)

annars om månadtyp är 30dagar then osv

Finns det någon fin lösning för den här typen av situation, dvs att "plussa på" ett visst antal dagar från dagens datum?

Det andra problemet är att jag vet inte riktigt hur man ska se till att annonser med passerat "bäst före" datum ska rensas ut. Det vore ju elegant om man inte måste exekvera ett skript "för hand" varje dygn (under förutssättning också att sajten finns på webbhotel, så att man inte kan lägga in instruktioner till systemet att varje dygn köra skriptet). Utan om det finns inbyggt i grundkonceptet.

Tja vad säger ni om det här?

KimMedlem sedan jan. 20007 697 inlägg
#2

Använd Unix timestamp där du får en tidsstämpel i antalet sekunder sen 1 januari 1970.
Den aktuella tiden får du fram genom PHP-funktionen time().
För att ta fram tiden för 10 dagar framåt, oavsett om du har gått över ett månadsskifte så får du tiden genom så här

$newtime = time()+3600*24*10;

Svårare än så är det faktiskt inte.

leancuisineMedlem sedan jan. 2002160 inlägg
#3

Suveränt! Tack Kim...

Nu är jag nyfiken om någon har några fina uppslag på hur man elegant och smidigt sköter utrensning av "gammalt mög"... :)

KimMedlem sedan jan. 20007 697 inlägg
#4

Gör en PHP-fil som söker igenom databasen och som sen inaktiverar alternativt tar bort poster som är för gamla. Den här PHP-filen vill du köra t.ex. varje natt och det gör du lättast med crontab. Här är en tråd som tar upp lite kring ämnet. På så sätt kan du tidsstyra körningen så att det där scriptet körs exempelvis varje dygn klockan 00:00. :)

leancuisineMedlem sedan jan. 2002160 inlägg
#5

Tack igen!

Tja, crontab verkar logiskt och förnuftigt. Men jag är inte säker på att jag kommer att lägga webbplatsen på ett serverutrymme som ger mig sådana rättigheter hux-flux...

En tanke som jag lekt med är om man på något sätt kunde ha en flagga (true, false) och att vid den första queryn mot databasen som görs varje gång systemklockan passerar 00:00 så utförs utrensningen och flaggan ställs på true (eller false beroende på utgångsläget). Det skulle då innebära att varje query innefattar ett anrop till utrensningsfunktionen, men alla utom den första varje dygn ser bara blixtsnabt att flaggan är satt på true och hoppar direkt vidare... Den första queryn utlöser utrensingsfunktionen...

Kanske är detta en virrig idé. Vad säger ni? Är det lönt att fundera vidare i sådana banor? Eller är jag helt ute och cyklar? Några förslag?

KimMedlem sedan jan. 20007 697 inlägg
#6

Självklart är det en idé som kommer fungera, men jag tror inte att den är särskilt bra ändå.
Till detta behöver du t.ex. en extra databastabell som kollar vilket datum som kontrollen kördes senast. Annars kommer ju flaggan vara satt till true varenda dag. Vid detta fall så måste en extra query göras för att kolla om koden har körts den aktuella dagen. I längden tar ju detta lite extra tid. ;)

nkrantzMedlem sedan apr. 2002830 inlägg
#7

Gör bara så att du så fort någon går in på sidan exekverar en liten funktion som söker igenom databasen å sätter de äldre annonserna till inactive... På så sätt kommer de äldre annonserna inte att visas...

leancuisineMedlem sedan jan. 2002160 inlägg
#8

nkrantz. Ja, jag har funderat på det du föreslår, fast att den raderar gamla annonser... men tänkt att det skulle bli för resurskrävande och "stånkande" med en sådan query varje gång någon skickar en begäran till servern.

Å andra sidan kanske inte, egentligen så är det ju inte mer "omständligt" än en sökning på något annat kriterium. Det är mest att det vid första anblick känns ovant att tänka så, för i praktiken blir det ju bara för den första besökaren varje dygn som "radera gamla"-queryn gör någon skillnad, även om alla besökare alltid initierar en sådan query.

Jag tror jag ska testa det. Om det visar sig att sajten blir för "trög", så får jag hitta på något annat, men troligtvis funkar det nog ganska fint...

nkrantzMedlem sedan apr. 2002830 inlägg
#9

men varför inte bara göra så att du sorterar ut annonserna då du skall visa dem, dvs om de är äldre än säg 10 dagar så visar du den bara inte... Då kan ju fortfarande den som har skapat annonsen gå in och uppdatera den...
Eller så gör du som mitt första alternativ, fast du har en tabell i databasen som för varje besökare räknar upp sig, å om räknaren är delbar med ex 100 så kör du querien som rensar ut i databasen... Då blir det slött för en besökare av hundra...

leancuisineMedlem sedan jan. 2002160 inlägg
#10

Det är en massa bra idéer som du väcker. Verkligen smart tänkt. Det där med var 100:e besökare var mycket bra.

Det enda jag är osäker på är att du verkar gilla tanken på att "desarmera", eller göra inaktiva, de annonser som passerar sitt bäst före datum, medan jag vill radera. Mitt skäl är att det känns som att det på relativt kort tid kan växa och bli en gigantisk stor "skuggdatabas" där den övervägande delen av innehållet är gamla annonser som inte visas. Det ska helst vara underhållsfritt.

Ett annat skäl till varför jag lutar mer åt "radera" hållet är att jag vill hålla tröskeln låg för användaren. Man ska inte behöva registrera sig och ha en användaridentitet vilket ibland kan kännas som ett större åtagande, utan man fyller bara i sin annons och publicerar den. Vill man fortsätta annonsera efter 15 dagar sätter man in en likadan annons igen.

GunnarDMedlem sedan juni 20014 290 inlägg
#11

* Bara en idé *

Att söka igenom och ta bort records i en databas går fort, så det borde inte vara något problem att göra det när någon går in på sidan. Det är en av fördelarna med en "riktig" databas istället för att använda filer.

Du kan ju lägga den funktionen på en ingångssida, den körs ju inte så ofta som sökningsidan (om du har delat up sidorna så).

nkrantzMedlem sedan apr. 2002830 inlägg
#12

Det enda jag är osäker på är att du verkar gilla tanken på att "desarmera", eller göra inaktiva...

:e Japp, jag gillar den tanken! Anledningen till att jag tycker att det är smartare är att du då alltid har koll på vad det har funnits för annonser i databasen, du kan kolla upp hur många annonser som en viss mailadress har lagt in, å dessutom ha koll så att ingen använder sig av ditt system för sina egna eventuella perversa behov... hm.. eller nåt ;)

Dessutom så kan du ju faktiskt göra så att du när antalet recods är uppe i säg, jämt delbart med 10.000 för exporterar allt å sedan tömmer de som har varit avaktiverade...

Finns många sätt att lösa saker å ting på, men jag har av egen erfarenhet valt att alltid använda mig av ett active fält i databasen, då klarar man sig från jobbiga kunder som vill att man skall återskapa en databas för att de råkat radera fel post...

// Nippe

leancuisineMedlem sedan jan. 2002160 inlägg
#13

Tack för alla fina råd och idéer, jag har en del fina uppslag nu jämfört emd att ha varit blank i huvudet innan.

"Einfach super, geil!" skulle jag sagt om jag hade mustasch och hockeyfrilla och kom från Tyskland...

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)