Avatar billede walkie84 Nybegynder
11. februar 2008 - 15:58 Der er 11 kommentarer og
1 løsning

afhængig select input med sql

Hej programmører,

Jeg har 3 forskellige SELECT bokse, som skal være afhængige af hinanden. Det data som skal derind, ligger i en MySQL db.

Er der en som kan hjælpe med hvordan jeg klarer den?

Den først boks er f.eks. med mobil mærker. Den næste er så f.eks. mobil model og den sidste telefonselskab.
Vælger man f.eks. Nokia i den første boks, skal man kun kunne vælge nokia modeller i anden, og nogle udvalgte selskaber (udfra første select boks) i trejde boks.

Håber i kan hjælpe
Venligst,
Morten
Avatar billede walkie84 Nybegynder
11. februar 2008 - 15:59 #1
Jeg ved godt hvordan jeg henter data fra sql'en, men ikke hvordan jeg får den ind i sådan en afhængig select funktion :)
Avatar billede w13 Novice
11. februar 2008 - 16:31 #2
Måske kan du få noget ud af Roenvings eksempel: http://roenving.users.whitehat.dk/index.html?/WD4Selects-beta.html
Avatar billede walkie84 Nybegynder
11. februar 2008 - 17:43 #3
Det siger ik så meget om at få data'en med fra db :)
Avatar billede w13 Novice
11. februar 2008 - 18:45 #4
Havde du ikke styr på den del?
Avatar billede jakobdo Ekspert
11. februar 2008 - 20:15 #5
Med risiko for at have bevæget mig på virkelig dybt vand, har jeg forsøgt mig med følgende:

<?php
//http://www.eksperten.dk/spm/819020
header("Content-Type: text/html; charset=utf-8");
if(isset($_POST['model']) && is_numeric($_POST['model'])){
    $model = intval($_POST['model']);
    switch($model){
        case 1:
            echo '{"model":[{"id":  "1","text": "3310"},{"id":  "2","text": "8310"}]}';
            break;
        case 2:
            echo '{"model":[{"id":  "1","text": "W880"},{"id":  "2","text": "K580i"}]}';
            break;
        default:
            echo '{"error":[{"msg":  "Model Not Found"}]}';
    }
    exit();
}

if(isset($_POST['provider']) && is_numeric($_POST['provider'])){
    $provider = intval($_POST['provider']);
    switch($provider){
        case '3310':
            echo '{"provider":[{"id":  "1","text": "TDC"}]}';
            break;
        case '8310':
            echo '{"provider":[{"id":  "1","text": "Telmore"}]}';
            break;
        case 'W880':
            echo '{"provider":[{"id":  "1","text": "Sonofon"}]}';
            break;
        case 'K580i':
            echo '{"provider":[{"id":  "1","text": "M1"}]}';
            break;
        default:
            echo '{"error":[{"msg":  "Provider Not Found"}]}';
    }
    exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/strict.dtd">
<html>
<head>
<title>819020</title>
<script type="text/JavaScript">
//<![CDATA[
(function(){if(window.XMLHttpRequest)return;var o=null,s,a=["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}catch(e){}}window.XMLHttpRequest=o?function(){return new ActiveXObject(s)}:null;o=null})()

function AjaxReq(sMethod, sUrl, oVars, fnCallBack) {
    var oHttp = new XMLHttpRequest();
    oHttp.open(sMethod, sUrl, true);
    oHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.onreadystatechange = _fnCallBack;
    var aQuery = [];
    for (var x in oVars) aQuery.push( encodeURIComponent(x) + "=" + encodeURIComponent(oVars[x]) );
    oHttp.send( aQuery.join("&") );
    aQuery = null;
 
    function _fnCallBack() {
        if (oHttp.readyState<4) return;
        fnCallBack(oHttp);
        oHttp = null;
    }
    return this;
}

function insertOption (oSelect,sOption) {
    var newOption, optionToInsertBefore;
    if (document.createElement && (newOption = document.createElement('option'))) {
        newOption.appendChild(document.createTextNode(sOption));
        if (oSelect.selectedIndex > -1) {
            optionToInsertBefore = oSelect.options[oSelect.selectedIndex];
        }else{
            optionToInsertBefore = null;
        }
        oSelect.appendChild(newOption, optionToInsertBefore);
    }
}

function myModelCallBack(oHttp) {
    var oModel = document.getElementById("model");
    var oProvider = document.getElementById("provider");
    var oModels = eval('(' + oHttp.responseText + ')');
    oModel.length = 0;
    insertOption(oModel,'Vaelg Model');
    for (var x in oModels.model){
        insertOption(oModel,oModels.model[x].text);
    }
    oModel.disabled = false;
    oProvider.disabled = true;
}

function myProviderCallBack(oHttp) {
    var oProvider = document.getElementById("provider");
    var oProviders = eval('(' + oHttp.responseText + ')');
    oProvider.length = 0;
    insertOption(oProvider,'Vaelg Selskab');
    for (var x in oProviders.provider){
        insertOption(oProvider,oProviders.provider[x].text);
    }
    oProvider.disabled = false;
}

function changeModel(obj) {
    var iValue = obj.value;
    if(iValue != 0){
        new AjaxReq("POST", "http://www.codebreaker.dk/exp/819020exp.php", {"model":iValue}, myModelCallBack);
    }
}

function changeProvider(obj) {
    var iValue = obj.value;
    if(iValue != 0){
        new AjaxReq("POST", "http://www.codebreaker.dk/exp/819020exp.php", {"provider":iValue}, myProviderCallBack);
    }
}
//]]>
</script>
</head>
<body>
    <div>Mobil: <select id="brand" onchange="changeModel(this)"><option value="0">Vaelg Model</option><option value="1">Nokia</option><option value="2">Ericsson</option></select></div>
    <div>Model: <select disabled="disabled" id="model" onchange="changeProvider(this)"><option value="0">Vaelg Model</option></select></div>
    <div>Selskab: <select disabled="disabled" id="provider"><option value="0">Vaelg Selskab</option></select></div>
    <div id="latest">&nbsp;</div>
</body>
</html>

Fejl og lignende er gratis. :o)
Avatar billede mibu Nybegynder
11. februar 2008 - 21:23 #6
Kan de også byttes gratis :-)
Avatar billede jakobdo Ekspert
11. februar 2008 - 21:28 #7
Nej, det koster... :o)
Avatar billede walkie84 Nybegynder
11. februar 2008 - 22:50 #8
Undskyld jeg ikke har svaret før nu, men har været optaget her til aften :)
Jeg forsøger med det du har postet i morgen, og giver dig svar.

På forhånd tak
Avatar billede walkie84 Nybegynder
13. februar 2008 - 18:18 #9
Har fået det til at virke jakob.
Skriv venligst et svar :)

vh
Avatar billede jakobdo Ekspert
13. februar 2008 - 21:36 #10
Svar!
Avatar billede w13 Novice
24. april 2008 - 12:03 #11
Lukketid?
Avatar billede jakobdo Ekspert
29. juli 2008 - 23:12 #12
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Udlændinge- og Integrationsministeriet

Jira og Confluence administrator til Koncern It

Capgemini Danmark A/S

Open Application (Denmark)

Udlændinge- og Integrationsministeriet

Contract manager til it-området i Udlændingestyrelsen

Politiets Efterretningstjeneste

Bliv IT-supporter i PET's IT Servicedesk