Witam stworzyłem funkcję która pobiera dane z bazy danych MySQL i wyświetla je dzięki współrzędnym na mapie google. Wszystko ładnie działa ale muszę zastosować do tego wyszukiwarkę. Będzie miała ona za zadanie wyszukać rekordy które mają w nazwie i nie tylko odpowiedni ciąg znaków. Po wyborze dane wyświwtlają się ale na mapie brak odpowiednich markerów.
Tak wygląda strona z markerami
http://brzanek.webd.pl/CMS/mapa/index.php
  1. <?php
  2. ?>
  3. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
  4. 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <title>Google Maps JavaScript API v3 - Twoja pierwsza mapa</title>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  9. <script type="text/javascript"
  10. src="https://maps.googleapis.com/maps/api/js?sensor=false">
  11. </script>
  12. <script type="text/javascript">
  13. //Baza ikonek do oznaczenia miejsc wedle typu
  14. var ikonki = {
  15. pub: {
  16. icon: 'tornado.png',
  17. shadow: 'tornado.png'
  18. },
  19. grad: {
  20. icon: 'hail.png',
  21. shadow: 'hail.png'
  22. },
  23. sport: {
  24. icon: 'stadium.png',
  25. shadow: 'shadow.png'
  26. },
  27. kino: {
  28. icon: 'cinema.png',
  29. shadow: 'shadow.png'
  30. }
  31. };
  32. //Ładuje znaczniki na mapę
  33. function load() {
  34. //Ustawia środek mapy w wybranej pozycji, ustawia zoom mapy i jej typ - w tym przypadku wskazuje na Sosnowiec
  35. var map = new google.maps.Map(document.getElementById("map"), {
  36. center: new google.maps.LatLng(53.634753, 15.675833),
  37. zoom: 8,
  38. mapTypeId: 'roadmap'
  39. });
  40. var dymekInfo = new google.maps.InfoWindow;
  41.  
  42. //Pobiera nazwę pliku generującego XML
  43. pobierzAdres("generatorXML.php", function(data) {
  44. var xml = parseXml(data);
  45. //Zczytuje dane z pliku XML
  46. var znaczniki = xml.documentElement.getElementsByTagName("znacznik");
  47. for (var i = 0; i < znaczniki.length; i++) {
  48. var nazwa = znaczniki[i].getAttribute("nazwa");
  49. var data = znaczniki[i].getAttribute("data");
  50. var adres = znaczniki[i].getAttribute("adres");
  51. var typ = znaczniki[i].getAttribute("typ");
  52. var wspolrzedne = new google.maps.LatLng(
  53. parseFloat(znaczniki[i].getAttribute("lat")),
  54. parseFloat(znaczniki[i].getAttribute("lng")));
  55. //Buduje strukturę wyświetlanego elementu
  56. var html = "<b>" + nazwa + " Data: " + data + " <br />" + adres;
  57. var ikona = ikonki[typ] || {};
  58. var znacznik = new google.maps.Marker({
  59. map: map,
  60. position: wspolrzedne,
  61. icon: ikona.icon,
  62. shadow: ikona.shadow
  63. });
  64. laczenieDanych(znacznik, map, dymekInfo, html);
  65. }
  66. });
  67. }
  68.  
  69. //Funkcja wiążąca znaczniki z mapą
  70. function laczenieDanych(znacznik, map, dymekInfo, html) {
  71. google.maps.event.addListener(znacznik, 'click', function() {
  72. dymekInfo.setContent(html);
  73. dymekInfo.open(map, znacznik);
  74. });
  75. }
  76.  
  77. //Wywołanie połączenia za pomocą AJAXa
  78. function pobierzAdres(url, callback) {
  79. var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;
  80.  
  81. request.onreadystatechange = function() {
  82. if (request.readyState == 4) {
  83. request.onreadystatechange = nicNieRob();
  84. callback(request.responseText, request.status);
  85. }
  86. };
  87.  
  88. request.open('GET', url, true);
  89. request.send(null);
  90. }
  91.  
  92. //Funkcja parsująca XML
  93. function parseXml(str) {
  94. if (window.ActiveXObject) {
  95. var doc = new ActiveXObject('Microsoft.XMLDOM');
  96. doc.loadXML(str);
  97. return doc;
  98. }
  99. else if (window.DOMParser) {
  100. return (new DOMParser).parseFromString(str, 'text/xml');
  101. }
  102. }
  103.  
  104. function nicNieRob() {}
  105. </script>
  106. </head>
  107. <body onLoad="load()">
  108. <div id="map" style="width: 1100px; height: 500px; align: center;">
  109. </div>
  110. <div>
  111. <?php include ('szukaj.php'); ?>
  112. </div>
  113. </body>
  114. </html>
  115. <?php
  116. ?>


