Avatar billede cozey Nybegynder
14. januar 2010 - 18:05 Der er 10 kommentarer

søger meget enkel kalender-agtig funktion.

Hej Eksperter.

Jeg har en database fyldt med forskellig brugerdata.
Nu kunne jeg så godt tænke mig at jeg kunne sætte en dato ud for hver bruger, hvor denne udløber og skal fornyes. Der skal egentlig ikke ske noget når tiden udløber udover at den skal rette feltet "Aktiv" i databasen fra ja til nej, og selvfølgelig tilbage til ja når jeg har skrevet en ny slutdato ind.

Derudover vil jeg gerne have en funktion ud for hver bruger hvor den viser antal dage indtil den skal fornyes.

Nogen der har en idé til hvordan denne funktion lettest laves?

På forhånd tak.

DBH
Daniel
Avatar billede DGudiksen Nybegynder
14. januar 2010 - 19:15 #1
Jeg vil tro den letteste måde at gøre det på er at bruge ctime, hvis du ved hvad det er, også kaldet date(u).

date(u) er en funktion der viser sekunder siden UNIX, altså den 1 januar 1970.

Så det du kan gøre er at når en bruger opretter sig eller hvad den gør, så skal den skrive date(u) ind i din database f.eks i et felt sommer hedder ctime_created.

Så laver du også et felt som hedder ctime_end, og der skal du så have ctime for hvornår brugeren udløber.
- Dette kan fås ved at regne det i sekunder, 1time er f.eks 3600sek.

Så laver du bare en if, der tjekker om der er nogle af dine brugeres ctime_end der er større end den nuværende ctime, hvis der er det skal den deaktivere den.

hvis du vil have vist dagen skal du bare igang med at regne.

Håber du kunne bruge noget at det jeg har sagt, ellers må du sige til.

Mvh.
Avatar billede cozey Nybegynder
14. januar 2010 - 19:39 #2
>>>>DGudiksen

tak for dit svar. jeg har dog valgt at gå lidt en anden vej.

Jeg har taget udgangspunkt i PHPs dato-funktion date('d/m-Y') - og tilsvarende lavet tre felter i min database til "D", "M" og "Y".

Mit spørgsmål er dog så bare nu hvordan jeg får den til at sige hvor mange dage der er tilbage inden den indtastede dato.
Den skal på en eller anden måde først se om der er forskel på årstalle, derefter om der er forskel på måneden og til sidst dagen... og hvis der er forskelle skal den jo vide hvor mange dage det er.

men det betyder jo så også at den skal vide hvor mange dage der er i de forskellige måneder... Med mindre jeg vælger at lade den sige:

Der er 2 år, 1 måned og 16 dage tilbage.

Dette er egentlig fint nok, men kan ikke lige se hvordan det laves på den letteste måde.

Nogen ideer?

På forhånd tak.
Avatar billede DGudiksen Nybegynder
14. januar 2010 - 21:19 #3
Derfor det skal laves i en ctime / date(u), som jeg nævnte i mit tidligere svar.

PHP har ingen funktion til at regne det ud, og det bliver en lang slave kode at få lavet, hvis du vil gøre det på den måde som du siger der, det bliver rigtig mange if's.

Tænk lidt over det og vend tilbage, jeg kan godt hjælpe dig med at lave et script som fungere med ctime.

Mvh.
Avatar billede intenz Novice
14. januar 2010 - 23:37 #4
Der er ingen grund til du skal opfinde den dybe tallerken igen, det kommer du kun i problemer med.

Brug som der blive nævnt unix timestamp:
http://php.net/manual/en/function.time.php

