[ bmcvetic @ 18.01.2005. 22:28 ] @
Pozdrav svim korisnicima ES!

Problem je sledeći:
Na osnovu izabrane opcije iz jedne liste (konkretno Marka vozila) treba da dobijem select element (Tip vozila) koji će svoje vrednosti popuniti iz MySQL baze. Problem lako rešavam JavaScriptom, ali je u pitanju velika baza podataka tako da mi se to rešenje ne sviđa (zbog održavanja i veličine skripta). Ideja da napravim još jednu bazu podataka u koju bi podaci bili upisani privremeno, pa zatim poslati na server i vraćeni sa izmenom samo jednog elementa (tip vozila) bi radila, ali totalno nije u programerskom duhu. Ako neko ima "elegantije" rešenje, neka izvoli.

Inače, radi se o obrascu u koji se upisuju podaci o vozilu i šalju u MySQL bazu.
Web čitač: naravno Mozilla.
[ mordor @ 20.01.2005. 23:12 ] @
heh zivo me zanima kako pomocu javascripta pristupas mysql bazi :)))

btw
to sto trazis je extremno prosto i necudi me sto se niko nije potrudio da napise odgovor
hint: select ....... where='marka_vozila'

privremena baza ?? wtf?!
[ bmcvetic @ 21.01.2005. 15:40 ] @
Možda nisam bio dovoljno jasan.

Preko JavaScripta ne može da se pristupi MySql bazi. Želim da pristupim bazi pomoću php-a, a ne da komplet podatke iz baze unosim u skript pa odatle da pomoću JavaScripta pravim opcije. Drugo, ne radi se o prostom povlačenju podataka iz baze, već o uzimanju podataka i pravljenju lista (marka-tip) s tim da se ostali podaci sa obrasca (koji su u medjuvremenu uneti) ne upišu u bazu, ali i ne izgube. Po meni, morali bi negde da se sačuvaju (recimo u još jednoj bazi sa istim poljima).

Znači, ako korisnik izabere recimo OPEL iz select liste treba da u drugoj select listi dobije
recimo ASTRA, VECTRA, OMEGA...(i samo to) i da to bude povučeno iz baze (naravno da ostali podaci, kao što je uneta boja i godina proizvodnje, ostanu sačuvani). I tako isto ako se izabere BMW, AUDI ili bilo koji drugi.

Treba mi samo ideja kako bi to moglo da se uradi. U svakom slučaju, hvala što si odgovorio.
[ bzero @ 21.01.2005. 16:17 ] @
Verovatno je najbolje da kod promene select box-a (onchange), iz javascripta pomocu XMLHttpRequest-a povuces sa servera nove podatke koji su ti potrebni za drugi select box. Ovako menjas samo podatke koji i treba da se menjaju i nema potrebe da razmisljas o tome kako da sacuvas ostale podatke jer njih i ne diras.
[ MileG @ 21.01.2005. 20:03 ] @
Da bi lakse objasnio nek pogledaju www.autoscout24.de :o)
[ mordor @ 22.01.2005. 16:00 ] @
uz formu prosledi i $var za marku koju je izabrao pa pri generisanju select boxa uporedjuj
i izbaci...
[ bmcvetic @ 27.01.2005. 19:41 ] @
Izgleda da je ovo sa XMLHttpRequest-om pravo rešenje. Tako nešto sam već video, ali nije radilo. Pogledaću kako to ide pa vam javljam šta sam uradio. Hvala Bzero.
[ broker @ 28.01.2005. 10:40 ] @
http://jibbering.com/2002/4/httprequest.html
Kanda su browseri prilicno bagoviti po ovompitanju.
[ bmcvetic @ 03.02.2005. 04:44 ] @
Rešio sam problem. Ovaj objekat (XMLHttpRequest) ima ogroman potencijal bar po meni. Evo koda koji je meni pomogao pa pogledajte...


Code:

//  Funkcija JavaScripta koja na onChange elementa marka menja tip

function UbaciTip(marka)
{
    var tip = document.getElementById("tip");
        
    tip.length = 0;     //  prazni listu
    tip.options[0] = new Option(0);
    tip.options[0].value = -1;
    tip.options[0].text = "--------------------";
        
    if (marka != "--------------------")
    {
        var xmlhttp = new XMLHttpRequest();
        var URL = "../tip.php?marka=" + marka;
        
            xmlhttp.open("GET", URL, true);
            xmlhttp.onreadystatechange = function()
        {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
            {
                        var vrednost = xmlhttp.responseText;  //  dobijeni string iz skripta
                    
                if (vrednost != null)  //  ako ima nekih vrednosti formiraju se option elementi
                {
                    var niz = vrednost.split (",");  //  pravi niz od vrednosti
            
                    for (i=1; i<=niz.length; i++)
                    {
                        tip.options[i] = new Option(i);  //  strvara novi option
                        tip.options[i].value = niz[i-1];
                        tip.options[i].text = niz[i-1];
                    }
                }        
                   }
        }

    xmlhttp.send("marka");
    }
}



//    Pomocni php skript koji pravi string od vrednosti tipova vozila (razdvojenih zapetom) na osnovu izbrane marke

<?php
    require_once ('baza_lib.php');
    $marka = $_REQUEST['marka'];
    
    @ $veza = mysql_pconnect('localhost', nick, pass);
    mysql_select_db ('vozila');
    
    @ $tip = uzmi_vrednosti_tip($marka);
    
    echo $tip;    //    stampa rezultat (vrednosti odvojene zapetom)
?>



//    Funkcija uzmi_vrednosti_tip iz 'baza_lib.php'
function uzmi_vrednosti_tip($marka)
{
    $upit_marka_id = "select marka_id from sve_marke where marka='".$marka."'";
    $rezultat_marka_id = mysql_query($upit_marka_id);
    $vrednost = mysql_result($rezultat_marka_id, 0);  //  vrednost je index koji povezuje ime marke
    
    $upit = "select tip from t".$vrednost." order by tip asc";  //  dodajem t zbog imena tabele
    $rezultat = mysql_query($upit);
    $broj = mysql_num_rows($rezultat);

    $vrednost = mysql_result($rezultat, 0);

    for ($i=1; $i<$broj; $i++)
    {
        $red = mysql_result($rezultat, $i);
        $vrednost = $vrednost.",".$red;
    }
        
    return $vrednost;
}


Još jednom hvala svima na savetima i pomoću. Pozdrav!