Witam, potrzebuje zrobić formularz , że po wpisaniu kodu pocztowego pojawia mi się dalsza część formularza a w nim miasto, ulica oraz powiat i województwo.
Mam bazę danych i już jakiś tam zrobiony formularz ale jak dla mnie to jest drętwo.Co prawda formularz jest 4 etapowy, ale pokaże wam tą część w której chcę ulepszyć działanie. Może ktoś z was będzie mieć inne pomysły i pomoże usprawnić mój formularz. Ogólnie chodzi o to by użytkownik rejestrujący się nie musiał wypełniać za dużo, tylko z automatu by się wypełniało:
Ok Let's Go!:

JS:

  1. function suggest(inputString){
  2. if(inputString.length == 0) { //wykonywanie podpowiedzi jeśli przekroczy 4 cyfry wpisanego tekstu.
  3. $('#suggestions').fadeOut();
  4. } else {
  5. $('#miasto').addClass('load');
  6. $.post("ajaxCitySearch.php", {queryString: ""+inputString+"", kod_pocztowy: "<?php echo ''.zabezpiecz($_POST['kod_pocztowy']).'';?>"}, function(data){
  7. if(data.length >0) {
  8. $('#suggestions').fadeIn();
  9. $('#suggestionsList').html(data);
  10. $('#miasto').removeClass('load');
  11. }
  12. });
  13. }
  14. }
  15.  
  16. function fill(thisValue) {
  17. $('#miasto').val(thisValue);
  18. setTimeout("$('#suggestions').fadeOut();", 600);
  19. $.getJSON('ajaxPostCode.php', {input: thisValue}, function(data){
  20. var inputValue=null;
  21. var WstawUlica = data.inputValue;
  22. $('input[name="ulica"]').val(WstawUlica);
  23. });
  24. }



PHP:

  1. if(array_key_exists('FormRegisterEnd', $_POST)){
  2. $city = safeEncode($_POST['miasto']);
  3. $city = mb_strtolower($city,"UTF-8");
  4. $city = mb_ucfirst($city,"UTF-8");
  5.  
  6. $postcode = safeEncode($_POST['kod_pocztowy']);
  7.  
  8. $street = safeEncode($_POST['ulica']);
  9. $street = mb_strtolower($street,"UTF-8");
  10. $street = mb_ucfirst($street,"UTF-8");
  11.  
  12. $errors = array();
  13.  
  14. $resultKodPocztowy = "SELECT `kod` FROM `miejscowosci_i_kody` WHERE `kod`='$postcode'" or die('zapytanie :'.$result.' blad:'.mysql_error());
  15. $sqlKodPocztowy = mysql_query($resultKodPocztowy);
  16.  
  17. if(mysql_num_rows($sqlKodPocztowy)==0){
  18. $errors['kod_pocztowy'] = '<div style=padding-top:2px><img src=/images/alert.png></div>Błąd: Kod pocztowy nie istnieje.';
  19. }
  20.  
  21. if($postcode == ''){
  22. $errors['kod_pocztowy'] = '<div style=padding-top:2px><img src=/images/alert.png></div>Błąd: Nie wpisano kodu pocztowego.';
  23. }
  24.  
  25. elseif(strlen($postcode) <='5'){
  26. $errors['kod_pocztowy'] = '<div style=padding-top:2px><img src=/images/alert.png></div>Błąd: Podano błedny format.';
  27. }
  28.  
  29. elseif(!preg_match("/^([0-9]{2})(-[0-9]{3})?$/i",$postcode)){
  30. $errors['kod_pocztowy'] = '<div style=padding-top:2px><img src=/images/alert.png></div>Błąd: Podano błednie kod pocztowy.';
  31. }
  32.  
  33. if($city == ''){
  34. $errors['miasto'] = '<div style=padding-top:2px><img src=/images/alert.png></div>Błąd: Nie wpisano miasta.';
  35. }
  36.  
  37. elseif(strlen($city) <='2'){
  38. $errors['miasto'] = '<div style=padding-top:2px><img src=/images/alert.png></div>Błąd: Podano mniej niż 3 znaki.';
  39. }
  40.  
  41. elseif(!preg_match('/^[()-a-ząćęłńóśźż\040]+$/ui', $city)){ //dodać nawias ()
  42. $errors['miasto'] = '<div style=padding-top:2px><img src=/images/alert.png></div>Błąd: Podano nieprawidłowe znaki.<br> Dozwolone znaki to: a-ż, A-Ż.';
  43. }
  44.  
  45.  
  46.  
  47. if($street == ''){
  48. $errors['ulica'] = '<div style=padding-top:2px><img src=/images/alert.png></div>Błąd: Nie wpisano adresu.';
  49. }
  50.  
  51. elseif(strlen($street) <='5'){
  52. $errors['ulica'] = '<div style=padding-top:2px><img src=/images/alert.png></div>Błąd: Podano za mało znaków.';
  53. }
  54.  
  55. if(empty($errors)){
  56. unset($_SESSION['step3']);
  57. unset($step3);
  58. }
  59.  
  60.  
  61. $result = "INSERT INTO DODAJE DO BAZY";
  62. $sql = mysql_query($result);
  63.  
  64. if($sql){
  65. $komunikat3='Gratulacje! Rejestracja ukończona pomyślnie.';
  66. $step4 = '1';
  67. $_SESSION['step4'] = $step4;
  68. }
  69.  
  70. }
  71. }



