Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ip-adresser

22 views
Skip to first unread message

hans lommeuld

unread,
Nov 10, 2012, 4:48:26 AM11/10/12
to
Følgende virker fint efter hensigten, men hver gang
siden refresh' eller der klikkes på et internt link
gemmes ip-adressen påny, hvilket ikke er hensigten.


Hvad mangler jeg, for at få den til kun at gemme ip-adressen
en gang?

Hilsen

Hans Lommeuld

$con = mysql_connect('localhost','????????','Y!????');
mysql_select_db('XXXXX_XXXXXX_XXXXXX_dk');

$http_client_ip = $_SERVER['HTTP_CLIENT_IP'];
$http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR'];
$remote_addr = $_SERVER['REMOTE_ADDR'];

if (!empty($http_client_ip)){
$ip_adress = $http_client_ip;
}
elseif (!empty($http_x_forwarded_for)){
$ip_adress = $http_x_forwarded_for;
}
else{
$ip_adress = $remote_addr;
}

$sql = "INSERT INTO ip_adresser (ip) VALUES ('$ip_adress')";
$result = mysql_query($sql);

Karl Erik Christensen

unread,
Nov 10, 2012, 8:35:28 AM11/10/12
to
Hvor spørger du om ip-adressen allerede findes i databasen?

Karl Erik.

--
http://dmwebdesign.dk/karlerik/

hans lommeuld

unread,
Nov 10, 2012, 9:01:08 AM11/10/12
to
Den lørdag den 10. november 2012 14.34.49 UTC+1 skrev Karl Erik Christensen:
> Den 10-11-2012 10:48, hans lommeuld skrev:
>
> > F�lgende virker fint efter hensigten, men hver gang
>
> > siden refresh' eller der klikkes p� et internt link
>
> > gemmes ip-adressen p�ny, hvilket ikke er hensigten.
>
> >
>
> >
>
> > Hvad mangler jeg, for at f� den til kun at gemme ip-adressen
>
> > en gang?
>
> >
>
> > Hilsen
>
> >
>
> > Hans Lommeuld
>
> >
>
> > $con = mysql_connect('localhost','????????','Y!????');
>
> > mysql_select_db('XXXXX_XXXXXX_XXXXXX_dk');
>
> >
>
> > $http_client_ip = $_SERVER['HTTP_CLIENT_IP'];
>
> > $http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR'];
>
> > $remote_addr = $_SERVER['REMOTE_ADDR'];
>
> >
>
> > if (!empty($http_client_ip)){
>
> > $ip_adress = $http_client_ip;
>
> > }
>
> > elseif (!empty($http_x_forwarded_for)){
>
> > $ip_adress = $http_x_forwarded_for;
>
> > }
>
> > else{
>
> > $ip_adress = $remote_addr;
>
> > }
>
> >
>
> > $sql = "INSERT INTO ip_adresser (ip) VALUES ('$ip_adress')";
>
> > $result = mysql_query($sql);
>
> >
>
>
>
> Hvor sp�rger du om ip-adressen allerede findes i databasen?
>
>
>
> Karl Erik.
>
>
>
> --
>
> http://dmwebdesign.dk/karlerik/

Det er ikke så meget et spørgsmål om ip-adressen allerede findes i databasen.
Det er snare et spørgsmål om tid.

Kunne man anvende noget date('i');?

Hvis date('i') er > 10 minuter{
indlæs i database;
}

Kunne man anvende noget i den stil?

Hilsen

Hans Lommeuld

Databasen må altså gerne indeholde samme ip-adresse flere gange.

Karl Erik Christensen

unread,
Nov 10, 2012, 10:29:14 AM11/10/12
to
Den 10-11-2012 15:01, hans lommeuld skrev:
>> Hvad mangler jeg, for at f� den til kun at gemme ip-adressen
>> en gang?

Så misforstod jeg det du skrev :-)

Ja tiden er næsten den eneste faktor du kan bruge, hvis der skal gå 10 min.
Gem den i en session variabel når brugeren kommer ind.
Så kan du checke på if (isset($_SESSION['tid']))

