Avatar billede find_p Nybegynder
27. januar 2008 - 16:18 Der er 6 kommentarer og
1 løsning

Sammenligne ip adresser i to tabeller og udskrive brugernavn

Jeg har leget med koden fra følgen artikel: http://www.eksperten.dk/artikler/1009.
Jeg vil gerne kunne udskrive brugernavn, hvis dette er kendt.

Mine tabeller ser således ud:

  CREATE TABLE `online`
(
        `unique_numb`     varchar(6)     NOT NULL,
    `first_time`     datetime     NOT NULL
    default '0000-00-00 00:00:00'    ,
    `time` datetime         NOT NULL
    default '0000-00-00 00:00:00'    ,
    `bruger_id`     varchar(255)     NOT NULL,
    `ip` varchar(20)         NOT NULL,
    `url` varchar(255)         NOT NULL,
    PRIMARY KEY (`ip`)
)
      ;

  CREATE TABLE `brugere`
(
    `bruger_id`     varchar(255)     NOT NULL,
    `ip`         varchar(20)     NOT NULL,
    PRIMARY KEY (`ip`)
)
    ;

Mine php koder ser således ud

reg.php :

session_start();

mysql_query("DELETE FROM online WHERE date_add(time,interval 5 MINUTE) < NOW()");

$ip = $_SERVER['REMOTE_ADDR'];
$url = $_SERVER['REQUEST_URI'];

if (!isset($_SESSION['online'])) {
$unique_numb = substr(str_shuffle('0123456789'),0,6);
$_SESSION['online'] = $unique_numb;
}


$online = mysql_query("SELECT COUNT(*) AS total FROM online WHERE ip='".$ip."' AND unique_numb = '".$_SESSION['online']."'");

if (!mysql_result($online,0)) {
mysql_query("INSERT INTO online (first_time,time,ip,url,unique_numb) VALUES (NOW(),NOW(),'".$ip."','".$url."','".$_SESSION['online']."')");
} else {
mysql_query("UPDATE online SET time=NOW(), url='".$url."' WHERE ip='".$ip."' AND unique_numb = '".$_SESSION['online']."'");
}

mysql_query("INSERT INTO online(bruger_id) SELECT (bruger_id) FROM brugere WHERE brugere.ip = online.ip  ")
or die(mysql_error()); 

mysql_close();

online.php:

mysql_query("DELETE FROM online WHERE date_add(time,interval 5 MINUTE) < NOW()");

$ip = $_SERVER['REMOTE_ADDR'];
$url = $_SERVER['REQUEST_URI'];

$query=mysql_query("SELECT *,ROUND((UNIX_TIMESTAMP(`time`)-UNIX_TIMESTAMP(`first_time`))/60) AS online_time FROM online ORDER BY time DESC ");
while($row = mysql_fetch_array($query)) {
echo '<tr><td>'.$row['bruger_id'].'</td><td>'.$row['ip'].'</td><td>'.$row['url'].'</td><td><center>'.$row['online_time'].'&nbsp;min.</center></td></tr>';
  }

mysql_close();

Når jeg åbner siden reg.php får jeg følgende:

Unknown table 'online' in where clause

Håber at nogen har tid / lyst til at hjælpe ;o)
Avatar billede erikjacobsen Ekspert
27. januar 2008 - 19:36 #1
Du skal nok

mysql_query("INSERT INTO online(bruger_id) SELECT (bruger_id) FROM brugere,online WHERE brugere.ip = online.ip  ")

Men jeg kan ikke helt se hvad et IP-nummer har med et brugerid at gøre. Eet IP-nummer kan have mange brugere, og en bruger kan have mange IP-numre - men jeg har nu heller ikke forsøgt at tyde din kode ... ;)
Avatar billede find_p Nybegynder
27. januar 2008 - 19:57 #2
Tak for din interesse, jeg er klar over at en bruger id kan have flere ip og omvendt.
Det skal ikke bruges professionelt, syntes bare at det kunne være "sjovt" at koble / udskrive et bruger id (navn) på de personer hvor ip adresen er mig bekendt.

Jeg har prøvet dit foreslag og får nu følgende response:

Column 'bruger_id' in field list is ambiguous

(Før fik jeg: Unknown table 'online' in where clause)
Avatar billede erikjacobsen Ekspert
27. januar 2008 - 19:59 #3
Ja, det er den jo, hvis den findes i begge tabeller, så een af følgende:

mysql_query("INSERT INTO online(bruger_id) SELECT (brugere.bruger_id) FROM brugere,online WHERE brugere.ip = online.ip  ")
mysql_query("INSERT INTO online(bruger_id) SELECT (online.bruger_id) FROM brugere,online WHERE brugere.ip = online.ip  ")
Avatar billede erikjacobsen Ekspert
27. januar 2008 - 20:00 #4
Men det er jo noget rod, for du indsætter et bruger_id i tabellen online, uden samtidig at indsætte et IP-nummer, som du udnytter kan kobles sammen med bruger_id. Nej, jeg forstår ikke hvor du vil hen.
Avatar billede find_p Nybegynder
27. januar 2008 - 20:08 #5
Jeg tror at det nemmeste er at du læser artiktiklen http://www.eksperten.dk/artikler/1009

Forfatteren slutter artiklen med:

"I mit online script kan man nemt tilføje så den viser brugernavn fra ens brugersystem i stedet for IP-adressen.

Det nemmeste er at oprette et nyt felt i tabellen online, som f.eks kunne hedde: bruger_id.
I den indsætter man brugerens id fra tabellen users.
Til sidst kan man i filen: online.php, hente navnet fra users og derefter lave en: if/hvis bruger_id er sat, udskriv brugernavn else/ellers udskriver vi IP-adressen."

Det er det at jeg gerne vil nå frem til. Jeg er helt grøn inden for PHP & mySQL
Avatar billede find_p Nybegynder
27. januar 2008 - 21:01 #6
Jeg har prøvet dine 2 foreslag og i begge tilfælde er resultatet:

reg.php giver følgende svar:

Duplicate entry '' for key 1

Bruger id bliver kopieret til tabellen online, men bliver lagt / udskrevet i en ny række (se nedenfor)

Bruger id:        IP-adresse:        Befinder sig på:        Online tid:
                  83.92.xx.xxx        reg.php                2 min.
Find Petersen                                                0 min.
Avatar billede find_p Nybegynder
06. august 2008 - 13:28 #7
Lukkes
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
Computerworld tilbyder specialiserede kurser i database-management

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