Avatar billede chris1289 Nybegynder
29. maj 2005 - 16:40 Der er 41 kommentarer og
2 løsninger

Redigere i min database ved hjælp af ASP

Jeg får en fejl når jeg prøver på at køre denne side:

Jeg får en fejl i min kode når jeg prøve at hente denne side:
Aner ikke hvorfor og har brug for hjælp da jeg skal bruge det til et projekt.
<HEAD>
<TITLE>Log in</TITLE>
</HEAD>
<BODY>
<table width="100%"  border="0" cellspacing="0">
  <tr>
    <td width="30%">&nbsp;</td>
    <td width="60%">
<%

    SQL="Select * from Bruger where MedlemsID=" & Request.QueryString("id")
  set rs = Conn.execute(SQL)
  if not rs.eof then
    Str = str & "<table>"
    Str = str & "<Form Action=""Gembruger.asp"" Method=""post"">"
    Str = str & "<tr><td colspan=""2""><h2>Medarbejder oplysninger</h2></td></tr>"
    Str = str & "<tr><Input type=""Hidden"" Name=""id"" value=" & Request.QueryString("id") & " "
    Str = str & "<tr><td>Fornavn</td><td><Input type=""Text"" Name=""Fornavn"" value=""" & rs("Fornavn") & """></td></tr>"
    Str = str & "<tr><td>Efternavn</td><td><Input type=""Text"" Name=""Efternavn"" value=""" & rs("Efternavn") & """></td></tr>"
    Str = str & "<tr><td>Postnr</td><td><Input type=""Text"" Name=""Postnr"" value=""" & rs("Postnr") & """></td></tr>"
    Str = str & "<tr><td>Adresse</td><td><Input type=""Text"" Name=""Adresse"" value=""" & rs("Adresse") & """></td></tr>"
    Str = str & "<tr><td>Telefon</td><td><Input type=""Text"" Name=""telefon"" value=""" &  rs("Telefon") & """></td></tr>"
    Str = str & "<tr><td>E-mail</td><td><Input type=""Text"" Name=""email"" value=""" & rs("email") & """></td></tr>"
    Str = str & "<tr><td></td><td align=""left""><Input type=""Submit"" Value=""Gem ændringer""></td></tr>"
    Str = str & "</FORM>"
    Str = Str & "</table>"
  End If
   
    response.write Str
    response.Write "<p><a href=""Medarbejderliste.asp"">Retur til Medarbejderlisten</a></p>"

  Conn.Close
  Set Conn = Nothing
%>
</body>
</html>

Fejlen siger  Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "MedlemsID=".
/Asp opgaver/Retbruger.asp, line 15
Avatar billede thesurfer Nybegynder
29. maj 2005 - 16:53 #1
Se fejlmeddelensen: Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "MedlemsID=".

Dvs, der er en fejl ved "MedlemsID=".. fejlen er, at Request.QueryString("id") er tom.. eller at "MedlemsID=" er af typen "tal", og Request.QueryString er af type "tekst"

Prøv det her:
<%
...
q = Request.QueryString("id")
if q <> "" then
q = CInt(q)
    SQL="Select * from Bruger where MedlemsID=" q
...
  Conn.Close
  Set Conn = Nothing
end if
%>


Hvis "MedlemsID" er af type "tekst", brug da: MedlemsID='" ... "'"
Hvor ... f.eks. er q, dog uden linien: q = CInt(q)

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:06 #2
Nu får jeg bare en tom side op, det forstår jeg simpelthen ikke, har også siddet hele dagen og knoklet med det, men kan du finde ud af hvorfor jeg får en tom side??
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:09 #3
Det er fordi der er fejl i: MedlemsID=" & Request.QueryString("id")

Prøv det her:

...
q = Request.QueryString("id")
if q <> "" then
q = CInt(q)
    SQL="Select * from Bruger where MedlemsID=" q
...
  Conn.Close
  Set Conn = Nothing
else
  response.write "fejl i querystring.."
end if

/theSurfer
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:10 #4
Er MedlemsID af typen "Tal" (må KUN indeholde tal) eller "Tekst" (må indeholde tal, bogstaver, osv..) ?

/theSurfer
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:10 #5
I 29/05-2005 17:09:19 har jeg kun tilføjet:
else
  response.write "fejl i querystring.."

Det er den eneste forskel, på de ting kodeblokke..

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:13 #6
Jeg får fejlen, men jeg ved desværre ikke så meget om det, jeg har bare hentet koden fra html.dk, Hva er vore querystring og hva skal der stå??

Håber ikke jeg er for besværlig
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:13 #7
nej medlemsID er autonummerering
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:13 #8
Svar på spørgsmålet: Er MedlemsID af typen "Tal" (må KUN indeholde tal) eller "Tekst" (må indeholde tal, bogstaver, osv..) ?

/theSurfer
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:15 #9
Doh!... jeg er blind :-)

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:16 #10
hehe  :)
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:17 #11
autonummerering = tal

Så skal det virke med:

q = CInt(q)
    SQL="Select * from Bruger where MedlemsID=" q

Den forventer et tal. Hvis den får noget tekst i stedet, vil den melde fejl.

Eksempel - korrekt: side.asp?id=2
Eksempel - forkert: side.asp?id=hansen

Hvordan ser dit link ud, der skal hente data'ene?

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:19 #12
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:20 #13
Der står jo ikke noget i "id".. :-)

Hvad står der, på den side, hvor du vælger hvilken bruger der skal rettes?

Jeg tror, at det er der problemet ligger.. ved udtræk af brugerene med deres medlemsid..

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:21 #14
okay 2 sek
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:22 #15
<!--#include file="kontrol.asp"-->
<!--#include file ="ConnectionTilDatabase.asp" -->
<HTML>
<HEAD>
<TITLE>Log in</TITLE>
</HEAD>
<BODY>

<table width="100%"  border="0" cellspacing="0">
  <tr>   
        <td width="60%"><h2>Kundens kontaktoplysninger</h2></td>
  </tr>
 

   
<%
    dim id
    id = Request.Querystring("id")

        'Hent fra databasen afhængig af værdien id fra URL
        strSQL = "Select * from Bruger Order by MedlemsID Desc"
        Set rs = Conn.Execute(strSQL)

    ' Skriv personens data
        Response.Write "<dt>Navn:</dt><dd>" & rs("Fornavn") & " " & rs("Efternavn") & "</dd>"
        Response.Write "<dt>Telefon:</dt><dd>" & rs("Telefon") & "</dd>"
        Response.Write "<dt>E-mail:</dt><dd>" & rs("email") & "</dd>"       
                   
        Response.Write "<p><a href=""Kundeliste.asp"">Retur til Kundelisten</a></p>"
        Response.Write "<p><a href=""Retbruger.asp?id="& id &""">Rediger Kundeinfo</a></p>"
               
    Conn.Close
    Set Conn = Nothing
