Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Select-selected - kryterum dla kolejnego wyboru
Forum PHP.pl > Forum > Bazy danych > MySQL
Dafidov
Pewnie się wyda Wszystkim że temat jest juz wyczerpany, przejżałem forum i znalazłem kilka ciekawych topiców:
<option selected>
Przywrócenie wartości pola w form
Pobieranie z bazy mysql wartości dla pola select
i nawet ambitny bardzo pomysl z wykorzystaniem ajaxa

Niestety zasób tej wiedzy nie jest wystarczający aby pomóc mi z moim kłopotem.

Posiadam formularz w którym mam kilka pól wyboru i chciał bym aby każde kolejne pole zostało ograniczone przez wczesniejszego selecta, a ponieważ korzystam z takiej oto funkciji sprawdzającej czy dane zostały wprowadzone do formularza nie wiem czy da się to wogóle zrobić tak jak chce...
Oto funkcja:
  1. <?php
  2.  
  3. if (isset($_POST['submit'])) { // Obsłuż formularz.
  4. // Zarejestruj uzytkownika w bazie danych.
  5. require_once ('inc/mysql_connect.php'); // Połącz się z bazą danych.
  6.  
  7. // Utworz funkcję wstawiającą przed znakami specjalnymi znak odwrotnego ukośnika.
  8. function escape_data ($data) {
  9. global $dbc; // Potrzebujemy połączenia.
  10. if (ini_get('magic_quotes_gpc')) {
  11. $data = stripslashes($data);
  12. }
  13. return mysql_real_escape_string($data, $dbc);
  14. } // Koniec funkcji.
  15.  
  16. $message = NULL; // Utwórz nową, pustą zmienną.
  17.  
  18.  
  19. $sb = escape_data($_POST['id_kierunek']);
  20. $sc = escape_data($_POST['id_wydzial']);
  21. $sd = escape_data($_POST['id_rok_akad']);
  22. $se = escape_data($_POST['id_prz_pr_na']);
  23. $sf = escape_data($_POST['rok']);
  24. $sg = escape_data($_POST['id_pracownik']);
  25. $sh = escape_data($_POST['grupa']);
  26.  
  27. ?>


Pod zmiennymi wstawiam konkretne pola z formularza według których chcę dokonać ograniczeń.

Oto dwa przykładowe pola formularza wobec których chciał bym zastosować te ograniczenia:
  1. Rok studiów: <select name="rok" selected="<?php if (isset($_selected['rok'])) echo $_POST['rok']; ?>"/>
  2. <?php
  3. $query = "select distinct left(skrot,1) as rok from grupa";
  4. $result = mysql_query($query);
  5.  
  6. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  7. echo "<option value=\"{$row['rok']}\">{$row['rok']}</option>\n";
  8. }
  9. echo '</select>';
  10. ?><br /><br />
  11.  
  12. Wybierz grupę: <select name="grupa" selected="<?php if (isset($_selected['grupa'])) echo $_POST['grupa']; ?>"/>
  13. <?php
  14. $query = "select distinct id, skrot from grupa where skrot like '$sf%' and id_wydzial like '$sc' and id_kierunek like '$sb' and id_rok_akad like '$sd'";
  15. $result = mysql_query($query);
  16.  
  17. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  18. echo "<option value=\"{$row['id']}\">{$row['skrot']}</option>\n";
  19. }
  20. echo '</select>';
  21. ?><br /><br />


Tabela grupa wygląda tak:


Proszę o pomoc ponieważ nie mam już pomysłów i nie potrafie sam sobie poradzić z tym problemem sad.gif

Z góry dziękuję smile.gif
phobos
a te zapytania nie zwracaja czasem wiecej niz jednego rezultatu questionmark.gif
Dafidov
Zapytania zwracają listę którą wykorzystuje w selekcie.
Z niej wybieram jedna wartosc i chce ja przekazac dalej, tylko nie wiem jak to zrobic i czy da sie to zrobic.

zapytanie
  1. $query = "select distinct left(skrot,1) as rok
  2. from grupa";
zwraca mi liste lat z ktorej wybierajac jeden rok chce aby organiczyl mi w zapytaniu
  1. SELECT DISTINCT id, skrot
  2. FROM grupa
  3. WHERE skrot LIKE '$sf%' AND id_wydzial LIKE '$sc' AND id_kierunek LIKE '$sb' AND id_rok_akad LIKE '$sd'
do jednego rekordu na podstawie wybranych wczesniej selektow.

Nie wiem czy jest to w 100% zrozumialem ale w razie niejasnosci postaram sie precyzyjniej okreslic co mam na mysli.
Moze w celu wyjasnienie jeszcze taka mala uwaga - skrot w tabeli grupa to dwie cyfry z ktorej pierwsza identyfikuje rok czyli mamy 11,12,13,14,21,22,23,24... itd (przykladowo po 4 grupy w roku) i dziki wyborze
  1. $query = "select distinct left(skrot,1) as rok
  2. from grupa";
a pozniej
  1. SELECT DISTINCT id, skrot
  2. FROM grupa
  3. WHERE skrot LIKE '$sf%' ...
wyselecjonuje dokladnie jednen rekord ktory potrzebuje - potrzebuje tylko do tego wiedziec jak przekazac wartosci selectow wczesniejszych tak aby mi w momencie ich wyboru zostaly zapamietywane pod moimi zmiennymi '$s*' i ograniczyly tego ostatniego selecta
  1. SELECT DISTINCT id, skrot
  2. FROM grupa
  3. WHERE skrot LIKE '$sf%' AND id_wydzial LIKE '$sc' AND id_kierunek LIKE '$sb' AND id_rok_akad LIKE '$sd'


Ma kos jakis pomysl jak rozwiazac ten problem?
060156
Potrzebujesz,
sledzic stany przy kolejnych selectach ..
Uzyj php session, gdzie mozesz te informacje
zapamietywac i np. ich i database generowac
wlasciwe dane do web page ..
Dafidov
Szukałem i natrafiłem jeszcze na Classa Bee Selected ale ta Classa odwołuje się do dwóch selectów ja u siebie wykorzystuje 3 zapytnia zależne więc jest to bardziej kłopotliwe, myśle nawet o rzobiciu tego na dwa mniejsze kroki gdyż jest to mocno problematyczne wyłuskanie danych.

edit:

Zrobiłem to tak jak 060156 sugerowal - zapamietalem zmienne w zmiennych sesyjnych i zrobilem dwa formularze jedne wiarzacy jedne dane w prae drugi wybierajacy trzecia dana a potem wszystko wlanalem do jendej transakcji i w koncu smiga jak trzeba 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-2024 Invision Power Services, Inc.