Eller brug mysql's egne DATE eller DATETIME felter.
Avatar billede intenz Novice
14. januar 2010 - 23:39 #5
Du kan også kigge på mktime, hvor du kan lave unix timestamp ud fra en dato:
http://dk2.php.net/manual/en/function.mktime.php
Avatar billede coderdk Praktikant
15. januar 2010 - 05:05 #6
Du kunne også bare bruge DATETIME i MySQL ;P Der er funktioner i MySQL som DATE_ADD, DATE_SUB og DATE_DIFF ;)
Avatar billede cozey Nybegynder
15. januar 2010 - 21:24 #7
Okay, jeg har lyttet til rådene, og har fundet et script jeg har rettet lidt i. Det er følgende:

-----------------------------------------------------------
<?php
// Set den dato der tælles ned til (år, måned, dag, time, minutter)
taelned(2010,6,19,00,00);

function taelned($aar, $maaned, $dag, $time, $minutter)
{
$taelned_dato = mktime($time, $minutter, 0, $maaned, $dag, $aar, -1);
// Hent den korekte dato
$i_dag = time();
$difference = $taelned_dato - $i_dag;
if ($difference < 0) $difference = 0;

$dage_tilbage = floor($difference/60/60/24);
$timer_tilbage = floor(($difference - $dage_tilbage*60*60*24)/60/60);
$minutter_tilbage = floor(($difference - $dage_tilbage*60*60*24 - $timer_tilbage*60*60)/60);

/* Sæt datoformat til dansk */
setlocale(LC_ALL, 'da_DK.ISO_8859-1');

// Hvis $dage_tilbage er = 0 skrives gøres der opmærksom på udløb
if ($dage_tilbage == 0) {
    $udlob = "kontrakten er udløbet og skal fornys";
    $farve = "CA0000";
    $s_farve = "FFFFFF";
} else {
// Og ellers fortæller vi hvor lang tid der er igen
    $udlob = "Der er ".$dage_tilbage." dage tilbage af kontraktperioden ";
    $farve = "F6F43C";
    $s_farve = "000000";
}
} ?>

---------------------------------------------------------

Men nu giver den følgende fejl:

Fatal error: Call to undefined function taelned() in /usr/home/web/web329930/cityview.dk/search.php on line 282

Nogen der har en idé om hvad fejlen er??... jeg ved godt at i ikke kan se linie 282... måske fejlen ligger i noget af min øvrige kode?
Avatar billede intenz Novice
15. januar 2010 - 23:05 #8
Fejlen er "Call to undefined function taelned". Dvs. at du i linje 282 prøver at kalde funktionen taelned(); men den funktion er ikke defineret i search.php.

På dansk betyder det, at funktionen taelned (som du har skrevet koden til ovenfor) ikke er en del af filen search.php Du mangler højst sandsynligt at inkludere den fil hvor taelned funktion er i.
Avatar billede cozey Nybegynder
15. januar 2010 - 23:21 #9
intenz>>>
Tak for svaret, jeg ved stadig ikke helt hvad problemet var (manglede ikke at inkludere noget). Men løs det på en anden måde.

Jeg brugte følgende løsning:

<?php

$target = mktime(0, 0, 0, $row['udlob_maaned'], $row['udlob_dag'], $row['udlob_year']) ;

$today = time () ;

$difference =($target-$today) ;

$days =(int) ($difference/86400) ;

if ($days < 0) $days = 0;

// Hvis $dage_tilbage er = 0 skrives gøres der opmærksom på udløb
if ($days == 0) {
    $udlob = "kontrakten er udløbet og skal hurtigst muligt forlænges!";
    $farve = "CA0000";
    $s_farve = "FFFFFF";
} else {
// Og ellers fortæller vi hvor lang tid der er igen
    $udlob = "Der er $days dage tilbage af kontraktperioden ";
    $farve = "F6F43C";
    $s_farve = "000000";
}
?>


Tusind tak for hjælpen alle sammen.

DGudiksen, det var trods alt dig der bragte mig ind på sporet, så smid et svar og endnu engang tak.
Avatar billede intenz Novice
15. januar 2010 - 23:59 #10
Hvis du fik den fejl skyldes det, at du prøvede at kalde en funktionen der ikke eksisterede. Sådan er det.

Men fint du fik det til at virke.
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

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