Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wywoływanie funkcji PHP z onChange() w SELECT
Forum PHP.pl > Forum > PHP
poorman
Chce skorzystac z funkcj w PHP poniewaz korszytałem z javascriptowj jednak musiałem zmienna przesyłac spowrotem do php(cookies, form get i post, hidden input itd). Bardzo prosze o pomoc poniewaz dale to nie dziala .

  1. function test($box)
  2. {
  3. //global $zmienna;
  4. //$zmienna = $box;
  5. echo("<script LANGUAGE='JavaScript'>
  6. window.alert('wywolana!')
  7. </SCRIPT>");
  8. }


  1. <select id="category" name="eq" onchange="test('this.value')";>
  2. <? while ($row = mysql_fetch_assoc($resultCat))
  3. {
  4. echo "<option ";
  5. if ($row['name']==$cat_table[$products['product_id']])
  6. {
  7. echo "selected=\"selected\"";}
  8. echo " value=\"".$cat_table2[$row['name']]."\">".$row['name']."</option>";
  9. ?>}


a pozniej korzystam ze zmiennej:
<a href="#" onclick="fupdateProduct(<?=$zmienna?>); return false;">[save]</a>
darko
Daj więcej kodu, bo z tego skrawka to nie wiadomo czy select domykasz... aha i napisz też o najważniejszym: co chcesz zrobić questionmark.gif Generalnie nie wykonasz kodu php z poziomu javascript, chyba, że XmlHttpRequest (a zatem kompletnie od javascriptu nie uciekniesz).

Cytat
Bardzo prosze o pomoc poniewaz dale to nie dziala .


To znaczy?? Co się (nie)dzieje, co pokazuje konsola błędów questionmark.gif
poorman
Chce tylko zrobic dynamiczne wywołanie w liscie rozwijanej "SELECT" za pomoca eventa "OnClicick()" tak ze po wybraniu powiedzmy napisu "kategoria 2" zmiennej globalnej "zmienna" przypisywało wartość "value" z "SELECT" a na koncu korzystało z funckji javascript'owej "fupdateProduct" w innym pliku. Tylko mam problem z wywołaniem funckji PHP'owej wlasnie. javacsriptowa dziala ale lepiej by było w php bo nie musiałbym przesyłac znowu zmiennej. Nie wiem czy to lepiej czy nie poniewaz kod php jest wykonywany na serwerze wiec z teg co mi wiadomo lepiej by było w javacript ale łatwiej jest w php. Mysle ze chyba wyjasniłem problem. Głownie nie chce mi dzialac wywołanie funkcji. a co do błedó na konsoli to nie bardzo pomoge ;]
  1. <?php
  2.  
  3. function test($box)
  4. {
  5. // global $zmienna;
  6. $zmienna = $box
  7. }
  8.  
  9. //$count=1;
  10. while ($row = mysql_fetch_assoc($resultMil))
  11. {
  12. echo "<div id=\"milk-".$row['milk_id']."\">
  13. <input type=\"hidden\" class=\"milk\" value=\"".$row['milk_id']."\"/>".$row['name']."&nbsp; <a href=\"#\" onclick=\"fdeleteMilk(".$row['milk_id'].", "."'".$row['name']."'); return false;\">[delete]</a></div>";
  14. ()+'\')
  15.  
  16. }
  17. ?>
  18. </td>
  19. <td>
  20. <select id="category" name="eq" onchange="test('this.value')";>
  21. <?php
  22. while ($row = mysql_fetch_assoc($resultCat))
  23. {
  24. echo "<option ";
  25. if ($row['name']==$cat_table[$products['product_id']])
  26. {
  27. echo "selected=\"selected\"";}
  28. echo " value=\"".$cat_table2[$row['name']]."\">".$row['name']."</option>";
  29. }
  30. ?>
  31. </select>
  32. </td>
  33.  
  34.  
  35. </tr>
  36. <tr>
  37. <td colspan="2">
  38. <input type="hidden" id="id" value="<?=$products['product_id']?>"/>
  39.  
  40. <a href="#" onclick="fupdateProduct(<?=$zmienna?>); return false;">[save]</a>
  41. </td>
  42. </tr>

P.S. Najlepiej to by było wyciagnąć zawartość z SELECT'a z wartosci NAME zaznaczonej w PHP i umiesic w funkcji "fUpdate()" tylko nie wiem czy sie da.
w javascript sie da za pomoca
  1. "document.FormName.eq.selectedIndex.name"
ale znowu trzeba przesyłać do PHP zmienną !
wookieb
Tak da się wywołać funkcję php bez odswieżania strony ale za pośrednictwem javascript + ajax.
Dużo informacji na ten temat masz w googlach + przykłady
select onchange ajax
R4D3K
Witam,
Dałeś za mało kodu, żeby stwierdzić czy na pewno wszystko jest ok. Np nie widać zapytania,do którego się odwołujesz. Jeśli jednak twój problem polega tylko na przesłaniu zmiennej eq i tych hiddenów to jest to standardowy problem wysłania zmiennych z formularza do serwera PHP. Jeśli chcesz to zrobić metodą post musisz dać znacznik form z odpowiednimi parametrami oraz przycisk typu submit i w skrypcie php sprawdzić czy coś zostało przesłane. Możesz to też zrobić query stringiem, jeśli po kliknięciu jakiegoś pola w select odpalasz jakaś funkcje w js, wystarczy dac
Kod
window.location=plik.php?eq= cos

w zależności od wybranego pola.
Mam nadzieje , ze pomogłem.
thek
To o czym piszesz to bardzo często poruszany temat: jak wybierając w jednym select opcę sprawić by zmieniły się dane w jakimś innym polu (najczęściej w innym select). Ten problem znajdziesz nawet na tym forum a w google jest on znany jako "populated select" i opiera sie o AJAX właśnie, bo inaczej nie odwołasz się poprzez klienta do skryptu, który może być wykonany wyłącznie na serwerze ( tylko on posiada interesujące Cię dane ). Zadaj więc odpowiednie pytanie w szukajce a znajdziesz rozwiązanie smile.gif
poorman
Jednak nie trzeba przycisku submit ani ajaxa, znalazłem nawet za proste rozwiazanie ktore mi jak narazie wystarcza.
Tworzymy zwyklego select i przypisjemy przypisanie wartosci do pola ukrytego hidden w evencie onChange() i juz mamy zmienna z ktorej mozemy korzystac.
  1. <select name="category_name" id="category" onchange="document.getElementById('category_input').value = this.options[this.selectedIndex].value;">
  2. <?php
  3. while ($row = mysql_fetch_assoc($resultCat))
  4. {
  5. echo "<option ";
  6. echo " value=\"".$cat_table2[$row['name']]."\">".$row['name']."</option>";
  7. }
  8. ?>
  9. </select>
  10.  
  11. <input type="hidden" name="pos_category_input" value="1" id="category_input" />

niewodoczne pole
  1. <input type="hidden" name="pos_category_input" value="1" id="category_input" />


wykorzystanie:
  1. <a href="#" onclick="fupdateProduct(document.getElementById('category_input').value); return false;">[save]</a>

sorry za offtop ale pokoleniom moze sie przydac ;]
pozdrawiam i zostawiam po sogu
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.