/ 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
PHP-script ændrer to værdier i MySQL, men ~
Fra : Flemming Joensson


Dato : 14-08-02 22:36

Jeg har skrevet et meget simpelt tracker script, men er stødt på
et problem når jeg opdaterer databasen.
Indtil videre gør det stort set ikke andet end at tælle én variabel
op sætte én timestamp værdi til den nuværende.

Problemet er at jeg har to TIMESTAMP(14) værdier i den samme tabel,
firstvisit og lastvisit.
Uanset hvad så bliver de begge opdateret selvom jeg kun skriver
lastvisit='date(YmdHis)' i updatequerien (se koden nedenstående).
Hvordan hulen kan det være?

Hvis jeg copy-paster min PHP linje over i PHPMyAdmin 2.7 og retter
date(YmdHis) til dens tilsvarende værdi, så er der ingen problemer -
så opdateres kun lastvisit værdien, og count som det var hensigten.

Ved i hvorfor PHP opdaterer både firstvisit og lastvisit?

Min kode ser således ud:

$result = mysql_query("SELECT ipaddress FROM visitor where ipaddress
LIKE '".getip()."'");

if (mysql_num_rows ($result) == 1)
{
mysql_query ("UPDATE visitor SET lastvisit='".date(YmdHis)."',count=count+1 WHERE ipaddress ='".getip()."'");    
mysql_close($connection);
} else {
//IP not in database
mysql_query ("INSERT INTO visitor (ipaddress,hostname,browser,firstvisit, lastvisit) VALUES('".getip()."','".gethostbyaddr(getip())."','".$_SERVER['HTTP_USER_AGENT']."','".date(YmdHis)."','".date(YmdHis)."' )");
mysql_close($connection);
}

 
 
Kim Schulz (14-08-2002)
Kommentar
Fra : Kim Schulz


Dato : 14-08-02 22:40

On Wed, 14 Aug 2002 21:36:28 +0000 (UTC)
Flemming Joensson <joensson@fjerndette.cs.auc.dk> wrote:
> Jeg har skrevet et meget simpelt tracker script, men er stødt på
> et problem når jeg opdaterer databasen.
> Indtil videre gør det stort set ikke andet end at tælle én variabel
> op sætte én timestamp værdi til den nuværende.
>
> Problemet er at jeg har to TIMESTAMP(14) værdier i den samme tabel,
> firstvisit og lastvisit.
[snip]

uden at være 100% sikker så mener jeg at TIMESTAMP er en aktiv konstant
der opdaterer sig hver gang du ændrer i din "post" (række i tabellen).
DVS. at du i virkeligheden slet ikke kan bruge timestamp her, men i
stedet skal bruge en varchar(14) da dine timestamps altid vil være ens.


--
Kim Schulz - Freelance Development | "Pok pok pok, P'kok!" --
www.schulz.dk - En nørds bekendelser | Superchicken
www.linuxia.dk - hverdagens små hacks |

Flemming Joensson (14-08-2002)
Kommentar
Fra : Flemming Joensson


Dato : 14-08-02 22:46

Kim Schulz <kim@schulz.dk> wrote in
news:20020814233956.3d76e9bd.kim@schulz.dk:

>>
>> Problemet er at jeg har to TIMESTAMP(14) værdier i den samme
>> tabel, firstvisit og lastvisit.
> [snip]
>
> uden at være 100% sikker så mener jeg at TIMESTAMP er en aktiv
> konstant der opdaterer sig hver gang du ændrer i din "post" (række
> i tabellen). DVS. at du i virkeligheden slet ikke kan bruge
> timestamp her, men i stedet skal bruge en varchar(14) da dine
> timestamps altid vil være ens.

Ahhh - nu fandt jeg det i dokumentationen.
Der står at som du siger så vil en TIMESTAMP sætte sig til nuværende
værdi, med mindre man aktivt angiver at den skal sættes til noget
andet.
Det vil sige at jeg faktisk skal angive firstvisit værdien i stedet for
lastvisit og slet ikke angive lastvisit idet den alligevel får den
nuværende værdi.

Heh - man kan stirre sig blind på mange måder - dette var blot endnu en
af dem. (havde læst siden med TIMESTAMP i MySQL dokumentationen to
gange uden at opdage / tænke over at det var det som skete)

Flemming

Kim Schulz (14-08-2002)
Kommentar
Fra : Kim Schulz


Dato : 14-08-02 22:49

On Wed, 14 Aug 2002 21:46:19 +0000 (UTC)
Flemming Joensson <joensson@fjerndette.cs.auc.dk> wrote:
[snip]
> Ahhh - nu fandt jeg det i dokumentationen.
> Der står at som du siger så vil en TIMESTAMP sætte sig til nuværende
> værdi, med mindre man aktivt angiver at den skal sættes til noget
> andet.
> Det vil sige at jeg faktisk skal angive firstvisit værdien i stedet
> for lastvisit og slet ikke angive lastvisit idet den alligevel får den
>
> nuværende værdi.
>
> Heh - man kan stirre sig blind på mange måder - dette var blot endnu
> en af dem. (havde læst siden med TIMESTAMP i MySQL dokumentationen to
> gange uden at opdage / tænke over at det var det som skete)

der er jo ikke noget i vejen for at du smider dit "timestamp" i en
varchar(14) i stedet. PHP har det alligevel liggende som en streng i
begge tilfælde.

--
Kim Schulz - Freelance Development | It is not best to swap horses
www.schulz.dk - En nørds bekendelser | while crossing the river. --
www.linuxia.dk - hverdagens små hacks | Abraham Lincoln

Tinky Winky (14-08-2002)
Kommentar
Fra : Tinky Winky


Dato : 14-08-02 23:35

> Jeg har skrevet et meget simpelt tracker script, men er stødt på
> et problem når jeg opdaterer databasen.
> Indtil videre gør det stort set ikke andet end at tælle én variabel
> op sætte én timestamp værdi til den nuværende.
>
> Problemet er at jeg har to TIMESTAMP(14) værdier i den samme tabel,
> firstvisit og lastvisit.

Jeg bruger altid INT typer til timestamp værdier. Nok ikke "det rigtige",
men det virker. Det jeg godt kan lide ved timestamps er at de er nemme at
arbejde med, så jeg er ikke interesseret i at bakse med tids/dato database
typer.



Jesper Brunholm (15-08-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 15-08-02 07:54

Tinky Winky wrote:
>>Jeg har skrevet et meget simpelt tracker script, men er stødt på
>>et problem når jeg opdaterer databasen.
>>Indtil videre gør det stort set ikke andet end at tælle én variabel
>>op sætte én timestamp værdi til den nuværende.
>>
>>Problemet er at jeg har to TIMESTAMP(14) værdier i den samme tabel,
>>firstvisit og lastvisit.

citat fra <>
"The TIMESTAMP column type provides a type that you can use to
automatically mark INSERT or UPDATE operations with the current date and
time. If you have multiple TIMESTAMP columns, only the first one is
updated automatically."

> Jeg bruger altid INT typer til timestamp værdier. Nok ikke "det rigtige",
> men det virker. Det jeg godt kan lide ved timestamps er at de er nemme at
> arbejde med, så jeg er ikke interesseret i at bakse med tids/dato database
> typer.

(undskyld) <ironi> nej - hvorfor dog bakse med alle de date/time
funktioner MySQL har når man kan blive fri?? </ironi>

Seriøst: min frontend-programmering er blevet meget lettere efter at jeg
er begyndt at bruge timestamps og mysql-funktionerne. Hvis du vil være
dobbeltgarderet imod at den ændrer på "dine" data kan du dog (som Per
allerede har skrevet d.d. 8:06) bruge datetime i stedet for timestamp.

mvh

Jesper Brunholm

--
Phønix - dansk folk-musik fra unge musikere - http://www.phonixfolk.dk


Jesper Brunholm (15-08-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 15-08-02 07:55

Jesper Brunholm wrote:
> citat fra <>

ups!
<http://www.mysql.com/doc/en/DATETIME.html>

/Jesper Brunholm

--
Phønix - dansk folk-musik fra unge musikere - http://www.phonixfolk.dk


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

Månedens bedste
Årets bedste
Sidste års bedste