Terve.
Otsikko on vähän sekava, mutta haen neuvoa seuraavaan asiaan.
Teen sivulle kaksi alasvetolaatikkoa. Ensimmäiseen alasvetolaatikkoon haen client_id arvot tietokannasta.
Tämä onnistuu näin:
<?php include 'yla.html'; include 'mysql.class.php'; $mysqldb = new mysql('localhost', 'database_user', 'salasana', 'test_database'); $mysqldb->connect(); $mysqldb->select(); function create_dropdown($identifier,$pairs,$firstentry){ $dropdown = "<select name=\"$identifier\">"; $dropdown .= "<option name=\"\">$firstentry</option>"; foreach($pairs AS $value => $name) $dropdown .= "<option name=\"$value\">$name</option>"; echo "</select>"; return $dropdown; } $query = "SELECT client_id FROM client_data"; $result = mysql_query($query) or die ('Error when creating query'); while($row = mysql_fetch_array($result)) { $value = $row["client_id"]; $pairs["$value"] = $value; } echo create_dropdown("client_id",$pairs, "Choose client id:"); include'ala.html'; ?>
Mutta mites nyt, kun haluaisin toisen dropboxin, missä olisi sub_client_id arvot sen mukaisesti, että mikä client_id on valittu ensimmäisestä dropboxista ?
Eli miten PHP:ssa tehdään se, että kun ensimmäisestä dropboksista haetaan arvo , niin välittömästi suoritetaan toinen SQL-kysely, missä haetaan ekan dropboxin arvon perusteella tavara toiseen dropboxiin?
Tyyliin: SELECT sub_client_id from client_spec WHERE master_client_id='$value'
Tosin sellainenkin pitäisi olla, että jos ensimmäistä dropboksia ei ole klikattu, niin toiseen dropboxiin haetaan kuitenkin kaikki sub_client_id:t.
SQL: SELECT DISTINCT sub_client_id from client_spec
Olen ihan aloittelija PHP:ssa ja en keksi ratkaisua tälle.
Montako clienttiä sinulla on ensimmäisessä boksissa? Yksi vaihtoehto on tehdä vain yksi boksi, jossa on optgrouppeina se mitä nyt ajattelit ensimmäiseen boksiin ja normaaleina optioneina kakkosboksin vastaavat vaihtoehdot kunkin optgroupin sisällä. Tätä voisi halutessaan vieläpä laajentaa JavaScriptillä siten, että luodaan kaksi uutta boksia, jotka toimivat alkuperäisellä tavalla.
Vaihtoehto 1.
<form method="POST" name="pudotusvalikot" action="listresults.asp"> <p> <select size="1" name="valikko_1" onchange="pudotusvalikot.submit()"> <option value="1">Id 1</option> <option value="2">Id 2</option> <option value="3">Id 3</option> </select> </form>
Eli valittuasi valikosta jonkun arvon, lataat sen jälkeen uudelleen lomakkeen
$k = "SELECT arvo FROM tietokanta WHERE joku = $_REQUEST['pudotusvalikot']" jne...
Jos arvo on valittu näytetään toinen poksi.
Merri.
Client arvoja on tällä hetkellä yli 50.
Käytä etelämmies oohvia, eiku ajaxia:
Eli laatikoihin haetaan javascriptin avulla php:lla luotu sisältö (tässä tapauksessa ensimmäisen valikon valinnan määrä valintoja, voisi yhtä hyvin olla vaikka eri asiakkaat):
Ok. Alan tutkimaan tuota Ajax + php yhdistelmää.
Kiitos kaikille neuvoista.
Jos jollain on tämäntyyppistä esimerkkiä, niin laittakaa ihmeessä näytille.
Vanha ketju, mutta ihan toimiva ratkaisu: https://www.ohjelmointiputka.net/keskustelu/
Terve taas.
Kokeilin AJAX:a ja homma tyssäsi nopeasti.
Eli minulla on sivulla (index.php) 2 dropdown boksia.
Ekaan boksiin haetaan arvo (SELECT id FROM taulu).
Kun boksista sitten valitaan jokin arvo, niin kutsutaan funktiota HaeSisalto ja sille annetaan parametrinä tuo valittu id arvo. (HaeSisalto on tiedostossa javascript.js)
HaeSisalto kutsuu tiedostoa hae.php ja sille annetaan kyseinen arvo urlissa.
hae.php suorittaa sitten lauseen SELECT something from taulu2 where p_id='$value';
Nyt ongelmana on se, etten osaa laittaa saatuja arvoja toiseen dropdown boksiin.
Miten tämä onnistuu.
Tässä koodit (lyhennelty)
index.php
echo "<html>"; echo "<body>"; echo "<head>"; echo "<script src='javascript.js'></script>"; echo "</head>"; echo "<select name='users' onchange='Funktio1(this.value)'>"; $kysely = mysql_query("SELECT DISTINCT c_id FROM testitaulu"); for($i = 0; $i < mysql_num_rows($kysely); $i++){ $dropdown = mysql_result($kysely,$i); echo "<option> $dropdown </option>"; } echo "</select>"; echo "ID<br>"; echo "<p>"; echo "<div id='txtHint'><b>Info will be listed here.</b></div>"; echo "</p>"; #Toinen boksi # tälle ei ole vielä toimintaa tehty echo "<select name='users' onchange='Funktio1(this.value)'>"; $kysely = mysql_query("jotain"); for($i = 0; $i < mysql_num_rows($kysely); $i++){ $dropdown = mysql_result($kysely,$i); echo "<option> $dropdown </option>"; } echo "</select>"; echo "ID_2<br>"; echo "<p>"; echo "<div id='txtHint'><b>Info will be listed here.</b></div>"; echo "</p>";
javascript.js
var xmlHttp function Funktio1(str) { xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Browser does not support HTTP Request") return } var url="hae.php" url=url+"?q="+str url=url+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) }
hae.php
<?php $value=$_GET["q"]; $sql="SELECT tavara_toiseen_boksiin FROM taulu2 WHERE p_id = '".$value."'"; $result = mysql_query($sql); # # MITEN SAADAAN ARVO DROPDOWNBOX 2:EEN ? #
Ehkä silti suosittelisin kokeilemaan tuota esittämääni linkkiä, siinä kun homma on tehty hieman yksinkertaisemmin ja ilman Ajaxia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.