Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pole zależne od innego pola z danymi z Mysql
Forum PHP.pl > Forum > PHP
maxcv5123
Mam formularz z polem kategorii typu select. Mam też drugie pole które ma się pojawić po wybraniu kategorii. Pole to może być select lub input zależnie od wybrania odpowiedniej kategorii. Jeśli drugie pole będzie select to dane do tego pola mają być pobierane z bazy danych zależnie od wybranej kategorii.
Szukam jakiegoś przykładu i szukam... jedynie co znalazłem to poradniki jak zrobić 'pole zależne od innego pola' działa to jednak tak, że przy wczytaniu strony ładuje wszystkie pola, a część z nich jest po prostu ukryta. A mi potrzeba czegoś innego, bo nie mogę ładować wszystkich danych od razu. Mam tego zbyt dużo. Bardzo bym prosił o nakierowania na jakiś przykład/poradnik, a dalej sobie poradzę.
Crash89
https://www.w3schools.com/xml/ajax_intro.asp

Po wybraniu opcji selecta, przez ajaxa ładujesz potrzebne dane.
maxcv5123
dzięki smile.gif rozwiązałeś sporo moich problemów

EDIT: Jednak mam jeszcze jeden problem. Mam pole input typu autocomplet tak aby po wpisaniu pierwszych liter jakiegoś słowa pokazało podpowiedz pasujących słów.
Jeśli pole
  1. <input type="text" id="autocomplete-custom1" >
  2. <input type="text" name="selectcustom1_id" id="selectcustom1_id" />

zostanie 'załadowane' za pomocą xmlhttp.open niestety nie chce działać poprawnie czyli nie pokazuje podpowiedz pasujących słów.

Fragment kodu z pliku formularza
  1.  
  2. <select name="lista" id="lista" onchange="showCustomer(this.value)">
  3. <option value="0">jeden</option>
  4. <option value="1">dwa</option>
  5. <option value="2">trzy</option>
  6. </select>
  7.  
  8. <div id="txtHint"> Tu pokaże nowe pola po wybraniu czegoś z powyższej listy</div>
  9.  
  10.  
  11.  
  12. // Skrypt odpowiedzialny za załadowanie nowych danych do div'a 'txtHint' po wybraniu czegoś z listy
  13. <script>
  14. function showCustomer(str) {
  15. if (str=="") {
  16. document.getElementById("txtHint").innerHTML="";
  17. return;
  18. }
  19. if (window.XMLHttpRequest) {
  20. // code for IE7+, Firefox, Chrome, Opera, Safari
  21. xmlhttp=new XMLHttpRequest();
  22. } else { // code for IE6, IE5
  23. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  24. }
  25. xmlhttp.onreadystatechange=function() {
  26. if (this.readyState==4 && this.status==200) {
  27. document.getElementById("txtHint").innerHTML=this.responseText;
  28. }
  29. }
  30. xmlhttp.open("GET","showfield.php&idfield="+str,true);
  31. xmlhttp.send();
  32. }
  33. </script>
  34.  
  35. // Skrypt odpowiedzialny za pole autocomplete, który wysyła dane do fieldauto.php gdzie wszystko jest pobierane z bazy danych w pętli while
  36. <script type='text/javascript' >
  37. $( function() {
  38. $( "#autocomplete-custom1" ).autocomplete({
  39. minLength: 2,
  40. source: function( request, response ) {
  41. $.ajax({
  42. url: "fieldauto.php",
  43. type: 'post',
  44. dataType: "json",
  45. data: {
  46. search: request.term,
  47. },
  48. success: function( data ) {
  49. response( data );
  50. }
  51. });
  52. },
  53. select: function (event, ui) {
  54. $('#autocomplete-custom1').val(ui.item.label); // display the selected text
  55.  
  56. $('#selectcustom1_id').val(ui.item.value); // save selected id to input
  57.  
  58. return false;
  59. }
  60. });
  61.  
  62. });
  63.  
  64. function split( val ) {
  65. return val.split( /,\s*/ );
  66. }
  67. function extractLast( term ) {
  68. return split( term ).pop();
  69. }
  70. </script>

W showfield.php
mam na razie jedynie taki kod
  1. echo '<input type="text" id="autocomplete-custom1" >
  2. <input type="text" name="selectcustom1_id" id="selectcustom1_id" />';


Podsumowując jeśli powyższy fragment umieszczam od razu w kodzie formularza, to pole działa. Ale mi nie chodzi o to by wszystkie pola wyświetlić od razu w formularzu, chcę je wyświetlić tylko wtedy jeśli użytkownik wybierze 'coś' z list. Po wybraniu czegoś z listy, pola 'magicznie' się pojawiają w formularzu, ale pole typu autocomplete nie pokazuje propozycji, zero reakcji. Jakiś konflikt script? co robię źle?

EDIT: Po 10 godzinach szukania rozwiązania już sobie poradziłem. Wszytko trzeba robić za pomocą "ajax post"
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.