Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [javascript+php+mysql] Inputy z bazy w zależności od selecta
Mark Tempe
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.07.2006

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


Hej,
Od dwóch dni szukam na sieci rozwiazania do mojego problemu. Jestem już blisko, ale potrzebuję pomocy.
Chodzi mi o coś takiego. Mam w bazie danych pewne kategorie i podkategorie. W formularzu mam select, w którym mogę sobie wybrać kategorię główną. Chciałbym aby po wybraniu pojawiło się na stronie tyle checkboxów ile jest podkategorii. I to w zasadzie tyle. Wybór tych kategorii z selecta, jest tylko częścią większego formularza, więc nie mogę tego zamkąć w form i przeładować strony. Próbuję używać javascript i innerHTML..
W select mam akcję:
Kod
onchange="showCat(this.options[selectedIndex].value);"

i w tej funkcji showCat muszę mieć coś takiego:

function show($id){
$query = mysql_query("SELECT * from $tbl_categories WHERE ref='".$id."'");
while($r = mysql_fetch_array($query))
{
   $innerHtml.="<input type=\"checkbox\"/>".$r['name']."<br/>";
  }
  

  obj=document.getElementById("cat");
  obj.style.visibility=\'visible\';
  obj.innerHTML='.$innerHtml.'
}

Ta funkcja to oczywiście poplątanie php i javascript i właśnie mam problem z jakimś rozdzieleniem tego...
Ktoś pomoże?

Ten post edytował Mark Tempe 25.03.2007, 13:36:37
Go to the top of the page
+Quote Post
ferr
post
Post #2





Grupa: Zarejestrowani
Postów: 122
Pomógł: 3
Dołączył: 18.12.2004

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


Musisz w szablonie PHP miec dostep do zmiennej $innerHTML (kod JS musi byc wygenerowany natomiast w calosci, podobnie jak HTML, by przegladarka go odczytala, wiec nie widzi zmiennych z PHP) W szablonie dajesz: obj.innerHTML='<?php echo $innerHtml; ?>'; I w ten sposob powstanie uzupelniony kod JS.

Ten post edytował ferr 24.03.2007, 17:25:51


--------------------
Go to the top of the page
+Quote Post
Mark Tempe
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.07.2006

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


Dzięki za reakcje, ale ciągle mam błąd.

Na podstawie Twojej wskazówki funkcję zmieniłem w ten sposób:
Kod
function show($id){
$query = mysql_query("SELECT * from $tbl_categories WHERE ref='".id."'");
while($r = mysql_fetch_array($query))
{
   $innerHtml.="<input type=\"checkbox\"/>".$r['name']."<br/>";
  }
  
echo '<script>';
echo 'obj=document.getElementById("cat");';
echo 'obj.style.visibility=\'visible\';';
echo 'obj.innerHTML='.$innerHtml.'';
echo '</script>';
}

W select mam taki kod :
Kod
<select name="category" onchange="show(this.options[selectedIndex].value);">

Pojawia się błąd: Oczekiwano obiektu..
Zastanawiam sie, czy ja mogę w zdarzeniu onchange wywoływać funkcję php.. Zawsze wywoływałem jakąś fukcję javascript..
Jeśli ma to być funkcja javascript, to jak w niej odwoływać się do bazy danych..?
Tak, czy inaczej jeszcze nie rozwiązałem tego problemu, proszę o dokładniejszą wskazówkę - może źle coś zrozumiałem.

Ten post edytował Mark Tempe 25.03.2007, 13:36:09
Go to the top of the page
+Quote Post
ferr
post
Post #4





Grupa: Zarejestrowani
Postów: 122
Pomógł: 3
Dołączył: 18.12.2004

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


Stary, nie, nie...

