Pezmc Posted October 26, 2008 Share Posted October 26, 2008 Here is a little script that I CANNOT get to work! It is crazy! It is a problem with the mysql_fetch_array but I can't understand why. When the page is visited you see: Unknown and no errors at all. When I run "SELECT * FROM `geo_ip` WHERE '$ipnum' >= `begin_num` AND '$ipnum' <= `end_num`" manually from PhpMyAdmin with my $ipnum it works fine and outputs two rows. I don't understand why this script doesn't work at all? I am using the geo_ip database. Does anyone know what is going on? function connect_me(){ $DB_USER = 'REMOVED'; $DB_PASSWORD = 'REMOVED'; $DB_HOST = 'REMOVED'; $dbc = mysql_connect ($DB_HOST, $DB_USER, $DB_PASSWORD) or die(mysql_error()); mysql_select_db('REMOVED') or die(mysql_error()); mysql_query("SET NAMES `utf8`") or die(mysql_error()); if($ERROR_REPORTING == 1){ do_error($error,2);} } function disconnect_me(){ @mysql_close($dbc); @mysql_close(); } function check_ip(){ $ipParts = explode(".", $_SERVER["REMOTE_ADDR"]); if ($ipParts[0] == "165" && $ipParts[1] == "21") { if (getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } elseif (getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); } elseif (getenv("REMOTE_ADDR")) { $ip = getenv("REMOTE_ADDR"); } } else { return $_SERVER["REMOTE_ADDR"]; } return $ip; } function get_country(){ $user_ip = check_ip(); $temp = explode('.',$user_ip); $ipnum = 16777216*$temp[0] + 65536*$temp[1] + 256*$temp[2] + $temp[3]; $qry = mysql_query("SELECT * FROM `geo_ip` WHERE '$ipnum' >= `begin_num` AND '$ipnum' <= `end_num`") or die(mysql_error()); $get_country = mysql_fetch_array($qry) or die(mysql_error()); if ($get_country['country_name']=="") { return 'Unknown'; } else { return $get_country['country_name'].':'.$get_country['iso_code']; } } $country_info = explode(':',get_country()); echo $country_info; disconnect_me(); PS, checkip works fine (tested with echo) Link to comment https://forums.phpfreaks.com/topic/130203-solved-mysql-query-that-will-just-not-work-geoip/ Share on other sites More sharing options...
Jeremysr Posted October 26, 2008 Share Posted October 26, 2008 To help debug it, try changing the get_country() function to this: function get_country(){ $user_ip = check_ip(); $temp = explode('.',$user_ip); $ipnum = 16777216*$temp[0] + 65536*$temp[1] + 256*$temp[2] + $temp[3]; $qry = "SELECT * FROM `geo_ip` WHERE '$ipnum' >= `begin_num` AND '$ipnum' <= `end_num`"; echo "$qry<br /><br />"; // debugging code $qry = mysql_query($qry) or die(mysql_error()); $get_country = mysql_fetch_array($qry) or die(mysql_error()); print_r($get_country); // debugging code if ($get_country['country_name']=="") { return 'Unknown'; } else { return $get_country['country_name'].':'.$get_country['iso_code']; } } Link to comment https://forums.phpfreaks.com/topic/130203-solved-mysql-query-that-will-just-not-work-geoip/#findComment-675265 Share on other sites More sharing options...
corbin Posted October 27, 2008 Share Posted October 27, 2008 $ipnum = 16777216*$temp[0] + 65536*$temp[1] + 256*$temp[2] + $temp[3]; could just be sprintf('%u', ip2long($user_ip()) I'm not sure where your problem lies, but I figure it has something to do with '$ipnum' >= `begin_num`. There's no reason to put quotes around a number. That could be making it be 0. Link to comment https://forums.phpfreaks.com/topic/130203-solved-mysql-query-that-will-just-not-work-geoip/#findComment-675286 Share on other sites More sharing options...
Pezmc Posted October 27, 2008 Author Share Posted October 27, 2008 To help debug it, try changing the get_country() function to this: function get_country(){ $user_ip = check_ip(); $temp = explode('.',$user_ip); $ipnum = 16777216*$temp[0] + 65536*$temp[1] + 256*$temp[2] + $temp[3]; $qry = "SELECT * FROM `geo_ip` WHERE '$ipnum' >= `begin_num` AND '$ipnum' <= `end_num`"; echo "$qry<br /><br />"; // debugging code $qry = mysql_query($qry) or die(mysql_error()); $get_country = mysql_fetch_array($qry) or die(mysql_error()); print_r($get_country); // debugging code if ($get_country['country_name']=="") { return 'Unknown'; } else { return $get_country['country_name'].':'.$get_country['iso_code']; } } Doing this it printed/echoed: SELECT * FROM `geo_ip` WHERE '1357240672' >= `begin_num` AND '1357240672' <= `end_num` Array ( [0] => 34 [id] => 34 [1] => 7.57.75.64 [begin_ip] => 7.57.75.64 [2] => 9.19.255.255 [end_ip] => 9.19.255.255 [3] => 121195328 [begin_num] => 121195328 [4] => 152305663 [end_num] => 152305663 [5] => US [country] => US [6] => United States [name] => United States ) I don't see any problems there $ipnum = 16777216*$temp[0] + 65536*$temp[1] + 256*$temp[2] + $temp[3]; could just be sprintf('%u', ip2long($user_ip()) I'm not sure where your problem lies, but I figure it has something to do with '$ipnum' >= `begin_num`. There's no reason to put quotes around a number. That could be making it be 0. What is sprintf about? Never have heard of it! Surely that can't be making the difference? I tried it without and there was no change apart from it appearing in a different order: "SELECT * FROM `geo_ip` WHERE 1357240672 >= `begin_num` AND 1357240672 <= `end_num` Array ( [0] => 24173 [id] => 24173 [1] => 80.229.0.0 [begin_ip] => 80.229.0.0 [2] => 80.229.255.255 [end_ip] => 80.229.255.255 [3] => 1357185024 [begin_num] => 1357185024 [4] => 1357250559 [end_num] => 1357250559 [5] => GB [country] => GB [6] => United Kingdom [name] => United Kingdom )" Thanks to all people trying to help! Link to comment https://forums.phpfreaks.com/topic/130203-solved-mysql-query-that-will-just-not-work-geoip/#findComment-675343 Share on other sites More sharing options...
Jeremysr Posted October 27, 2008 Share Posted October 27, 2008 Looks like there is no $get_country['country_name'] or $get_country['iso_code']. Link to comment https://forums.phpfreaks.com/topic/130203-solved-mysql-query-that-will-just-not-work-geoip/#findComment-675345 Share on other sites More sharing options...
Pezmc Posted October 27, 2008 Author Share Posted October 27, 2008 *BANGS HEAD ON TABLE REPETITIVELY* Was using the old geo_ip database I had with different collumb names Sorry guys! A bit of late night coding (3am) ness. Link to comment https://forums.phpfreaks.com/topic/130203-solved-mysql-query-that-will-just-not-work-geoip/#findComment-675348 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.