08. maj 2009 - 08:30Der er
20 kommentarer og 2 løsninger
Udøfr handling automatisk på dato ?
Hej alle
Jeg sidder og roder med at få lavet et script som kan udføre nogle ting i db og sende en mail til brugeren. Dette skal bruges i forbindelse når man opretter brugere til systemet bliver der tastet en dato som udløbs dato for denne bruger.
Eks.
Navn: John doe Bruger navn : Joe Password: ******* Udløb: 19-06-2009 12.00
På dato for udløb vil jeg have gerne have den køre et bestemt script og går i DB laver ændringer for denne bruger.
Spørgsmålet er så hvordan får jeg den til at "auto submite" den pågælende dag.
Dit forslag kræver at der er nogen der ser på siden. Hvis det er det der er sagen så er det fint at lave noget der kører den dag.
MEN - ud fra dit eksempel kan jeg se at det er en udløbs dato, du kan eks. lave et script der tester [Hvis dagsdato > udløbsdato] men lad os nu lege at vi har 2000 personer i databasen og du kører det script i body onload så bruger du ca 0.5-1 sek hvergang (og det anbefales at normal tid til at loade en website er ca 1 sek så dvs. du ikke har noget load tid tilbage til grafik osv. + det er lidt overdrevet belastning af databasen (Især hvis du har 2000 brugere til systemet)
Programmer som cronjob udfører noget X gange om dagen. dvs. istedet for at belaste databasen hvergang nogen logger ind for at checke om der er noet der er udløbet så belaster du den eks 3 gange om dagen.
Som jeg gætter det ud fra din kode har du sikkert allerede opdaget at du i ASP ikke automatisk kan udføre handlinger - der skal være noget til at trigge handlingen.
En mulighed som du er inde på med din kode så vil det være en bruger/besøgende der udfører handlingen (bevidst eller ubevidst) men det vil være uhensigtsmæssigt uanset hvordan man end vender og drejer det - enten er der så få besøgende at man ikke kan være sikker på at koden trigges når den skal eller også er der nok besøgende men til gengæld belaster man alle med dette usynlige kald.
Den bedste mulighed er at have et job kørende - enten via en computers scheduled task, nogle webhoteller understøtter faktisk dette, eller ved at benytte en 3. part fx cronjob.de. Gør man dette er det bare at have én asp-side, der tjekker databasen og udsender eventuelle mails.
Jeg vil da lige starte med at sige dette her skal bruges til mit CMS system hvor man som adminstrator opretter bruger til den. Så der vil ikke blive tale om 2000 brugere da dette er backend.;)
#Som jeg gætter det ud fra din kode har du sikkert allerede opdaget at du i ASP ikke automatisk Man kan udføre funktioner udfra dato f.eks
If Month(Date) = 3 Then Response.Write "<p>Nu er det forår!</p>" Else Response.Write "<p>Jeg ved ikke hvilken årstid det er!</p>" End If
Jeg kunne klart lave det sådan det blev tjekket når brugeren logger på,jeg vil hellere have det så brugerens password bliver ændre per auto ud fra den givende dato i db.
Jeg vil kikke på cron job men vil dog vente og se om der skulle komme andre forslag til dette her :)
Alternativt kan du jo lave [Hvis dagsdato >= udløbsdato] på den enkelte bruger men ud far din beskrivelse så virkede det som om du ville teste på en masse posts.
Prøver lige igen, jeg har et cms system hvor jeg kan oprette en bruger, jeg giver så denne bruger en udløbs dato som bliver gemt i DB sammen med password og info.
Jeg vil så at når datoen rammer og jeg sidder i Frankrig og hygger skal systemet udføre den handling automatisk ud fra udløbsdato.
#magic-mouse Jeg er klar over funktionen [Hvis dagsdato >= udløbsdato] problemet er at få den til at udføre det automatisk?
Som sagt kunne jeg lave tjek når bruger logger på men ville da lige høre om ikke det var muligt at lave, det burde det være hehe.
korrekt - du kan udføre ting ud fra bestemte datoer, variabler eller andet men det sker jo bare uden videre, der skal være "noget" til at trigge at koden køres, fx besøg fra en bruger. Det er det jeg mener med at det ikke sker automatisk. Når brugerne så ligger i databasen er du nødt til at forespørge i databasen før du ved om dit ASP skal eksekvere noget og det er hele denne operation der ville gøre det unødigt uhensigtsmæssigt.
Hvis vi ser bort fra det uhensigtsmæssige og vi forestiller os at du sidder i Frankring er du med dit forslag tvunget til at andre besøger siden med trigger-koden på - da du ikke kan være sikker på at det sker er du ude i at det er en opgave for en planlagt opgave på en "server".
Nu kommer jeg jo ikke med nogen foreslag men kun ideer til hvordan man kunne gøre, en tinf er "fantasi" en anden virklighed :)
Du må have mig undskyldt jeg ser ikke det uhensigtsmæssige at jeg f.eks opretter dig som bruger fordi du arbejder for mig, dit login udløber så imorgen jeg tager til Frankrig i aften, der sker så noget så du ikke logger på i morgen men i stedet om en uge.
Hvad er det uhensigtsmæssige i at der tjekkes i DB når bruger logger på?
Jeg er skam klar over der ikke er noget som sker automatisk, men det laver jo ikke om på der findes så mange forskellige måde at gøre ting på derfor forspørger jeg her :)
alt unødvendig eksekvering af kode er uhensigtsmæssigt - i dit tilfælde ligger det dog på et relativt lille niveau da det ikke drejer sig om et særlig stort antal brugere og, vigtigst af alt, så er det indforståede og ikke tilfældige brugere og det sker i backend.
Forestil dig et system med et meget stort antal brugere og stor aktivitet og systemet automatisk skulle sende disse mails - pga antallet af brugere ville der skulle sendes mails ud så godt som hver dag og med den store aktivitet så er det jo fint ikke at være afhængig af fx en 3. part til eksekvering. Til gengæld ville hver eneste bruger skulle generes med tjekket også selvom der allerede var afsendt mails for i dag, systemet, specielt databasen, ville belastes ved unødigt mange kald og vedkommende der rammer det uheldige tidspunkt ville foruden selve kaldet skulle vente på at et måske stort antal mails skulle afsendes inden login.
Som sagt - i dit nuværende setup vil dette ikke være et issue og du kan derfor fint lægge tjekket og opdateringen sammen med fx login-proceduren (i hvert fald så længe du kan leve med at mailen ikke nødvendigvis sendes præcis samme dag men bare ved næst forekommende login). Det jeg dog ikke helt forstår er hvorfor du vil blande javascript ind i det - hvorfor ikke bare dit database-opslag, en if-sætning og hvis den er opfyldt så sendes mail?
"Iøvrigt ville brugeren ikke skulle bruge en trigger kode, jeg kunne jo bare lave så nå hvilken som helst logger på tjekkes serom datoen overholdes"
Klart, vi har ikke noget ønske om at brugeren skal klikke på fx trigger.asp, det skal ske usynligt - men dette er jo også netop en trigger.
Men som skrevet - har du ikke logins hver dag vil du uden en scheduled task ikke kunne sende mails hver dag. Kan du leve med at der kun udsendes mails triggered af et login/besøg så er din tilgang fin.
1): Srcipt som kører automatisk Cronjob/hjemme programmeret på egen server.
Pro's: Kører altid Uanset workload og den virker som den skal med minimal server belastning. Cons: Koster penge /kræver en stabil hjemme server og skal sættes op.
2): Check når brugeren logger ind.
Pro's: Meget lav server belastning. Sikker på at brugeren er aktiv/inaktiv når det er. Con's: Sender ikke e-mails ud når den udløber, man ved først kontoen er lukket når den er lukket.
3): Global check ved indlog.
Pro's: Billig simpel løsning. Con's: Meget højt server load. Kræver at der er min ét indlog hver dag. Bruger resourcer forkert sted ved indlog.
De er også sat op efter hvad der er bedst.
ps. ikke for at være idiot, men cms system er dobbelt konstatering da s'et i cms står for system (content management system system) ...
ang mulighed 1 som MM lister op så mener jeg bestemt at cronjob.de er gratis og jeg stødte engang også på en lignende engelsk udbyder med samme pris. Flere webhoteller kører som sagt også med muligheden for at oprette jobs gennem et kontrolpanel.
jeg har faktisk købt JoomlaCMS i tilknytning til mit webhotel, det et ved at skulle flyttes derfor ikke gider en mailadresse - men lige en tilbagemelding på joomla?
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.