Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] Zależne pole SELECT
Forum PHP.pl > Forum > XML, AJAX
peja1990
Witam.
Czy byłby ktoś w stanie pomóc mi ze skryptem AJAX ?
Oto skrypt, który należałoby przerobić: http://www.dhtmlgoodies.com/scripts/ajax-c...ned-select.html

Przeróbka miałaby działać na zasadzie takiej, że dane w polach select (pierwszym jak i drugim) byłyby wyciągane z bazy danych mySQL.

Zależny select ?
Chodzi o to, żeby w zależności od wyboru w pierwszym polu select opcje w drugim polu select zmianiały się bez przeładowania strony.

Pierwszy select ma wyciągać następujące dane:
ID użytkownika, jego imię, nazwisko oraz nazwę firmy, lecz jako value będzie tylko "ID".
Przykład: <option value="1">Moja firma - Jan Kowalski (1)</option>

Drugi select ma wyciągać następujące dane:
ID usługi i nazwę usługi w zależności od id klienta, który został wybrany w powyższym polu select.
Sprawdzam czy dany użytkownik ma dostępne odpowiednie usługi i drukujemy opcje w drugim polu select
Przykład: <option value="123">123 - Typ zamówienia #1</option>
//<option value="ID">ID - Nazwa usługi</option>

Za pomoc byłbym niezmiernie wdzięczny !
Za każdą odpowiedź daję "Pomógł" !


Dodam jak wygląda okrojona struktura bazy danych oraz kod PHP (aktualnie):

