# Wert an JSP übergeben



## boyscout (1. Okt 2004)

Morgen Leute.

habe zur zeit die Aufgabe nen Webshop zu erstellen mit Eclipse 3.0, Tomcat 5.0 und MySql.
In dem Shop hat man die Möglichkeit klingeltöne zu bestellen (Anmerkung: ist nur nen Übungsaufgabe).

So und es geht so weit auch, aber wenn ich jetzt auf Kaufen bei dem jeweiligen Tone klicke weis ich nicht wie er es schaffen soll die Daten nur von diesem Ton aus der datenbank zu lesen um sie in eine neu DB zu schreiben...

hier mal der code von der kaufen seite:


```
<!DOCTYPE HTML PUBLIC "-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//EN" "hmpro6.dtd">
<HTML> 
  <HEAD> 
	 <TITLE>Rock</TITLE> 
  </HEAD> 
  <BODY>
   <CENTER>
      <FONT COLOR="red" SIZE="6">
        Rock
      </FONT>
   </CENTER>
   


   <%@ page import="java.sql.*" %>
   <TABLE WIDTH="100%" BORDER="2" BGCOLOR="silver">
      <TR><TH WIDTH="17%">ArtikelNr</TH>
          <TH WIDTH="20%">Titel</TH>
          <TH WIDTH="20%">Preis</TH>
          <TH WIDTH="20%">Genre</TH>
          <TH WIDTH="20%">Art</TH>
          <TH WIDTH="3%"></TH>
      </TR>
      <%
        try
        {
           Class.forName("com.mysql.jdbc.Driver");
           Connection conn=DriverManager.getConnection
              ("jdbc:mysql://localhost/test","root","");
           Statement statement=conn.createStatement();
           
           String sql = "select * from klingeltone where genre='Rock'";
           ResultSet rs = statement.executeQuery(sql);
           
           while (rs.next())
           {
               %>
              <TR><TD><%= rs.getString("artnr") %></TD>
                  <TD><%= rs.getString("titel") %></TD>
                  <TD><%= rs.getString("preis") %></TD>
                  <TD><%= rs.getString("genre") %></TD>
                  <TD><%= rs.getString("art") %></TD>
                  <TD>[url="kauf.jsp"][img]gfx/images.jpg[/img][/url]</TD>
              </TR>
              <%
           }
           %>
           </TABLE>
           <%
              if (statement != null)
                 statement.close();
              if (conn != null)
                 conn.close();
        }
        catch (Exception e) { out.print(e);}
        %>    
  </BODY>
</HTML>
```
beim öffnen dieser seite werden alle klingeltöne angezeigt die rock als genre haben...wenn man jetzt neben dem lied auf den button "kaufen" klickt soll der wert von dem lied in die DB bestellung eingetragen werden...durch die "kauf.jsp" 

hier der code:


```
<!DOCTYPE HTML PUBLIC "-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//EN" "hmpro6.dtd">
<HTML> 
  <HEAD> 
	 <TITLE>Kaufen</TITLE> 
  </HEAD> 
  <BODY>
   <%@ page import="java.sql.*" %>
   <%
   
      try
      {
           Class.forName("com.mysql.jdbc.Driver");
           Connection conn=DriverManager.getConnection
              ("jdbc:mysql://localhost/test","root","");
           Statement stmt=conn.createStatement();
           
           String artnr="select artnr from klingeltone";
           String titel="select titel from klingeltone";
           String preis="select preis from klingeltone";

           ResultSet rs1=stmt.executeQuery(artnr);
              artnr=rs1.getString("artnr");      
           out.println(artnr);
         
           ResultSet rs2=stmt.executeQuery(titel);
              titel=rs2.getString("titel");
           out.println(titel);
           
           ResultSet rs3=stmt.executeQuery(preis);
              preis=rs3.getString("preis");
           out.println(preis);
           
              String newInsert="insert into bestellung values ('1', 'ka', '01741234567', '" +artnr+ "', '" +titel+ "', '" +preis+ "')";
              stmt.executeUpdate(newInsert);        
      }
      catch(ClassNotFoundException err)
      {
           out.println("DB-Driver nicht gefunden!");
           out.println(err);
      }
      catch(SQLException err)
      {
           out.println("Connect nicht möglich!");
           out.println(err);
      }
   %> 
  </BODY>
</HTML>
```

ich sitze jetzt an dem problem schon 2 tage und mir fällt keine kösung ein...wäre cool wenn ihr mir helfen könntet



thx der boy


----------



## bygones (1. Okt 2004)

@Mods: würde ich zu EE Bereich verschieben...

ist dein Problem nur einen Parameter zu übergeben ??
den musst du dann in deinem link einbauen...
z.b. 
	
	
	
	





```
[url="kauf.jsp?artikel=Rock1"]Link[/url]
```
auf der kauf.jsp holst du dir den Wert über request.getParameter("artikel") (wenn ich mich net irr)


----------



## boyscout (1. Okt 2004)

