Sign in to follow this  
Followers 0
dee0xeed

Определение города по IP адресу (Sypex Geo)

8 posts in this topic

Всем привет!

 

Пытаюсь определить город заказчика по его ip адресу и отправить его в письме формы обратной связи вместе с другими данными. Из готовых решений остановился на Sypex Geo, но пока не получается получить нужную информацию.

Php знаю очень поверхностно, писал по мануалу _sypexgeo.net/ru/docs/

Может кто работает с Sypex Geo, помогите найти ошибку?

Вот часть кода:

 if($err == 0){

	include("SxGeo.php");
	$SxGeo = new SxGeo('SxGeoCity.dat');
	$ip = $_SERVER['REMOTE_ADDR'];
	$data = $SxGeo->getCityFull($ip);


 	$tos = array("info@xxxxxxxxx.ru");
	$subject = "Заказ с сайта";
	$body = "Имя заказчика: {$_POST['name']}<br><br>Телефон заказчика: {$_POST['phone']}<br><br>C формы: {$_POST['from']}";
 	if(isset($_POST['email'])) $body .= "<br><br>E-mail адрес: {$_POST['email']}";
	$body .= "<br><br>Информация о городе: {$data}";
 	$headers= "MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8\r\n";
 	foreach($tos as $to)
 		mail($to, $subject, $body, $headers);
 	$out['status'] = "ok";

 } 

В результате письмо содержит последнюю строку "Информация о городе: Array" вместо какой либо полезной инфы.

 

Может есть какие то более удобные решения? Мне нужно каким то образом знать город и часовой пояс заказчика, чтобы не перезванивать по заявке, когда у него ночь :)

Share this post


Link to post
Share on other sites

Просто вставлять $data нельзя, нужно точно указать, какой именно кусочек из $data должен быть вставлен.

$data['city'] - даст город, $data['region'] и $data['country'] - регион и страну.

campusboy likes this

Share this post


Link to post
Share on other sites

Просто вставлять $data нельзя, нужно точно указать, какой именно кусочек из $data должен быть вставлен.

$data['city'] - даст город, $data['region'] и $data['country'] - регион и страну.

Попробовал. При варианте $data['city'] ничего не передается, при вариантах $data['region'] и $data['country'] так же передается слово "Array".

Share this post


Link to post
Share on other sites

Попробовал. При варианте $data['city'] ничего не передается, при вариантах $data['region'] и $data['country'] так же передается слово "Array".

Чтобы узнать, что находится в переменной, напишите var_dump ($data) или print_r ($data). И сразу станет понятно, как извлекать данные из массива и есть ли они там вообще.

 

Кстати, зачем Вы переменную $tos сделали как Массив? Чтобы потом сделать цикл?  :) Эта переменная может быть строкой, если надо несколько мыл добавить, то просто перечисляете их через запятую:

$tos = 'info@xxxxxxxxx.ru';
$tos = 'info@xxxxxxxxx.ru, info@yyyyyyy.ru, info@zzzzzz.ru';

Это актуально, если Вы отправляете письма с одним и тем же содержанием по разным мылам.

Share this post


Link to post
Share on other sites

Чтобы узнать, что находится в переменной, напишите var_dump ($data) или print_r ($data). И сразу станет понятно, как извлекать данные из массива и есть ли они там вообще.

 

Кстати, зачем Вы переменную $tos сделали как Массив? Чтобы потом сделать цикл?  :) Эта переменная может быть строкой, если надо несколько мыл добавить, то просто перечисляете их через запятую:

$tos = 'info@xxxxxxxxx.ru';
$tos = 'info@xxxxxxxxx.ru, info@yyyyyyy.ru, info@zzzzzz.ru';

Это актуально, если Вы отправляете письма с одним и тем же содержанием по разным мылам.

Спасибо! Вроде стала ясна структура массива. print_r ($data) вернула вот такую строку:

 

Array ( [city] => Array ( [id] => 509820 [lat] => 61.78491 [lon] => 34.34691 [name_ru] => Петрозаводск [name_en] => Petrozavodsk ) [region] => Array ( [id] => 552548 [name_ru] => Карелия [name_en] => Kareliya [iso] => RU-KR ) [country] => Array ( [id] => 185 [iso] => RU [lat] => 60 [lon] => 100 [name_ru] => Россия [name_en] => Russia ) )

 

То есть, как я понял, название города хранится в массиве внутри массива. Подскажите, а как до него добраться в коде?

 

По поводу переменной $tos - это то код программиста, который делал сайт. Не представляю зачем это нужно) Я лишь пытаюсь в него добавить нужную информацию.

Share this post


Link to post
Share on other sites

Array ( [city] => Array ( [id] => 509820 [lat] => 61.78491 [lon] => 34.34691 [name_ru] => Петрозаводск [name_en] => Petrozavodsk ) [region] => Array ( [id] => 552548 [name_ru] => Карелия [name_en] => Kareliya [iso] => RU-KR ) [country] => Array ( [id] => 185 [iso] => RU [lat] => 60 [lon] => 100 [name_ru] => Россия [name_en] => Russia ) )

 

То есть, как я понял, название города хранится в массиве внутри массива. Подскажите, а как до него добраться в коде?

 

Давайте разбирать вглубь, форматируя полученную инфу:

Array ( 
 [city] => Array ( [id] => 509820 [lat] => 61.78491 [lon] => 34.34691 [name_ru] => Петрозаводск [name_en] => Petrozavodsk )
 [region] => Array ( [id] => 552548 [name_ru] => Карелия [name_en] => Kareliya [iso] => RU-KR )
 [country] => Array ( [id] => 185 [iso] => RU [lat] => 60 [lon] => 100 [name_ru] => Россия [name_en] => Russia )
)

То же самое:

Array ( 
 [city] => Array ( 
           [id] => 509820 
           [lat] => 61.78491 
           [lon] => 34.34691 
           [name_ru] => Петрозаводск 
           [name_en] => Petrozavodsk 
          )
 [region] => Array ( 
             [id] => 552548 
             [name_ru] => Карелия 
             [name_en] => Kareliya 
             [iso] => RU-KR 
            )
 [country] => Array ( 
              [id] => 185 
              [iso] => RU 
              [lat] => 60 
              [lon] => 100 
              [name_ru] => Россия 
              [name_en] => Russia 
             )
)

И уже видно, как пролезть к нужной инфе, к примеру, буду сразу в переменную складывать, чтобы удобнее пользоваться было в дальнейшем:

$city_name_ru = $data['city']['name_ru']; //Петрозаводск
$region_name_ru = $data['region']['name_ru']; //Карелия
$country_name_ru = $data['country']['name_ru']; //Россия
files, altervision and dee0xeed like this

Share this post


Link to post
Share on other sites

 

И уже, как пролезть к нужной инфе, к примеру, буду сразу в переменную складывать, чтобы удобнее пользоваться было:
$city_name_ru = $data['city']['name_ru']; //Петрозаводск
$region_name_ru = $data['region']['name_ru']; //Карелия
$country_name_ru = $data['country']['name_ru']; //Россия

Спасибо большое! Все заработало :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.