/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Dato formatering
Fra : Lars Axberg


Dato : 30-08-03 08:41

Hej NG

Jeg har på en af mine sider, et kalender/program modul, som finder det næste
som sker fra en MySql DB. Nu har jeg et problem at den vil ikke gøre det!
Koden ser således ud, event_time er skrevet som d-m-y h:i, dvs. for næste
aktivitet er event_time: 05-09-2003 20:00

$dato_nu = date ("d-m-Y h:i"); //finder tid og dato nu
$sql = "select * from event where event_time >= '$dato_nu'"; //finder de
entries i db'en som sker enten i dag eller senere
open_db();
$resultat = ask_db($sql);
close_db();

extract($resultat[0]); // trækker den første aktivitet ud- det er også denne
linje jeg får fejlmeddelse på! :

Warning: extract() expects first argument to be an array in
/xxxxx/xxxx/xxxx/httpd.www/start.php on line 158

Dette blev lidt kludret, men håber der er nogen der forstår og som kan
hjælpe !

Mvh

Lars Axberg




 
 
Jacob Atzen (30-08-2003)
Kommentar
Fra : Jacob Atzen


Dato : 30-08-03 09:09

"Lars Axberg" <axberg@ofir.dk> writes:

> extract($resultat[0]); // trækker den første aktivitet ud- det er
> også denne linje jeg får fejlmeddelse på! :

Du bruger første element fra arrayet $resultat som parameter til extract.

> Warning: extract() expects first argument to be an array in
> /xxxxx/xxxx/xxxx/httpd.www/start.php on line 158

Første element fra $resultat skal være et array. Eller skal du måske:

extract($resultat);

Er det PHPs egen extract funktion du bruger?

--
Med venlig hilsen
- Jacob Atzen

Lars Axberg (30-08-2003)
Kommentar
Fra : Lars Axberg


Dato : 30-08-03 11:33


"Jacob Atzen" <jacob@aub.dk> wrote in message
news:87he3zy3cw.fsf@morpheus.aub.dk...
> Du bruger første element fra arrayet $resultat som parameter til extract.
>
> > Warning: extract() expects first argument to be an array in
> > /xxxxx/xxxx/xxxx/httpd.www/start.php on line 158
>
> Første element fra $resultat skal være et array. Eller skal du måske:
>
> extract($resultat);

prøvede det, gav samme fejlmeddelelse ... tror evt. fejlen ligger i måden
datoen blir håndteret på

> Er det PHPs egen extract funktion du bruger?

jepp

Mvh

Lars



Martin Sveegaard (30-08-2003)
Kommentar
Fra : Martin Sveegaard


Dato : 30-08-03 11:45

On Sat, 30 Aug 2003 09:41:07 +0200, "Lars Axberg" <axberg@ofir.dk>
wrote:
<snip>
>$dato_nu = date ("d-m-Y h:i"); //finder tid og dato nu
>$sql = "select * from event where event_time >= '$dato_nu'"; //finder de
>entries i db'en som sker enten i dag eller senere
>open_db();
>$resultat = ask_db($sql);
>close_db();
>
>extract($resultat[0]); // trækker den første aktivitet ud- det er også denne
>linje jeg får fejlmeddelse på! :
>
>Warning: extract() expects first argument to be an array in
>/xxxxx/xxxx/xxxx/httpd.www/start.php on line 158
<snip>

Jeg synes det er svært at sige hvad der går galt uden at kende
funktionen: ask_db(). Men dit datoformat ser ikke særligt
hensigtsmæssigt ud.
--
Med Venlig Hilsen
c",) Martin S

Johan Holst Nielsen (30-08-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 30-08-03 12:28

Lars Axberg wrote:

> Hej NG
>
> Jeg har på en af mine sider, et kalender/program modul, som finder det næste
> som sker fra en MySql DB. Nu har jeg et problem at den vil ikke gøre det!
> Koden ser således ud, event_time er skrevet som d-m-y h:i, dvs. for næste
> aktivitet er event_time: 05-09-2003 20:00
>
> $dato_nu = date ("d-m-Y h:i"); //finder tid og dato nu
> $sql = "select * from event where event_time >= '$dato_nu'"; //finder de

Er din event_time et datetime felt?

Så fald skal du lave $date_nu om til date("Y-m-d H:i:s");

Desuden tag et tjek på MySQL dateformat funktion som giver dig
muligheden for f.eks. kun hente tiden ud eller for den sags skyld kun
hente datoen ;)

mvh
Johan


Anders K. Madsen (30-08-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 30-08-03 12:59

On Sat, 30 Aug 2003 13:28:00 +0200
Johan Holst Nielsen <johan@weknowthewayout.com> wrote:

> Lars Axberg wrote:
>
> > Hej NG
> >
> > Jeg har på en af mine sider, et kalender/program modul, som finder det
> > næste som sker fra en MySql DB. Nu har jeg et problem at den vil ikke gøre
> > det! Koden ser således ud, event_time er skrevet som d-m-y h:i, dvs. for
> > næste aktivitet er event_time: 05-09-2003 20:00
> >
> > $dato_nu = date ("d-m-Y h:i"); //finder tid og dato nu
> > $sql = "select * from event where event_time >= '$dato_nu'"; //finder de
>
> Er din event_time et datetime felt?
>
> Så fald skal du lave $date_nu om til date("Y-m-d H:i:s");
>
> Desuden tag et tjek på MySQL dateformat funktion som giver dig
> muligheden for f.eks. kun hente tiden ud eller for den sags skyld kun
> hente datoen ;)
>

Desuden en:
var_dump($resultat);
være praktisk, så du kan se hvilken type $resultat er og hvad den indeholder,
når den nu ikke er et array.

Mvh.
   Madsen

--
* Anders K. Madsen * http://lillesvin.linux.dk *
* madsen@sjovedyr.dk * Linux, Ruby, PHP and SQL *

Martin Sveegaard (30-08-2003)
Kommentar
Fra : Martin Sveegaard


Dato : 30-08-03 13:00

On Sat, 30 Aug 2003 09:41:07 +0200, "Lars Axberg" <axberg@ofir.dk>
wrote:
<snip>
>$dato_nu = date ("d-m-Y h:i"); //finder tid og dato nu
>$sql = "select * from event where event_time >= '$dato_nu'"; //finder de
<snip>

Kunne du ikke bruge MySQL's egen tid:
$sql = "select * from event where event_time >= NOW()";
--
Med Venlig Hilsen
c",) Martin S

Morten Winkler Jørge~ (01-09-2003)
Kommentar
Fra : Morten Winkler Jørge~


Dato : 01-09-03 10:23

Hej.

> $dato_nu = date ("d-m-Y h:i"); //finder tid og dato nu
> $sql = "select * from event where event_time >= '$dato_nu'"; //finder de

Jeg ville holde mig helt til UNIX timestamp og have en passende integertype
op feltet i din database.

Så er det søgbart, sorterbart og formaterbart vha. date().

Morten

Jacob Atzen (01-09-2003)
Kommentar
Fra : Jacob Atzen


Dato : 01-09-03 10:20

Morten Winkler Jørgensen <mwj@INGEN_SPAM_TIL_MIG.mip.sdu.dk> writes:

> > $dato_nu = date ("d-m-Y h:i"); //finder tid og dato nu
> > $sql = "select * from event where event_time >= '$dato_nu'"; //finder de
>
> Jeg ville holde mig helt til UNIX timestamp og have en passende integertype
> op feltet i din database.

Du ville ikke bruge MySQL's indbyggede datotype fordi?

--
Med venlig hilsen
Jacob Atzen

Tom Sommer (01-09-2003)
Kommentar
Fra : Tom Sommer


Dato : 01-09-03 10:39

Jacob Atzen skrev (01-09-2003 11:20):

> Morten Winkler Jørgensen <mwj@INGEN_SPAM_TIL_MIG.mip.sdu.dk> writes:
>
>>Jeg ville holde mig helt til UNIX timestamp og have en passende integertype
>>op feltet i din database.
>
> Du ville ikke bruge MySQL's indbyggede datotype fordi?

