23. maj 2008 - 09:51Der er
14 kommentarer og 1 løsning
Hvordan opdaterer jeg db ved tryk på link
Jeg har fundet et lille filesystemobject-script der linker til mapper på serveren. Jeg har brug for at navnet på den mappe, som man klikker på, samtidig opdaterer et felt, der hedder folder_path, i en mssql database.
Altså hvis mappen - og linket - hedder Mappe1, så opdateres feltet i db med Mappe1. Hvis Mappe2 så opdateres feltet til at indeholde navnet Mappe2. etc
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Dim rootFolder Set rootFolder = fso.GetFolder(Server.MapPath("\topfolder\graphics\common))
hrefFolder="graphics/common" Dim subFolders Set subFolders = rootFolder.SubFolders
For Each folder in subFolders select case folder.name Case else Response.Write "<tr><td class='dataTD'>" Response.Write "<A href=" & hrefFolder & "/" & folder.Name & ">" Response.Write "</td></tr>" End select Next end function
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Så vil et klik på mappe1 resultere i, at siden updatedb.asp?folder=mappe1 bliver kaldt. Og et klik på mappe2 vil gøre, at updatedb.asp?folder=mappe2 bliver kaldt.
Medmindre linket simpelthen springer videre til næste side, inden det når at ske? I så fald burde du måske åbne siden i et nyt vindue i stedet eller lave det sådan, at når man klikkede på linket, gik den i virkeligheden til siden updatedb.asp?folder=mappensnavn som opdaterede databasen og derefter sprang over og viste mappen. Det ville faktisk være meget bedre.
Jeg forstår ikke helt hvad det er du gør i ovenstående eksempel. Hvordan bliver databasen opdateret med navnet på linket. Jeg antager at der skaL være et script i updatedb.asp, som updater databasen, men hvordan skal det så være hvis det ikke sker med en submit-form.
Undskyld min uvidenhed, men måske skal jeg lige forklare hvad der sker i øjeblikket. Det der sker når jeg trykker på linket er at en index-fil i mappen redirecter til en tredje side. Denne tredje side skal bruge navnet på det igangværende link, som del af en sti til en xml-fil, der ligger i for eksempel Mappe1 eller Mappe2. Afhængig af hvilken mappe man vælger, viser den tredje side indholdet af forskellige xml-filer. Rettere: det er det der er mit mål.
En anden løsning kunne også være at updatere en include fil, men der er jeg også lost.
Og så på updatedb.asp lave den funktion, som opdaterer databasen med stien, som du kan hente med Request.Querystring("folder") Og sidst på updatedb.asp kan du så indsætte:
response.redirect Request.Querystring("folder")
som så vil gå videre og gøre det, der bliver gjort nu.
på den måde er det kun selve mappenavnet og ikke hele stien, der bliver registreret.
Bortset fra at der ikke sker andet end at jeg får en tom side frem med den korrekte adresse: updatedb.asp?folder=Mappe1
Jeg har prøvet at bruge applikationens user-update-script som updatedb.asp. Det involverer sessions og user_id etc..., så jeg rører alting med forsigtighed.
Siden updatedb.asp kan udformes således (uden at kende din databases navn/password, tabellernes navne og felterne i tabellerne): ******************************************** <%Set Conn=Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("/db/database.mdb")
If Request.Querystring("folder")<>"" Then Conn.Execute("UPDATE table1 SET folder='"&Request.Querystring("folder")&"' WHERE id=ETELLERANDET") Response.Redirect Request.Querystring("folder") Else Response.Write """Folder"" indeholder ikke en gyldig sti!" End If
Min forstand på sql er for lille til at jeg kan få det integreret i mit script, så databasen bliver opdateret. Din løsning virker fint i forhold til at brugeren bliver redirected til den rette side, men folder_path i databasen bliver ikke opdateret. folder_path er en column i tabellen Users.
<% If Request.Querystring("folder")<>"" Then set rs=cn.Execute("UPDATE Users SET folder_path='"&Request.Querystring("folder")&"' WHERE Users.user_id=" & to_sql(user_id,"number"))
Response.redirect Request.Querystring("folder") Else Response.Write """Folder"" indeholder ikke en gyldig sti!" End If %>
Nedenfor kan du se en forkortet udgave af det registreringsscript jeg tidligere forsøgte at bruge til opdateringen. Hvis det ikke er for meget et bede om kan du måske regne ud hvad der skal til for at opdatere folder_path. Jeg har ladet en masse ligegy
connection-strengen ligger i en include-fil, bare så du ikke tror at det er den der mangler.
sub validate_register ''' request and validate data entered from this form reg_code = trim(request("reg_code")) user_id = trim(request("user_id")) user_name = trim(request("user_name")) f_name = trim(request("f_name")) l_name = trim(request("l_name")) password = trim(request("password")) if password = "" then error_list.add "661647","" &get_label("lbl_form_password") & " is required." b_error = true end if mailing_list = trim(request("mailing_list")) folder_path = Request.Querystring("folder") end sub
sub db_select_register sql = "SELECT " & _ "dtInserted, " & _ "accesslevel, " & _ "user_id, " & _ "user_name, " & _ "f_name, " & _ "l_name, " & _ "email, " & _ "password, " & _ "folder_path, " & _ "notes FROM Users" & _ " WHERE " & _ "Users.user_id = " & to_sql(user_id,"number") & "" on error resume next set rs = cn.Execute(sql) if err.number <> 0 then b_error = true error_list.add "select_data_register", "The data selection failed. " & err.description elseif rs.EOF then b_results = false msg_list.add "select_data_register", "The record was removed from the database." else reg_code = rs("reg_code") dtInserted = rs("dtInserted") accesslevel = rs("accesslevel") user_id = rs("user_id") user_name = rs("user_name") f_name = rs("f_name") l_name = rs("l_name") email = rs("email") password = rs("password") folder_path = rs("folder_path") notes = rs("notes") end if rs.Close on error goto 0 end sub sub db_insert_register sql = "INSERT INTO Users" & _ "(" & _ "folder_path," & _ "mailing_list" & _ ") VALUES (" & _ ""Request.Querystring("folder")"," & _ "" & to_sql(mailing_list,"number") & ")" 'response.write sql on error resume next cn.Execute(sql) if err.Number <> 0 then b_error = true error_list.add "db_insert_register" & err.Number ,"The database insert failed. " & err.Description else set rs = cn.Execute("SELECT @@IDENTITY") user_id = rs(0) rs.Close msg_list.add "db_insert_register","The database insert was successful." end if on error goto 0 end sub
do_search = request("do_search") sortby = request("sortby") ''' request form keys and inputs user_id = request("user_id")
case "select_register" ' select the requested key record from database if user_id <> "" then db_select_register else b_error = true error_list.add "edit_register", "Specify record to select." end if
case "insert_register" ' request form data and insert a new record into database
case "update_register" ' request form data and update an existing database record validate_register if not b_error then if user_id <> "" then db_update_register else b_error = true error_list.add "update_register", "Specify record to update." end if end if end select
':: handle the default case(s) (ignores value of action parameter)
%>
<% display_errs display_msg %>
<%
':: check if hide form var was set if not b_hide_register then %>
<tr> <td class=labelTD align=right> </td> <input type=hidden name="action" value="<% if user_id <> "" then %>update<% else %>insert<%end if %>_register"></tr> </form> </table> <% response.redirect Request.Querystring("folder") ':: end hide form if end if %>
Det giver jo heller ikke mening, at du opdaterer, der hvor user_id = user_id, for det vil jo sige alle. Det bliver dog ikke engang kørt på den måde pga. din to_sql()-funktion.
Jeg valgte en anden metode, nemlig at bruge din løsning til at opdatere en xml-fil, hvorfra jeg så inkluderer stien. Det fungerer upåklageligt, så send mig hurtigst et svar, så du kan få nogle velfortjente point.
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.