plik generatorXML.php
  1. <?php
  2. //Pobiera dane do połączenia z bazą danych
  3. require('db.php');
  4.  
  5.  
  6. //Funkcja parsująca znaki do standardu ASCII, który jest potrzebny dla pliku XML. To też jest zabezpieczenie przed próbą wpisania kodu wykonującego.
  7. function parseToXML($htmlStr)
  8. {
  9. $xmlStr=str_replace("<",'&lt;',$htmlStr);
  10. $xmlStr=str_replace(">",'&gt;',$xmlStr);
  11. $xmlStr=str_replace('"','&quot;',$xmlStr);
  12. $xmlStr=str_replace("'",'&apos;',$xmlStr);
  13. $xmlStr=str_replace("&",'&amp;',$xmlStr);
  14. $xmlStr=str_replace("$",'$',$xmlStr);
  15. $xmlStr=str_replace("%",'%',$xmlStr);
  16. $xmlStr=str_replace("(",'(',$xmlStr);
  17. $xmlStr=str_replace(")",')',$xmlStr);
  18. $xmlStr=str_replace("[",'[',$xmlStr);
  19. $xmlStr=str_replace("]",']',$xmlStr);
  20. $xmlStr=str_replace("{",'{',$xmlStr);
  21. $xmlStr=str_replace("}",'}',$xmlStr);
  22. return $xmlStr;
  23. }
  24.  
  25. //Otwiera połączenie z serwerem baz danych MySQL
  26. $connection=mysql_connect (localhost, $username, $password);
  27. if (!$connection) {
  28. die ('Nie połączono z serwerem baz danych: '. mysql_error());
  29. }
  30.  
  31. //Wybiera bazę danych z serwera
  32. $db_selected = mysql_select_db($database, $connection);
  33. if (!$db_selected) {
  34. die ('Nie można połączyć się z bazą danych: '. mysql_error());
  35. }
  36.  
  37. //Pobieranie znacznika z tabeli. Dane są pobierane pojedynczo.
  38. $query = "SELECT * FROM google_maps WHERE 1";
  39. mysql_query('SET character_set_connection=utf8');
  40. mysql_query('SET character_set_client=utf8');
  41. mysql_query('SET character_set_results=utf8');
  42. $result = mysql_query($query);
  43. if (!$result) {
  44. die('Niepoprawne zapytanie do bazy: '. mysql_error());
  45. }
  46.  
  47. //Tworzy plik XML
  48. echo '<znaczniki>';
  49.  
  50. //Tworzy kolejne, pojedyncze wpisy do pliku XML
  51. while ($row = @mysql_fetch_assoc($result)) {
  52. //Dodawanie atrybutów do znacznika
  53. echo '<znacznik ';
  54. echo 'nazwa="' . parseToXML($row['nazwa']) . '" ';
  55. echo 'data="' . parseToXML($row['data']) . '" ';
  56. echo 'adres="' . parseToXML($row['adres']) . '" ';
  57. echo 'lat="' . $row['lat'] . '" ';
  58. echo 'lng="' . $row['lng'] . '" ';
  59. echo 'typ="' . $row['typ'] . '" ';
  60. echo '/>';
  61. }
  62.  
  63. //Zamyka plik XML
  64. echo '</znaczniki>';
  65.  
  66. ?>


