Avatar billede w13 Novice
21. december 2003 - 19:05 Der er 49 kommentarer og
1 løsning

At gemme i en database

-Jeg aner ikke rigtig noget om ASP, men håber, I kan hjælpe mig lidt... (Har kun arbejdet med færdige koder!)
-På min side skal brugeren have mulighed for at udfylde en formular, som derefter skal gemmes i databasen.
-Jeg har koden, som skal oprette forbindelse til databasen, men mangler stadig koden til at lagre oplysningerne fra de forskellige udfyldte felter, når der klikkes på knappen "send". Nogen, som kan hjælpe mig?

W13
Avatar billede nmh Nybegynder
21. december 2003 - 19:07 #1
Her er et eksempel:
set Conn=server.createobject("adodb.connection")
Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          ";Data Source=" & DB_Filnavn

Fnavn=Request.Form("Fnavn")
Enavn=Request.Form("Enavn")
Bem=Request.Form("Bem")
SQL="Insert Into Test (Fornavn,Efternavn,Kommentar) Values " & _
    "('" & Fnavn & "','" & Enavn & "','" & Bem &"')"
Conn.execute SQL
Conn.close
Set Conn=nothing
Avatar billede nmh Nybegynder
21. december 2003 - 19:08 #2
Her er der tale om en databse med felterne Fornavn, Efternavn og Kommentar.
SQL-ordren sørger for at værdierne der blev hentet med request.form... bliver gemt som en post i databasen.
Avatar billede nmh Nybegynder
21. december 2003 - 19:13 #3
Det skulle have været et svar.
Avatar billede w13 Novice
21. december 2003 - 19:14 #4
Tja, jeg forstår ikke så meget af det der... Har prøvet mig lidt frem, men jeg er lost... Kan du lave et eksempel? Altså som hvis det var en rigtig side, som skulle virke?
Avatar billede nmh Nybegynder
21. december 2003 - 19:16 #5
Har du siden med felterne, som brugeren skal udfylde og derefter indsende?
Avatar billede w13 Novice
21. december 2003 - 19:18 #6
Nej, men det skal bare være 3 felter... Lad os bare kalde dem fornavn, efternavn og kommentar, som du brugte i eksemplet før... Og så en send-knap...
Avatar billede nmh Nybegynder
21. december 2003 - 19:19 #7
Men her er en side, som kan bruges til at hente og derefter gemme i en database.
Når posten er gemt i databasen redirectes til siden IndRecord.asp, hvor brugeren igen kan indtaste en ny post.

<%
'Denne ASP-side sørger for at gemme den indlæste
'post eller record som en række i tabellen Test i A2000.mdb.
'Derefter sendes IndRecord.asp igen til brugeren.
Option Explicit
Dim Conn, SQL
Dim Fnavn, Enavn, Bem, DB_Filnavn
if not session("AdminOK") then Response.Redirect("Afslut.asp")
%>
<!--#include file="DB_Filnavn.asp"-->
<%

set Conn=server.createobject("adodb.connection")
Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          ";Data Source=" & DB_Filnavn

Fnavn=Request.Form("Fnavn")
Enavn=Request.Form("Enavn")
Bem=Request.Form("Bem")
SQL="Insert Into Test (Fornavn,Efternavn,Kommentar) Values " & _
    "('" & Fnavn & "','" & Enavn & "','" & Bem &"')"
Conn.execute SQL
Conn.close
Set Conn=nothing
Response.redirect("IndRecord.asp")
%>
Avatar billede nmh Nybegynder
21. december 2003 - 19:22 #8
Her er siden IndRecord.asp:
<%
'Denne ASP-side sender en side til brugeren
'som nu får mulighed for at indtaste data i input-felter.
'Det indlæste sendes til serveren og behandles af siden GemRecord.asp
%>
<html>
<body>
<form name=F action=GemRecord.asp method=post>
Fornavn:<br>
<input type=text name=Fnavn size=25><br>
Efternavn:<br>
<input type=text name=Enavn size=25><br>
Bemærkninger:<br>
<textarea name=Bem cols=20 rows=10></textarea><p>
<input type=submit value=Indsend>
</form>
</body>
</html>
Avatar billede nmh Nybegynder
21. december 2003 - 19:26 #9
Du skal rette siden Gemrecord.asp til, så den svarer til din database, men jeg forstod, at du havde det allerede.
Denne linie i Gemrecord.asp skal du heller ikke have med:

