Avatar billede Slettet bruger
04. januar 2011 - 18:01 Der er 12 kommentarer og
1 løsning

Vis side alt efter dato og kl

Jeg skal have lavet et script hvor en side bliver vist på en måde det ene tidspunkt og på en anden tidspunkt bliver det vist anderledes.

Helt hvordan det bliver gjort nemmest og bedst det ved jeg ikke.
Men jeg har en lille ide.

Jeg har lavet en database med [id][datotid][runde][oc]
OC = open/close

Planen er så at en ny runde starter Mandag kl 12.

Fra Mandag kl 12 til torsdag kl 12 skal man kunne se en ting.
Fra torsdag kl 12.00 til mandag kl 12 skal man kunne se en anden ting. Altså først åben og så lukket,

Dage og kl kan variere derfor har jeg lavet databasen som jeg har. Så kan man selv rette tid i tidspunkterne.
Og det skal selvf være dansk tid.

Hvis vi siger databasen ser sådan ud:
[1] [10-01-2011 12:00:00] [o] [1]
[1] [13-01-2011 12:00:00] [c] [1]
[1] [17-01-2011 12:00:00] [o] [2]
[1] [20-01-2011 12:00:00] [c] [2]


Det betyder at vi fra den 10-01-2011 skal se den åbne side
den 13-01-2011 skal vi så se den lukket side
siden skal så åbnes igen den 17-01-2011 osv...

Siden skal sådan set være den samme. via noget "if system" skal den vises på forskellige måder.

Vil stadig gerne have at man i toppe fx når man er imellem den 10 og den 13 kan læse:
Runde 1 er lukket fra den 13-01-2011 kl 12:00
Og imellem den 13 og 17 skal der så stå.
Runde 2 starter 17-01-2011 kl 12:00

Hvordan gør det nemmest?
Skal man bygge databasen op anderledes eller hvad synes i?
04. januar 2011 - 20:39 #1
Jeg vil foreslaa en database struktur hvor du for hver periode, aaben eller lukket, viser start og slut tidspunktet.  For eksempel saaledes:

start                slut                status runde
10-10-2011 12:00:00  13-01-2011 12:00:00 o      1
13-01-2011 12:00:00  17-01-2011 12:00:00 c      1

Det giver lidt mere data i tabellen, men dine querys bliver langt simplere fordi du simpelthen kan soege efter status og runde BETWEEN start AND slut.

Her er lidt pseudo-kode:

<?
$now = date("d-m-Y H:i:s");//datoen og tidspunktet i dette oejeblik

//soeg efter de relevante data i dette oejeblik
$result = mysql_query("SELECT start, slut, status, runde FROM Ronder WHERE '$now' BETWEEN start AND end");

//udtraekke variable fra soege-resultatet
$start = mysql_result($result, 0, 0);
$slut = mysql_result($result, 0, 1);
$status = mysql_result($result, 0, 2);
$runde = mysql_result($result, 0, 3);

//skrive det i toppen
if($status == 'o') echo "Runde $runde starter $start";
if($status == 'x') echo "Runde $runde er lukket fra den $start";

//vise indhold alt efter om runden er aaben eller lukket
if($status == 'o') [vis det aabne indhold];
if($status == 'c') [vis det lukkede indhold];
?>

Somme tider laver jeg en test-database og en test-hjemmeside for at afproeve mine forslag.  Det har jeg ikke haft tid til i dette tilfaelde.
Avatar billede Slettet bruger
04. januar 2011 - 23:22 #2
Nu har jeg prøvet.

Men denne del:
$start = mysql_result($result, 0, 0);
$slut = mysql_result($result, 0, 1);
$status = mysql_result($result, 0, 2);
$runde = mysql_result($result, 0, 3);


giver denne fejl:
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 3 in ....test.php on line 11
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 3 in ....test.php on line 12
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 3 in ....test.php on line 13
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 3 in ....test.php on line 14


Den fejl har jeg aldrig set før.
Men har heller ikke set den måde at trække noget ud af en database.

Men jeg ved ikke om det var dumt jeg også lavede en id databasen?
Avatar billede Slettet bruger
05. januar 2011 - 00:25 #3
Uha... Nu virker det vidst.
Har fundet fejlen.
Hvis jeg skriver:

echo "$now<br>";

Så er klokken en time bagud.

Hvordan kan jeg rette det?
Avatar billede Slettet bruger
05. januar 2011 - 02:26 #4
Og så skal jeg have indsat en fejl besked som bliver vist istedet for den fejl kode der kommer frem når der ikke er noget i databasen der passer.