%>
</dl>
</td>
    <td width="">&nbsp;</td>
  </tr>
</table>
</BODY>
</HTML>
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:24 #16
Ret det til:

        Response.Write "<p><a href=""Retbruger.asp?id="& rs("id") &""">Rediger Kundeinfo</a></p>"

altså id skal være rs("id")

/theSurfer
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:25 #17
hmm... du finder kun 1 kunde?

Skulle der ikke have været en loop, så den henter alle kunderne?

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:27 #18
Jeg har skrevet den nu, og jeg får den fejl..

ADODB.Recordset (0x800A0CC1)
Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
/Asp opgaver/rediger.asp, line 30
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:28 #19
Jo det har du jo nok ret i jo, men det er jo kun en kunde som skal rettes
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:29 #20
min fejl.. id skal rettes til rs("MedlemsID") ..

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:33 #21
Det hjalp, men nu kommer jeg så tilbage til fejlen med fejl i querystring
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:33 #22
Loop, der finder alle kunderne (også selvom der kun er 1):

    ' Skriv personens data
if not (rs.bof or rs.eof) then
do while not rs.eof
        Response.Write "<dt>Navn:</dt><dd>" & rs("Fornavn") & " " & rs("Efternavn") & "</dd>"
        Response.Write "<dt>Telefon:</dt><dd>" & rs("Telefon") & "</dd>"
        Response.Write "<dt>E-mail:</dt><dd>" & rs("email") & "</dd>"       
                   
        Response.Write "<p><a href=""Kundeliste.asp"">Retur til Kundelisten</a></p>"
        Response.Write "<p><a href=""Retbruger.asp?id="& rs("MedlemsID") &""">Rediger Kundeinfo</a></p>"