if not session("AdminOK") then Response.Redirect("Afslut.asp")

De linier, du skal rette. så det svarer til dit eget er følgende:
%>
<!--#include file="DB_Filnavn.asp"-->
<%
set Conn=server.createobject("adodb.connection")
Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          ";Data Source=" & DB_Filnavn
Avatar billede deeflate Nybegynder
21. december 2003 - 19:27 #10
Du skal nok lige ignorere
Avatar billede deeflate Nybegynder
21. december 2003 - 19:28 #11
Hov undskyld! Ramte udfør ;)

Resten af sætningen var:

denne linie: if not session("AdminOK") then Response.Redirect("Afslut.asp")
Avatar billede w13 Novice
21. december 2003 - 19:34 #12
Hvad skal jeg skrive i "<!--#include file="hvad-skal-der-stå-her"-->" ?
Avatar billede deeflate Nybegynder
21. december 2003 - 19:38 #13
Denne her metode er lidt mere overskuelig, synes jeg.
Du indsætter det i samme fil, som din form står i.

<%
if request.ServerVariables("REQUEST_METHOD") = "POST" then

  Set rs = Server.CreateObject("ADODB.RecordSet")
  Set Conn = Server.CreateObject("ADODB.Connection")
  strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database.mdb")

  strSQL = "SELECT * FROM tabel"

  rs.Open strSQL, strDSN, 2, 2
  rs.AddNew

  rs("fornavn") = Request.Form("fornavn")
  rs("efternavn") = Request.Form("efternavnl")
  rs("bem") = Request.Form("bem")

  rs.Update

  'lukker pænt igen
  rs.Close
  set rs = Nothing

  'redirect eventuelt til side med bekræftelse af opdatering

End if
%>
Avatar billede nmh Nybegynder
21. december 2003 - 19:39 #14
erstat
%>
<!--#include file="DB_Filnavn.asp"-->
<%
med
DB_filnavn="D:\DBP\DB\A2000.mdb"

Det er filnavnet på din database. Så det skal du rette til.
Det kan også gøres på andre måder. Det skriver jeg om æidt.
Avatar billede deeflate Nybegynder
21. december 2003 - 19:40 #15
Den tjekker på om der er submittet, og hvis der er det, så opretter den en ny post i databasen og gemmer formens værdier heri.

Du kan evt. lægge databaseforbindelsen i en included fil, hvis du skal bruge det flere steder...
Avatar billede nmh Nybegynder
21. december 2003 - 19:41 #16
Nu har Kommentar:
deeflate
21/12-2003 19:38:40
skrevet, hvordan det også kan gøres. Det er den bedste måde.
Avatar billede deeflate Nybegynder
21. december 2003 - 19:44 #17
Synes også det er klart lettere ;)

Siden kommer altså til at se nogenlunde sådan her ud:

<%
if request.ServerVariables("REQUEST_METHOD") = "POST" then

  Set rs = Server.CreateObject("ADODB.RecordSet")
  Set Conn = Server.CreateObject("ADODB.Connection")
  strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database.mdb")

  strSQL = "SELECT * FROM tabel"

  rs.Open strSQL, strDSN, 2, 2
  rs.AddNew

  rs("fornavn") = Request.Form("fornavn")
  rs("efternavn") = Request.Form("efternavn")
  rs("bem") = Request.Form("bem")

  rs.Update

  'lukker pænt igen
  rs.Close
  set rs = Nothing

  'redirect eventuelt til side med bekræftelse af opdatering

End if
%>

<form name="formNavn" method="post">
Fornavn:
<br>
<input type="text" name="fornavn">
<br>
Efternavn:
<br>
<input type="text" name="efternavn">
<br>
Bemærkninger:
<br>
<textarea name="bem" cols="20" rows="10"></textarea>
<br>
<input type=submit value=Indsend>
</form>
Avatar billede w13 Novice
21. december 2003 - 19:57 #18
Når man klikker "Indsend" skriver den:

"Microsoft JET Database Engine error '80040e37'

The Microsoft Jet database engine cannot find the input table or query 'tabel'. Make sure it exists and that its name is spelled correctly.

/gemme/form.asp, line 18"

-Det er formodentlig linjen: << strSQL = "SELECT * FROM tabel" >> som der er noget galt med... Hva' gør jeg?
Avatar billede deeflate Nybegynder
21. december 2003 - 19:59 #19
Du retter tabel til det din tabel hedder.

strSQL = "SELECT * FROM ditTabelNavn"

Du skal også rette her:

strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("dinDatabase.mdb")
Avatar billede w13 Novice
21. december 2003 - 20:01 #20
Har fundet ud af det, men tak... : )

Stadig nogle ting som skal rettes... Tjekker lige... Skriver, hvis det går helt galt...
Avatar billede deeflate Nybegynder
21. december 2003 - 20:01 #21
ok :) Jeg er lige væk et par timer.
Avatar billede w13 Novice
21. december 2003 - 20:03 #22
Fint... Så virker det... (Men serveren er lige gået ned... Møg!)
Avatar billede w13 Novice
21. december 2003 - 20:13 #23
-Så er serveren oppe igen...

-Ja, det kunne være fedt med en redirect, som du foreslog... Ellers bliver brugeren bare i tvivl om der skete noget... Men jeg har ikke koden... Kan du skrive den til mig?
Avatar billede nmh Nybegynder
21. december 2003 - 20:29 #24
Nu redirectes, hvis der ikke er submittet:
<%
if request.ServerVariables("REQUEST_METHOD") = "POST" then

  Set rs = Server.CreateObject("ADODB.RecordSet")
  Set Conn = Server.CreateObject("ADODB.Connection")
  strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database.mdb")

  strSQL = "SELECT * FROM tabel"

  rs.Open strSQL, strDSN, 2, 2
  rs.AddNew

  rs("fornavn") = Request.Form("fornavn")
  rs("efternavn") = Request.Form("efternavn")
  rs("bem") = Request.Form("bem")

  rs.Update

  'lukker pænt igen
  rs.Close
  set rs = Nothing
else
  Response.redirect("IndRecord.asp")
End if
%>
Avatar billede w13 Novice
21. december 2003 - 20:32 #25
-Hvis der ikke er submittet? Nej, det skulle være, når der VAR submittet... Altså når brugeren opretter sig skal han/hun føres til en side, hvor der står "Du er nu oprettet!"
Avatar billede nmh Nybegynder
21. december 2003 - 20:32 #26
De sidste linier kunne også være:
set rs = Nothing
Response.redirect("IndRecordOK.asp")
else
  Response.redirect("IndRecordFejl.asp")
End if


Her kunne IndRecordOK.asp være magen til Indrecord.asp men med en linie tilføjet, hvor der står:

Det indsendte er gemt.

Den anden IndRecordfejl.asp:

Eb linie der indeholder: Intet er indsendt.
Avatar billede w13 Novice
21. december 2003 - 21:57 #27
Hvad er galt, når jeg får denne besked:  rs("password") = Request.Form("password")  ?
Avatar billede w13 Novice
21. december 2003 - 21:57 #28
Sorry... DENNE besked: Response object error 'ASP 0156 : 80004005'

Header Error

/ansogning.asp, line 38

The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.

