28. september 2005 - 21:43
Der er
33 kommentarer og 1 løsning
Får fejl når jeg laver en Update
Hejsa Det er sikkert et noob spørgsmål!!! men her kommer det alligevel. Fejlmeddelsen er: ************************** Microsoft OLE DB Provider for ODBC Drivers error '80040e14' Microsoft ODBC Microsoft Access Driver Syntax error (missing operator) in query expression 'Id='. /o-main/update_opskrift.asp, line 30 **************************************** Koden er: **************************************** <html> <head> <title>Opdater</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <% fejl = false id = Request.Form("Id") kategori = Request.Form("kategori") antal = Request.Form("antal") perstk = Request.Form("perstk") navn = Request.Form("navn") ingredienser = Request.Form("ingredienser") vejledning = Request.Form("vejledning") tilbehoer = Request.Form("tilbehoer") tips = Request.Form("tips") hvorfra = Request.Form("hvorfra") FILE1 = Request.Form("FILE1") Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath ("../db/opskrifter.mdb") Conn.Open DSN strSQL = ("UPDATE opskrifter SET kategori='" & kategori & "', antal='" & antal & "', perstk='" & perstk & "', navn='" & navn & "', ingredienser='" & ingredienser & "', vejledning='" & vejledning & "', Tilbehoer='" & tilbehoer & "', tips='" & tips & "', hvorfra='" & hvorfra & "', FILE1='" & FILE1 & "' WHERE Id=" & id) Conn.Execute(strSQL) Conn.Close Set Conn = Nothing response.write "<p><b>Din profil er blevet opdateret!</b>" response.write "<p><a href=default.asp>Til forsiden</a>" %> </body> </html> ************************************************ Håber I kloge hoveder kan hjælpe. /bpedersen
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
28. september 2005 - 21:48
#1
Din variabel id er tom.
28. september 2005 - 21:50
#2
ikke bare tom men tom som i onkels toms hytte
28. september 2005 - 21:57
#3
erikjacobsen> Det jeg gør er at hente informationerne fra DB ind i en formular. Det virker fint. Problemet kommer når jeg vil lave en update. Kan du forklare mig hvordan jeg får Id sendt med videre? Her er "formular-koden" <% If Session("alogin") <> True Then Response.Redirect "default2.asp?m=adminlogin" End If %> <% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db/opskrifter.mdb") strSQL = "Select * FROM opskrifter Where Id = " & Request.Querystring("Id") set rs = Conn.execute(strSQL) if rs.EOF then Response.write "Der er ingen indlæg i DB!" else Do until rs.EOF %> <table width="700" border="0" cellpadding="0" cellspacing="0" align="left"> <tr> <td width="700" align="left" valign="top" ><font class="header" color="707F2B" face="verdana" size="5" >Opret opskrift</font> <br><br><font class="artikel" face="verdana" size="2" >Opret din opskrift, så andre også kan få glæde af den :-) </font><br><br></tr> <tr> <td width="700" align="left" valign="top"> <form method="post" action="default2.asp?m=update_opskrift" value="<%=RS("Id")%>" onsubmit="return validering(this);" ENCTYPE="multipart/form-data"> <div class="artikel"> <table> <td> <font class="artikel-right" face="verdana" >Kategori<br> <select size="1" name="kategori" > <option selected="selected"><%=RS("kategori")%></option> <option>Snack</option> <option>Forret</option> <option>Hovedret</option> <option>Dessert</option> <option>Bagværk</option> <option>Suppe</option> <option>Grill</option> <option>Tilbehør</option> <option>Drinks</option> </select><br></font><br></td> <td> </td> <td> <font class="artikel-right" face="verdana" >Antal<br> <select size="1" name="antal" > <option selected="selected"><%=RS("antal")%></option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> <option>11</option> <option>12</option> <option>13</option> <option>14</option> <option>15</option> <option>16</option> <option>17</option> <option>18</option> <option>19</option> <option>20</option> <option>21</option> <option>22</option> <option>23</option> <option>24</option> <option>-</option> </select><br></font><br> </td> <td> </td> <td> <font class="artikel-right" face="verdana" >Personer / Stk.<br> <select size="1" name="perstk"> <option selected="selected"><%=RS("perstk")%></option> <option>stk.:</option> </select><br></font><br> </td> </table> <font face="verdana" size="1" >Navn på ret:<br> <input type="text" size="30" maxlength="45" name="navn" value="<%=RS("navn")%>"></font><br> <font face="verdana" size="1" >Ingredienser:</font><br> <textarea rows="8" name="ingredienser" cols="50" tabindex="4"><%=RS("ingredienser")%></textarea><br><br> <font face="verdana" size="1" >Sådan gør du:<br> <textarea rows="8" name="ingredienser" cols="50" tabindex="4"><%=RS("vejledning")%></textarea></font><br><br <font face="verdana" size="1" >Tilbehør:<br> <input type="text" size="40" value="<%=RS("tilbehoer")%>" maxlength="40" name="tilbehoer"></font><br><br> <font face="verdana" size="1" >Tips:<br> <input type="text" size="40" maxlength="40" name="tips" value="<%=RS("tips")%>"></font><br> <font face="verdana" size="1" >Hvor kommer opskriften fra?<br> <input type="text" size="40" maxlength="40" name="hvorfra" value="<%=RS("hvorfra")%>"></font><br> <font face="verdana" size="1" >Billede<br> <INPUT TYPE="file" NAME="FILE1" value="<%=RS("FILE1")%>" SIZE="50"><br><br> <!-- <font face="verdana" size="1" >Oprettet af:<br> --> <!-- <input type="text" size="25" maxlength="25" name="afhvem"></font><br> --> <input type="hidden" name="afhvem" value="<%=RS("afhvem")%>" size="50" value="<%=session("brugernavn")%>"> <input type="submit" value="Opdater/slet" ><input type="reset" value="Slet"><br><br> <% RS.movenext Loop End if Conn.Close Set Conn = Nothing %> <a href="java script:history.go('-1')">Tilbage</a><br><br> <a href="default2.asp?m=logoff">Log af</a> </td> </form> </table></div>
28. september 2005 - 22:00
#4
Ja, du skal ikke skrive id-værdien i dit <form>-tag, men i et hidden felt med navnet "id"
28. september 2005 - 22:02
#5
altså noget lignende: <input type="hidden" name="id" value="<%=RS("Id")%>
28. september 2005 - 22:03
#6
<input type="hidden" name="id" value="<%=RS("Id")%>">
28. september 2005 - 22:04
#7
faktisk har du næsten selv løsningen... i dit formtag action="default2.asp?m=update_opskrift&id=<%=RS('Id')%>"
28. september 2005 - 22:08
#8
horsmark> når jeg bruger : <form method="post" action="default2.asp?m=update_opskrift&id=<%=RS('Id')%>" onsubmit="return validering(this);" ENCTYPE="multipart/form-data"> Kommer der følgende fejl: Response.Write(RS('Id'))
28. september 2005 - 22:10
#9
Din løsning 22:03:17 ser god ud
28. september 2005 - 22:19
#10
erikjacobsen> jeg har arbejdet videre med din løsning, men der kommer følgende fejl nu.: Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Id='. /o-main/update_opskrift.asp, line 28 ************************************************ Filerne er som følger: Formular-filen: <% If Session("alogin") <> True Then Response.Redirect "default2.asp?m=adminlogin" End If %> <% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db/opskrifter.mdb") strSQL = "Select * FROM opskrifter Where Id = " & Request.Querystring("Id") set rs = Conn.execute(strSQL) if rs.EOF then Response.write "Der er ingen indlæg i DB!" else Do until rs.EOF %> <table width="700" border="0" cellpadding="0" cellspacing="0" align="left"> <tr> <td width="700" align="left" valign="top" ><font class="header" color="707F2B" face="verdana" size="5" >Opret opskrift</font> <br><br><font class="artikel" face="verdana" size="2" >Opret din opskrift, så andre også kan få glæde af den :-) </font><br><br></tr> <tr> <td width="700" align="left" valign="top"> <form method="post" action="default2.asp?m=update_opskrift" onsubmit="return validering(this);" ENCTYPE="multipart/form-data"> <div class="artikel"> <table> <td> <input type="hidden" name="id" value="<%=RS("Id")%>"> <font class="artikel-right" face="verdana" >Kategori<br> <select size="1" name="kategori" > <option selected="selected"><%=RS("kategori")%></option> <option>Snack</option> <option>Forret</option> <option>Hovedret</option> <option>Dessert</option> <option>Bagværk</option> <option>Suppe</option> <option>Grill</option> <option>Tilbehør</option> <option>Drinks</option> </select><br></font><br></td> <td> </td> <td> <font class="artikel-right" face="verdana" >Antal<br> <select size="1" name="antal" > <option selected="selected"><%=RS("antal")%></option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> <option>11</option> <option>12</option> <option>13</option> <option>14</option> <option>15</option> <option>16</option> <option>17</option> <option>18</option> <option>19</option> <option>20</option> <option>21</option> <option>22</option> <option>23</option> <option>24</option> <option>-</option> </select><br></font><br> </td> <td> </td> <td> <font class="artikel-right" face="verdana" >Personer / Stk.<br> <select size="1" name="perstk"> <option selected="selected"><%=RS("perstk")%></option> <option>stk.:</option> </select><br></font><br> </td> </table> <font face="verdana" size="1" >Navn på ret:<br> <input type="text" size="30" maxlength="45" name="navn" value="<%=RS("navn")%>"></font><br> <font face="verdana" size="1" >Ingredienser:</font><br> <textarea rows="8" name="ingredienser" cols="50" tabindex="4"><%=RS("ingredienser")%></textarea><br><br> <font face="verdana" size="1" >Sådan gør du:<br> <textarea rows="8" name="ingredienser" cols="50" tabindex="4"><%=RS("vejledning")%></textarea></font><br><br <font face="verdana" size="1" >Tilbehør:<br> <input type="text" size="40" value="<%=RS("tilbehoer")%>" maxlength="40" name="tilbehoer"></font><br><br> <font face="verdana" size="1" >Tips:<br> <input type="text" size="40" maxlength="40" name="tips" value="<%=RS("tips")%>"></font><br> <font face="verdana" size="1" >Hvor kommer opskriften fra?<br> <input type="text" size="40" maxlength="40" name="hvorfra" value="<%=RS("hvorfra")%>"></font><br> <font face="verdana" size="1" >Billede<br> <INPUT TYPE="file" NAME="FILE1" value="<%=RS("FILE1")%>" SIZE="50"><br><br> <!-- <font face="verdana" size="1" >Oprettet af:<br> --> <!-- <input type="text" size="25" maxlength="25" name="afhvem"></font><br> --> <input type="hidden" name="afhvem" value="<%=RS("afhvem")%>" size="50" value="<%=session("brugernavn")%>"> <input type="submit" value="Opdater/slet" ><input type="reset" value="Slet"><br><br> <% RS.movenext Loop End if Conn.Close Set Conn = Nothing %> <a href="java script:history.go('-1')">Tilbage</a><br><br> <a href="default2.asp?m=logoff">Log af</a> </td> </form> </table></div> ****************************************** Updatefilen: <html> <head> <title>Opdater</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <% id = Request.Form("id") kategori = Request.Form("kategori") antal = Request.Form("antal") perstk = Request.Form("perstk") navn = Request.Form("navn") ingredienser = Request.Form("ingredienser") vejledning = Request.Form("vejledning") tilbehoer = Request.Form("tilbehoer") tips = Request.Form("tips") hvorfra = Request.Form("hvorfra") FILE1 = Request.Form("FILE1") Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath ("../db/opskrifter.mdb") Conn.Open DSN strSQL = ("UPDATE opskrifter SET kategori='" & kategori & "', antal='" & antal & "', perstk='" & perstk & "', navn='" & navn & "', ingredienser='" & ingredienser & "', vejledning='" & vejledning & "', Tilbehoer='" & tilbehoer & "', tips='" & tips & "', hvorfra='" & hvorfra & "', FILE1='" & FILE1 & "' WHERE Id=" & id) Conn.Execute(strSQL) Conn.Close Set Conn = Nothing response.write "<p><b>Din profil er blevet opdateret!</b>" response.write "<p><a href=default.asp>Til forsiden</a>" %> </body> </html> **********************************************************
28. september 2005 - 22:37
#11
Er det så i den her linie Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db/opskrifter.mdb") strSQL = "Select * FROM opskrifter Where Id = " & Request.Querystring("Id") hvor du ikke har noget i Request.Querystring("Id") ?? (PS: Husk når det virker at læse grundigt om "SQL injection" - brug google. I hvert fald ikke bruge det til andet end leg indtil da)
28. september 2005 - 22:42
#12
Jeg får godtnok dataene ind i formularen. Så der må vel være noget i Request.Querystring("Id") ikk? Ellers ville jeg vel ikke få data ind i mine form felter?
28. september 2005 - 22:45
#13
Det er der vel ingen der siger. Men du kan sige hvilken linie, der er /o-main/update_opskrift.asp, line 28 og hvad der står i de 5 linier før (sådan ca.)
28. september 2005 - 22:46
#14
Og du skal derudover læse mere om hvordan man uploader filer med php. Prøv at få dit script til at virke uden først.
28. september 2005 - 22:47
#15
den sidste linie er nr. 28 Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath ("../db/opskrifter.mdb") Conn.Open DSN strSQL = ("UPDATE opskrifter SET kategori='" & kategori & "', antal='" & antal & "', perstk='" & perstk & "', navn='" & navn & "', ingredienser='" & ingredienser & "', vejledning='" & vejledning & "', Tilbehoer='" & tilbehoer & "', tips='" & tips & "', hvorfra='" & hvorfra & "', FILE1='" & FILE1 & "' WHERE Id=" & id) Conn.Execute(strSQL)
28. september 2005 - 22:54
#16
Ok, så er der noget du ikke fortæller. Din form går til default2.asp, men filen du får fejl på hedder update_opskrift.asp. Hvordan det?
28. september 2005 - 22:59
#17
Det er fordi jeg har en skabelon, default2.asp hvor m = main. altså hoved siden. Der erogså top, right, bottom m.m. default2.asp?m=update_opskrift Er du med? Jeg er ikke specielt god til at forklare det, tror jeg :-)
28. september 2005 - 23:05
#18
Det går fint. Men så skal du også lige forklare hvordan m=update_opskrift bliver brugt.
28. september 2005 - 23:07
#19
ok - default2.asp?m=opdater_opskrift er formularen, hvor jeg henter oplysningerne ind fra DB for at kunne rette i dataene, i dette tilfælde en opskrift. Og så gemme dem igen. dvs. at jeg "poster" til default2.asp?m=update_opskrift for at få dataene opdateret i DB igen.
28. september 2005 - 23:17
#20
Men dine asp-filer hedder default2.asp og update_opskrift.asp - hvordan hænger de sammen?
28. september 2005 - 23:23
#21
forestil dig at siden er opdelt i top (t), main (m), bottom (b). Default2.asp indeholder en "skabelon der henter top: default2.asp?t=t-default.asp og default2.asp?m=m-default.asp og default2.asp?b=b-default.asp. Det er selve siden som blot er samlet af 3 asp sider. dvs. at jeg blot kan skifte en del af siden af gangen. eks til default2.asp?m=opdater_opskrift - dvs. at top og bund er de samme, men at main kun hentes ind. Det er således ikke nødvendigt at reloade hele siden, men kun den eller de dele der skal skiftes ud.
28. september 2005 - 23:25
#22
Ja, men hvordan gør du?
28. september 2005 - 23:25
#23
finder lige koden.
28. september 2005 - 23:29
#24
<%@ Language=VBScript%> <% Dim m, l, t, b, s if request("m") <> "" then m = request("m") else m = "m-default" if request("l") <> "" then l = request("l") else l = "l-default" if request("t") <> "" then t = request("t") else t = "t-default" if request("b") <> "" then b = request("b") else b = "b-default" if request("s") <> "" then s = request("s") else s = "s-default" %> <HTML> <HEAD> <TITLE>Opskrifter</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <link rel="stylesheet" type="text/css" href="o-css/o.css"> </HEAD> <BODY background='pics/baggrund.gif' bgproperties="fixed" LEFTMARGIN=0 TOPMARGIN=10 MARGINWIDTH=0 MARGINHEIGHT=0> <div align="center"> <table border="0" cellpadding="0" cellspacing="0" width="770" height="20"> <tr> <!-- ***** Top ***** --> <td background="pics/topmenu.gif" width="770" height="20"><%Server.Execute("o-top/" & t & ".asp")%></td> </tr> <tr> <!-- ***** Logomenu ***** --> <td background="pics/logomenu.gif" valign="top" width="770" height="50"><%Server.Execute("o-menu/" & l & ".asp")%></td> </tr> <tr> <!-- ***** Blank ***** --> <td background="pics/blank.gif" valign="top" width="770" height="25"><%Server.Execute("o-blank/" & s & ".asp")%></td> </tr> <tr> <!-- ***** Main ***** --> <td background="pics/main.gif" valign="top" width="770" height="565"><%Server.Execute("o-main/" & m & ".asp")%></td> </tr> <tr> <!-- ***** bottom ***** --> <td background="pics/bottom.gif" valign="top" width="770" height="20"><%Server.Execute("o-bottom/" & b & ".asp")%></td> </tr> </table> </div> </BODY> </HTML>
28. september 2005 - 23:32
#25
Du ku' bare have sagt server.execute ;) Du får ingen data fra din form med over med en server.execute. Du kan (og bør) løse det ved at din form går til en .asp fil, der laver opdateringen, og som derefter redirecter tilbage til dit smarte script med server.execute.
28. september 2005 - 23:33
#26
Altså ikke redirecter tilbage ved hjælp af server.execute, men ved hjælp af almindelig http-redirect (i asp er det vist response.redirect)
28. september 2005 - 23:39
#27
:-) dvs. at jeg "poster til eks. update_opskrift.asp , hvilket filen jo allerede hedder
28. september 2005 - 23:44
#28
Det er i hvert fald i den rigtige retning, ja.
28. september 2005 - 23:47
#29
tjaa, det er sgu ikke nemt at være hobby-nørd :-D Men man lærer jo lidt hver gang. Jeg vil prøve at rode lidt videre og lade dig få fred. :-) Smid lige et svar for den hjælp du allerede har givet mig. Håber jeg må genere dig en anden gang. TAK for hjælpen.
28. september 2005 - 23:50
#30
Jeg samler slet ikke på point, tak. Du kan bare vende tilbage her, hvis der er mere.
28. september 2005 - 23:53
#31
super, godnat når du kommer til det.
20. oktober 2005 - 15:08
#32
Erikjacobsen> Jeg har ikke fået det til at fungere. Men dropper det med at opdatere billedet, men kun teksten. Smid et svar så jeg kan lukke ?. Og tak for din tid. :-)
20. oktober 2005 - 15:29
#33
Jeg samler slet ikke på point, tak. Men det kan sagtens komme til at virke - det er der jo så mange andre der kan ;)
21. oktober 2005 - 16:22
#34
så lukker jeg og roder lidt videre.
Kurser inden for grundlæggende programmering