response.write "<br>"
rs.movenext
loop

    Conn.Close
    Set Conn = Nothing
else
  response.write "Posten kunnes ikke findes i databasen!"
end if

HUSK!
Man skal ALTID checke, om der findes noget i database, inden man prøver på at hive noget ud:

if not (rs.bof or rs.eof) then
...
else
  response.write "posten kunne ikke findes i databasen!"
end if

/theSurfer
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:34 #23
Hvordan ser dit link ud, der skal hente data'ene?
Det der før så sådan ud: http://localhost/Asp%20opgaver/Retbruger.asp?id=

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:39 #24
http://localhost/Asp%20opgaver/Retbruger.asp?id=

posten kunne ikke findes i posten..

Men jeg har jo oprettet en i min database
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:43 #25
i databasen sorry  :)
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:43 #26
Bruger du rs("MedlemsID") sådan her?:

Response.Write "<p><a href=""Retbruger.asp?id="& rs("MedlemsID") &""">Rediger Kundeinfo</a></p>"
response.write "<br>"

Hvis ja, så kan der ikke komme til at stå http://localhost/Asp%20opgaver/Retbruger.asp?id=

/theSurfer
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:45 #27
PS: brug ikke mellemrum eller "æ,ø,å" i filnavne/mappenavne.. hold dig til a-z, A-Z, "-" (minus også kaldet bindestreg) og "_" (underscore)

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:46 #28
Ja det gør jeg, men der står stadig http://localhost/Asp%20opgaver/Retbruger.asp?id=jeg kopierer det direkte fra dig
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:47 #29
ok det skal jeg huske
Avatar billede thesurfer Nybegynder
29. maj 2005 - 17:50 #30
Det forstår jeg ikke..

Brug denne kode, til at hente kunderne, og lave linket retbruger.asp:

    ' Skriv personens data
if not (rs.bof or rs.eof) then
do while not rs.eof
        Response.Write "<dt>Navn:</dt><dd>" & rs("Fornavn") & " " & rs("Efternavn") & "</dd>"
        Response.Write "<dt>Telefon:</dt><dd>" & rs("Telefon") & "</dd>"
        Response.Write "<dt>E-mail:</dt><dd>" & rs("email") & "</dd>"       
                   
        Response.Write "<p><a href=""Kundeliste.asp"">Retur til Kundelisten</a></p>"
        Response.Write "<p><a href=""Retbruger.asp?id="& rs("MedlemsID") &""">Rediger Kundeinfo</a></p>"
response.write "<br>"
rs.movenext
loop

    Conn.Close
    Set Conn = Nothing
else
  response.write "Posten kunnes ikke findes i databasen!"
end if


Du kan UMULIGT ( ! ) få et link, der ser sådan ud: http://localhost/Asp%20opgaver/Retbruger.asp?id=

Der VIL komme et id på linket :-)

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:53 #31
Avatar billede chris1289 Nybegynder
29. maj 2005 - 17:53 #32
Men siden er stadig tom
Avatar billede thesurfer Nybegynder
29. maj 2005 - 18:00 #33
Jeg har tilføjet nogle checkpoints:

<HEAD>
<TITLE>Log in</TITLE>
</HEAD>
<BODY>
<table width="100%"  border="0" cellspacing="0">
  <tr>
    <td width="30%">&nbsp;</td>
    <td width="60%">
