Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Lista wyboru produktów
Forum PHP.pl > Forum > Bazy danych
okoolarnik
Witam.

Mam 3 różne tabele w bazie danych: sections, categories, product

sections - id | name
categories - id | name | section
product - id | name | category

Chciałbym wykonać listę wyboru dla każdej z tabel, lecz w taki sposób, że w pierwszej byłaby możliwość wyboru każdej z sekcji, lecz w drugiej byłyby tylko opcje, w których section=id sekcji wybranej w poprzedniej liście, analogicznie trzecia lista pokazywałaby tylko opcje dostępne dla wybranej kategorii.

Znalazłem jakiś skrypt java z trzema listami opcji, ale nie udało mi się go przerobić.

Czy ktoś ma jakiś pomysł ?

Znajomość JavaScript - brak
Znajomość AJAX - tym bardziej brak ;(

Próbowałem obejść ten problem i zrobiłem to za pomocą odnośników w pętlach
  1. <div class="form_row">
  2. <label>wybierz produkt: </label>
  3. </div>
  4. <div class="form_row">
  5. <?php
  6. $querya=mysql_query("SELECT * FROM products_sections");
  7. echo '<ul class="ul_a">';
  8. while($rowa=mysql_fetch_array($querya))
  9. {
  10. echo '<li class="li_a"><a>';
  11. echo $rowa['name'];
  12. $queryb=mysql_query("SELECT * FROM products_categories WHERE section=".$rowa['id']);
  13. echo '</a><ul class="ul_b">';
  14. while($rowb=mysql_fetch_array($queryb))
  15. {
  16. echo '<li class="li_b"><a>';
  17. echo $rowb['name'];
  18. $queryc=mysql_query("SELECT * FROM products_details WHERE category=".$rowb['id']);
  19. echo '</a><ul class="ul_c">';
  20. while($rowc=mysql_fetch_array($queryc))
  21. {
  22. echo '<li class="li_c"><a href="index.php?content=products&section='.$rowa['id'].'&category='.$rowb['id'].'&product='.$rowc['id'].'">';
  23. echo $rowc['name'];
  24. echo '</a></li>';
  25. }
  26. echo '</ul></li>';
  27. }
  28. echo '</ul></li>';
  29. }
  30. echo '</ul>';
  31. ?>
  32. </div>


Po dodaniu odpowiedniego css działa prawie super, ale jest kolejny problem :
Nie potrafię sprawić, żeby w formularzu dodania zlecenia zapamiętane zostały wprowadzone wcześniej dane.
altruista2
To rozwiązanie będzie ok, tylko wtedy gdy ta lista nie będzie za długa, w przeciwnym wypadku będziesz musiał zrobić to w AJAXie, albo zwyczajnie przeładowywać stronę:

  1. <?
  2. $q1 = mysql_query("SELECT id,name FROM product_sections WHERE 1");
  3. $q2 = mysql_query("SELECT id,name,section FROM product_categories WHERE 1");
  4. $q3 = mysql_query("SELECT id,name,category FROM product_products WHERE 1");
  5. $sections = Array();
  6. $categories = Array();
  7. $products = Array();
  8. while(list($id, $name) = @mysql_fetch_row($q1)) $sections[$id] = $name;
  9. while(list($id, $name, $section) = @mysql_fetch_row($q2)) $categories[$section][$id] = $name;
  10. while(list($id, $name, $category) = @mysql_fetch_row($q3)) $products[$category][$id] = $name;
  11. ?>
  12.  
  13. <form name="forma">
  14. <select name="s1" onchange="fill2()"></select>
  15. <select name="s2" onchange="fill3()"></select>
  16. <select name="s3"></select>
  17. </form>
  18. <script type="text/javascript" language="javascript">
  19. var sections = new Object();
  20. var categories = new Object();
  21. var products = new Object();
  22. <?
  23. foreach($sections as $id => $name) echo "sections[$id] = '$name';\n";
  24. foreach($categories as $section => $category) {
  25. echo "categories[$section] = new Object();\n";
  26. foreach($category as $id => $name) echo "categories[$section][$id] = '$name';\n";
  27. }
  28. foreach($products as $category => $product) {
  29. echo "products[$category] = new Object();\n";
  30. foreach($product as $id => $name) echo "products[$category][$id] = '$name';\n";
  31. }
  32. ?>
  33.  
  34. var form = document.forms['forma'];
  35. function fill1() {
  36. form['s1'].length = 0;
  37. for(id in sections) {
  38. form['s1'].options.add(sections[id],id);
  39. }
  40. }
  41. function fill2() {
  42. var sel = form['s1'].options[form['s1'].selectedIndex].value;
  43. form['s2'].length = 0;
  44. for(id in categories[sel]) {
  45. form['s2'].options.add(categories[sel][id], id);
  46. }
  47. }
  48. function fill3() {
  49. var sel = form['s2'].options[form['s2'].selectedIndex].value;
  50. form['s3'].length = 0;
  51. for(id in products[sel]) {
  52. form['s3'].options.add(products[sel][id], id);
  53. }
  54. }
  55. fill1();
  56. </script>


Napisałem to na szybko więc może coś nie działać, ale to wystarczy tylko poprawić smile.gif
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.