21. december 2003 - 19:05Der 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?
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.
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?
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") %>
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>
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
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")
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")
-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?
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")
-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!"
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!
<% 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")
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")
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(
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)...
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
Synes godt om
Ny brugerNybegynder
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.