Avatar billede taae Juniormester
14. november 2005 - 15:45 Der er 10 kommentarer og
1 løsning

combobox og mysql

jeg er lidt i tvivl om hvordan følgende skal/burde opbygges:

jeg vil gerne lave 4 comboboxe som skal indeholde :
1.combobox : bilmærker
2.combobox: model
3.--------- motorstr
4.--------- årgang

1.spg
jeg vil gerne lave det således at min jsp side indlæser disse data fra mysql hvor de er oprettede i forvejen, og indsætter dem i deres pladser i combobox.

2.spg
Jeg kunne vel lave en tabel som hedder bilmærker og skrive de bilmærker ind jeg vil bruge, så langt så godt. Men når jeg skal til at indtaste de forskellige modeller, burde jeg så lave en laaang tabel med alle modeller i, eller burde jeg for hver bilmærke lave en seperat tabel. ligeledes gælder det også for motorstr og årgange.

problemet er bare at hvis jeg laver lange tabeller ud af det, og jeg bagefter vælger fx, audi, så skal den efterfølgende ind i model tabllen og hente netop audi's modeller frem, og derefter hente motorstr og årgange fra de andre tabeller og smide dem ind i combobox, så det er kun dem jeg kan se og de andre kommer ikke frem.

jeg tror selv at jeg burde lave seperate tabelle for hver bilmærke, så ex for audi har jeg en modeltabel med alle modeller i og ligeledes for motorstr og årgang...

Men jeg er mere i tvivl om hvordan jeg kan hente dem fra tabellerne og lægge dem ind i combobox i min .jsp
Avatar billede taae Juniormester
14. november 2005 - 15:49 #1
I siger til hvis der er noget der er uforståeligt
Avatar billede arne_v Ekspert
14. november 2005 - 16:40 #2
det spørgsmål er stillet før !

:-)

jeg lavede engang 3 forskellige løsninger:

den simple

med server side logik

med client side logik
Avatar billede arne_v Ekspert
14. november 2005 - 16:40 #3
<%@ page import="java.sql.*" %>
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess");
Statement stmt = con.createStatement();
%>
<form method="POST" action="show.jsp">
Mærke:
<select name="brand">
<option>vælg mærke
<%
ResultSet rs1 = stmt.executeQuery("SELECT DISTINCT brand FROM cars");
while(rs1.next()) {
%>
<option><%=rs1.getString(1)%></option>
<%
}
rs1.close();
%>
</select>
<br/>
Model:
<select name="model">
<option>vælg model
<%
ResultSet rs2 = stmt.executeQuery("SELECT DISTINCT model FROM cars");
while(rs2.next()) {
%>
<option><%=rs2.getString(1)%></option>
<%
}
rs2.close();
%>
</select>
<br/>
<input type="SUBMIT" value="Vis"/>
</form>
<%
stmt.close();
con.close();
%>
Avatar billede arne_v Ekspert
14. november 2005 - 16:40 #4
<%@ page import="java.sql.*" %>
<%
String brand = request.getParameter("brand");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess");
Statement stmt = con.createStatement();
%>
<form name="car" method="POST" action="<%=(brand==null)?"select_serverside.jsp":"show.jsp"%>">
Mærke:
<select name="brand" onchange="car.submit();">
<option>vælg mærke
<%
ResultSet rs1 = stmt.executeQuery("SELECT DISTINCT brand FROM cars");
while(rs1.next()) {
String col = rs1.getString(1);
%>
<option<%=(brand!=null&&col.equals(brand))?" SELECTED":""%>><%=col%></option>
<%
}
rs1.close();
%>
</select>
<br/>
Model:
<select name="model">
<option>vælg model
<%
ResultSet rs2 = stmt.executeQuery("SELECT DISTINCT model FROM cars" + ((brand!=null)?(" WHERE brand='"+brand+"'"):""));
while(rs2.next()) {
%>
<option><%=rs2.getString(1)%></option>
<%
}
rs2.close();
%>
</select>
<br/>
<input type="SUBMIT" value="Vis"/>
</form>
<%
stmt.close();
con.close();
%>
Avatar billede arne_v Ekspert
14. november 2005 - 16:41 #5
<%@ page import="java.sql.*" %>
<html>
<head>
</head>
<body onload="loadbrands();">
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess");
Statement stmt = con.createStatement();
ResultSet rs1 = stmt.executeQuery("SELECT DISTINCT brand FROM cars");
String brands = "'vælg mærke'";
int nbrands = 0;
while(rs1.next()) {
    brands = brands + ",'" + rs1.getString(1) +"'";
    nbrands++;
}
rs1.close();
ResultSet rs2 = stmt.executeQuery("SELECT brand,model FROM cars");
String[] cars = new String[nbrands];
String lastbrand = "";
int ix = -1;
while(rs2.next()) {
    String col = rs2.getString(1);
    if(!col.equals(lastbrand)) {
        ix++;
        cars[ix] = "'vælg model'";
        lastbrand = col;
    }
    cars[ix] = cars[ix] + ",'" + rs2.getString(2) +"'";
}
rs2.close();
stmt.close();
con.close();
%>
<script type="text/javascript">
var brands = new Array(<%=brands%>);
var models = new Array(
<%
for(int i = 0; i < cars.length; i++) {
%>
                    new Array(<%=cars[i]%>)<%=(i<cars.length-1)?",":""%>
<%
}
%>
                    );
function loadbrands()
{
    for(i=0;i<brands.length;i++) document.car.brand.options[i] = new Option(brands[i],brands[i]);
};
function loadmodels()
{
    var a = models[document.car.brand.selectedIndex-1];
    for(i=0;i<a.length;i++) document.car.model.options[i] = new Option(a[i],a[i]);
}
</script>
<form name="car" method="POST" action="show.jsp">
Mærke:
<select name="brand" onchange="loadmodels();">
</select>
<br/>
Model:
<select name="model">
</select>
<br/>
<input type="SUBMIT" value="Vis"/>
</form>
</body>
</html>
Avatar billede taae Juniormester
15. november 2005 - 02:03 #6
hvordan kan man i den simple eks, får den til at huske rs1 og rs2, og få dem udskrevet under show.jsp ?

der bliver jo lukket for rs1 og rs2, så data er vel gået tabt ?
Avatar billede taae Juniormester
17. november 2005 - 01:44 #7
Kan nogen ud fra mine spg foroven fortælle mig, hvilken løsning jeg burde vælge for at lave mine tabeller i db. Burde jeg lave en lang bilmærke tabel og ligeledes og en lang model tabel, med alle modeller i .....
Avatar billede arne_v Ekspert
17. november 2005 - 10:35 #8
hvis du har brug for model uafhængig mærke information så 2 tabelleer : 1 for
mærke og 1 for model

hvis du bare er interesseret i modeller så bare en enkelt tabel
Avatar billede arne_v Ekspert
17. november 2005 - 10:36 #9
mine eksempler bygger på en tabel

men hvis du vil have: hoved kontor, antal ansatte, øverste direktør etc. for
bilmærkerne så har du brug for 2
Avatar billede taae Juniormester
17. november 2005 - 14:50 #10
ok- lægger du et svar
Avatar billede arne_v Ekspert
17. november 2005 - 15:07 #11
ok
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
Kurser inden for grundlæggende programmering

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