Jak użyjemy wyszukiwarki pod mapą
Plik szukaj.html
  1. <!doctype html>
  2. <head>
  3. <title>Wyszukiwanie raportów o zagrożeniach pogodowych</title>
  4. <meta charset="utf-8" />
  5. </head>
  6. <body>
  7. <h1>Wyszukiwanie raportów o zagrożeniach pogodowych</h1>
  8. <form action="wyniki.php" method="post">
  9. Wyszukaj według:
  10. <select name="metoda">
  11. <option value="data" />Data (0000-00-00)
  12. <option value="adres" />Adres (nazwa miejscowości)
  13. <option value="typ" />Rodzaj (Wyładowania, Grad, Tornado itp.)
  14. </select>
  15. <br /><br />
  16. Szukane wyrażenie:
  17. <input type="text" name="wyrazenie" />
  18. <input type="submit" name="wyszukaj" />
  19. </form>
  20. </body>
  21. </html>


Plik wyniki.php
  1. <?php
  2. require('db.php');
  3. //Funkcja parsująca znaki do standardu ASCII, który jest potrzebny dla pliku XML. To też jest zabezpieczenie przed próbą wpisania kodu wykonującego.
  4. function parseToXML($htmlStr)
  5. {
  6. $xmlStr=str_replace("<",'&lt;',$htmlStr);
  7. $xmlStr=str_replace(">",'&gt;',$xmlStr);
  8. $xmlStr=str_replace('"','&quot;',$xmlStr);
  9. $xmlStr=str_replace("'",'&apos;',$xmlStr);
  10. $xmlStr=str_replace("&",'&amp;',$xmlStr);
  11. $xmlStr=str_replace("$",'$',$xmlStr);
  12. $xmlStr=str_replace("%",'%',$xmlStr);
  13. $xmlStr=str_replace("(",'(',$xmlStr);
  14. $xmlStr=str_replace(")",')',$xmlStr);
  15. $xmlStr=str_replace("[",'[',$xmlStr);
  16. $xmlStr=str_replace("]",']',$xmlStr);
  17. $xmlStr=str_replace("{",'{',$xmlStr);
  18. $xmlStr=str_replace("}",'}',$xmlStr);
  19. return $xmlStr;
  20. }
  21.  
  22. $metoda = $_POST['metoda'];
  23. $wyrazenie = $_POST['wyrazenie'];
  24. $wyrazenie = trim($wyrazenie);
  25. if (!$metoda || !$wyrazenie)
  26. {
  27. echo 'Brak parametrów wyszukiwania, wróć do poprzednej strony i spóbuj ponownie!';
  28. }
  29. {
  30. $metoda = addslashes($metoda);
  31. $wyrazenie = addslashes($wyrazenie);
  32. }
  33.  
  34.  
  35.  
  36.  
  37. //Otwiera połączenie z serwerem baz danych MySQL
  38. $connection=mysql_connect (localhost, $username, $password);
  39. if (!$connection) {
  40. die ('Nie połączono z serwerem baz danych: '. mysql_error());
  41. }
  42.  
  43. //Wybiera bazę danych z serwera
  44. $db_selected = mysql_select_db($database, $connection);
  45. if (!$db_selected) {
  46. die ('Nie można połączyć się z bazą danych: '. mysql_error());
  47. }
  48.  
  49. //Pobieranie znacznika z tabeli. Dane są pobierane pojedynczo.
  50. $query = "SELECT * FROM google_maps WHERE ".$metoda. " like '%".$wyrazenie."%'";
  51. //Tworzy plik XML
  52. echo '<znaczniki>';
  53.  
  54. //Tworzy kolejne, pojedyncze wpisy do pliku XML
  55. while ($row = @mysql_fetch_assoc($query)) {
  56. //Dodawanie atrybutów do znacznika
  57. echo '<znacznik ';
  58. echo 'nazwa="' . parseToXML($row['nazwa']) . '" ';
  59. echo 'data="' . parseToXML($row['data']) . '" ';
  60. echo 'adres="' . parseToXML($row['adres']) . '" ';
  61. echo 'lat="' . $row['lat'] . '" ';
  62. echo 'lng="' . $row['lng'] . '" ';
  63. echo 'typ="' . $row['typ'] . '" ';
  64. echo '/>';
  65. }
  66.  
  67. //Zamyka plik XML
  68. echo '</znaczniki>';
  69.  
  70. ?>


Tak wygląda baza danych


Z góry dziękuję za pomoc i pozdrawiam.

Czy to jest aż tak duży problem, że nikt nie potrafi mi pomóc?