Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zdarzenie onChange i PHP
bialko0019
post 8.05.2011, 10:04:19
Post #1





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

Ostrzeżenie: (0%)
-----


Witam.

Mam takie proste pytanie, bo nie rozumiem kilku rzeczy.


Mianowicie mam select ze zdarzeniem onChange, które wywołuje funkcję pokaz().

  1. <select name="nn" onchange="pokaz(this);">


Potem odbieram sobie w javascripcie wartości value spod danego optiona:

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. <script type="text/javascript">
  3.  
  4. function pokaz(elem)
  5. {
  6. var eid = elem.options[elem.selectedIndex].value;
  7.  
  8. document.write(eid);
  9. }
  10.  
  11. </script>
  12.  
[JAVASCRIPT] pobierz, plaintext



No okey, wszystko ładnie, tylko dlaczego, po wybraniu danego optiona, strona się przeładowuje i pokazuje samą wartość ? Może powiem ogólny zarys powiem.


1. Mam Jeden select. W nim w zależności od wyboru pobieram sobie wartość z optiona, 2. przekazuje do php tą wartość i robię sobie zapytanie dp bazy danych mysql. 3. Jeśli są jakieś wyniki, wtedy wyświetlam drugi select 4. i znowu przekazuje wartość z drugiego selecta, i jeśli znowu są wyniki wyświetlam następny sleect i tak dalej i tak dalej. Jeśli zaś w którymś momencie nie ma żadnych wyników, pobieram sobie z bazy rekord o id takim jak w option i wyświetlam w wygodny dla mnie sposób. Jak to zrobić ? Powiem tak, umiem zrobić poszczególny kroki powyżej, ale nie wszystkie.

I tak:

1.
  1.  
  2. <select onChange="pokaz(this.value)">
  3. <option value="1">Coś</option>
  4. <option value="2">Coś</option>
  5. <option value="4">Coś</option>
  6.  


i potem

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. <script type="text/javascript">
  3.  
  4. function pokaz(elem)
  5. {
  6. var eid = elem.options[elem.selectedIndex].value;
  7.  
  8. TUTAJ MAM POD ZMIENNĄ WARTOŚĆ REKORDU, Z KTÓRYM CHCĘ WYKONAĆ ZAPYTANIE
  9. }
  10.  
  11. </script>
  12.  
[JAVASCRIPT] pobierz, plaintext


i teraz nie umiem, strzelam:



[JAVASCRIPT] pobierz, plaintext
  1.  
  2. <script type="text/javascript">
  3.  
  4. function pokaz(elem)
  5. {
  6. var eid = elem.options[elem.selectedIndex].value;
  7.  
  8. <?php
  9. mysql_query("SELECT * FROM tabela WHERE ID='$zmienna'");
  10. ?>
  11. }
  12.  
  13. </script>
  14.  
[JAVASCRIPT] pobierz, plaintext


questionmark.gif Jak pobrać do tego zapytania wartość spod zmiennej eid ?

Potem sprawdzam cyz są wyniki, jak zapętlić to ? Też taki sam select ? Bo jeśli któregoś raza nie ma wyników, wyświetlam sobie rekord, jeśli są select znowu z funkcją pokaz(this.value) i tak w koło, aż nie będzie wyników z bazy. To właściwie pisząc teraz post trochę pomyślałęm, i widzę, że nie wiem jak tylko pobrać z pod smiennej wartość i dać do zapytania mysql`owego ? No właśnie, ale to nie będzie dynamicznie generowane.. Nie wiem, poradźcie jakoś, może coś z AJAX`em ?

Czekam na jakąś odpowiedź....



--------------------
---
"kto pyta ten nie błądzi"...
Go to the top of the page
+Quote Post
Maciek1705
post 8.05.2011, 10:22:32
Post #2





Grupa: Zarejestrowani
Postów: 157
Pomógł: 3
Dołączył: 15.06.2009

Ostrzeżenie: (0%)
-----


jak coś to w funkcji w js aby pobrać wartość select powinno być coś takiego:
  1. var "nazwa zmiennej="+document.getElementById('id select z którego pobieramy dane').value;


jednak polecam to robić w ajax lub jquery w sieci są przykłady tego typu zastosowań więc problemu ze znalezieniem nie powinno być.
Go to the top of the page
+Quote Post
mat-bi
post 8.05.2011, 10:46:35
Post #3





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

Ostrzeżenie: (0%)
-----


Tu potrzeby jest AJAX, jeśli chcesz bez przeładowania strony zrobić zapytanie do serwera. Polecam frameworki
Go to the top of the page
+Quote Post
bialko0019
post 8.05.2011, 10:53:35
Post #4





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

Ostrzeżenie: (0%)
-----


No własnie, wiem, i zrobiłbym to w najszybszy sposób - po wybaniu optiona jQuery wykonuje plik.php - tam sobie robie zaptania itd, no ale wlasnie w taki sposb:

$.post("test.php", { name: "John", time: "2pm" },
function(data) {
alert("Data Loaded: " + data);
});

Dobrze, wykonuję - a jak go odebrać od niego dane ? Ze np. wyswietla się nowy select jeśli php powie ze są dane do odebrania?



--------------------
---
"kto pyta ten nie błądzi"...
Go to the top of the page
+Quote Post
mat-bi
post 8.05.2011, 11:12:46
Post #5





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

Ostrzeżenie: (0%)
-----


HTTP jest protokołem bezstanowym. To oznacz, że musisz co jakiś czas odpytać serw, php nie ma kontroli nad skryptem po wysłaniu do przeglądarki
Go to the top of the page
+Quote Post
bialko0019
post 8.05.2011, 11:17:30
Post #6





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

Ostrzeżenie: (0%)
-----


Czyli co - najprostrzym rozwiązaniem było by wyświetlać plik PHP z selectem co np. 5s. Potem dać zdarzenie onchange, własnie tym w jquery wysłać np. nową zmienną sesyjną ( w php ), a ten plik co odświeża select pobiera dane z bazy własnie kierująć się zmienną sesyjną... ?


--------------------
---
"kto pyta ten nie błądzi"...
Go to the top of the page
+Quote Post
Maciek1705
post 9.05.2011, 20:13:57
Post #7





Grupa: Zarejestrowani
Postów: 157
Pomógł: 3
Dołączył: 15.06.2009

Ostrzeżenie: (0%)
-----


jeśli chcesz zrobić to bez przeładowania strony to musisz napisać odpowiedni skrypt w ajax, jeśli może to działać z przeładowaniem strony to masz sprawę prostszą chociażby przy select pierwszym wykorzystaj zdarzenie onchange this form submit
  1. <form method="post">
  2. <label>opis
  3. <select onchange="this.form.submit();">
  4. <option value="1">1</option>
  5. ....
  6.  
  7. </form>

z tym że select jest generowany dynamicznie z bazy np. pętlą while, potem odbierasz dane z pierwszego select jeśli istnieją i odpowiadają założonym wymaganiom (czy tu warunek if) to pokazujesz drugi select i tak dalej.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 17.05.2025 - 22:30