Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Lista miast w polsce
Forum PHP.pl > Forum > Przedszkole
fredzio90
czy jest może w internecie jakaś baza miast w warszawie, ponieważ chcę zrobić coś takiego:
selecta z wszystkimi województwami, i jak wejde w dane województwo, pokaże sie select z listą wszyskich miast w wybranym województwie.... czy da rade coś takiego czy Atlas się przyda ? biggrin.gif

coś a'la zumi.pl jak wpisujesz województwo pokazuje się lista miast...
nexis
Może się przyda lista miast w Polsce!
fredzio90
czyli tylko skomponowanie pełnej lista mi zostaje questionmark.gif myślałem że istnieje jakaś taka baza już ;D ale cuż..

oki, a jak za pomocą javascriptu gdzy dam coś takiego:


  1. <select name="woj">
  2. <option value="1">Dolnośląskie</option>
  3. <option value="2">Kujawsko-Pomorskie</option>
  4. <option value="3">Lubelskie</option>
  5. <option value="4">Lubuskie</option>
  6. <option value="5">Łódzkie</option>
  7. <option value="6">Małopolskie</option>
  8. <option value="7">Mazowieckie</option>
  9. <option value="8">Opolskie</option>
  10. <option value="9">Podkarpackie</option>
  11. <option value="10">Podlaskie</option>
  12. <option value="11">Pomorskie</option>
  13. <option value="12">Śląskie</option>
  14. <option value="13">Świętokrzyskie</option>
  15. <option value="14">Warmińsko-Mazurskie</option>
  16. <option value="15">Wielkopolskie</option>
  17. <option value="16">Zachodniopomorskie</option>
  18. </select>


po wybraniu danego pokazywał się dany select z miastami wybranego województwa
Cienki1980
Można to zrobić na trzy sposoby - trzy o których wiem i z których korzystałem:

1. Przeładowanie strony onChange w selecie z wojewodztwami i wygenerowanie nowego selecta
- minus : przeładowanie strony po każdej zmianie

2. Wygenerowanie w php odpowiedniego kodu JS, który zmieniałby automatycznie zawartość selecta z miastami w zależności od wybranej pozycji województw
- minus : przy dużej ilości rekordów ( możliwości wyboru ) kod JS będzie bardzo duży

3. Wykorzystanie AJAXu
- minusów : brak a przynajmniej ja nie znalazłem.
fredzio90
a te ostatnie rozwiązanie, jakimiś darmowymi przykładami byś użyczył questionmark.gif

mam listę wszystkich miast ..... każde wpjewództwo jest w innym pliku o nazwie wartości danego województwa.. np 1.txt
i jak z danego pliku tekstowego zrobi selecta ( chyba jakieś foreach ) jak wygląda przykłądowo tak:


Kod
...
Głuchołazy
Gogolin
Gorzów Śląski
Grodków
Kędzierzyn-Koźle
Kietrz
Kluczbork
...


każda nazwa w nstępnym wierszu
Cienki1980
Oto kilka fragmentów kodu do zmiany zawartości selecta za pomoca AJAX'a.
Ja osobiście korzystam z biblioteki xajax która możesz znaleźć np. tutaj

Powklejam tutaj kawałki kodu z aplikacji wykorzystującej Smarty ... ale powinieneś załapać o co chodzi przerobię go schematycznie na Twoje potrzeby:

na początek kod html ( w moim przypadku .tpl ):
  1. {$initAjax}
  2. <tr>
  3. <td>wojewodztwo:</td>
  4. <td>
  5. <select name="id_woj" onChange="xajax_Miasta(this.options[this.selectedIndex].value);">
  6. <option value="">wybierz</option>
  7. {section name=idx loop=$woj}
  8. <option value="{$woj[idx].id}">{$woj[idx].nazwa}</option>
  9. {/section}
  10. </select>
  11. </td>
  12. </tr>
  13. <tr>
  14. <td>miasta:</td>
  15. <td><div id="miasta">wybierz woj.</div></td>
  16. </tr>


teraz kod php
  1. <?php
  2. require_once("xajax.inc.php");
  3. $xajax = new xajax();
  4.  
  5. function Miasta($filtr)
  6. {
  7.  //otwierasz plik o nazwie $filtr.txt 
  8.  // albo jak tam bedziesz mial go nazwanego
  9.  // i odczytujesz do tablicy $lista
  10.  if(!empty($lista))
  11.  {
  12. $m_cont='<select name="miasto">';
  13. $m_cont.='<option value="">wybierz</option>';
  14. foreach($lista as $k=>$v)
  15. {
  16.  $m_cont.='<option value="'.$v[0].'">'.$v[0].'</option>';
  17. }
  18. $m_cont.='</select>';
  19.  } 
  20.  $objResponse = new xajaxResponse('ISO-8859-2');
  21.  $objResponse->addAssign("miasta","innerHTML", $m_cont);
  22.  return $objResponse->getXML();
  23.  
  24. }
  25.  
  26. $xajax->setCharEncoding('ISO-8859-2');
  27. $xajax->decodeUTF8InputOn();
  28. $xajax->registerFunction("Miasta");
  29. $xajax->processRequests();
  30.  
  31. $xajax->printJavascript(AJAXPATH);
  32. $initAjax = ob_get_contents();
  33.  
  34.  
  35.  $smarty->assign(initAjax, $initAjax);
  36. ?>


Tak to by wyglądało w skrócie ... więcej informacji wyciągniesz na pewno z dokumentacji i przykładów, które są na stronie podanej na początku posta.
fredzio90
za trudne ;D może prościej... chciałbym taką baze zrobić tylko niewiem jak to zacząć.... na początku miałem pomysł.. że np województwo Dolnośląskie ma nr 1, itd. z innymi wojewodztwami, i miasta do Dolnośląskiego miałby by taką wartość dodawaną do bazy:

1_nr_miasta

tylko jest problem, nazwe województwa sobie odczytam to jedynie 16 linijek, ale ciężej bedzie z miastami, odczytać nazwę miasta.. i jak właśnie taką baze miast dać..... żeby potem odczytać je nazwe.... dodawanie do bazy nazwy miasta myślałem ale byłyby problemy z kodowaniem....
Cienki1980
Trzymanie tego w bazie jest całkiem dobrym pomysłem, jak dla mnie o wiele lepszym niż na plikach robienie tego.

Potrzebujesz dwie tabele:
wojewodztwa:
id - auto_increment
nazwa - varchar

miasta:
id - auto_increment
id_woj - int
nazwa - varchar


Co do zmiany zawartości selectów to ajax jest najlepszym rozwiązaniem, a wykonanie tego jest proste jak budowa gwoździa.
Jeżeli znasz lepiej PHP wykorzystaj xajax ( czyli to co ja podałem ) jeżeli wolisz JS to np AdvAjax ( czy jakoś tak .. znajdziesz na forum od ajaxa )

Napisz czego nie rozumiesz w wykorzystaniu xajaxa a napiszę tłumaczenie łopatologiczne.
fredzio90
wygenerowałem sobie liste miast, jest ich koło 850..... ale właśnie problem mam z kodowaniem.. niechce zmieniać kodowania całej tabeli a zapytanie jest takie:
  1. CREATE TABLE `city` (
  2. `id` int(8) NOT NULL AUTO_INCREMENT ,
  3. `id_woj` int(4) NOT NULL ,
  4. `nazwa` varchar(64) NOT NULL ,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE = MYISAM ;


i wpisy:

  1. INSERT INTO `city` VALUES('35','1', 'Lwówek Śląski ');


a do bazy daje coś takiego:

Lw?wek ?l?ski
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.