Avatar billede Slettet bruger
09. november 2010 - 15:28 Der er 14 kommentarer

Automatisk frigive opgaver efter 2 timer.

Hejsa,
jeg sidder med en meget stor hjernevrider.... håber i klogehoveder kan hjælpe mig...

Det drejer sig om et system jeg er igang med, hvor en "bruger" accepterer en opgave i mit system. Hver gang en bruger accepterer en opgave, sætter jeg timestamp i databasen med accepteret-tidspunktet.

Her skaljeg så lave et cronjob, som fortæller, at hvis brugeren IKKE har færdiggjort en opgave indenfor 2 timer, skal den udskrive "Brugeren har ikke lavet opgaven indenfor 2 timer", så kan jeg selv tage den videre der fra.

Jeg mangler en brugbar løsning til dette, da jeg selv har forsøgt, men forgæves.

Min tabel hedder "accepteret", som har disse felter:
id
tester_id
opgave_id
accepteret
accepteret_tidspunkt
done

tester_id er f.eks 12
opgave_id er f.eks 14
accepteret er enten 0 eller 1, 1 = ja og 0 = nej
accepteret_tidspunkt er f.eks 1232394 (time())
done  er enten 0 eller 1. 0 = ikke lavet, 1 = lavet.

Hvad kan jeg gøre for den bedste løsning? Tak.
Avatar billede mcb2001 Nybegynder
09. november 2010 - 15:53 #1
Du skal så have et "program" der kører hele tiden (eller hvert 10. minut) som kontroller status for opgaver.
Avatar billede Slettet bruger
09. november 2010 - 15:57 #2
Ja, det jeg godt klar over:)

Mit spørgsmål er HVORDAN det laves rent programmeringsmæssigt.

Hvordan skal tabellen opsættes og sættes op og kan i evt. hjælpe mig igang med et stykke kode?
Avatar billede mcb2001 Nybegynder
09. november 2010 - 16:09 #3
Du kunne jo lave en hjemmeside, hvor du bruger META-REFRESH (google kan hjælpe dig hurtigere end nogen anden her) og på denne hjemmeside henter du bare data ud.

Når du så sidder ved din computer og kigger på hjemmesiden, så opdaterer den sig selv løbende, og giver dig den nyeste information.
Avatar billede Slettet bruger
09. november 2010 - 16:12 #4
Tror bare du skal lade være med at svare på dette indlæg, det lyder ærligt talt ikke som om du har en anelse forstand på programmering.

Jeg afventer hjælp fra andre eksperter.

Ja, men undskyld mig, men hvad har metarefresh noget som helst at gøre med at køre et php cron script og du svarer ikke engang på det jeg egentligt spørger om i mit indlæg.
Avatar billede mcb2001 Nybegynder
09. november 2010 - 16:28 #5
<?PHP

//MySQL connection
$conn = hent mysql connection;

//Tiden minus to timer
$tid = Date("U") - 60*60*2;

$query = "SELECT * FROM `accepteret` WHERE `accepteret_tidspunkt` > `".$tid."`";

$result_set = mysql_query($query) or die(mysql_error());

if(mysql_num_rows($result_set) == 0)
{
//Der er ingen opgaver - gør noget
}
else
{
$result = mysql_fetch_array($result_set);
$id = $result['id'];
print "Bruger ".$id." har ikke lavet hvad han skulle";
}

?>

Dette gemmer du så i et script.php og sætter CRON (på din linux) til at køre dette hvert 10. minut.
Avatar billede mcb2001 Nybegynder
09. november 2010 - 16:28 #6
$result_set = mysql_query($query) or die(mysql_error());

skulle være

$result_set = mysql_query($query, $conn) or die(mysql_error());
Avatar billede Slettet bruger
09. november 2010 - 16:32 #7
Ok, det var bedre - jeg forsøger senere :) tak så længe
Avatar billede Slettet bruger
09. november 2010 - 17:12 #8
Men $tid = Date("U") - 60*60*2; ændres vel hver gang der cronjobbes, så vil det vel ikke passe helt korrekt, elle?
Avatar billede Slettet bruger
09. november 2010 - 17:22 #9
Noget er forkert, fordi min kode jf.( http://pastebin.com/dhRyrCW2 ) udskriver følgende:

Tester: 1 har accepteret opgaven d. 09-11/2010 16:28:42, men har ikke lavet testen indenfor 2 timer (09-11/2010 15:19:37)

Der er ikke 2 timer i mellem. Og hver gang man opdaterer siden, bliver der jo "resettet" de 2 timer, så den vil aldrig nogensinde virke efter min mening.

Nogen gode idéer?
Avatar billede Slettet bruger
09. november 2010 - 17:25 #10
Linjen:

$openDB = $this->getQuery('SELECT `tester_id`, `opgave_id`, `accepteret_tidspunkt` FROM `'.$this->unix_db.'_accepteret` WHERE `accepteret` = 1 AND `done` != 1 AND `accepteret_tidspunkt` > '.$this->twoHours);

Skal vel sige "acceptering"tidspunktet - 2 timer?

Men hvordan får jeg sat det i min query, da den jo først laver mysql_fetch_assoc() nedenunder?

$this->twoHours skal vel være "accepteret_tidspunkt" fra databasen + eller - 2 timer, for det virker? Har jeg ret? I såfald, som nævnt overstående: Hvordan putter jeg det i min query da jeg først kan udtrække accepteret_tidspunkt når jeg har kørt mysql_fetch_Assoc() ?
Avatar billede Slettet bruger
09. november 2010 - 18:00 #11
Metarefresh i en browser er en udemærket måde at få kørt et script på serveren.
(Specielt når du nævner at det kun er dig som har brug for at "tage den videre")

Din ubehøvlede afvisning (#4) er totalt uacceptabel.

At mcb2001 gad hjælpe dig yderligere er et lille mirakel = ikke noget du skal regne med fremover.

Du skylder en stor fed undskyldning - Før dén falder er du blacklistet!
- og måske endda efter... møgunge.
Avatar billede showsource Seniormester
09. november 2010 - 22:30 #12
Hvor mange brugernavne mon du har oprettet ?
Avatar billede mcb2001 Nybegynder
10. november 2010 - 09:29 #13
Jeg har hjulpet dig en hel del nu. Og at du stadig er ubehøvlet synes jeg bare er groft.

Du skal vide at jeg har anmeldt dit til moderatorerne og bedt dem deltage i dette spørgsmål, da det er en uacceptabel måde at opføre sig på.

Jeg betragter for mit vedkommende spørgsmålet lukket.
Avatar billede repox Seniormester
10. november 2010 - 15:04 #14
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