HTML:

  1. <form method="post" name="FormRegisterEnd">
  2. <div class="tab_registration">
  3. <div style="padding:30px;">
  4. <div style="min-width:120px; display:inline; float:left; font-weight:bold;">*Kod pocztowy:</div>
  5. <div style="display:inline; width:400px; margin-left:30px;">
  6. <input type="text" name="kod_pocztowy" onChange="document.FormRegisterEnd.submit();" value="<?php if(isset($postcode)){print(''.zabezpiecz($_POST['kod_pocztowy']).'');}?>" style="width:350px;" class="input_search" id="kod_pocztowy">
  7. </div>
  8. <div style="width:400px; margin-top:-50px; margin-left:535px; display:inline; float:left;" id="kod_pocztowyerr"></div>
  9. </div>
  10. </div>
  11. <div class="tab_registration">
  12. <div style="padding:30px;">
  13. <div style="min-width:120px; display:inline; float:left; font-weight:bold;">*Miasto:</div>
  14. <div style="display:inline; width:400px; margin-left:30px;">
  15.  
  16. <div id="suggest" style="margin-left:150px;">
  17. <input type="text" name="miasto" style="width:350px;" class="input_search" id="miasto" value="<?php if(isset($city)){print(''.zabezpiecz($_POST['miasto']).'');}?>" onkeyup="suggest(this.value);" onblur="fill();" autocomplete="off">
  18. <div class="suggestionsBox" id="suggestions" style="display: none; width:375px; margin-top:-3px;">
  19. <div class="suggestionList" id="suggestionsList"></div>
  20. </div>
  21. </div>
  22.  
  23. </div>
  24. <div style="width:400px; margin-top:-50px; margin-left:535px; display:inline; float:left;" id="miastoerr"></div>
  25. </div>
  26. </div>
  27.  
  28. <div class="tab_registration">
  29. <div style="padding:30px;">
  30. <div style="min-width:120px; display:inline; float:left; font-weight:bold;">*Adres (ul. i nr.):</div>
  31. <div style="display:inline; width:400px; margin-left:30px;">
  32. <input type="text" name="ulica" value="<?php if(isset($street)){print(''.zabezpiecz($_POST['ulica']).'');}?>" style="width:350px;" class="input_search" id="ulica" onkeyup="suggest2(this.value);" autocomplete="off">
  33. </div>
  34. <div style="width:400px; margin-top:-50px; margin-left:535px; display:inline; float:left;" id="ulicaerr"></div>
  35. </div>
  36. </div>
  37.  
  38. <div style="width:880px; margin-top:30px;">
  39. <div style="padding:30px;">
  40. <div style="min-width:250px; display:inline; font-weight:bold;"></div>
  41. <div style="display:inline; width:320px; margin-left:430px;">
  42. <input type="submit" name="FormRegisterEnd" class="button" value="Zakończ">
  43. </div>
  44. </div>
  45. </div>


Na chwilę obecną mam to zrobione tak , że po wpisaniu kodu pocztowego pobieram wartość przy pomocy:

  1. onChange="document.FormRegisterEnd.submit();"


Następnie wartość ta jest odczytana w JS , po czym przesłana do innego pliku i utworzone zostaje zapytanie do mySQL, tu jest odebrane i wyświetlony wynik w sugestiach (w podpowiedziach) przy miasto. Do tej pory jest ok. Teraz jeśli wybiorę miasto z listy np takie które będzie miało kilka ulic odpowiadające tej miejscowości i kodzie pocztowemu to w input ulica wyświetli mi tą ulicę. Teraz chcę tu zrobić taki myk, że jeśli będzie więcej niż 1 ulica to pokaże mi select lub ewentualnie podpowiedzi tych ulic , a jak mniej niż lub równe 1 to pokaże mi zwykły input. Myślę, że zrozumieliście o co chodzi. Dodatkowo chciałbym odczytać i wstawić do formularza może być to już jako ukryte pole takie dane jak województwo , gmina powiat, oczywiście te dane znajdują się tabeli "miejscowosci_i_kody"
Liczę na waszą pomoc. Dzięki :-)