Fordi Mortens metode på alle måder er den korrekte og nemmeste at benytte

--
Tom Sommer
www.tsn.dk - www.dreamcoder.dk


Jacob Atzen (01-09-2003)
Kommentar
Fra : Jacob Atzen


Dato : 01-09-03 10:43

Tom Sommer <webmaster@tsn.dk> writes:

> Jacob Atzen skrev (01-09-2003 11:20):
>
> > Morten Winkler Jørgensen <mwj@INGEN_SPAM_TIL_MIG.mip.sdu.dk> writes:
> >
> >> Jeg ville holde mig helt til UNIX timestamp og have en passende
> >> integertype op feltet i din database.
> > Du ville ikke bruge MySQL's indbyggede datotype fordi?
>
> Fordi Mortens metode på alle måder er den korrekte og nemmeste at benytte

Der kan man bare se.

--
Med venlig hilsen
Jacob Atzen

Morten Winkler Jørge~ (01-09-2003)
Kommentar
Fra : Morten Winkler Jørge~


Dato : 01-09-03 12:06


>> Du ville ikke bruge MySQL's indbyggede datotype fordi?
>
> Fordi Mortens metode på alle måder er den korrekte og nemmeste at benytte
>
Det er jeg da glad for at du er enig med mig i. Men hvorfor mener du det?

Morten

Tom Sommer (01-09-2003)
Kommentar
Fra : Tom Sommer


Dato : 01-09-03 12:41

Morten Winkler Jørgensen skrev (01-09-2003 13:05):

>>>Du ville ikke bruge MySQL's indbyggede datotype fordi?
>>
>>Fordi Mortens metode på alle måder er den korrekte og nemmeste at benytte
>>
> Det er jeg da glad for at du er enig med mig i. Men hvorfor mener du det?

Fordi jeg er af erfaring er kommet til den samme konklusion som dig, har
prøvet med diverse metoder. MySQL TIMESTAMP, MySQL DATE og
UNIX_TIMESTAMP(), dato som tekststreng osv.


--
Tom Sommer
www.tsn.dk - www.dreamcoder.dk


Morten Winkler Jørge~ (01-09-2003)
Kommentar
Fra : Morten Winkler Jørge~


Dato : 01-09-03 12:05

Jacob Atzen wrote:


>> Jeg ville holde mig helt til UNIX timestamp og have en passende
>> integertype op feltet i din database.
>
> Du ville ikke bruge MySQL's indbyggede datotype fordi?
>

Hovedsageligt fordi jeg ikke rigtigt kender til den (hvilket der
selvfølgelig kunne rådes bod på) og så fordi jeg er stok konservativ.

Men: Den eneste fordel jeg kan se ved at bruge MySQL's indbyggede datotype
er at det er til at se umiddelbart hvad en kolonne faktisk indeholder. Hvis
man skal editere kolonnens felter i hånden skal man passe meget på ikke at
formatere det forkert. Elles skal man alligevel bruge et UNIX timestamp for
at sikre sig at formatteringen er korrekt, ikke sandt?

Så for at undgå forvirring mht. formattering vil jeg holde mit til en
passende integer og UNIX timestamp.

Men lad mig vende den om :)

Du ville ikke bruge UNIX's indbyggede datotype fordi?

Jacob Atzen (01-09-2003)
Kommentar
Fra : Jacob Atzen


Dato : 01-09-03 12:37

Morten Winkler Jørgensen <mwj@INGEN_SPAM_TIL_MIG.mip.sdu.dk> writes:

> Hovedsageligt fordi jeg ikke rigtigt kender til den (hvilket der
> selvfølgelig kunne rådes bod på) og så fordi jeg er stok konservativ.

Ja, dokumentationen er heldigvis tilgængelig

> Men: Den eneste fordel jeg kan se ved at bruge MySQL's indbyggede
> datotype er at det er til at se umiddelbart hvad en kolonne faktisk
> indeholder.

Hvilket i sig selv kan være rart.

