Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: kaksi alasvetolaatikkoa yhteyksissä toisiinsa

Sivun loppuun

mrkebab [19.02.2008 09:44:09]

#

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.

Merri [19.02.2008 10:25:26]

#

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.

Vasta_alkaja [19.02.2008 10:27:54]

#

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.

if(!empty($_REQUEST['pudotusvalikot']))
{
  echo 'Näytä tässä sitten se toinen poksi, kun ensimmäisestä on jotain
  valittu';
}

mrkebab [19.02.2008 10:33:42]

#

Merri.

Client arvoja on tällä hetkellä yli 50.

Lebe80 [19.02.2008 10:33:53]

#

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):

http://games.terolepisto.net/ajaxmenu/

mrkebab [19.02.2008 10:54:27]

#

Ok. Alan tutkimaan tuota Ajax + php yhdistelmää.
Kiitos kaikille neuvoista.

Jos jollain on tämäntyyppistä esimerkkiä, niin laittakaa ihmeessä näytille.

Olga [19.02.2008 12:45:26]

#

Vanha ketju, mutta ihan toimiva ratkaisu: https://www.ohjelmointiputka.net/keskustelu/10071-select-valintaruutuja-2kpl

mrkebab [20.02.2008 14:22:53]

#

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 ?
#

Olga [20.02.2008 18:04:04]

#

Ehkä silti suosittelisin kokeilemaan tuota esittämääni linkkiä, siinä kun homma on tehty hieman yksinkertaisemmin ja ilman Ajaxia.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta