Avatar billede jesthe Nybegynder
13. april 2011 - 11:00 Der er 7 kommentarer og
1 løsning

html forms til access.

hej.

jeg skal lave en forbindelse mellem en hjemmeside og en access-database. umiddelbart har jeg lavet en side med formularer, kaldet "kunde.asp" der ser sådan her ud:

<html>
<head>
<title>Tilføj kunde</title>
</head>
<body>
<form action="kunde_add.asp" method="post">
<table>
<tr>
<td>Navn</td>
<td><input type="text" name="Navn"></td>
</tr>
<tr>
<td>Adresse</td>
<td><input type="text" name="Adresse"></td>
</tr>
<tr>
<td>Postnr</td>
<td><input type="number" name="postnr"></td>
</tr>
<tr>
<td>Telefon</td>
<td><input type="number" name="Telefon"></td>
</tr>
<tr>
<td>E-mail</td>
<td><input type="text" name="E-mail"></td>
</tr>


</table>
<br />
<input type="submit" value="Gem">
</form>

<%
' Databaseforbindelse
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("\booking.mdb")
Conn.Open DSN

' SQL forespørgsel
strSQL = "Select * from kundetabel"
' Udfør forespørgsel (rs indeholder nu resultatet)
Set rs = Conn.Execute(strSQL)
%>
<table>
<%
' Gennemløb Recordset (rs) med en løkke
Do
%>
    <tr>
        <td><% Response.Write rs("Navn") %></td>
        <td><% Response.Write rs("Adresse") %></td>
        <td><% Response.Write rs("Postnr") %></td>
        <td><% Response.Write rs("Telefon") %></td>
        <td><% Response.Write rs("E-mail") & "<br>" %></td>
        <% rs.MoveNext %>
    </tr>
   
<%

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not rs.EOF

' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
%>
</table>
</body>
</html>

og det henfører til en fil kaldet kunde_add.asp som ser sådan her ud:

<html>
<head>
<title>New customer is added</title>
</head>
<body>
<%
' Databaseforbindelse
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("\booking.mdb")
Conn.Open DSN

' SQL
sql=sql & " VALUES "
sql=sql & "('" & Request.Form("Navn") & "',"
sql=sql & "'" & Request.Form("Adresse") & "',"
sql=sql & "'" & Request.Form("Postnr") & "',"
sql=sql & "'" & Request.Form("Telefon") & "',"
sql=sql & "'" & Request.Form("E-mail") &"')"

on error resume next
conn.Execute sql,recaffected
if err<>0 then
    Reponse.Write ("No Update Permissions")
else
    Reponse.Write ("<h3> " & recaffected & " record added</h3>")
end if
conn.close
%>

<a href="kunde.asp">Tilbage</a>
</body>
</html>

som i nok kan se er det en fin skabelon jeg har leget med, men an ikke få det til at virke.. hvad gør jeg galt?
Avatar billede maddog_em Nybegynder
13. april 2011 - 11:08 #1
Hej

hvad er det der går galt, kan du ikke komme med nogle flere info

Er det når du skal add en ny kunde?
Avatar billede softspot Forsker
13. april 2011 - 11:23 #2
Det er sjældent en god idé at iterere over et recordset med

do
  ...
loop while not rs.eof

altså check efter første gennemløb. Du bør i stedet benytte formen

do while not rs.eof
  ...
loop

Således er du sikker på at du ikke forsøger at slå op i en record som ikke eksisterer.
Avatar billede jesthe Nybegynder
13. april 2011 - 11:27 #3
det fungerer bare ikke, det bliver ikke tilføjet :-)
Avatar billede softspot Forsker
13. april 2011 - 11:31 #4
I øvrigt bør du overveje at benytte parameteriserede databasekald, da den løsning du har skitseret er pivåben for SQL-injection angreb. Se evt. guide 1250 her på eksperten (http://www.eksperten.dk/guide/1250) for detaljer om hvordan dette kan gøres.

I korte træk kan metode dog skitseres således:

dim sql, cmd, recordsAffected
sql = "INSERT INTO kundetabel VALUES(?,?,?,?,?)"
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = sql
cmd.CommandType = 1
recordsAffected = 0
cmd.Execute recordsAffected, array( _
        Request.Form("Navn"), _
        Request.Form("Adresse"), _
        Request.Form("Postnr"), _
        Request.Form("Telefon"), _
        Request.Form("E-mail") _
    )

Grunden til at der ikke blier tilføjet noget er, at du ikke har angivet INSERT INTO kundetabel i din SQL (det har jeg rettet i mit eksempel ;-)).
Avatar billede jesthe Nybegynder
13. april 2011 - 11:44 #5
jeg har ændret det nu, men nu får jeg følg. fejlmeddelelse:

Microsoft OLE DB Provider for ODBC Drivers80040e10[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 6./kunde_add.asp20
min kunde_add.asp ser sådan her ud nu..
<%
' Databaseforbindelse
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("\booking.mdb")
Conn.Open DSN

dim sql, cmd, recordsAffected
sql = "INSERT INTO kundetabel VALUES(Navn, Adresse, Postnr, Telefon, E-mail)"
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = sql
cmd.CommandType = 1
recordsAffected = 0
cmd.Execute recordsAffected, array( _
        Request.Form("Navn"), _
        Request.Form("Adresse"), _
        Request.Form("Postnr"), _
        Request.Form("Telefon"), _
        Request.Form("E-mail") _
    )

on error resume next
conn.Execute sql,recaffected
if err<>0 then
    Reponse.Write ("No Update Permissions")
else
    Reponse.Write ("<h3> " & recaffected & " record added</h3>")
end if
conn.close
%>
Avatar billede softspot Forsker
13. april 2011 - 11:53 #6
SQL-sætningen skal egentlig se således ud (spørgsmålstegnen skal være der :-)):

sql = "INSERT INTO kundetabel (Navn, Adresse, Postnr, Telefon, [E-mail]) VALUES(?,?,?,?,?)"

Forudsat dine felter rent faktisk er navngivet således i databasen.

NB: Undlad helst at navngive dine felter i databasen med specialtegn, så som bindestreg og mellemrum. Ikke at det ikke kan lade sig gøre, men det besværliggør blot arbejdet med dem..
Avatar billede jesthe Nybegynder
13. april 2011 - 11:55 #7
finally det virker!
hvordan giver jeg dig pointene nu? ;)
Avatar billede softspot Forsker
13. april 2011 - 11:59 #8
Du kan acceptere dette svar... :-)
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

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