Avatar billede annettef Nybegynder
13. december 2004 - 13:47 Der er 10 kommentarer og
1 løsning

Hvordan hentes ID på post som lige er tilføjet til db?

Hej

Jeg har lavet en asp side hvor man kan tilføje en vare til en tabel i en database. Nu vil jeg gerne have en side hvor man efterfølgende kan tilføje nogle foto til den vare, som man lige har oprettet. Mit problem er nu at jeg ikke ved hvordan jeg skal få tilføjet stien til fotoet i rækken med den nyoprettede vare, for jeg kender jo ikke varens id.

Så hvordan får jeg fat i varens id lige efter varen er blevet oprettet (og dermed id'et)? Er der en anden måde at oprette en vare og tilføje et foto på der er bedre?

::::Min kode til tilføj vare 1::::
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Tilf&oslash;j vare 1</title>
<Link Rel="stylesheet" href="datronic.css" Type="text/css" >
<!-- JavaScript funktion til at omdanne tekst links til knappe links -->
<script language="JavaScript">
<!--
function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}
//-->
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">
<!--
body {
    margin-left: 4px;
    margin-top: 0px;
}
.style1 {color: #FFFFFF}
.style2 {color: #FF0000}
-->
</style></head>
<body>
<br>
<table width="490" border="0" align="left">
  <!--Hovedtabel start-->
  <tr>
    <td height="18" valign="middle" bgcolor="#545DB9"><span class="style1">Opret ny vare i Netbutikken</span></td>
  </tr>
    <tr valign="top">
    <td colspan="2"><div align="center" class="style2">Vigtigt - Alle felter skal udfyldes ellers oprettes varen ikke!</div></td>
  </tr>
  <tr>
    <td><!-- Formular til tilføjning af vare -->
        <form method="POST" action="tilfoej_vare2.asp">
          <table border=0 cellspacing=0 cellpadding=0 width="475" align=left><!--Indholdstabelstart-->
          <tr valign="top">
    <td width="60">Kategori:</td>
    <td height="10"><select name="kategori">
        <!-- Database forbindelse til at udskrive af kategorier -->
        <%
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM kategori ORDER BY kategoriId"
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("shop1.mdb")
rs.Open strSQL, strDSN, 1
If Not (rs.BOF Or rs.EOF) Then
  Do until rs.EOF = True
        Response.Write "<option value='" & rs("kategoriId") & "'>" & rs("kategoriNavn") & vbCrLf
  rs.MoveNext
  Loop
End If
rs.Close
Set rs = Nothing
%>
      </select>
        <br></td>
  </tr>
  <tr valign="top">
    <td width="60">Titel:</td>
    <td height="10"><input type="text" name="titel" size="60" value="Titel..">
        <br>
    </td>
  </tr>
  <tr valign="top">
    <td width="60">Fakta/Beskrivelse:</td>
    <td height="140"><textarea name="beskriv" rows="8" cols="40" wrap="VIRTUAL">
Skriv beskrivelse her...</textarea></td>
  </tr>
  <br>
  <br>
  <tr valign="top">
    <td width="60">Pris:</td>
    <td height="10"><input type="text" name="pris" size="60" value="Pris..">
        <br>
    </td>
  </tr>
  <tr valign="top">
    <td width="60">Model:</td>
    <td height="10"><input type="text" name="model" size="60" value="Model..">
        <br>
    </td>
  </tr>
  <tr valign="top">
    <td width="60">Producent:</td>
    <td height="10"><input type="text" name="producent" size="60" value="Producent..">
        <br>
    </td>
  </tr>
  <tr valign="top">
    <td width="60">Vægt:</td>
    <td height="10"><input type="text" name="vaegt" size="60" value="Vaegt..">
        <br>
    </td>
  </tr>
  <tr valign="top">
    <td width="60"></td>
    <td height="5"><input type="Submit" value="Gem vare" name="send">
&nbsp;
      <input type="Reset" value="Fortryd">
&nbsp;
      <input type="button" value="Tilbage til forsiden" name="Annuller" onClick="java script:location.href='adm_4231.asp'">
    </td>
  </tr></table></form>
</tr></td></table>
</body>
</html>
::::slut::::

::::Min kode til tilføj vare 2::::
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Tilføj vare 2</title>
</head>
<body>
<%
' Update funktion
' Sender resultaterne fra tilføj vare til databasen
' Database connection
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("shop1.mdb")
SQL = "INSERT INTO vare (kategoriId,titel,beskriv,pris,model,producent,vaegt)"  ' SQL sætning der insætter en ny række i db
SQL = SQL & " VALUES ('" & request.form("kategori") & "','" & request.form("titel") & "','" & replace(request.form("beskriv"),"'","''") & "','" & request.form("pris") & "','" & request.form("model") & "','" & request.form("producent") & "','" & request.form("vaegt") & "')"

response.write sql ' skriver i db

Conn.Execute (SQL)

conn.Close 'luk db
Set conn = nothing
Set SQL = nothing

' Sender brugeren tilbage til links når databasen er opdateret
response.redirect ("adm_forside.htm")
%>
</body>
</html>
::::Slut::::

Håber nogen kan hjælpe mig, selvom spørgsmålet er lidt kryptisk!

/Annette
Avatar billede tjaz Nybegynder
13. december 2004 - 13:53 #1
set seneste = "SELECT * FROM vare ORDER BY id DESC"
response.write(seneste("id"))

skulle gerne returnere det seneste tilføjede
Avatar billede fennec Nybegynder
13. december 2004 - 14:00 #2
Dette er den rigtige måde at gøre det på. Der henter du ID'et ud fra den connection du lige har brugt til at indsætte med. På den måde får du ikke det forkerte ID, hvis 2 brugere indsætter på samme tid:

SQL = "insert into ...."
Conn.Execute(SQL)
set rs = Conn.execute("SELECT @@IDENTITY AS THISID;")
NytID = rs("THISID")
Avatar billede tjaz Nybegynder
13. december 2004 - 14:04 #3
cool .. den skriver jeg mig lige bag øret :)
Avatar billede fennec Nybegynder
13. december 2004 - 14:18 #4
... brugte selv "select max(ID) as newID from enTabel" i lang tid, som er en variation af din løsning, indtil jeg lærte denne for et par år siden :o)

I nogle databaser kan det endag smides i en sætning. Dette virker f.eks med MS-SQL:
set rs = Conn.execute("SET NOCOUNT ON; INSERT INTO enTabel(kolonne) VALUES('værdi'); SELECT @@IDENTITY AS THISID;")
NytID = rs("THISID")
Avatar billede annettef Nybegynder
13. december 2004 - 14:28 #5
fennec

Hvor skal jeg skrive den kode du har skrevet?

/Annette
Avatar billede annettef Nybegynder
13. december 2004 - 14:36 #6
Dette er min kode på den side hvor man skal vælge hvilke foto man vil uploade

::::kode::::
<HTML>
<HEAD>
<TITLE>Tilf&oslash;j foto</TITLE>
<Link Rel="stylesheet" href="datronic.css" Type="text/css" >
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">
<!--
body {
    margin-left: 4px;
    margin-top: 0px;
}
.style1 {color: #FFFFFF}
-->
</style></HEAD>
<BODY>
<br>
<table width="490" border="0" align="left"><!--Hovedtabel start-->
  <tr>
    <td height="18" valign="middle" bgcolor="#545DB9"><span class="style1">Tilføj foto til nyoprettet vare</span></td>
  </tr>
  <tr><td>&nbsp;</td></tr>
    <tr><td>
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="UploadScript1.asp">
<table border=0 cellspacing=0 cellpadding=0 width="475" align=left><!--Indholdstabelstart-->
<tr>
<td valign="top">Foto 1 (oversigt):</td>
<td><INPUT TYPE=FILE SIZE=40 NAME="FILE1"><BR><br><br></td>
</tr>
<tr>
<td valign="top">Foto 2 (vare specifikation):</td>
<td><INPUT TYPE=FILE SIZE=40 NAME="FILE2"><BR><br><br></td>
</tr>
<tr>
<td valign="top">Foto 3 (vare specifikation):</td>
<td><INPUT TYPE=FILE SIZE=40 NAME="FILE3"><BR><br><br></td>
</tr>
<tr>
<td valign="top">Foto 4 (tilbud/reklame):</td>
<td><INPUT TYPE=FILE SIZE=40 NAME="FILE4"><BR><br><br></td>
</tr>
<tr><td colspan="2"><INPUT TYPE=SUBMIT VALUE="Tilføj Billede"></td></tr>
</table></FORM>
</td></tr></table>
</BODY>
</HTML>

Ved bare ikke lige hvor koden med id skal indsættes?
Avatar billede fennec Nybegynder
13. december 2004 - 14:44 #7
Jeg skal lige vide hvordan det fungere....

Du har en form, hvor man kan oprette en ny vare. De informationer bliver så gemt, hvorefter du redirecter til en ny side, hvor man kan "vedhæfte" forskelige billeder til varen. Er det sådan det foregår??
Avatar billede annettef Nybegynder
13. december 2004 - 14:48 #8
ja
Avatar billede annettef Nybegynder
13. december 2004 - 14:52 #9
Jeg har prøvet med den metode som tjaz skrev

Der har jeg skrevet denne kode lige efter den form hvor man vælger filer/foto
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("shop1.mdb")

SQL = "SELECT * FROM vare ORDER BY vareid DESC"

Conn.Execute (SQL)

Set intVareId = conn.Execute(SQL)
'response.write(intVareId("vareid"))

%>
<%conn.Close
Set conn = nothing
Set SQL = nothing
    %>

og så på den side hvor filerne/foto bliver gemt har jeg skrevet følgende kode for at få dem gemt det rigtige sted

vareid = Request.Querystring("intVareId")
sql = "INSERT INTO vare ( foto1) values( '"&navn&"') WHERE vareid=" & intVareId

måske kan det bruges til noget?
Avatar billede fennec Nybegynder
13. december 2004 - 15:03 #10
Du kan kun hente ID'et på den samme side som du indsætter på. Det skal derfor med som parameter på url'en du redirecter til. Den skal så igen vidreføres fra den side, til den side hvor du gemmer/uploader billederne.

indsæt vare i database siden:
...
SQL = "indsæt into Vare(...) Values(...)"
Conn.Execute(SQL)
set rs = Conn.execute("SELECT @@IDENTITY AS THISID;")
NytID = rs("THISID")
response.redirect("billedSiden.asp?vareID="& NytID)

Din billed side:
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="UploadScript1.asp?vareID=<%= request.querystring("vareID") %>">

UploadScript1.asp siden:
vareID = request.querystring("vareID")

Så skulle vareID'et gerne være vidre ført fra vare-indsættelsessiden billed-indsættelsessiden. Var det til at forstå???
Avatar billede annettef Nybegynder
13. december 2004 - 15:21 #11
Tusind tak for hjælpen - det ser ud som om det virker. Jeg får da i al fald vareID med over på den sidste side (så skal jeg bare lige have mit upload til at fungere)

Så du får lige point!

/Annette
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