<%
q = Request.QueryString("id")
if q <> "" then
q = CInt(q)

    SQL="Select * from Bruger where MedlemsID=" q
  set rs = Conn.execute(SQL)
  if not (rs.bof or rs.eof) then
    Str = str & "<table>"
    Str = str & "<Form Action=""Gembruger.asp"" Method=""post"">"
    Str = str & "<tr><td colspan=""2""><h2>Medarbejder oplysninger</h2></td></tr>"
    Str = str & "<tr><Input type=""Hidden"" Name=""id"" value=" & Request.QueryString("id") & " "
    Str = str & "<tr><td>Fornavn</td><td><Input type=""Text"" Name=""Fornavn"" value=""" & rs("Fornavn") & """></td></tr>"
    Str = str & "<tr><td>Efternavn</td><td><Input type=""Text"" Name=""Efternavn"" value=""" & rs("Efternavn") & """></td></tr>"
    Str = str & "<tr><td>Postnr</td><td><Input type=""Text"" Name=""Postnr"" value=""" & rs("Postnr") & """></td></tr>"
    Str = str & "<tr><td>Adresse</td><td><Input type=""Text"" Name=""Adresse"" value=""" & rs("Adresse") & """></td></tr>"
    Str = str & "<tr><td>Telefon</td><td><Input type=""Text"" Name=""telefon"" value=""" &  rs("Telefon") & """></td></tr>"
    Str = str & "<tr><td>E-mail</td><td><Input type=""Text"" Name=""email"" value=""" & rs("email") & """></td></tr>"
    Str = str & "<tr><td></td><td align=""left""><Input type=""Submit"" Value=""Gem ændringer""></td></tr>"
    Str = str & "</FORM>"
    Str = Str & "</table>"
    else
        response.write "posten findes ikke i databasen!"
  End If

    response.write Str
    response.Write "<p><a href=""Medarbejderliste.asp"">Retur til Medarbejderlisten</a></p>"

  Conn.Close
  Set Conn = Nothing
else
  response.write "fejl i querystring.."
end if
%>
</body>
</html>


Hvad er resultatet?

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 18:01 #34
Det virker nu. men jeg ved ikke om den ændrer det endnu 2 sek
Avatar billede thesurfer Nybegynder
29. maj 2005 - 18:06 #35
Der er en fejl i koden, ved det skjulte "id"-felt.. skal se sådan ud:

    Str = str & "<tr><Input type=""Hidden"" Name=""brugerid"" value=" & Request.QueryString("id") & """>"

Men jeg mener ikke, at man må kalde feltet for "id".. derfor det nye navn "brugerid"

Husk at bruge "brugerid" i stedet for "id", i request.form("id"), i filen Gembruger.asp

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 18:08 #36
Nu kan jeg godt ændre i det, men i databasen bliver der bare oprette en ny, han bliver ikke ændret
Avatar billede thesurfer Nybegynder
29. maj 2005 - 18:15 #37
Lektionerne 17-22 omhandler databaser: http://www.html.dk/tutorials/asp/

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 18:16 #38
ok

har kigget på dem i 3 dage fatter dem ikke men rigtig mange gange tak for hjælpen.. send et svar og du skal få dine point...

dem har du fuldt ud fortjent
Avatar billede chris1289 Nybegynder
29. maj 2005 - 18:20 #39
kan jeg måske få din mail hvis jeg en anden gang får brug hjælp?
Avatar billede thesurfer Nybegynder
29. maj 2005 - 18:21 #40
Du bruger garanteret "insert"-koden, hvilet er forkert.. du skal bruger "update"-koden.. Se http://www.html.dk/tutorials/asp/lektion22.asp

Jeg kan nøjes med at snuppe 30 points.. Læg selv et svar, og fordel pointsne (30 til mig, 170 til dig) via "Avanceret"..

PS: Hold dig til 15/30/60 points.. så sparer du points, og overholden "standarden" (hvis man kan kalde det det..)

/theSurfer
Avatar billede chris1289 Nybegynder
29. maj 2005 - 18:22 #41
ok tak
Avatar billede thesurfer Nybegynder
29. maj 2005 - 18:23 #42
Ang email: Desværre.. alle problemer løses via Eksperten.

Jeg kan se at du er ny, her på Eksperten. Du skal derfor læse ExpFAQ ( http://expfaq.1go.dk ) og Ekspertens regler ( http://www.eksperten.dk/regler.phtml ) inden du forstætter.

/theSurfer
Avatar billede thesurfer Nybegynder
29. maj 2005 - 18:26 #43
Held og lykke med projektet!
Takker for points.

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

IT-JOB