hans lommeuld

unread,
Nov 11, 2012, 8:19:01 AM11/11/12
to
Den lørdag den 10. november 2012 16.29.13 UTC+1 skrev Karl Erik Christensen:
> Den 10-11-2012 15:01, hans lommeuld skrev:
>
> >> Hvad mangler jeg, for at f� den til kun at gemme ip-adressen
>
> >> en gang?
>
>
>
> S� misforstod jeg det du skrev :-)
>
>
>
> Ja tiden er n�sten den eneste faktor du kan bruge, hvis der skal g� 10 min.
>
> Gem den i en session variabel n�r brugeren kommer ind.
>
> S� kan du checke p� if (isset($_SESSION['tid']))
>
>
>
> Karl Erik.
>
>
>
> --
>
> http://dmwebdesign.dk/karlerik/

Jeg har forsøgt med følgende uden held:

session_start();
$SESSION['tid'] = date('i');

if(isset($_SESSION['tid'])){
do{
$sql = "INSERT INTO ip_adresser (ip) VALUES ('$ip_adress')";
$result = mysql_query($sql);
break;
}
while ($_SESSION['tid'] > $_SESSION['tid']+10);
}

Birger Sørensen

unread,
Nov 11, 2012, 8:56:47 AM11/11/12
to
hans lommeuld kom med følgende:
session_start();

