Avatar billede lightdesigner Nybegynder
04. januar 2007 - 12:08 Der er 10 kommentarer

hent fra og med idag

Hej eksperter

Jeg har et lille problem som jeg ikke lige kan regne ud.
Jeg skal lave en liste over spille job for en musiker men den skal ikke hente jobs som er før idag.
min kode indtil nu er:

$sql = mysql_query("SELECT * FROM tour ORDER by DAG asc");
              echo "<h3>Tour Dates</h3><br><br>";
        $strNumber = 0;
            while($row = mysql_fetch_array($sql)) {
        $strNumber = $strNumber+1;
              echo "<tr>
              <td width='300'><h2><a OnClick=\"href='$row[VENUE]'\" style=\"cursor:hand\">$row[DAG]</a></h2><h1>$row[HP]</h1></td>
              </tr>";
            }
men den henter jo dem alle...
nogen der kan hjælpe???????

\lightdesigner
Avatar billede radion Nybegynder
04. januar 2007 - 12:10 #1
hvilket format er din DAG i?

du sorterer bare efter dag, du skal bruge en "WHERE" - sætning

men, jeg skal lige vide hvordan du gemmer dine dage, hvilket format er de i databasen, så kan vi lave en whereclause ud fra det
Avatar billede radion Nybegynder
04. januar 2007 - 12:12 #2
du kan i øvrigt læse mere om "where" her:

http://www.w3schools.com/sql/sql_where.asp
Avatar billede lightdesigner Nybegynder
04. januar 2007 - 12:15 #3
jeg har sat den til at være vachar fordi jeg gerne vil have den udskrevet fx. 22. dec 2007
Avatar billede lightdesigner Nybegynder
04. januar 2007 - 13:22 #4
men ellers ændre jeg den bare til det der er nemmest. evt DATE
Avatar billede aeroone Nybegynder
04. januar 2007 - 18:31 #5
Det nemmeste er hvis du gemmer din dag i tal form, det er ikke nemt at sortere på streng værdier, hvis din dag f.eks. er gemt i en varchar, men i time() format, så har du et tal du kan sortere på, så skal du bare have en WHERE større end idag
Avatar billede radion Nybegynder
05. januar 2007 - 00:44 #6
enig med aeroone, alle mine datoer gemmes også i time() formatet, så kan du selv manipulere det med date() funktionen

fx vil en sql sætning se således ud

mysql_query("SELECT * FROM tour WHERE dag>=".mktime(0, 0, 0, date("m"),date("d"),date("Y"))." ORDER by DAG asc");


mktime() generer et unix tidspunkt ( antal sekunder siden 1. januar 1970 ) ud fra en given dato, så i ovenstående betyder sætningen

mktime(0, 0, 0, date("m"),date("d"),date("Y"))

altså

"hvor man mange sekunder er der gået fra 1.1.1970 til kl. 0:0:0 denne dag, denne måned, dette år"

læs evt. mere om de enkelte funktioner på

Time - generer hvor mange sekunder der er gået fra 1.1.1970 til NU
http://www.php.net/time

MkTime - generer hvor mange sekunder der er gået fra 1.1.1970 til et givent tidspunkt
http://www.php.net/mktime

Date - laver time() formater om til menneskevenlige datoformater
http://www.php.net/date
Avatar billede aeroone Nybegynder
05. januar 2007 - 15:34 #7
Jeg tror nu ikke at det er nødvendigt at lave 'mktime(0, 0, 0, date("m"),date("d"),date("Y"))' det er jo bare at sige time() hence det er tiden lige nu

Hvis man leger lidt med tanken, man har et job d. 22 dec. 2007 kl. 18.00, kommer hjem kl. 23.00, og vil lige tjekke hvilke jobs, der er i fremtiden, vil den jo hvis du laver den ovenstående query også vise det job du lige har udført
Avatar billede lightdesigner Nybegynder
05. januar 2007 - 17:02 #8
det gør ikke noget at den viser jobbet samme dag som det er udført bare den ikke viser et fra dagen før

men det virker stadig ikke men det er nok mig der ikke helt fatter det så jeg ligge lige koden op igen med de ændringer jeg har lavet og en dump fra min sql...

<?
$tid = time();
$year = date(Y,$tid);
$month = date(m, $tid);
$day = date(d,$tid);

include("stylesheet.php");
include("access.php");
$sql = mysql_query("SELECT * FROM tour WHERE DAG>=".mktime(0, 0, 0, date("y"),date("m"),date("d"))." ORDER by DAG asc");
              echo "<h3>Tour Dates $day-$month/$year</h3><br><br>";
        $strNumber = 0;
            while($row = mysql_fetch_array($sql)) {
        $strNumber = $strNumber+1;
              echo "<tr>
              <td width='300'><h2><a OnClick=\"href='$row[VENUE]'\" style=\"cursor:hand\">$row[DAG]</a></h2><h1>$row[HP]</h1></td>
              </tr>";
            }
?>

mysql dump
CREATE TABLE `tour` (
  `ID` int(5) NOT NULL auto_increment,
  `VENUE` varchar(60) NOT NULL,
  `CITY` varchar(30) NOT NULL,
  `HP` varchar(40) NOT NULL,
  `KLOK` time NOT NULL,
  `DAG` time NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

og en af rækkerne

INSERT INTO `tour` VALUES (3, 'kroen', 'FREDERIKSHAVN', 'www.kroen.dk', '21:00:00', '00:20:07');
Avatar billede aeroone Nybegynder
05. januar 2007 - 18:04 #9
hmm, hvor for du 'time' fra i din MySQL db ?? 'KLOK' (den behøver du ikke) og 'DAG' felterne i db'en skal være varchar, men det du skal sætte ind i dem er time() (sek. talt fra 01/01-1970 og indtil nu) f.eks idag kl. 17:54:10 det giver med en time() 1168016046, altså sek. siden 01/01-1970 (du kan selv tælle efter). det tal gemmer du i db'en, prøv at lave en fil hvor du echo'er time(), så kan du se det.
Det er nok også et problem at der bruges " i hele query'en prøv
$sql = mysql_query("SELECT * FROM tour WHERE DAG>=" . mktime(0, 0, 0, date('y'),date('m'),date('d')) . " ORDER by DAG asc");
istedet
Hvis du sletter 'KLOK' fra din db, og så gemmer time() værdien i 'DAG' så kan du med date funktionen henta alle de info du vil f.eks

date ("m/d-Y", $DAG) <- her får du f.eks 22/12-2007

date ("H:i:s", $DAG) <- her får du f.eks 17:54:10

prøv at lege lidt med time(), og date(), der er mange informationer, hvis du kigger på php.net, søg efter time eller date
Avatar billede aeroone Nybegynder
05. januar 2007 - 18:43 #10
hovsa der er vist en lille fejl
mktime(0, 0, 0, date('y'),date('m'),date('d'))
skal være
mktime(0, 0, 0, date('m'),date('d'),date('y'))
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