Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak to przerobić na normalny IP - `ipaddr` int(16)
Forum PHP.pl > Forum > PHP
Elber
Witam, mam taki problem, postawiłem sobie LMS, i wszystko dobrze działa haha.gif Ale w bazie zamiast IP, które dodaje czyli 192.168.0.1 jest coś takiego 3232237834 i chciałem sie zapytać jak to działa haha.gif Jak to sie potem zamienia spowrotem w normalne IP smile.gif

Tak wygląda struktura tabeli:
Kod
CREATE TABLE `nodes` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(16) NOT NULL default '',
  `mac` varchar(20) NOT NULL default '',
  `ipaddr` int(16) unsigned NOT NULL default '0',
  `ipaddr_pub` int(16) unsigned NOT NULL default '0',
  `passwd` varchar(32) NOT NULL default '',
  `ownerid` int(11) NOT NULL default '0',
  `creationdate` int(11) NOT NULL default '0',
  `moddate` int(11) NOT NULL default '0',
  `creatorid` int(11) NOT NULL default '0',
  `modid` int(11) NOT NULL default '0',
  `netdev` int(11) NOT NULL default '0',
  `linktype` tinyint(1) NOT NULL default '0',
  `access` tinyint(1) NOT NULL default '1',
  `warning` tinyint(1) NOT NULL default '0',
  `lastonline` int(11) NOT NULL default '0',
  `info` text NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `ipaddr` (`ipaddr`),
  KEY `netdev` (`netdev`)
) TYPE=MyISAM  AUTO_INCREMENT=1855;

A tak kawałek zrzutu:
Kod
INSERT INTO `nodes` (`id`, `name`, `mac`, `ipaddr`, `ipaddr_pub`, `passwd`, `ownerid`, `creationdate`, `moddate`, `creatorid`, `modid`, `netdev`, `linktype`, `access`, `warning`, `lastonline`, `info`) VALUES
(3, 'Test', '00:09:92:01:85:B2', 3232237834, 0, '', 0, 1161669555, 1161669577, 3, 3, 1, 0, 1, 0, 0, ''),
heaven
Możesz pobrać juz z bazy Twoja oczekiwana wartosc w ten sposob
  1. SELECT
  2. CONCAT_WS('.',ipaddr >> 24,(ipaddr & (255 << 16)) >> 16,(ipaddr & (255 << 8)) >> 8,(ipaddr & 255)) AS adres_ip
  3. FROM nodes WHERE ......

Teraz mozesz to wstawic to w kazde miejsce i zastapic ipaddr inna kolumna z adresem ip.

Ip przechowwane tu jest za pomoca int a nie jako text. adres sklada sie z 4 pol ktore maja wartosc od 0 do 255
czyli pojedyncze pole potrzebuje 8 bitow czyli jeden bajt a wiec do zapisu ip jako int potrzeba 4 bajtow i teraz tylko trzeba wyciagac paczki 8 bitow zaczynajac od lewej
Elber
Jak by wyglądał skrypt php, który zamienił by wszystkie adresy na 192.168.... i wypisał je questionmark.gif Bo sie męczę i nie moge wymyślić ;(
SirZooro
Oj przecież poprzednicy wszystko napisali co trzeba smile.gif
  1. SELECT inet_ntoa(ipaddr) ...

albo
  1. <?php
  2. $addr_txt = long2ip($ip);
  3. ?>

Dalej pomęcz się już sam smile.gif
grzywka18
A ja zapytam tylko ze o zamiane wartosci z tabeli "lastonline" ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.