Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX] Zależne pole SELECT
peja1990
post
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 4.12.2010

Ostrzeżenie: (10%)
X----


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. }


Ten post edytował peja1990 2.06.2011, 23:06:22
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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ę (IMG:style_emoticons/default/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ę?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 06:25