daGrevis Posted November 7, 2010 Report Share Posted November 7, 2010 Sveiki, Tikko izveidoju "prototipu" tai x'ajai sistēmai! xD Domāju, ka visiem princips skaidrs (aplūkojot kodu). DB schema: CREATE TABLE `ip_addresses` ( `id` int( 8 ) NOT NULL auto_increment, /* Is this necessary? */ `ip_address` varchar( 15 ) NOT NULL, `ban` int( 1 ) NOT NULL, PRIMARY KEY ( `id` ) ); /* Any special engine? */ 1.1) Vai 'id' ir vajadzīgs? Es vienkārši paņēmu kristālu bumbu un šamā Man pateica, ka pēc gada Mans 'id' būs uzkāpis pa trepītēm augstu. Ļoti augstu. 1.2) Vai nevajadzētu kaut kādu "memory" engine'u?? O.o PHP: $ip_address = $_SERVER['REMOTE_ADDR']; $query = mysql_query(" SELECT `id` FROM `ip_addresses` WHERE `ip_address` = '{$ip_address}' LIMIT 1 ") or exit( mysql_error() ); if( mysql_num_rows( $query ) === 0 ) { mysql_query(" INSERT INTO `ip_addresses` ( `ip_address` ) VALUES ( '{$ip_address}' ) ") or exit( mysql_error() ); } Quote Link to comment Share on other sites More sharing options...
Rincewind Posted November 7, 2010 Report Share Posted November 7, 2010 id izskatās ka nav vajadzīgs. Ja būs SELECT pēc IP adreses tad to vajag indeksēt (ar to pašu PRIMARY KEY ja būs unikālas). Abus kverijus var aizvietot ar vienu: INSERT IGNORE INTO `ip_addresses` ( `ip_address` ) VALUES ( '{$ip_address}' ) Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 7, 2010 Author Report Share Posted November 7, 2010 Ok, tik tālu būtu. Vēl kas, kas tur nav "pa labo"? =)) Quote Link to comment Share on other sites More sharing options...
Rincewind Posted November 7, 2010 Report Share Posted November 7, 2010 Skatoties kam tas viss domāts. Ja lietotju banošanai tad būtu loģiski arī lauku ar lietotāja id tabulā turēt, savādāk kā tu sameklēsi ko banot? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 7, 2010 Author Report Share Posted November 7, 2010 IP adrešu banošanai. Lietotāju banošanai es izveidošu lauku 'ban' tabulā 'users'. Protams, gribētos to visu sasaistīt, bet kad par to domāju, apstājos pie tā, ka ja daudziem datoriem (daudziem lietotājiem, tāpēc) ir viena IP adrese, kā skolā... tad ko?? O.o Vispār?! Quote Link to comment Share on other sites More sharing options...
Rincewind Posted November 7, 2010 Report Share Posted November 7, 2010 IP adrešu banošanai. Lietotāju banošanai es izveidošu lauku 'ban' tabulā 'users'. Protams, gribētos to visu sasaistīt, bet kad par to domāju, apstājos pie tā, ka ja daudziem datoriem (daudziem lietotājiem, tāpēc) ir viena IP adrese, kā skolā... tad ko?? O.o Vispār?! Tad savukārt nav jēga nebanotās adreses glabāt. Nu būs tev saraksts, ko tu ar viņām iesāksi, pēc kādiem principiem SELECT taisīsi? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 7, 2010 Author Report Share Posted November 7, 2010 Pieņemsim. Es katram user'im piesaistu IP adresi. Es nobanoju 132.124.87.21. Es jau banoju IP, nevis lieotāju, bet tas tā. Tad vajadzētu taisīt banned_IPs. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 7, 2010 Author Report Share Posted November 7, 2010 Ehh, nu jā. BEt kā Es uzzināšu ļaundara IP, ja viņa nebūs saglabājusies? Ev, ko Man darīt? Kāds guru Mani apgaismo!!! Lūdzu. =) Quote Link to comment Share on other sites More sharing options...
Rincewind Posted November 7, 2010 Report Share Posted November 7, 2010 Vienam lietotājam var būt vairākas IP adreses, vienai IP adresei var būt vairāki lietotāji :/ Ko ļaunu slikts un pēc IP nenobanots lietotājs var izdarīt? Varbūt var no citas puses problēmai pieiet. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 7, 2010 Author Report Share Posted November 7, 2010 Tātad Man vispār atteikties no IP baniem?! xD Quote Link to comment Share on other sites More sharing options...
e-remit Posted November 7, 2010 Report Share Posted November 7, 2010 IMHO, id nav vajadzīgs, ip vajag INT UNSIGNED, un glabāt, kā INT - http://lv.php.net/manual/en/function.ip2long.php - to arī kā primāro atslēgu vari definēt. no `ban` nav jēgas, ja glabāsi tikai banotās ip, bet vari pielikt tādus laukus, kā `ban_time` un `reason`, attiecīgi, kad nobanoji un par ko. Vienīgi, ar IP banu vari vienā piegājienā nobanot kādu lielu iestādi, vai, piemēram, visus LMT abbonomentus, tāpēc jēga tam ir pārdomu vērta. Quote Link to comment Share on other sites More sharing options...
marcis Posted November 7, 2010 Report Share Posted November 7, 2010 e-remit: PHP un unsigned integer neiet kopā. Iekš PHP integeri ir signed. MySQL pusē to protams var lietot, izmantojot INET_ATON() un INET_NTOA(). Quote Link to comment Share on other sites More sharing options...
e-remit Posted November 7, 2010 Report Share Posted November 7, 2010 marcis, nu vajag helpu līdz galam izlasīt - sprintf("%u", ip2long($ip)) un visas lietas. Var jau arī MySQL pusē to darīt - nav problēmu. Tik un tā - labāk DB meklēt pēc INT, ne pēc VARCHAR. Quote Link to comment Share on other sites More sharing options...
marrtins Posted November 7, 2010 Report Share Posted November 7, 2010 Unsigned nevajag un nekādus %u arī ;) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.