AAA Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Получение по номеру телефона его местонахождения (страны и города) с использованием Ajax

Номер телефона: +
По мере набора номера будет отображаться доступная информация об абоненте.
Не вводите цифру 8 в начале номера, которая используется для выхода на межгород.

База содержит информацию о стационарных и мобильных телефонах. Вы получаете оператора и регион по номеру мобильного телефона.



Здесь будет результат

Система использует общую базу с примером определения города по ip и выбора страна, регион, город.

Исходный код примера:
<?
/* Определение страна, регион, город по номеру телефона с использованием технологии Ajax
Взято http://htmlweb.ru/ajax/example/telcod.php
Разрешается использование в любых своих разработках.
Размешение кода в открытом доступе разрешается только с сохранением активной ссылки на источник.
Все остальные права принадлежат Колесникову Дмитрию Геннадьевичу.
База доступна платно, по запросу WMID 467585298788 или E-Mail kdg@htmlweb.ru.
Структура базы описана в http://htmlweb.ru/ajax/example/region.php
*/
// открытие базы, аналогично примеру region.php
require_once($_SERVER['DOCUMENT_ROOT'].'/config.php');
define("db_prefix","geo_");
// общие функции с примером region.php
include_once($_SERVER['DOCUMENT_ROOT'].'/ajax/example/region.inc');

if(!isset($_GET['telcod'])){}
elseif(empty($_GET['telcod'])) die('пусто');
else{
    $telcod=addslashes(preg_replace('/[^\d]/','',urldecode($_GET['telcod'])));
   $res = sql('SELECT * FROM '.db_prefix.'country WHERE INSTR("'.$telcod.'",telcod)=1 and LENGTH(telcod)>0');
   while($row = mysql_fetch_array($res)){ // Казахстан и Россия имеют один код страны
	$country=intval($row['id']);
	$city=substr($telcod, strlen($row['telcod'])); // оставшаяся часть номера телефона
	echo '+<b>'.$row['telcod'].'</b> страна: '.$row['name'].' ('.$country.')<br>';
	if(strlen($city)<3) continue;
	// код города может быть 3,4 или 5 символов
	// т.к. в базе у одного города кодов может быть несколько, введенных через запятую,
	// то использовать простейшее сравнение невозможно. Приходиться "извращаться".
	if(strlen($city)>4)
	   $res1 = sql('SELECT * FROM '.db_prefix.'city WHERE country="'.$country.'" and
			LOCATE(",'.substr($city,0,5).',", CONCAT(",",telcod,","))>0 and LENGTH(telcod)>0');
	if(strlen($city)>3 && (!isset($res1) || mysql_num_rows($res1)==0))
	   $res1 = sql('SELECT * FROM '.db_prefix.'city WHERE country="'.$country.'" and
			LOCATE(",'.substr($city,0,4).',", CONCAT(",",telcod,","))>0 and LENGTH(telcod)>0');
	if(!isset($res1) || mysql_num_rows($res1)==0)
	   $res1 = sql('SELECT * FROM '.db_prefix.'city WHERE country="'.$country.'" and
			LOCATE(",'.substr($city,0,3).',", CONCAT(",",telcod,","))>0 and LENGTH(telcod)>0');
	while($row1 = mysql_fetch_array($res1)){
	   $city=intval($row1['id']);
	   $region=intval($row1['area']);
	   echo 'country=('.$country.') '.$row['name'].', область='.$region.', город='.$city.'<br>';
	   }
	if(mysql_num_rows($res1)>1)die;	// пока однозначности в выборе города нет
        }
	if(substr($telcod,0,2)=='79'){ // если это сотовый оператор
	   $res1 = sql('SELECT * FROM '.db_prefix.'telcod WHERE '.str_pad($telcod,10,'0').' BETWEEN deffrom and defto');
	   while($row1 = mysql_fetch_array($res1)){
	      $city=GetName('city',intval($row1['city']));
	      $region=GetName('area',intval($row1['okrug']));
	      $oper=GetName('oper',intval($row1['oper']));
	   echo "<div style='border: #C5D3DC 1px solid; padding: 10px; width: 97%;'>\n";
	   if($city)echo "Город: <b>". $city."</b> <a href='http://ru.wikipedia.org/wiki/".$city."' target=_blank>Wiki</a><br />\n";
	   echo "Регион: <b>". $region."</b> <a href='http://ru.wikipedia.org/wiki/".$region."' target=_blank>Wiki</a><br />
		Мобильный оператор: <b>". $oper."</b><br />
		</div>";
	}}
   die;
}
function GetName($tbl, $id){
   $query=sql('SELECT name FROM '.db_prefix.$tbl.' WHERE id="'.$id.'" LIMIT 1');
   if ($data = mysql_fetch_assoc($query)) return $data['name'];
   return '';
}
?>

<h1>Получение по номеру телефона страны и города с использованием Ajax</h1>
<label>Начальные цифры номера телефона:
+<input value='7495' size=10 onkeyup='Load(this)' /></label><br />
не вводите цифру 8 в начале номера, которая используется для выхода на межгород.

<script>
<!--
var ot="";
function Load(t){
  if(ot==t.value||t.value=="")return; // если ничего не изменилось не "замучить" сервер
  ajaxLoad('info', '/ajax/example/telcod.php?telcod='+t.value, 'загрузка...','','');
  ot=t.value;
}
//-->
</script>

<br /><br />

<div id="info">
</div>

Более сложный вариант скрипта с задержкой на 1 секунду после последнего нажатия клавиши:

var ot="", timer=0;

function Load(t){
   if(ot==t.value||t.value=="")return; // если ничего не изменилось не "замучить" сервер
   ot=t.value;
   if(timer)clearTimeout(timer);
   timer=window.setTimeout('Load2()',1000);  // загружаю через 1 секунду после последнего нажатия клавиши
}

function Load2(){
   ajaxLoad('info', '/ajax/example/telcod.php?telcod='+ot, 'загрузка...','','');
   timer=0;
}

Дополнительные таблицы, которые нужны этому примеру для определения местонахождения мобильного телефона по номеру мобильного:

<?
// список телефонных кодов
// если city пустой, то код для всего региона
sql('CREATE TABLE IF NOT EXISTS '.db_prefix.'telcod (
        country CHAR(2) NOT NULL,
		okrug VARCHAR(64) NOT NULL,
		city INT UNSIGNED NOT NULL,
		oper INT UNSIGNED NOT NULL,
		deffrom varchar(11) NOT NULL UNIQUE,
		defto varchar(10) NOT NULL,
		) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin');

// список операторов
sql('CREATE TABLE IF NOT EXISTS '.db_prefix.'oper (
		id INT UNSIGNED NOT NULL AUTO_INCREMENT,
		name VARCHAR(64) UNIQUE NOT NULL,
		mobile TINYINT NOT NULL DEFAULT 0,
		`mnc` INT( 3 ) UNSIGNED NOT NULL DEFAULT 0,
		`brand` VARCHAR(64) NOT NULL DEFAULT "",
		PRIMARY KEY (id)
		) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin');
?>

Заполненная база данных со всеми таблицами доступна платно.


.

© Copyright 2008-2016 by KDG