PDA

View Full Version : سوال: نمایش موقعیت کشور یک کاربر بر اساس IP زخیره شده در دیتابیس



hamidhassas
یک شنبه 16 شهریور 1393, 15:01 عصر
من با پروژه زیر موقعیت کشور هر کاربر رو بر اساس IP نمایش میدم .

خوب مشکل من اینه که در دیتابیس آدرس آپی کاربرانی که از سایت بازدید کردند رو زخیره کردم و بعد با حلقه while در یک جدول به نمایش میگزارم حالا میخوام کاری کنم که ip کاربران در پروژه زیر قرار بگیره و تک تک IP ها رو نمایش بده
به صورتی که مثلا IP فلان مربوط به کدام کشوره اما وقتی این کار رو میکنم اطلاعات توی while دیگه لیست نمیشه و اطلاعات نمایش داده نمیشه

لطفا راهنمایی کنید

آدرس پروژه

http://www.hassas-computer.com/download/script_code/ip.zip

arash691
دوشنبه 17 شهریور 1393, 16:32 عصر
چرا از API سایت ipinfo.io استفاده نمیکنی ؟ بنظرت راحت تر نیست ؟ این همه مشکلات ذخیره و بررسی IP رو هم با دقت خودش بررسی میکنه بهت تحویل میده

Mohammadsgh
دوشنبه 17 شهریور 1393, 20:16 عصر
برای نمایش کشور و آی پی میتونی از کلاس ip2location استفاده کنی:لبخندساده:

hamidhassas
سه شنبه 18 شهریور 1393, 11:32 صبح
دست من نیست مشتری این رو لحضه آخر بهم داده و گفته این رو برام تو پروژه قرار بده

بعدشم همه چیز درسته عمل میکنه فقط وقتی IP ها رو از دیتابیس صدا میزنم و توی while برابر با $IPaddress داخل پروژه قرار میدم اطلاعات از جدول دیتابیس لیست میشن ولی فقط مشخصات آخرین رکورد رو نشون میده

یعنی اگر من IP ها رو به صورت زیر لیست کنم

103.14.215.21
104.143.12.114
105.123.11.105
107.150.49.243
109.225.188.242
فقط مقدار IP آخرین رکورد که در اینجا 109.225.188.242 هست توسط پروژه نشون میده مطعلق به کدام کشور هست و مشخصات رو نشون میده و بقیه IP ها اطلاعاتشون نمایش داده نمیشه


این کد پروژم



$result=mysql_query("SELECT * FROM `statistic` ORDER BY `id` DESC LIMIT 0 , 10");
while($site_link=mysql_fetch_array($result))
{
echo $IPaddress=$site_link['ip_address'];
include_once('ip_finder.php');
}

alifallah
پنج شنبه 20 شهریور 1393, 11:35 صبح
آقا هیچکسی نی کمک کمه
تو رو خدا یه کم تحرک به خرج بدید و یه سرچ کوچولو تو گوگل بزنید خیلی زودتر به نتیجه می رسید تا اینکه منتظر پاسخ بقیه باشید!
مثلا اگه سرچ می کردید : how to get country name by ip address یکی از صفحاتش این کد رو بهتون میداد!



$ip_address = $_SERVER['REMOTE_ADDR'];
$geopluginURL = 'http://www.geoplugin.net/php.gp?ip='.$ip_address;
$addrDetailsArr = unserialize(file_get_contents($geopluginURL));
$city = $addrDetailsArr['geoplugin_city'];
$country = $addrDetailsArr['geoplugin_countryName'];
if(!$city){ $city='Not Define'; }
if(!$country){ $country='Not Define'; }
echo '<strong>IP Address</strong>:- '.$ip_address.'<br/>';
echo '<strong>City</strong>:- '.$city.'<br/>';
echo '<strong>Country</strong>:- '.$country.'<br/>';

تست کردم مشکلی نداشت، امیدوارم به کارتون بیاد

hamidhassas
پنج شنبه 20 شهریور 1393, 12:18 عصر
تو رو خدا یه کم تحرک به خرج بدید و یه سرچ کوچولو تو گوگل بزنید خیلی زودتر به نتیجه می رسید تا اینکه منتظر پاسخ بقیه باشید!
مثلا اگه سرچ می کردید : how to get country name by ip address یکی از صفحاتش این کد رو بهتون میداد!



$ip_address = $_SERVER['REMOTE_ADDR'];
$geopluginURL = 'http://www.geoplugin.net/php.gp?ip='.$ip_address;
$addrDetailsArr = unserialize(file_get_contents($geopluginURL));
$city = $addrDetailsArr['geoplugin_city'];
$country = $addrDetailsArr['geoplugin_countryName'];
if(!$city){ $city='Not Define'; }
if(!$country){ $country='Not Define'; }
echo '<strong>IP Address</strong>:- '.$ip_address.'<br/>';
echo '<strong>City</strong>:- '.$city.'<br/>';
echo '<strong>Country</strong>:- '.$country.'<br/>';