?
Avatar billede nmh Nybegynder
21. december 2003 - 22:04 #29
Har du fået de forslag til at virke, som vi har lavet?
Er fejlen kun noget der er kommet efter du selv har lavet ændringer?
Avatar billede w13 Novice
21. december 2003 - 22:05 #30
Ja... Men jeg har løst det problem nu... Bare glem det...
Avatar billede nmh Nybegynder
21. december 2003 - 22:08 #31
så du er nu ved at få styr på det?
Avatar billede deeflate Nybegynder
21. december 2003 - 22:16 #32
Du skal ikke bruge

set rs = Nothing
Response.redirect("IndRecordOK.asp")
else
  Response.redirect("IndRecordFejl.asp")
End if

som nmh foreslår, for så kan man aldrig komme til at skrive noget på siden...

Der tjekkes jo netop på, om der er submitttet, og hvis der ikke er det, ja så er det jo nok fordi man ikke er kommet dertil endnu, så der skal altså IKKE redirectes i en else!
Avatar billede deeflate Nybegynder
21. december 2003 - 22:17 #33
Det skal i stedet se sådan her ud:

<%
if request.ServerVariables("REQUEST_METHOD") = "POST" then

  Set rs = Server.CreateObject("ADODB.RecordSet")
  Set Conn = Server.CreateObject("ADODB.Connection")
  strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database.mdb")

  strSQL = "SELECT * FROM tabel"

  rs.Open strSQL, strDSN, 2, 2
  rs.AddNew

  rs("fornavn") = Request.Form("fornavn")
  rs("efternavn") = Request.Form("efternavn")
  rs("bem") = Request.Form("bem")

  rs.Update

  'lukker pænt igen
  rs.Close
  set rs = Nothing

  'redirect eventuelt til side med bekræftelse af opdatering
  response.redirect "gemtOk.asp" 'eller hvad filen nu skal hedde

End if
%>

<form name="formNavn" method="post">
Fornavn:
<br>
<input type="text" name="fornavn">
<br>
Efternavn:
<br>
<input type="text" name="efternavn">
<br>
Bemærkninger:
<br>
<textarea name="bem" cols="20" rows="10"></textarea>
<br>
<input type=submit value=Indsend>
</form>
Avatar billede deeflate Nybegynder
21. december 2003 - 22:19 #34
Du kan evt. have det i samme fil, så du i stedet gør sådan her:

<%
if request.ServerVariables("REQUEST_METHOD") = "POST" then

  Set rs = Server.CreateObject("ADODB.RecordSet")
  Set Conn = Server.CreateObject("ADODB.Connection")
  strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database.mdb")

  strSQL = "SELECT * FROM tabel"

  rs.Open strSQL, strDSN, 2, 2
  rs.AddNew

  rs("fornavn") = Request.Form("fornavn")
  rs("efternavn") = Request.Form("efternavn")
  rs("bem") = Request.Form("bem")

  rs.Update

  'lukker pænt igen
  rs.Close
  set rs = Nothing

  response.Write "Oplysningerne er nu gemt!"

Else
%>

<form name="formNavn" method="post">
Fornavn:
<br>
<input type="text" name="fornavn">
<br>
Efternavn:
<br>
<input type="text" name="efternavn">
<br>
Bemærkninger:
<br>
<textarea name="bem" cols="20" rows="10"></textarea>
<br>
<input type=submit value=Indsend>
</form>

<%
End if
%>


Så udskrives formen, hvis der ikke er submittet - hvis der er submittet udskrives en meddelelse om, at oplysningerne er gemt.
Avatar billede nmh Nybegynder
21. december 2003 - 22:24 #35
deeflate>>Ok, men jeg så ikke at du netop havde tilføjet indtastningsdelen i bunden.
I dit første forslag var det ikke med, og derfor redirectede jeg. Det var forhastet. :o(
Avatar billede deeflate Nybegynder
21. december 2003 - 22:36 #36
Det går nok altsammen ;)
Avatar billede deeflate Nybegynder
21. december 2003 - 22:41 #37
Kom lige til at tænke på noget.
Det er nok bedst at redirecte, for ellers vil posten blive oprettet 2 gange, hvis brugeren refresher efter 1. opdatering (da request.ServerVariables("REQUEST_METHOD") jo så stadig vil være post)...
Avatar billede w13 Novice
21. december 2003 - 22:44 #38
Men jeg kan stadigvæk ikke finde ud af at redirecte...
Avatar billede deeflate Nybegynder
21. december 2003 - 22:45 #39
Se mim kommentar fra 22:17:43
Der redirecter jeg - du skal bare rette navnet på filen, man skal redirectes til :)
Avatar billede deeflate Nybegynder
21. december 2003 - 22:47 #40
Det er denne her linie:

response.redirect "gemtOk.asp" 'eller hvad filen nu skal hedde

Hvis brugeren skal sendes videre til hejsa.asp, så skal der stå

response.redirect "hejsa.asp"
Avatar billede w13 Novice
21. december 2003 - 22:50 #41
Nåh, der... okey tak...
Avatar billede w13 Novice
21. december 2003 - 22:53 #42
Response object error 'ASP 0156 : 80004005'

Header Error

/ansogning.asp, line 38

The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.
Avatar billede w13 Novice
21. december 2003 - 22:53 #43
Jeg smutter nu, men kommer tilbage i morgen... Der ses vi vel...
Avatar billede w13 Novice
22. december 2003 - 10:28 #44
-Så er jeg tilbage... Men koden virker altså ikke, når jeg lægger <<response.redirect "hejsa.asp">> ind... Jeg får denne besked:

Response object error 'ASP 0156 : 80004005'

Header Error

/ansogning.asp, line 38

The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.
Avatar billede w13 Novice
22. december 2003 - 10:35 #45
(Og jo! Jeg HAR ændret "hejsa.asp" til det rigtige filnavn...)
Avatar billede deeflate Nybegynder
22. december 2003 - 10:36 #46
hehe - det var godt :)
Men det skulle nu egentlig ikke have den store betydning...

Det er en meget mystisk fejl. Er aldrig stødt på den før.
Avatar billede deeflate Nybegynder
22. december 2003 - 10:41 #47
Men virker det fint nok, hvis du ikke har redirect på?
Avatar billede w13 Novice
22. december 2003 - 10:44 #48
-Ja... Det mener jeg... Lige nu driller serveren (igen) så jeg kan ikke lægge filer ud, men jeg forsøger igen, når jeg kan...

-Kan man ikke bare løse problemet ved, at når man klikker "send" bliver man også redirected? Eller...?
Avatar billede deeflate Nybegynder
22. december 2003 - 10:47 #49
Jo, så skal det laves lidt anderledes.

side 1:

<form name="formNavn" method="post" action="side2.asp">
Fornavn:
<br>
<input type="text" name="fornavn">
<br>
Efternavn:
<br>
<input type="text" name="efternavn">
<br>
Bemærkninger:
<br>
<textarea name="bem" cols="20" rows="10"></textarea>
<br>
<input type=submit value=Indsend>
</form>

side 2:

<%
  Set rs = Server.CreateObject("ADODB.RecordSet")
  Set Conn = Server.CreateObject("ADODB.Connection")
  strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database.mdb")

  strSQL = "SELECT * FROM tabel"

  rs.Open strSQL, strDSN, 2, 2
  rs.AddNew

  rs("fornavn") = Request.Form("fornavn")
  rs("efternavn") = Request.Form("efternavn")
  rs("bem") = Request.Form("bem")

  rs.Update

  'lukker pænt igen
  rs.Close
  set rs = Nothing

  response.Write "Oplysningerne er nu gemt!"
%>
Avatar billede w13 Novice
22. december 2003 - 19:24 #50
Tusind tak... Alt virker... Forresten... Jeg betragter dette som min "lektion 1", og jeg går om lidt ind og opretter et nyt spørgsmål med flere point, med noget andet ASP-halløj... Men det kan i jo gå ind og læse, hvis i har lyst...

W13
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