Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Zależne od siebie pola Select
Forum PHP.pl > Forum > Przedszkole
coolthx
Witam mam maly problem - szukalem na forum ale nic takiego nie znalazlem sad.gif
Czy ktoś może mi pomóc questionmark.gif bo nie wiem w jaki sposób zrobic aby dwa pola wyboru select byly od siebie zależne questionmark.gif np:
1 pole select to np: miesiąc
- styczeń
-.....
- grudzień
2 pole select to np: rok
- 2004
- ......
- 2008

a tabela dla przekladu zawiera np:
id , nazwa i kolumny liczbowe np:

1, xxx, 1234.89 , 564645.68

Bardzo proszę o pomoc smile.gif albo o wskazówki gdzie mogę tego szukać questionmark.gif smile.gif
Pozdrawiam i dziękuję smile.gif
rodia
Musisz trochę lepiej określić o co dokładnie ci chodzi bo z tego co napisaleś nie da się wywnioskować. Co dla ciebie znaczy, ze pola są "zależne"?
Napisz dokładnie w czym problem to go rozwiążemy.
coolthx
Witam a wiec chodzi dokladnie o to ze jezeli wybiore z pierwszego pola select miesiac np styczen a z drugiego pola select wybiore rok np: 2008 to zwroci mi to odpowiedz pobierajac odpowiedni rekord (wynikalo by na to ze musza te dwa pola wybru select byc ze soba powiazane tak jak jest to np przy mozliwosci wyboru na stronie www.gratka.pl)
baszkir
Troche "zamotales" z tym wytlumaczeniem.
O ile dobrze zrozumialem twoje intencje to wartosci otrzymane z jednego pola select i drugiego pola select maja byc pewnym warunkiem do pobrania danych z bazy.

Tylko niestey dalej nie rozumiem w czym jest problem, bo chyba nie w tym jak pobrac wartosci przeslane przez formularz ($_POST['nazwa_zm'] lub $_GET['nazwa_zm']).

Najlepiej daj kod formularza, oraz strukture bazy a nastepnie napisz dokladnie co ma byc wybierane w jakims konkretnym przypadku.
coolthx
Podaje kod:
Formularz html
[html]
<b>Wyszukiwarka danych</b><br><br>


<form action="wyniki2.php" method="post">
Szukaj na podstawie:<br>
<select name="miesiac">
<option value="styczen">Styczeń
<option value="luty">Luty
<option value="marzec">Marzec
</select>
<br>
Szukane hasło<br>
<select name="rok">
<option value="2004">2004
<option value="2005">2005
<option value="2006">2006
<option value="2007">2007
</select>

<input type=submit value="szukaj">
</form>
<BR><A HREF="index.php">Powrót do Menu</A>
[html]

struktura bazy sql:
id;nazwa;k41;k42......k812

opis k41 - rok 2004 miesiac styczen
k42 - rok 2004 miesiac luty i analogicnie
k812 - rok 2008 miesiac grudzien

i chodzi o to ze jak wybiore z 1 selecta styczen a z drugiego np rok 2008 to zwroci mi to z bazy danych wlasnie ten rekord smile.gif
baszkir
wiem ze jeszcze pozno nie jest, ale moja percepcja jest jakos ograniczona i nie do konca lapie o co chodzi z ta struktura bazy:

Cytat
id;nazwa;k41;k42......k812


Jakbys mogl jeszcze raz mi to wytlumaczyc:

1) przez strukture rozumiem jakie pola ma Twoja baza, jakiego typu i jak sie nazywaja (akurat id jest jasne), bo nie wiem czy k41 to pole w bazie o takiej nazwie czy moze wartosc w polu o jakiejs kompletnie innej nazwie

2) jak zapisujesz dane w odpowiednich polach (lub lepiej daj jeden, albo dwa pelne rekordy z bazy)

Jak na razie nie jest dla mnei jasne dlaczego skonczyles na k812 - bo tylko tyle masz pol w bazie czy po prostu taki sobie luzny przyklad. Jezeli natomiast ten "kod" k41, k42 itd to wartosci pol, to czy nie lepiej jako value w <option> dac liczby stosowne do koncowki roku i miesiaca ?
coolthx
a wiec te kody takie jak :
k41....k812 to sa nazwy kolumn a w tych komórkach znajduja sie pola liczbowe float 10.2
podaje przyklad jednej wartosci :
id|nazwa|k41 |k42 |........|k812
1 |xxxx |12345.34 |3456.678|........|54327.90
i nie moge tego pobierac w taki sposób jak zaproponowales sad.gif na samym poczatku chcialem uzyc tablic ale full kodu niepotrzebnego (chodzi mi o cos podobnego tak jak jest mozliwosc wybierania z opji select na stronie www.gratka.pl)
baszkir
Ok, to chyba lepi o co Ci chodzi.

Czyli tak:
masz table z polami takie jak wpisales (od k41 do k812 - czyli od stycznia 2004 do grudnia 2008), i teraz klient wybiera sobie jakies pola z selctow na stronie i na podstawie tego musisz pobrac liczby z pola odpowiadajacego danemu "kodowi" k... z wszystkich rekordow w bazie.

Rozwiazanie (przynajmniej jednoz wielu):
1) na podstawie danych z formularza musisz zbudowac swoj kod - czyli przekonwertowac nazwe miesiaca na liczbe i z roku wyciagnac ostatnia cyfre

2) za pomoca np. sprintf polaczyc to w jeden string reprezentujacy Twoj kod

3) pytanie do bazy, gdzie jako nazwe pola do pobrania dajesz wlasnie ten swoj kod.

W zarysie moze to wygladac tak (miesiace trzeba sobie podopisywac do konca):
  1. <?php
  2. $mies=array('styczen'=>1,'luty'=>2,'marzec'=>3,'kwiecien'=>4);
  3. $m=$mies[$_POST['miesiac']];
  4. $r=substr($_POST['rok'],3);
  5. $nazwa=sprintf('k%s%s',$r,$m);
  6. $query="SELECT $nazwa from TABELA1";
  7. echo $query;
  8. ?>


Ale mowiac szczerze tak "dziwnej" bazy danych nigdy nie widzialem i proponowalby zdecydowanie poswiecic czas na przemyslenie jak to dobrze i uniwersalnie zaprojektowac a potem dlubac kod php.
A co zrobisz jak bedziesz chcial miec w pozniejszym czasei lata 2009,2010....2020 ?
coolthx
Witam projekt nie jest dlugo terminowy tak więc mam określoną datę do końca bazy i jest to rok 2009 co już dodalem do bazy smile.gif ale przemyśle jeszcze raz strukturę bazy danych smile.gif pretestuje twoja propozycję i dam znać jutro smile.gif pozdrawiam 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.