Fx teksten "Der er ikke nogle planlagte runder pt."
05. januar 2011 - 08:52 #5
En time forkert - saa er det nok din timezone der skal indstilles.  Proev at indsaette denne kode:

date_default_timezone_set("Europe/Copenhagen");

Fejlmelding, igen ikke testet men dette skulle virke:

$result = mysql_query("SELECT start, slut, status, runde FROM Ronder WHERE '$now' BETWEEN start AND end") or die(mysql_error('Der er ingen runder planlagt pt'));

Og saa har du "heller ikke set den måde at trække noget ud af en database."  Mener du med mysql_result?  Den kendte jeg heller ikke foer jeg faldt over den i et spoergsmaal jeg besvarede her paa Eksperten.  Jeg sad og kodede 'while($row = mysql_fetch_array($result)){.....} selv om jeg vidste at der kun var en raekke.

Jeg opretter dette som et svar idet jeg haaber at have bidraget til at besvare det stillede spoergsmaal.
Avatar billede Slettet bruger
05. januar 2011 - 10:06 #6
Kan ikke lige få dette til at virke:

$result = mysql_query("SELECT start, slut, status, runde FROM Ronder WHERE '$now' BETWEEN start AND end") or die(mysql_error('Der er ingen runder planlagt pt'));


Det er stadig den samme fejlkode som før.
05. januar 2011 - 10:17 #7
Saa forklar lidt mere.  Hvilke vaerdier har du i tabellen Ronder (som jeg ville have kaldt Runder men lavede en trykfejl)?  Hvis du ingen runder har omkring nuvaerende tidspunkter hvilken fejlmelding faar du saa?
Avatar billede Slettet bruger
05. januar 2011 - 10:28 #8
Når der ikke er nogen runder så får jeg denne fejl:
Har lavet en test hvor jeg ikke har rettet i det du skrev, men bare oprettet en tilsvarende database. Den virker perfekt når der er nogle runder men ikke når der ikke er nogen, så kommer denne fejl:

Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 3 in ....test.php on line 11
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 3 in ....test.php on line 12
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 3 in ....test.php on line 13
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 3 in ....test.php on line 14
05. januar 2011 - 10:44 #9
Aha, det er ikke en mysql fejlmelding fra databasen, det er en php fejlmelding.  Jeg forstaar.

Proev:

//soeg efter de relevante data i dette oejeblik
$result = mysql_query("SELECT start, slut, status, runde FROM Ronder WHERE '$now' BETWEEN start AND end");

if(mysql_num_rows($result) > 0)
{
  //udtraekke variable fra soege-resultatet
  $start = mysql_result($result, 0, 0);
  $slut = mysql_result($result, 0, 1);
  $status = mysql_result($result, 0, 2);
  $runde = mysql_result($result, 0, 3);
}
else echo "Der er ingen runder planlagt pt";

Eller hvis du ikke har brug for en fejlmelding

//soeg efter de relevante data i dette oejeblik
$result = mysql_query("SELECT start, slut, status, runde FROM Ronder WHERE '$now' BETWEEN start AND end");

while($row = mysql_fetch_array($result))
{
  $start = $row['start'];
  $slut = $row['slut'];
  $status = $row['status'];
  $runde = $row['runde'];
}

I dette tilfaelde skulle der ikke komme noget output naar der ikke er runder.
Avatar billede Slettet bruger
05. januar 2011 - 10:50 #10
WEEEEE SÅ VIRKER SKIDTET :P

1000 tak.

Det skal der lige leges lidt med.
Det kan jeg bruge andre steder :)
Avatar billede Slettet bruger
05. januar 2011 - 10:54 #11
Jeg ved ikke om du også kan hjælpe i det andet spørgsmål jeg har opstillet.

Det driller mig rigtigt meget.
Ved ikke lige hvordan man gør det nemmest.
05. januar 2011 - 11:51 #12
Jeg har kikket paa det, men det er mere komplekst.  Men det er et interessant problem som jeg muligvis kikker naermere paa i eftermiddag (hvis du ikke inden da har haft en anden loesning.)
Avatar billede Slettet bruger
05. januar 2011 - 12:12 #13
Jeg tænker over andre måder at gøre det på.
Men kan ikke komme på så mange andre. Så tror ikke du skal regne med at jeg ligefrem har fået problemet løst :P
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