تست کردم مشکلی نداشت، امیدوارم به کارتون بیاد

عزیز دلم شمام اول پستی این تاپ رو بخون میفهمی چرا تحرک به خرج ندادم برا سرچ

alifallah
پنج شنبه 20 شهریور 1393, 12:48 عصر
عزیز دلم شمام اول پستی این تاپ رو بخون میفهمی چرا تحرک به خرج ندادم برا سرچ

حق با شماست! تغییراتی باید ایجاد می شد تا بتونید به شکلی که میخواید ازش استفاده کتید.
اول اینکه از فایل ip_finder.php این تابع رو کات کنید.


function iptocountry($ip) {
$numbers = preg_split( "/\./", $ip); include("ip_files/".$numbers[0].".php"); $code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]); foreach($ranges as $key => $value){ if($key<=$code){ if($ranges[$key][0]>=$code){$two_letter_country_code=$ranges[$key][1];break;} } } if ( $two_letter_country_code=="" ){ $two_letter_country_code="unkown"; } return $two_letter_country_code; }
و در یک فایل، مثلا من فایل functions.php ایجاد کردم و داخلش paste کردم.
حالا اگه یه فایل index ایجاد کنید به این شکل:


include('functions.php');
$ips = array('103.14.215.21','104.143.12.114','105.123.11 .105','107.150.49.243','109.225.188.242');
foreach($ips as $ip){
$IPaddress = $ip; include('ip_finder.php'); }
دیگه مشکلی پیش نمیاد

hamidhassas
پنج شنبه 20 شهریور 1393, 13:15 عصر
ممنون فقط ی سوال

1- من چطوری آدرس IP هایی که از دیتابیس میخونم و داخل $ips = array قرار بدم


index.php


$result=mysql_query("SELECT * FROM `statistic` ORDER BY `id` DESC LIMIT 0 , 10");
while($site_link=mysql_fetch_array($result))
{
echo $IPaddress=$site_link['ip_address'];
}



functions.php



function iptocountry($ip) {
$numbers = preg_split( "/\./", $ip);
include("../scripts_style/script/ip/ip_files/".$numbers[0].".php");
$code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);
foreach($ranges as $key => $value){
if($key<=$code){
if($ranges[$key][0]>=$code){$two_letter_country_code=$ranges[$key][1];break;}
}
}
if ($two_letter_country_code==""){$two_letter_country_code="unkown";}
return $two_letter_country_code;
}



ip_finder.php


<?php
$two_letter_country_code=iptocountry($IPaddress);
include("../scripts_style/script/ip/ip_files/countries.php");
$three_letter_country_code=$countries[ $two_letter_country_code][0];
$country_name=$countries[$two_letter_country_code][1];
print "Two letters code: $two_letter_country_code<br>";
print "Three letters code: $three_letter_country_code<br>";
print "Country name: $country_name<br>";
// To display flag
$file_to_check="../scripts_style/script/ip/flags/$two_letter_country_code.gif";
if (file_exists($file_to_check)){
print "<img src=$file_to_check><br>";
}else{
print "<img src=../scripts_style/script/ip/flags/noflag.gif width=30 height=15><br>";
}

alifallah
پنج شنبه 20 شهریور 1393, 13:36 عصر
نمیخواد داخل آرایه قرار بدید، اون فقط یه مثال بود! فایل index.php شما میشه این:


include('functions.php');$result=mysql_query("SELECT * FROM `statistic` ORDER BY `id` DESC LIMIT 0 , 10");while($site_link = mysql_fetch_array($result)){ echo $IPaddress = $site_link['ip_address']; include('ip_finder.php');}

hamidhassas
پنج شنبه 20 شهریور 1393, 13:56 عصر
نمیخواد داخل آرایه قرار بدید، اون فقط یه مثال بود! فایل index.php شما میشه این:


include('functions.php');$result=mysql_query("SELECT * FROM `statistic` ORDER BY `id` DESC LIMIT 0 , 10");while($site_link = mysql_fetch_array($result)){ echo $IPaddress = $site_link['ip_address']; include('ip_finder.php');}

این جوری چاپ میکنه


http://www.8pic.ir/images/trmamk9v4s91ce29s6y7.png

alifallah
پنج شنبه 20 شهریور 1393, 14:03 عصر
فایل countries.php رو زا داخل پوشه ip_files باز کنید و تگ <? رو حذف و به جاش تگ کامل <?php قرار بدید.

hamidhassas
پنج شنبه 20 شهریور 1393, 14:09 عصر
آقا خدا خیرت بده ایشالله ی هفت هشت تا حوری خوب و ترگل ورگل گیرت بیاد از اون 70 متریاش تو همین دنیا 1.70 گیرت بیاد