> Hvis man skal editere kolonnens felter i hånden skal man passe
> meget på ikke at formatere det forkert. Elles skal man alligevel
> bruge et UNIX timestamp for at sikre sig at formatteringen er
> korrekt, ikke sandt?

Jeg er ikke helt sikker på jeg forstår, hvad du mener her. I begge
tilfælde skal du sørge for at formatet er korrekt ja.

> Så for at undgå forvirring mht. formattering vil jeg holde mit til en
> passende integer og UNIX timestamp.

Det er dit valg.

> Men lad mig vende den om :)
>
> Du ville ikke bruge UNIX's indbyggede datotype fordi?

Sakset fra <http://www.mysql.com/doc/en/Date_and_time_functions.html>:

SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) -
TO_DAYS(date_col) <= 30;

Eller generelt: Hvis jeg bruger MySQLs indbyggede dato funktioner
sparer jeg en del arbejde med at lave noget tilsvarende i PHP. Dermed
ikke sagt, at man kan alt med MySQL, men det gør det alt andet lige
noget hurtigere at få arbejdet gjort.

Et modargument kan være, at dette ikke er kan bruges på tværs af
RDBMSer.

Desuden så løber unix timestamps over real-soon-now(tm)

--
Med venlig hilsen
Jacob Atzen

Morten Winkler Jørge~ (01-09-2003)
Kommentar
Fra : Morten Winkler Jørge~


Dato : 01-09-03 13:08

> SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) -
> TO_DAYS(date_col) <= 30;

Hvis den statement vælger alle something der er yngre end 30 dage synte jeg
lige så godt om :

$q = "SELECT something FROM tbl_name WHERE ".time()." - date_col <=
".(86400*30)"

> Eller generelt: Hvis jeg bruger MySQLs indbyggede dato funktioner
> sparer jeg en del arbejde med at lave noget tilsvarende i PHP.
> Dermed ikke sagt, at man kan alt med MySQL, men det gør det alt andet lige
> noget hurtigere at få arbejdet gjort.

Det er jeg nu ikke så sikker på hvis ovenstående er et generelt udtryk for
gevinsten. Med de indbyggede datotyper bliver det bare pakket en ekstra
gang ind.

> Et modargument kan være, at dette ikke er kan bruges på tværs af
> RDBMSer.

Nej, men det er vist de færreste der har brug for andet end MySQL under PHP,
men tilgengæld er jeg ikke gode venner med udviddelser til/afvigelser fra
standarder så set i det lys er det et knald godt argument at holde sig til
UNIX timestamp og dermend standard SQL/92.

> Desuden så løber unix timestamps over real-soon-now(tm)

Ja. Mmmm. :D

Uanset hvad, håber jeg at Lars Axberg har opdaget at der er lige så mange
meninge og løsninge på hans spørgsmål som han spørger folk, og det kun er
ham selv der kan afgøre hvad han syntes der er rigtigt. For vi kan sikkert
blive enige om at vi begge kan løse opgaven på hver vores måde.

Jeg glæder mig til at høre at han syntes bedst om min tilgangsvinkel og
selvfølgelig valgte den

Morten,
der bedst kan lige lange heltal.

Jesper Brunholm (01-09-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 01-09-03 10:43

Morten Winkler Jørgensen wrote:

> Jeg ville holde mig helt til UNIX timestamp og have en passende integertype
> op feltet i din database.
>
> Så er det søgbart, sorterbart og formaterbart vha. date().

kender du mysql's UNIX_TIMESTAMP?

Eksempel:
Du har kolonnen 'Event' med mysql-format date i tabellen.

i query'en skriver du SELECT UNIX_TIMESTAMP(Event)

og vupti - får du et UNIX-timestamp ud til brug i PHP...

/Jesper Brunholm

--
Phønix - dansk folk-musik i front - <http://www.phonixfolk.dk/>
H.C. Andersen-Centret: <http://www.andersen.sdu.dk/>
Vi har killinger på Garion.dk: <http://garion.dk/>


Søg
Reklame
Statistik
Spørgsmål : 177502
Tips : 31968
Nyheder : 719565
Indlæg : 6408531
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste