Avatar billede mimi Nybegynder
08. juni 2002 - 12:54 Der er 16 kommentarer og
2 løsninger

Hvordan requester jeg ID?

Jeg har lavet sådan et lille system, hvor man kan uploade billeder. Det foregår i flere trin, først uploader man et thumbnail, så bliver man sendt til den næste side, hvor man uploader selve billeder, så bliver man sendt til den sidste side, hvor man skal skrive en billedbeskrivelse. Det virker egentlig fint nok, billederne bliver uploadet og billedet bliver også tilføjet i databasen, men IKKE billedbeskrivelsen.
Jeg skal på en eller anden måde have fortalt den, at den skal tilføje billedbeskrivelsen til WHERE ID = ???

Her er mit "tilføj beskrivelse"-dokument:

<%
'Databaseforbindelse oprettes   
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../database/galleri.mdb")
Conn.Open DSN
   
'Tjekker om formen er "aktiveret"
if request ("mode") = "opret" then

tekst = Request("tekst")
tekst = Replace(tekst, "'" , "''")

' SQL sætning opbygges       
strSQL = "insert into oegler ("

strSQL = strSQL & "tekst) "

strSQL = strSQL & "values ("

strSQL = strSQL & "'" & tekst & "')" 

'SQL sætning eksekveres
Conn.Execute(strSQL)
Response.Redirect "oegler.asp"


'Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
   
end if
%>
<script langauge="javascript">

function checkform()
{

      if (document.form.tekst.value == "") {
            alert ("Du skal skrive en beskrivelse");
            return false;
      }
     

      form.submit()

}

</script>
<form action="beskriv.asp" name="form">

      <input type="hidden" Name="id" Value="<% = Request("id")%>">
      <TEXTAREA rows=4 cols=35 name="tekst"></TEXTAREA>
      <p><input type="button" Value="Send" name=Submit1 onClick="checkform()">

</form>

Please help - det haster!
Avatar billede cotus Nybegynder
08. juni 2002 - 13:05 #1
Hmmm... kan du ikke lave nogle hidden-forms?
Avatar billede mimi Nybegynder
08. juni 2002 - 13:07 #2
Der er jo sådan set allerede én... I dokumentet forinden dette har jeg lige tilføjet filens navn til databasen, og det virker fint:
<%
'Databaseforbindelse oprettes   
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../database/galleri.mdb")
Conn.Open DSN


' SQL sætning opbygges       

strSQL = "insert into oegler ("

strSQL = strSQL & "image) "

strSQL = strSQL & "values ("

strSQL = strSQL & "'" & filename & "')" 

'SQL sætning eksekveres
Conn.Execute(strSQL)
response.redirect ("beskriv.asp")

'Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
   
%>

Men jeg kan ikke lige helt gennemskue, hvordan jeg i det næste trin får "fortalt" dokumentet, at tekst-beskrivelsen til tilføjes til det billede, jeg lige har uploadet.
Avatar billede cotus Nybegynder
08. juni 2002 - 13:07 #3
side 1: <form method="post" action="side2.asp"><input type="text name="thumbnail"><input type="submit"></form>

side2: <form method="post" action="side3.asp"><input type="hidden" value="<% Response.write Request.Form("thumbnail")"><input type="text" name="billede"><input type="submit"></form>

Osv.....

??????????????????????
Avatar billede mimi Nybegynder
08. juni 2002 - 13:15 #4
Nej, ikke helt. Selve filnavnet, som skal tilføjes databasen henter den selv fra mit uploadscript, hvor "image" i databasen hedder det, som filen hedder... Øhm, jeg ved ikke lige, hvordan jeg skal forklare det... Men altså filnavnet skal jeg ikke tilføje manuelt, kun beskrivelsen.
Avatar billede mimi Nybegynder
08. juni 2002 - 14:13 #5
Ok, nu har jeg prøvet at ændre lidt i det... Nu navngiver den rigtignok filen rigtigt. Og den tilføjer beskrivelsen korrekt. Men den tror, at det er to forskellige sager, den har med at gøre, så den opretter en sag, hvor billedet er navngivet korrekt, men hvor der ingen beskrivelse er. Og så opretter den en ny sag, hvor billedet ikke er navngivet (og derfor ikke vises)....

SUUUUUK!
Avatar billede musicchart.dk Nybegynder
08. juni 2002 - 14:31 #6
du ku prøve at sende id'et med til næste side, via. en side.asp?id=5, og så requeste den igen, hvor du så siger at den skal skrive i det recodeset som passer til id'et...
Avatar billede mimi Nybegynder
08. juni 2002 - 15:15 #7
Ja, jeg har prøvet, men havde problemer med syntaksen...
Jeg kan ikke rigtig finde ud af, hvordan jeg skal "få fat" i ID'en, når jeg fortsætter til det næste dokument.

response.redirect ("beskriv.asp?id=????")
Avatar billede kalkunen Nybegynder
08. juni 2002 - 18:15 #8
response.redirect "beskriv.asp?id=" & Request("id")

er det det du mener???
Avatar billede mimi Nybegynder
08. juni 2002 - 18:21 #9
Ja, bortset fra, at jeg får følgende fejlmeddelse:

Request object error 'ASP 0208 : 80004005'
Cannot use generic Request collection
/ny/admin/oegler/upload.asp, line 105
Cannot use the generic Request collection after calling BinaryRead.
Avatar billede kalkunen Nybegynder
08. juni 2002 - 18:36 #10
sorry::

holywar = Rs("id")
Response.Redirect "beskriv.asp?Id=" & holywar

nu skulle det gerne virke
Avatar billede mimi Nybegynder
08. juni 2002 - 18:43 #11
Aah... kan godt se logikken, men får dog stadig fejlmeddelse:

Microsoft VBScript runtime error '800a000d'
Type mismatch: 'Rs'
/ny/admin/oegler/upload.asp, line 105
Avatar billede kalkunen Nybegynder
08. juni 2002 - 19:02 #12
Må jeg se hele koden
Avatar billede mimi Nybegynder
08. juni 2002 - 19:04 #13
<%
Sub BuildUploadRequest(RequestBin)

    'Get the boundary
    PosBeg = 1
    PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
    boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
    boundaryPos = InstrB(1,RequestBin,boundary)

    'Get all data inside the boundaries
    Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))

        'Members variable of objects are put in a dictionary object
        Dim UploadControl
        Set UploadControl = CreateObject("Scripting.Dictionary")

        'Get an object name
        Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
        Pos = InstrB(Pos,RequestBin,getByteString("name="))
        PosBeg = Pos+6
        PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
        Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
        PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
        PosBound = InstrB(PosEnd,RequestBin,boundary)

        'Test if object is of file type
        If  PosFile<>0 AND (PosFile<PosBound) Then

            'Get Filename, content-type and content of file
            PosBeg = PosFile + 10
            PosEnd =  InstrB(PosBeg,RequestBin,getByteString(chr(34)))
            FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))

            'Add filename to dictionary object
            UploadControl.Add "FileName", FileName
            Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
            PosBeg = Pos+14
            PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))

            'Add content-type to dictionary object
            ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
            UploadControl.Add "ContentType",ContentType

            'Get content of object
            PosBeg = PosEnd+4
            PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
            Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
            Else

            'Get content of object
            Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
            PosBeg = Pos+4
            PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
            Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
        End If

        'Add content to dictionary object
    UploadControl.Add "Value" , Value   

        'Add dictionary object to main dictionary
    UploadRequest.Add name, UploadControl   

        'Loop to next object
        BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
    Loop

End Sub

'String to byte string conversion
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
    char = Mid(StringStr,i,1)
    getByteString = getByteString & chrB(AscB(char))
Next
End Function

'Byte string to string conversion
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
    getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
Next
End Function





'Databaseforbindelse oprettes   
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../database/galleri.mdb")
Conn.Open DSN

' SQL sætning opbygges       

strSQL = "insert into oegler ("
strSQL = strSQL & "image) "
strSQL = strSQL & "values ("
strSQL = strSQL & "'" & filename & "')" 

'SQL sætning eksekveres
Conn.Execute(strSQL)

holywar = Rs("id")
Response.Redirect "beskriv.asp?Id=" & holywar


'Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
   
%>
Avatar billede tmceu Praktikant
08. juni 2002 - 21:17 #14
Da du bruger en Access database, kan du ikke direkte hente værdien af sidste autonummer som du kan med eks. både SQL Server og MySQL. Men der findes en metode som er beskrevet her:

http://www.kamath.com/tutorials/tut004_autonum.asp

Kort fortalt går den ud på, at du skal ændre den måde du indsætter i databasen på. Selv om SQL også er det jeg foretrækker, er det i dette tilfælde nødvendigt at bruge RS.AddNew frem for INSERT INTO.... Efter du har sat værdierne på de enkelte felter, laver du en RS.Update og dit autonummer felt's værdi kan nu aflæses direkte.
Avatar billede mimi Nybegynder
08. juni 2002 - 21:23 #15
Ok, tusind tak. Jeg kigger på det engang i nat, og vender tilbage. (Får garanteret syntaks-problemer - der sgu så mange &, " og ' at holde styr på!)
Avatar billede kalkunen Nybegynder
08. juni 2002 - 21:56 #16
Response.Redirect "beskriv.asp?Id=" & Request.form("id")

måske hvis man taget verdien i form feltet? Bruger selv Rs.Addnew syntes det er forvirrendene det der andet :/
Avatar billede tmceu Praktikant
10. juni 2002 - 00:02 #17
Fik du løst problemet ?
Avatar billede mimi Nybegynder
10. juni 2002 - 02:02 #18
Nej, jeg fik ikke tid til kigge på det pga. afleveringsfrist i projektet. Men I skal have tak for at komme med forslag til en løsning, synes umiddelbart at Rs.Addnew lyder meget fornuftigt.
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