if (!isset($_SESSION['tid']) || ($_SESION['tid'] < date('i)+10)) {
$sql = "INSERT INTO ip_adresser (ip) VALUES ('$ip_adress')";
$result = mysql_query($sql);
$_SESSION['tid'] = date('i');
}

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
Utils http://sdccms.dk/ordbog/ http://sdccms.dk/mailfriend/
http://bredelund.dk CMS som det var meningen et sådant skulle være


Karl Erik Christensen

unread,
Nov 24, 2012, 1:11:42 AM11/24/12
to
Den 11-11-2012 14:56, Birger Sørensen skrev:
> session_start();
>
> if (!isset($_SESSION['tid']) || ($_SESION['tid'] < date('i)+10)) {
> $sql = "INSERT INTO ip_adresser (ip) VALUES ('$ip_adress')";
> $result = mysql_query($sql);
> $_SESSION['tid'] = date('i');
> }

Jeg tager lige tråden op igen, da jeg i mellemtider er blevet klogere
(hvem skulle tro det var muligt :-) ).

Det kunne være spændende at vide, hvad Hans vil bruge funktionen til.
Er det mon noget med at logge, hvor længe en bruger er aktiv på siden?

Hvis vi antager at det er et stort site med mange besøgende, giver det
en vældig trafik til sql-serveren - med forbrug at tid og båndbredde.

Det kunne måske være bedre at gemme info i en fil i stedet.

Hvis det er en løsning, har jeg et forslag til hvordan :-)

Anders Wegge Keller

unread,
Nov 24, 2012, 4:35:40 AM11/24/12
to
Karl Erik Christensen <no...@none.invalid> writes:

> Den 11-11-2012 14:56, Birger Sørensen skrev:
> > session_start();
> >
> > if (!isset($_SESSION['tid']) || ($_SESION['tid'] < date('i)+10)) {
> > $sql = "INSERT INTO ip_adresser (ip) VALUES ('$ip_adress')";
> > $result = mysql_query($sql);
> > $_SESSION['tid'] = date('i');
> > }
>
> Jeg tager lige tråden op igen, da jeg i mellemtider er blevet klogere
> (hvem skulle tro det var muligt :-) ).
>
> Det kunne være spændende at vide, hvad Hans vil bruge funktionen til.
> Er det mon noget med at logge, hvor længe en bruger er aktiv på siden?
>
> Hvis vi antager at det er et stort site med mange besøgende, giver det
> en vældig trafik til sql-serveren - med forbrug at tid og båndbredde.
>
> Det kunne måske være bedre at gemme info i en fil i stedet.

Hvis omfanget er stort nok til at få en SQL database i knæ, vile den
filbaserede tilgang helt sikkert også fejle. Databaser skalerer noget
bedre end flade tekstfiler.

> Hvis det er en løsning, har jeg et forslag til hvordan :-)



--
/Wegge

Leder efter redundant peering af dk.*,linux.debian.*

Anders Wegge Keller

unread,
Nov 24, 2012, 5:05:28 AM11/24/12
to
Karl Erik Christensen <no...@none.invalid> writes:

> Den 11-11-2012 14:56, Birger Sørensen skrev:
> > session_start();
> >
> > if (!isset($_SESSION['tid']) || ($_SESION['tid'] < date('i)+10)) {
> > $sql = "INSERT INTO ip_adresser (ip) VALUES ('$ip_adress')";
> > $result = mysql_query($sql);
> > $_SESSION['tid'] = date('i');
> > }
>
> Jeg tager lige tråden op igen, da jeg i mellemtider er blevet klogere
> (hvem skulle tro det var muligt :-) ).

Prøv med nogle flere gulerødder :) Det vil hjælpe så meget på synet,
at du undrer dig over hvad date('i') laver der. Et lill hint kunne
være at overveje tidspyunktet for næste opdatering efter et besøg
16:49, 16:55 eller 17:02.

Skulle det overhovedet give mening at trigge noget efter 10 minutter
eller længere tid, er time det oplagte valg:

if (!isset($_SESSION['tid']) || ($_SESION['tid'] < time() - 3600) {
$sql = "INSERT INTO ip_adresser (ip) VALUES ('$ip_adress')";
$result = mysql_query($sql);
$_SESSION['tid'] = time();
}

Læg også mærke til at der skal trækkes fra, hvis sammenligningen ikke
skal være ubetinget sand.

> Hvis vi antager at det er et stort site med mange besøgende, giver det
> en vældig trafik til sql-serveren - med forbrug at tid og båndbredde.
>
> Det kunne måske være bedre at gemme info i en fil i stedet.

En database skalerer væsentligt bedre end en filbaseret
tilgang. Medmindre selvfølgelig man skriver sin egen databaseserver,
men så er php ikke det rigitge valg af programmeringssprog.

Karl Erik Christensen

unread,
Nov 24, 2012, 5:38:35 AM11/24/12
to
Den 24-11-2012 11:05, Anders Wegge Keller skrev:
> En database skalerer væsentligt bedre end en filbaseret
> tilgang.

Næsten alt jeg har kunnet finde på nettet vedr. "Der er xx antal brugere
online", fraråder de kloge hoveder at man benytter database.
Grunden skulle netop være performance, idet de fleste sql-servere er
delte servere (på webhoteller).

Men det er rigtigt at der bruges time og ikke date.

PS: Jeg har netop købt 5 kg. gulerødder - men er det nok til at reparere
2 øjne der tilsammen er 125 år?

Anders Wegge Keller

unread,
Nov 24, 2012, 5:53:12 AM11/24/12
to
Karl Erik Christensen <no...@none.invalid> writes:

> Den 24-11-2012 11:05, Anders Wegge Keller skrev:
> > En database skalerer væsentligt bedre end en filbaseret
> > tilgang.
>
> Næsten alt jeg har kunnet finde på nettet vedr. "Der er xx antal
> brugere online", fraråder de kloge hoveder at man benytter database.
> Grunden skulle netop være performance, idet de fleste sql-servere er
> delte servere (på webhoteller).

Det er et andet spørgsmål end logning af den type der var tale om
her. Til sådanne ikke-persistent data, hvor det heller ikke er kritisk
om det forsvinder, er den bedste løsning af bruge memcached[1], hvis
man da har muligheden for det.

> Men det er rigtigt at der bruges time og ikke date.
>
> PS: Jeg har netop købt 5 kg. gulerødder - men er det nok til at
> reparere 2 øjne der tilsammen er 125 år?

Prøv. Det værste der kan ske er vel at du bliver klogere på
gulerødder.

1. <http://memcached.org/>
0 new messages