Nie mozna traktowac funkcji PHP jako funkcji JS. Musisz podejsc do generowania kodu JS tak, jakbys generowal stronke HTML... Czyli zwracasz przez PHP jakies dane, ktore wstawiasz (pokazujesz echo'em) do dokumentu HTML w <script> smile.gif


--------------------
Go to the top of the page
+Quote Post
Mark Tempe
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.07.2006

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


Okej, czyli to nie może być funkcją php, tylko javascript. TO powiedz mi jeszcze tylko jedno: do tej funkcji (javascript) przesyłam zmienną i będe musiał tą zmienną w kodzie php odczytać. Nie wiem jak.. Rozumiem, że będe musiał zrobić coś takiego
Kod
<script>

fuction showCat(id)
{

//instrukcje
$w = mysql_query("select * from $tbl_categories where id='ID_POBRANE_Z_FUNKCJI_JS'");
//instrukcje
}

I własnie nie wiem, jak się odwołać do tej zmiennej przesyłanej przez funkcję showCat. Mając to, już może sobie poradzę z resztą.

Ten post edytował Mark Tempe 25.03.2007, 13:37:14
Go to the top of the page
+Quote Post
ferr
post
Post #6





Grupa: Zarejestrowani
Postów: 122
Pomógł: 3
Dołączył: 18.12.2004

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


Kurcze, chyba nie zrozumiales smile.gif. Wyjasnie na przykladzie.

  1. <?php
  2.  
  3. function GetZmienna()
  4. {
  5. $zmienna = "Foobar";
  6.  
  7. return $zmienna;
  8. }
  9. ?>
  10. <html>
  11. <head>
  12. <title>:)</title>
  13. <script type="text/javascript">
  14. var jakas_zmienna_z_php = "<?php echo GetZmienna(); ?>";
  15. alert(jakas_zmienna_z_php);
  16. </script>
  17. </head>
  18. <body>
  19. </body>
  20. </html>


Teraz sie rozjasnilo?


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Prosze uzywac odpowiedniego bbCode dla wstawianego kodu.
Inaczej topik zostanie zamkniety.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Mark Tempe
post
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.07.2006

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


Przykład rozumiem bardzo dobrze. Tylko problemy mam jeśli chodzi o przypadek, który ja opisywałem, gdzie muszę wywołać funkcję na zdarzenie onChange w selectcie, która musi wykonać kod php (pobranie z bazy danych rekordów) i wstawienie wyniku wygenerowanego przez to zapytanie w diva.
Więc muszę przesyłać sobie zmienną między javascript a php i tego nie potrafię.
Teraz na podstawie przykładu i naszej dotychczasowej rozmowy mam coś takiego.
Kod
function show($id){
$query = mysql_query("SELECT * from $tbl_categories WHERE ref='".id."'");
while($r = mysql_fetch_array($query))
{
   $innerHtml.="<input type=\"checkbox\"/>".$r['name']."<br/>";
  }
  return $innerHtml

}
?>
<script>
function showCat(x)
{
obj=document.getElementById("cat");
obj.style.visibility='visible';
obj.innerHTML="<? echo show(x); ?>";
</script>

Nie mam możliwosci sprawdzenia tego teraz, ale czuję, że jeśli nie mam innych błędów, to na pewno źle przesyłam zmienną do funkcji show(x), ponieważ w kodzie php używam zmiennej z js.
Chodzi mi o tą linijkę w showCat();
Kod
obj.innerHTML="<? echo show(x); ?>";

Jeśli mógłbyś mi podać przykład bardziej podobny do mojego przypadku (przesyłanie zmiennych, zapytanie z bazy danych za kazdym razem gdy zmieniam select), lub bezpośrednio pomóc mi z tym kodem będę wdzięczny.
Tak, jak pisałem - wszystkie ogólne zasady rozumiem - problem mam, jeśli chodzi w przesyłanie tych zmiennych i komunikacja z bazą danych każdorazowo po zmianie select.
Go to the top of the page
+Quote Post
ferr
post
Post #9





Grupa: Zarejestrowani
Postów: 122
Pomógł: 3
Dołączył: 18.12.2004

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


Aha, w takim razie zainteresuj sie AJAXem.

--> http://advajax.anakin.us/ - tutaj masz pomocna biblioteke.
--> http://jquery.com/ - kolejna fajna biblioteka


--------------------
Go to the top of the page
+Quote Post
Mark Tempe
post
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.07.2006

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


guitar.gif
Wielkie dzięki wszystko działa jak chciałem. No i poznałem tą bardzo ciekawą klasę.
Jeszcze raz dzięki za pomoc.
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 Aktualny czas: 22.08.2025 - 00:47