Struktura bazy danych mySQL:
  1. CREATE TABLE IF NOT EXISTS `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  4. `firm` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  5. `surname` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1;
  8.  
  9.  
  10. CREATE TABLE IF NOT EXISTS `orders` (
  11. `id` int(11) NOT NULL AUTO_INCREMENT,
  12. `id_user` int(11) NOT NULL,
  13. `type` enum('0','1','2','3','4','5','6') DEFAULT '1',
  14. PRIMARY KEY (`id`)
  15. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;


Kod PHP:
  1. $query = mysql_query("SELECT id_user,ex_www FROM orders WHERE id='".(int)$_GET['id']."' LIMIT 1") or die (mysql_error());
  2. while($row = mysql_fetch_array($query)) {
  3. $idu = mysql_query('SELECT id,name,surname,firm FROM users') or die (mysql_error());
  4. while($user = mysql_fetch_array($idu)) {
  5. echo '<option value="'.$user['id'].'">'.$user['firm'].' - '.$user['name'].' '.$user['surname'].' ('.$user['id'].')</option>';
  6. }
  7. $count = mysql_fetch_array(mysql_query("SELECT count(id) as how_much FROM orders WHERE status!='0' AND (type='1' OR type='2' OR type='5') AND id_user='".$row['id_user']."'")) or die (mysql_error());
  8. if($count['how_much']==0) {
  9. echo '<option value="">brak odpowiednich zamówień</option>';
  10. }
  11. elseif($count['how_much']>0) {
  12. $oquery = mysql_query("SELECT id,type FROM orders WHERE status!='0' AND (type='1' OR type='2' OR type='5') AND id_user='".$row['id_user']."'") or die (mysql_error());
  13. while($order = mysql_fetch_array($oquery)) {
  14. echo '<option value="'.$order['id'].'">'.$order['id'].'';
  15. if($order['type']==1) {
  16. echo ' - Typ zamówienia #1';
  17. }
  18. elseif($order['type']==2) {
  19. echo ' - Typ zamówienia #2';
  20. }
  21. elseif($order['type']==5) {
  22. echo ' - Typ zamówienia #3';
  23. }
  24. echo '
  25. </option>
  26. ';
  27. }
  28. }
  29. }
thek
Ech... Jako pierwszy SELECT robisz:
a) Z mostu wszystkich userów wygenerowanych i masz problem z głowy w tej części, ale sens to ma jedynie przy mniejszej liczbie pozycji. Przeciskaj się przez select z 300 pozycjami to mnie zrozumiesz... Pewnie ludzie nerwicy dostają mając skrypty gdzie "pomysłowi" walnęli lata 1900-2011 jako rok urodzenia w select własnie biggrin.gif
cool.gif robisz pole input jako autocomplete. Więcej z tym zachodu, ale możesz kapitalnie na tym zyskać

Drugi select to naprawdę niewiele przerobiony skrypt z linka, gdzie po prostu jako cel masz plik php na serwerze. Jeśli do całości zaprzęgniesz jQuery, które ma baaaaaaardzo uproszczoną obslugę ajaxa, tak by nawet debil sobie poradził, to zrobienie tego skryptu nie potrwa nawet dla Ciebie długo. Uwierz, że to naprawdę nie jest trudne... Wystarczy na moment usiąść i zrozumieć JAK to działa smile.gif
peja1990
Kolegaaa, Ty mi tutaj piszesz o jakiś inputach i autocopleteach + jakaś data urodzenia ? No bez kitu.
Odchodzisz całkowicie od tematu, a co do tego:
Cytat
Drugi select to naprawdę niewiele przerobiony skrypt z linka, gdzie po prostu jako cel masz plik php na serwerze. Jeśli do całości zaprzęgniesz jQuery, które ma baaaaaaardzo uproszczoną obslugę ajaxa, tak by nawet debil sobie poradził, to zrobienie tego skryptu nie potrwa nawet dla Ciebie długo. Uwierz, że to naprawdę nie jest trudne... Wystarczy na moment usiąść i zrozumieć JAK to działa

Mowa o AJAX'ie a Ty piszesz o jQuery... Do tego, jeżeli to takie proste to może gotowe rozwiązanie ?! Hmmm...
thek
Ty chyba nie masz pojęcia do końca o czym mówię tylko chcesz gotowca i koniec... Z jednej strony walisz, że chcesz AJAX, a gdy Ci podpowiadam, że AJAX jest bardzo prosty w implementacji przy użyciu jQuery i polecam byś skorzystał z tego do zrobienia skryptu to uważasz że gadam od rzeczy smile.gif Poza tym gdy wspominam o możliwych minusach zastosowania pola select dla pierwszego pola wyboru, które sprawi, że drugie zostanie uzupełnione pasującymi to także uważasz, że gadam nie na temat. Zwyczajnie jednak chyba dalej sięgam wzrokiem niż Ty w tej chwili. Wspomnisz te słowa, gdy w pierwszym select pojawi się do wyboru kilkaset pozycji smile.gif W pierwszym select będziesz miał do wyboru użytkownika, a tych szybko będziesz miał kilkuset, a z czasem pewnie kilka tysięcy, zaś select reaguje jedynie na pierwszą literę jako podpowiedź. Dodam, że przeglądarki mają problem z takimi dużymi select i zwyczajnie "wycinają" wszystkie option powyżej określonej ilości. Wiedziałeś o tym fakcie? Sądzę, że nie...

I nie, nie podam Ci gotowca oraz nie sądzę, że Ci się będą ludzie specjalnie nad kodem grzebać "bo Ty tak chcesz" i "ma być zgodnie z tym co napisałeś". Można dać wskazówki, zasugerować narzędzia czy rozwiązania. To co podałeś jako kod to proste wygenerowanie optionów na podstawie bazy, co akurat jest najprostszą częścią tego skryptu. Zresztą i tak moim zdaniem źle podchodzisz do tego, ponieważ nie powinieneś tworzyć od razu optionów, ale przekazać dane jako JSON i JavaScript (a więc choćby jQuery właśnie) dopiero z tego by select utworzyło. Zupełnie oczywiście zapomniałem, że i tak będziesz to musiał zrobić przy tym drugim select, tworzonym dynamicznie. No ale przecież ja się nie znam, piszę nie na temat, skryptu takowego zapewne nigdy w życiu nie zrobiłem, zaś to Ty masz rację wink.gif

I chciałbym, byś nie próbował bluzgać ( jeśli jeszcze nie zauważyłeś, to owe dotychczasowe 10% ja Ci "wymierzyłem"), bo to co napisałem jest pomocą, ale nie jest gotowcem i nie miało nim być. Osoba inteligentna te sugestie by zwyczajnie wykorzystała wraz z analizą kodu jaki w linku sam podałeś. Tak trudno zerknąć w źródło tej strony i samemu pokombinować trochę?
peja1990
Piękna litania, ale nie wiesz ilu będę miał użytkowników i zapewniam Cię, że nie będą ich tysiące ? Jak chciałbyś wykorzystać do tego pole input ?
Musiałbym znać ID każdego użytkownika lub w innym module szukać jego ID, a to bez sensu, dlatego chcę je wyciągać z bazy do pola select.
Powiem tak, że nie chodzi mi o gotowca ale również nie o takie sugestie i "podpowiedzi" jakich mi udzieliłeś gdyż bardzo słabo znam JS czy Ajax, dlatego nie wiem jak obchodzić się m.in. z case'ami itp.
Jeżeli nie potrafisz udzielić mi lepszych odpowiedzi jak dotychczas to powiem tyle "nie pomagasz".
Zapewne komuś kto dobrze zna w/w technologie Twoje sugestie by pomogły tylko czy w takiej sytuacji prosiłby o pomoc na forum ? Nie sądzę.
Rid
Cytat
słabo znam JS czy Ajax, dlatego nie wiem jak obchodzić się m.in. z case'ami

Powiem Panu ,wiedza w/w technologi sama do Pana nie przyjdzie,trzeba usiąść czytać tutoriale,przeglądać fora gdzie inni mieli podobne problemy do Pana i uczyć się na ich błędach.Co z tego ,jak ktoś Panu napisze gotowca ,jak ni w ząb nie będzie Pan nic z tego wiedział.

PS.Case jest to standardowa instrukcja wyboru dostępna w C++,C#,PHP,JS,J#,VB i kij wie jeszcze w jakich językach programowania.
peja1990
Ok mistrzowie, ogarnę to z Waszą pomocą czy bez niej. Dzięki.
thek
Popatrz jak PROSTO wygląda AJAX w jQuery: http://api.jquery.com/jQuery.ajax/

Tu masz niemal gotowca od strony usera: http://plugins.jquery.com/project/cascade
Pozostaje Ci jedynie wziąć firebuga i zobaczyć jaki jest format danych...

...albo zerknąć na porządny tutorial, który wałkuje wszystko od A do Z i dopasować do swoich potrzeb. Taki stęp masz choćby http://remysharp.com/2007/01/20/auto-popul...ng-jquery-ajax/

Naprawdę tak ciężko dla Ciebie uzyć wyszukiwarki by wpisać: jquery select ajax mysql
by dostać linki takie jak:
http://www.9lessons.info/2010/08/dynamic-d...-box-using.html
http://www.blueicestudios.com/chained-sele...php-mysql-ajax/

Czy naprawdę trzeba z tym koniecznie na forum lecieć zamiast użyć szarych komórek właściwie? Powiedz mi, ile to wysiłku wpisać te 4 słowa do wyszukiwarki i mieć w sumie gotowce, które nieco tylko przerobisz do swoich potrzeb? A myślisz, że ja od urodzenia znałem JS i AJAX? Też się musiałem uczyć i wtedy google nie zwracało tylu wyników. Ale potrafiłem siąść nad kodem i go przewałkować tak, że w końcu załapałem o co biega. I było to na poziomie czystego JS, gdzie musiałem się srać z obiektami xmlhttprequest i zwracać uwagę na to jaka przeglądarka odpala skrypt, bo inaczej robił to IE, inaczej firefox, czego już przy użyciu jquery nie musisz wiedzieć. Dlatego popatrz na linki, popatrz ile mi trzeba było wpisać w wyszukiwarkę by je znaleźć i powiedz sobie ale uczciwie, czy dla mnie bądź Rida w takiej sytuacji Twój problem to nie jest zwykłe lenistwo? Skoro tak prosto uzyskałem odpowiedź w postaci gotowych linków z pełnymi tutorialami jak to zrobić (to nie były specjalnie wybrane, ale od razu pierwsze na stronie po wpisaniu owych słów kluczowych), to zastanów się, czy jako programista i wogóle internauta masz przyszłość, skoro nawet wyszukiwarki nie umiesz używać?
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.