also du meinst beim link dann so:

<a href="kauf.jsp?artNr=artnr">link.....

und für den aufruf in kauf.jsp:

String Artnr=request.getParameter("artNr");


und um zu suchen nach wert:
String artnr="select artnr from klingeltone where artnr=Artnr";

funzt irgend wie och net  ich verzweifle noch........


----------



## Bleiglanz (1. Okt 2004)

String artnr_select ="select artnr from klingeltone where artnr=?"; 
PreparedStatement holen und dann (richtigen Typ verwenden)
ps.setInt(1,ArtNr) oder ps.setString(1,ArtNr)


----------



## boyscout (1. Okt 2004)

@bleiglanz

ich glaube ich bin zu blöde 

ich verstehe wirklich nur bahnhof


----------



## boyscout (1. Okt 2004)

hatte keiner mehr nen tipp für mich??? wäre wirklich cool


----------



## Bleiglanz (1. Okt 2004)

Lies die API zu JDBC!

jemant tippt eine Artikelnummer in eine Textbox mit name="artNr" auf und drückt auf submit

dann im Servlet:

String Artnr=request.getParameter("artNr");  // sagen wir der passt
String sql="select artnr from klingeltone where artnr=?"; // query 
PreparedStatement ps =conn.prepareStatement(sql);// lernen 
ps.setString(1,Artnr); // den Platzhalter ? besetzen
ResultSet rs = ps.executeQuery(); // ausführen
// kennst du dich jetzt wieder aus


----------



## boyscout (1. Okt 2004)

das problem ist ich arbeite nicht mit einer eingabe.....die tabelle wird mit hilfe von swl ausgelesen und der nutzer muss bei dem gewünschten lied auf das kaufen button klicken.....

da muss keine eingabe machen.....

aber trotzdem thx


----------



## Bleiglanz (1. Okt 2004)

```
<TD><%= rs.getString("art") %></TD>
                  <TD><a href="kauf.jsp?artNr=""<%= rs.getString("artnr") %>">
```
du bist noch neu im Geschäft, oder?


----------



## boyscout (6. Okt 2004)

ja bin neu 

also er schreibt jetzt schon was in die DB rein aber nicht ganz das richtige....

hier mal der code für kauf.jsp:


```
<BODY>
   <%@ page import="java.sql.*" %>
   <%
   String Artnr=request.getParameter("artNr");
      try
      {
           Class.forName("com.mysql.jdbc.Driver");
           Connection conn=DriverManager.getConnection
              ("jdbc:mysql://localhost/test","root","");
           Statement stmt=conn.createStatement();
           
           String artnr="select artnr from klingeltone where artnr=Artnr";
           String titel="select titel from klingeltone where artnr=Artnr";
           String preis="select preis from klingeltone where artnr=Artnr";

           ResultSet rs1=stmt.executeQuery(artnr);
              rs1.last();
              artnr=rs1.getString("artnr");    
           out.println(artnr);
         
           ResultSet rs2=stmt.executeQuery(titel);
              rs2.last(); 
              titel=rs2.getString("titel");    
           out.println(titel);
           
           ResultSet rs3=stmt.executeQuery(preis);
              rs3.last(); 
              preis=rs3.getString("preis");    
           out.println(preis);
           
              String newInsert="insert into bestellung values ('1', 'ka', '01741234567', '" +rs1+ "', '" +rs2+ "', '" +rs3+ "')";
              stmt.executeUpdate(newInsert);        
      }
```

und hier der code von für die übergabe:


```
while (rs.next())
           {
               %>
              <TR><TD><%= rs.getString("artnr") %></TD>
                  <TD><%= rs.getString("titel") %></TD>
                  <TD><%= rs.getString("preis") %></TD>
                  <TD><%= rs.getString("genre") %></TD>
                  <TD><%= rs.getString("art") %></TD>
                  <TD>[url="kauf.jsp?artNr="]">[img]gfx/images.jpg[/img][/url]</TD>
              </TR>
              <%
           }
```


----------



## Bleiglanz (6. Okt 2004)

```
String artnr="select artnr from klingeltone where artnr=Artnr";
           String titel="select titel from klingeltone where artnr=Artnr";
           String preis="select preis from klingeltone where artnr=Artnr";
```
Das ist Käse. Entweder du lernst schnell, was ein preparedStatement ist (s. oben) oder du schreibst

```
String artnr="select artnr from klingeltone where artnr="+request.getParameter("ArtNr")
```
Problem: SQL-Injection - ist ArtNr ein String oder ein int?

Frage: was soll das mit dem rs.last()?

gibts da nicht eine kombinierte INSERT/SELECT: sowas wie

```
INSERT INTO bestellung SELECT '1', 'ka', '01741234567',<dynamischer teil> FROM xyz
```


----------



## boyscout (7. Okt 2004)

@bleiglanz danke für deine hilfe habe es jetzt hinbekommen  naja brauche ebend nen bissel länger als andere leute  8)


----------

