Jump to content
  • 0

Поиск + API Яндекс.Карт


Funtik44
 Share

Question

Добрый день всем.

Есть сайт, при входе на страницу которого, пользователь вводит имя объекта в строку поиска, и на сайт выводится контент из MySql по запрашиваемому объекту (это все работает). На этой же странице я разместил API Яндекс.Карт. Необходимо добиться того, чтобы вместе с контентом на карте отображалось место. Ну например пользователь ввел город "Москва" вывелась информация по городу Москва и заодно на карте появилась собственно сама Москва. Как мне это сделать?

Вот скрипт поиска:

<?php include ("config.php");
$search = mysql_real_escape_string($_POST['search']);
$res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%".$_POST['search']."%'", $db);
if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
$myrow = mysql_fetch_array($res);
?>

Вот пример того, как поиск выводит данные на сайт:

<form action="" method=post>
<input id="inputtext" type="text" name="search" />
<input id="inputbut" type="image" src="images/search.gif" name="submit">
</form>

Вот стандартный скрипт взятый с сайта http://api.yandex.ru для вставки карты:

<script src="http://api-maps.yandex.ru/1.1/index.xml?key=Здесь мой ключь активации=="
type="text/javascript"></script>
<script type="text/javascript">
window.onload = function () {
var map = new YMaps.Map(document.getElementById("YMapsID"));
map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.ToolBar());
map.addControl(new YMaps.Zoom());
map.addControl(new YMaps.MiniMap());
map.addControl(new YMaps.ScaleLine());
var zoomControl = new YMaps.Zoom();
}
</script>

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Я нашел такой скрипт, который осуществляет поиск по карте:

        function showAddress (value) {
map.removeOverlay(geoResult);
var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
if (this.length()) {
geoResult = this.get(0);
map.addOverlay(geoResult);
map.setBounds(geoResult.getBounds());
}else {
alert("Ничего не найдено")
}
});
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
alert("Произошла ошибка: " + error);
})
}

Он использует input id=address, у меня же стоит id=inputtext, как сделать input общий для всех, чтобы и карты искались по нему и контент в MySql?

Link to comment
Share on other sites

  • 0

Вот что получается:

Поиск по базе:

<?php include ("config.php");
$search = mysql_real_escape_string($_POST['search']);
$res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%".$_POST['search']."%'", $db);
if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
$myrow = mysql_fetch_array($res);
?>

Поиск по карте:

<script type="text/javascript">
var map, geoResult;

// Создание обработчика для события window.onLoad
YMaps.jQuery(function () {
// Создание экземпляра карты и его привязка к созданному контейнеру
map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);

// Установка для карты ее центра и масштаба
map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);

// Добавление элементов управления
map.addControl(new YMaps.TypeControl());
});

// Функция для отображения результата геокодирования
// Параметр value - адрес объекта для поиска
function showAddress (value) {
// Удаление предыдущего результата поиска
map.removeOverlay(geoResult);

// Запуск процесса геокодирования
var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

// Создание обработчика для успешного завершения геокодирования
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
// Если объект был найден, то добавляем его на карту
// и центрируем карту по области обзора найденного объекта
if (this.length()) {
geoResult = this.get(0);
map.addOverlay(geoResult);
map.setBounds(geoResult.getBounds());
}else {
alert("Ничего не найдено")
}
});

// Процесс геокодирования завершен неудачно
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
alert("Произошла ошибка: " + error);
})
}
</script>

Вывод данных по базе и карте:

<form action="#" method="post" onsubmit="showAddress(this.address.value);return false;">
<p>
<input type="text" id="address" name="search" style="width:525px;" value="Москва" />
<input type="submit" value="Искать" />
</p>
<div id="YMapsID" style="width:600px;height:400px"></div>
</form>

Не могу добиться того, чтобы все вместе работало, то одно работает, то другое. При таком коде не работает поиск по базе.

Edited by Funtik44
Link to comment
Share on other sites

  • 0
Не могу добиться того, чтобы все вместе работало, то одно работает, то другое. При таком коде не работает поиск по базе.

Естественно ))) вы понимаете, что вы пытаетесь сделать то?

$res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%".$_POST['search']."%'", $db);
<form action="#" method="post" onsubmit="showAddress(this.address.value);return false;">

Вот эти строчки противоречат друг другу ибо вы не чего не куда не отправляете(не перезагружаете страницу), однако почему-то рассчитываете получить данные методом POST да еще выполнить поиск в базе... Енто не правильно.

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

<script type="text/javascript">
<?php if($_POST['search']) { echo "window.onload = showAddress(",$_POST['search'],"); } ?>
</script>

Но по хорошему так делать не в коем случаи как вы нельзя полученные данные надо проверять на предмет скриптов и т.д.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy