Autor | Zpráva | ||
---|---|---|---|
Matyáš Profil |
Dobrý den,
Mám následující problém: Na stránce mám 3 selecty. První je vyplněn PHP polem $skoly - vybírá se v něm škola. Podle toho, jaká bude vybrána škola v prvním selectu nastane následující: - Druhý select se vyplní seznamem učitelů dané školy z PHP pole s indexem názvu školy $ucitele["Škola 1"] = array("Učitel 1", "Učitel 2", "Učitel3");
- Třetí select se vyplní seznamem tříd sané školy z PHP pole s indexem názvu školy $tridy["Škola 1"] = array("1.A" , "2.A", "3.A", "1.B");
Zde jsou konkrétní soubory: Soubor nastaveni.php: //SEZNAM ŠKOL $skoly = array("Škola 1", "Škola 2", "Škola 3"); //SEZNAM UČITELŮ JEDNOTLIVÝCH ŠKOL $ucitele["Škola 1"] = array("Učitel 1","Učitel 2", "Učitel 3"); //SEZNAM TŘÍD JEDNOTLIVÝCH ŠKOL $tridy["Škola 1"] = array("1.A" , "2.A", "3.A", "1.B") Soubor samotné php stránky <?php include ("nastaveni.php"); ?> <select name="skola" id="skola"> <?php foreach($skoly as $skola){echo '<option value="'.$skola.'">'.$skola.'</option>';} ?> </select> <select name="ucitel" id="ucitel"> <?php foreach($ucitele["název školy vybrané v selectu škola"] as $ucitel){echo '<option value="'.$ucitel.'">'.$ucitel.'</option>';} ?> </select> <select name="trida" id="trida"> <?php foreach($tridy["název školy vybrané v selectu škola"] as $trida){echo '<option value="'.$trida.'">'.$trida.'</option>';} ?> </select> Zkrátka potřeboval bych co nejjednodušší kód, který by toto prováděl. Musí se nejspíše použít Java Script, možná i AJAX. Doufám, že jsem můj problém dostatečně formuloval. Kdyby jste něco vymysleli, budu velmi rád. Vytrhnete mi trn z paty. |
||
mimochodec Profil |
#2 · Zasláno: 7. 10. 2014, 14:33:09
Jestli chceš, aby se učitelé načítali bez znovunačtení stránky, máš dvě možnosti. Buď ajax (google ajax multiple selects) nebo čistý JS, který by fungoval tak, že by se všechna data po vygenerování v php nasypala do polí v JS a pak se načítala do selectů na základě výběru. To lze použít, když těch dat bude rozumný počet.
|
||
Matyáš Profil |
Děkuji za Vaši reakci.
Kód jsem upravil následovně: soubor php samotné stránky: ... <select name="skola" id="skola" onchange="zmena(this)"> ... <select name="trida" id="trida"></select> ... <select name="ucitel" id="ucitel"></select> ... <script> function zmena(vyber) { skola = vyber.options[vyber.selectedIndex].value trida.innerHTML = "<?php foreach($tridy['"+skola+"'] as $trida){echo('<option>'.$trida.'</option>');}?>"; ucitel.innerHTML = "<?php foreach($ucitele['"+skola+"'] as $ucitel){echo('<option>'.$ucitel.'</option>');}?>"; } </script> Ale kód mi nefunguje. Nevím, jestli PHP vidí tu proměnnou. Ale podotýkám že na začátku stránky se nastaveni.php includuje - viz příspěvek výše. Děkuji za Vaše reakce. |
||
_es Profil |
#4 · Zasláno: 7. 10. 2014, 22:29:50
Matyáš:
Skús si najprv pozrieť Nejčastější potíže s PHP (FAQ) » Jak přenést proměnnou z javascriptu do PHP. |
||
mimochodec Profil |
#5 · Zasláno: 7. 10. 2014, 23:09:44
Matyáš:
Snahu oceňuju, jsi na dobré cestě, ale tímto způsobem z JS volat php nelze. Začni tím, že si na začátku stránky dostaneš data z pole v php do pole v JS. Pak na řádcích 12, 13 projedeš všechny třídy a co bude sedět s hodnotou v skola , to do selectu nahraješ.
|
||
Matyáš Profil |
Teď trochu nevím, jak se převede pole z PHP do JS. Mohli by jste mi tu uvést konkrétní kód?
Napadá mě jen toto: <script> ucitele = "<?php echo($ucitele); ?>"; </script> Děkuji mnohokrát. PS: FAQ jsem četl, ale je tam pouze kód pro běžnou proměnnou. |
||
_es Profil |
#7 · Zasláno: 8. 10. 2014, 20:16:33
|
||
Matyáš Profil |
#8 · Zasláno: 8. 10. 2014, 21:18:30
Nemohl by jste být trochu konkrétnější?
Děkuji. |
||
_es Profil |
#9 · Zasláno: 8. 10. 2014, 21:35:45
Matyáš [#8]:
Ako vstupný argument tam dáš pole v PHP a ako návratovú hodnotu dostaneš pole v syntaxi JavaScriptu. |
||
Matyáš Profil |
#10 · Zasláno: 9. 10. 2014, 17:12:58
Takže takto o je správně?
<script> tridy = "<?php echo json_encode($tridy) ?>"; </script> |
||
_es Profil |
#11 · Zasláno: 9. 10. 2014, 17:59:01
Matyáš [#10]:
Ešte je vhodné použiť var : Časté potíže, zajímavosti a poučné debaty » Používejte var .
|
||
Matyáš Profil |
Nefunguje mi to, nevím, kde mám chybu:
<script> var tridy = "<?php echo json_encode($tridy) ?>"; var ucitele = "<?php echo json_encode($ucitele) ?>"; </script> <select name="skola" id="skola" onchange="zmena(this)"> <script> function zmena(vyber) { skola = vyber.options[vyber.selectedIndex].value trida.innerHTML = forEach(var ucitel in ucitele[skola]){document.write("<option value='"+ucitel+"'>"+ucitel+"</option>");}; ucitel.innerHTML = forEach(var trida in tridy[skola]){document.write("<option value='"+trida+"'>"+trida+"</option>");}; } </script> Existuje vůbec v JS foreach? |
||
lionel messi Profil |
Matyáš:
„Existuje vůbec v JS foreach?“ JS v podstate nepoznám, ale vsadil by som svoje kľúče od bytu, že nie: Proč mám rád PHP — hneď v druhej časti máš príklad prechádzania poľa v JS. |
||
mimochodec Profil |
#14 · Zasláno: 9. 10. 2014, 19:09:47
Matyáš:
„Existuje vůbec v JS foreach?“ Myslím že ne. |
||
Matyáš Profil |
#15 · Zasláno: 9. 10. 2014, 19:14:01
Dobře, v top případě nevím, jak projít tu proměnnou a vypsat ji do <option></option>.
Mohl by jste mi prosím uvést kód? |
||
_es Profil |
|
||
Matyáš Profil |
#17 · Zasláno: 9. 10. 2014, 20:12:56
_es:
Protože potřebuji, aby se ty dva selecty vyplnily na základě prvního - myslím, že kdyby se to řešilo na serveru a posílalo klientovi, hodně by se to celé zpomalilo. Nebo PHP umí také reagovat na události onchange? |
||
_es Profil |
Matyáš:
Aha, pardon. Na menenie optionov musíš použiť iný kód, než máš, napríklad sa inšpiruj v Ajax přidání options do selectu nefunguje v IE. Okrem toho, Psaní metodou document.write po načtení stránky maže stránku..
|
||
Matyáš Profil |
_es:
Pochopil jsem správně, že autor článku má data uložená v XML? To mi připadá, lepší, než mé aktuální řešení. Sestavil jsem proto svoji XML databázi: <?xml version="1.0" encoding="UTF-8"?> <skoly> <skola> <abbr>skola1</abbr> <name>ŠKOLA 1</name> <ucitele> <ucitel>Učitel 1 ze školy 1</ucitel> <ucitel>Učitel 2 ze školy 1</ucitel> </ucitele> <tridy> <trida>1.C</trida> <trida>2.C</trida> <trida>3.C</trida> <trida>4.C</trida> <trida>5.C</trida> <trida>6.C</trida> <trida>7.C</trida> <trida>8.C</trida> <trida>1.A</trida> <trida>2.A</trida> <trida>3.A</trida> <trida>4.A</trida> </tridy> </skola> <skola> <abbr>skola2</abbr> <name>ŠKOLA 2</name> <ucitele> <ucitel>Učitel 1 ze školy 2</ucitel> <ucitel>Učitel 2 ze školy 2</ucitel> </ucitele> <tridy> <trida>1.A</trida> <trida>2.A</trida> <trida>3.A</trida> <trida>4.A</trida> <trida>5.A</trida> <trida>1.B</trida> <trida>2.B</trida> <trida>3.B</trida> <trida>4.B</trida> <trida>5.B</trida> </tridy> </skola> </skoly> |
||
Matyáš Profil |
#20 · Zasláno: 13. 10. 2014, 18:20:35
Je to tak? Mohu takto použít XML, nebo bude lepší php proměnná?
Děkuji. |
||
Časová prodleva: 10 let
|
0