Avatar billede clevzter Nybegynder
03. september 2002 - 21:34 Der er 22 kommentarer og
1 løsning

Tilføj post i DB

Jeg ved stort set intet om ASP, men ligger alligevel og roder lidt med en gæstebog.

Jeg har følgende kode:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>

<HEAD>
<link href="logInd.css" rel="stylesheet" type="text/css">
    <TITLE>Teen-Club.dk | Gæstebog</TITLE>
</HEAD>

<BODY bgcolor="#FFE9BB" scroll=yes>

<%
Response.Buffer = True
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("db.mdb")

strSQL = "Select * From bruger Where brugernavn = '" & Request.Querystring("brugernavn") & "' "
Set rs = Con.Execute(strSQL)
%>

<div class="brugerHead"><%=rs("brugernavn")%></div>
<div style="margin-top:0px;width:100%;">&nbsp;&nbsp;&nbsp;<span class="brugerOption"><a href="profil.asp?brugernavn=<%=rs("brugernavn")%>">Profil</a></span> <span class="brugerOption"><a href="gaestebog.asp">Gæstebog</a></span> <span class="brugerOption"><a href="billeder.asp">Billeder</a></span> <span class="brugerOption"><a href="venner.asp">Venner</a></span></div>
<div style="margin-left:30px;margin-right:30px;">
<br><br><span class="head">Gæstebog</span><br><br><br>

<%
rs.close
%>

<%
strSQL = "Select * From gaestebog Where modtager = '" & Request.Querystring("brugernavn") & "' order by dato desc "
Set rs = Con.Execute(strSQL)
%>

<%
if Request("besked") <> "" then

gModtager = rs("brugernavn")
gBesked = Server.HTMLEncode(Request.Form("besked"))

Set rs = Server.CreateObject("ADODB.Recordset")
sql = "select * from gaestebog"
rs.open sql, conn, 1, 3

rs.addnew
rs("modtager") = gModtager
rs("afsender") = Session("brugernavn")
rs("besked") = gBesked
rs("dato") = Now()
rs.update

rs.close
set rs = Nothing
Response.Redirect("gemt.asp")

end if
%>

<form method="post" action="ny.asp">
<input type="text" name="besked">
<input type="submit" value="send">

<%
Con.Close
Set Con = Nothing
%>

</div>

</BODY>

</HTML>

Det, der skal ske er, at beskeden (skrevet i form'en) skal tilføjes som post i tabellen 'gaestebog' i databasen.

Det virker ik. Er den helt gal eller er det en lille fejl?
Avatar billede clevzter Nybegynder
03. september 2002 - 21:36 #1
I kan evt. prøve at logge ind og se: http://www.friserverplads.dk/clevzter/logInd/default.asp

user: test
pass: test
Avatar billede eagleeye Praktikant
03. september 2002 - 21:43 #2
Hvad står der i linie 59 i ny.asp ??

Det kunne tyde på du angiver et forkert kolonnenavn i et rscordset rs("forkrt_navn_her")

/clevzter/logInd/ny.asp, line 59
Avatar billede clevzter Nybegynder
03. september 2002 - 21:46 #3
59. <form method="post" action="ny.asp?brugernavn=<%=rs("brugernavn")%>">

nej, recordsettet er sådan set rigtigt nok, men jeg kan se at jeg tidligere i filen har lukket det

<%
rs.close
%>

har byttet det ud med <form method="post" action="ny.asp?brugernavn=ramsteinfan18">

nu er den gal her:

rs.open sql, conn, 1, 3
Avatar billede clevzter Nybegynder
03. september 2002 - 21:48 #4
hvad betyder 'rs.open sql, conn, 1, 3' helt præcist? det er noget med database-strukturen ik? for den er jo anderledes end i den fil hvor det her er stjålet fra...
Avatar billede eagleeye Praktikant
03. september 2002 - 21:49 #5
Din connection hedder con med et n ikke to som i linie så det skal være:

rs.open sql, con, 1, 3
Avatar billede eagleeye Praktikant
03. september 2002 - 21:52 #6
Avatar billede clevzter Nybegynder
03. september 2002 - 21:58 #7
det var rigtigt nok fejlen

så skal jeg bare have gjort sådan at jeg kan bruge rs("brugernavn") længere nede på siden...
Avatar billede clevzter Nybegynder
03. september 2002 - 22:18 #8
Nu virker det perfekt!

men hvorfor må jeg nu ik skrive: Response.Redirect("gaestebog.asp?brugernavn=rs('brugernavn')")
Avatar billede eagleeye Praktikant
03. september 2002 - 22:20 #9
Der skal være " i kolonnenavnet:

men hvorfor må jeg nu ik skrive: Response.Redirect("gaestebog.asp?brugernavn=rs("brugernavn")")
Avatar billede clevzter Nybegynder
03. september 2002 - 22:28 #10
så opstår der en intern 500-fejl
Avatar billede eagleeye Praktikant
03. september 2002 - 22:29 #11
er recordset åben på det tidspunkt?
Avatar billede clevzter Nybegynder
03. september 2002 - 22:38 #12
ups nej, der står jo:

rs.close
set rs = Nothing
Response.Redirect("gaestebog.asp?brugernavn=rs("brugernavn")")

men kan jeg så bare slette de 2 øverste linier?
Avatar billede eagleeye Praktikant
03. september 2002 - 22:40 #13
Det "pæneste" ville være at lave en variable som man gemmer brugernavnet i inden man lukker det for ikke at havde et åbent recordset inden redirect:

strBrugernavn = rs("brugernavn")
rs.close
set rs = Nothing
Response.Redirect("gaestebog.asp?brugernavn="&strBrugernavn)
Avatar billede clevzter Nybegynder
03. september 2002 - 22:44 #14
Det giver mening, men!

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/clevzter/logInd/ny.asp, line 42
Avatar billede clevzter Nybegynder
03. september 2002 - 22:44 #15
42. strBrugernavn = rs("brugernavn")
Avatar billede eagleeye Praktikant
03. september 2002 - 22:46 #16
Det betyder den ikke kan finde brugernavn i recordset'et Har du en kolonne som hedder det?
Avatar billede clevzter Nybegynder
03. september 2002 - 22:47 #17
der er en kolonne i min db, som hedder brugernavn ja
den er i tabellen bruger
Avatar billede clevzter Nybegynder
03. september 2002 - 22:48 #18
<%
if Request("besked") <> "" then

gModtager = rs("brugernavn")
gBesked = Server.HTMLEncode(Request.Form("besked"))

Set rs = Server.CreateObject("ADODB.Recordset")
sql = "select * from gaestebog"
rs.open sql, con, 1, 3

rs.addnew
rs("modtager") = gModtager
rs("afsender") = Session("brugernavn")
rs("besked") = gBesked
rs("dato") = Now()
rs.update

strBrugernavn = rs("brugernavn")
rs.close
set rs = Nothing
Response.Redirect("gaestebog.asp?brugernavn="&strBrugernavn)

end if
%>

Det gir jo ingen mening at den ved hvad rs("brugernavn") er i toppen men ik i bunden af det her stykke kode
Avatar billede eagleeye Praktikant
03. september 2002 - 23:01 #19
I toppen åbner du et recordet med denne SQL

strSQL = "Select * From bruger Where brugernavn = '" & Request.Querystring("brugernavn") & "' "

Og det ligger du ind i rs....

Så udskriver du med rs("brugernavn")

Så lukkes rs

Så åbnes rs igen med denne SQL

strSQL = "Select * From gaestebog Where modtager = '" & Request.Querystring("brugernavn") & "' order by dato desc "

Nu er modtager så brugernavnet


hvis denne if er opfyldt
if Request("besked") <> "" then


Så overskrives det rs du lige har åbend med det som skal bruges til at gemme beskeden i :

Set rs = Server.CreateObject("ADODB.Recordset")
sql = "select * from gaestebog"
rs.open sql, con, 1, 3

rs.addnew
rs("modtager") = gModtager
rs("afsender") = Session("brugernavn")
rs("besked") = gBesked
rs("dato") = Now()
rs.update



Så enten skal du fra start af gemme brugernavnet elle skal du evt skrive:

Response.Redirect("gaestebog.asp?brugernavn="&request.querystring("brugernavn"))
Avatar billede eagleeye Praktikant
03. september 2002 - 23:04 #20
ok det blev vist lidt forvirne ;)
Avatar billede clevzter Nybegynder
03. september 2002 - 23:30 #21
nej, det gav skam mening

jeg prøver lige noget...
Avatar billede clevzter Nybegynder
03. september 2002 - 23:32 #22
jo, nu virker det

tusind tak for hjælpen og godnat
Avatar billede eagleeye Praktikant
03. september 2002 - 23:34 #23
OK det lyder godt.... godnat
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