24. januar 2008 - 10:07Der er
34 kommentarer og 1 løsning
Udløbsdato?
Hej.
Jeg har lavet et lille event system. Når man tilføjer et event, så er det muligt at tilføje en "start dato" og en "slutdato" i form af felterne:
startdato: day, month, year slutdato: endday, endmonth, endyear
Når jeg så skal vise eventene, så har jeg skrevet følgende:
$q = mysql_query("SELECT * FROM events ORDER BY id DESC") or die(mysql_error());
while($s = mysql_fetch_array($q)) {
echo $s[event];
.. Hvordan skal jeg lave det sådan, at den kun viser de events der IKKE er udløbet? Altså hvordan tester jeg om slutdatoen er overskredet slutdatoen? Det kan vel gøres i mysql-stringen?
Som sagt er det disse felterne i databasen jeg har, og det ser således ud:
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hvordan vil du så have jeg skal lave det? Når jeg tilføjer datoerne, så gør jeg det jo i 6 forskellige variabler, skal det kun være to ? Eller mener du bare at jeg skal gemme day, month, year, endday, endmonth, endyear i et felt i databasen som er datetime istedet for varchar?
De skal i hvertfald slet ikke gemmes som varhar! Hvis du vælger at gemme dem i 6 forskellige felter så skal det være integer felter du bruger. Varchar er beregnet til tekst - ikke til tal.
Jeg anbefaler dog at du gemmer dem som 2 datatime-felter - et til start- og et til slutdatoen.
Når du indsætter en dato i databasen skal du gemem den i formatet yyyy-mm-dd. Dette ser vel nogenlunde sådan her ud:
PhpMyAdmin er uvurderlig når du selv skal arbejde med databasen. Uden dette ville du skulle lave små progammer hver gang at du f.eks. ville oprette en ny tabel eller tilføje data.
... og så er den altså god til at afprøve SQL kommandoer før at de bliver pakket ind i en masse kode ... og måske viser sig ikke at gøre det man troede alligevel.
Det burde virke. Så lad os nu forsøge med den model indtil at vi er sikker på at jeg tager fejl og det ikke virker. ;^)
Hvis du ikke forstod hvordan PhpMyAdmin virker så må du da fortælle det i stedet for at jeg skal spørge. Det er et uhyre vigtigt værktøj til stort set alt hvad der har med databasen at gøre, så jo før du lære det at kende jo bedre.
1) Start phpMyAdmin, og log på hvis du bliver bedt om det. 2) I venstre side skulle du gerne få en liste over alle dine databaser - formentlig 1 i alt. 3) Klik på databasen. 4) Ude i venstre side burde du nu kunne se de tabeller der er i databasen - du burde kunne se 'events'. 5) Klik på events-tabellen. 6) Oppe i toppen er der nu nogle forskellige menupunkter:
(o) Browse : så kan du se de data der er i tabellen. (o) Structure : så kan du se hvordan de enkelte felter er defineret. Her kan du også lave om på dette. (o) SQL : det er her at du kan afprøve SQL kommandoen. Indtast den i det store felt, og tryk så på 'Go' knappen.
Der er flere muligheder end dem, men det er de tre vigtigste.
Din SQL-forespørgsel blev udført korrekt (Forepørgsel tog 0.0004 sek)SQL-forespørgsel:SELECT * FROM EVENTS WHERE CURDATE( ) BETWEEN startdate AND enddate ORDER BY id DESC
$q = mysql_query("SELECT * FROM events WHERE CURDATE() BETWEEN startdate AND enddate ORDER BY id DESC") or die(mysql_error()); while($s = mysql_fetch_array($q)) { ?>
$q = mysql_query("SELECT * FROM events WHERE CURDATE() BETWEEN startdate AND enddate ORDER BY id DESC") or die(mysql_error()); while($s = mysql_fetch_array($q)) { ?>
Og så lige en anden ting, det kan umuligt være din indexfil du du viser, for på dit link dannes der en tabel hvilket jo intet har med den kode ud viser.
som opfylder at d.d. (dvs. datoen 13/02-2008 den gang og 22/02-2008 her nu idag) skulle ligge mellem start- og slutdatoen. Det skete for en kort periode de. 17/2 indtil 18/2 da din 1. række opfyldte kriterierne, og det vil ske igen til december når den 2. række vil opfylde dem i døgnet fra 27/12 til 28/12.
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.