Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [javascript+php+mysql] Inputy z bazy w zależności od selecta
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Mark Tempe
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?
ferr
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.
Mark Tempe
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.
ferr
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
Mark Tempe
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ą.
ferr
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?
dr_bonzo
Prosze uzywac odpowiedniego bbCode dla wstawianego kodu.
Inaczej topik zostanie zamkniety.
Mark Tempe
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.
ferr
Aha, w takim razie zainteresuj sie AJAXem.

--> http://advajax.anakin.us/ - tutaj masz pomocna biblioteke.
--> http://jquery.com/ - kolejna fajna biblioteka
Mark Tempe
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.
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.