Avatar billede lauritst Nybegynder
11. oktober 2005 - 13:23 Der er 9 kommentarer og
1 løsning

ikke- obigatoriske felter i formular

Hej
Jeg har lavet en formular der via en asp side tilføjer data til en acces database. Jeg har i databasen defineret nogle felter til ikke at være obigatoriske, men hvis jeg ikke udfylder feltet i min formular, vil asp'en ikke virke. Hvordan kan man definere felterne i asp siden til ikke at være obligatoriske? felterne i asp'en fanges med Request.form("navn")
Avatar billede softspot Forsker
11. oktober 2005 - 13:39 #1
Der kan du måske bruge en strategi som går på at du kun indsætter/opdaterer felterne i database (via din SQL), hvis feltet er defineret i request.form.

Noget i stil med dette:

SQL = "INSERT INTO tabel("
if not isempty(request.form("felt1")) then
  strSQLFields = "felt1"
  strSQLValues = "'" & request.form("felt1") & "'"
end if
if not isempty(request.form("felt2")) then
  if len(strSQLFields) > 0 then
    strSQLFields = strSQLFields & ","
  end if
  strSQLFields = strSQLFields & "felt2"
  if len(strSQLValues) > 0 then
    strSQLValues = strSQLValues & ","
  end if
  strSQLValues = strSQLValues & "'" & request.form("felt2") & "'"
end if

...osv.

Man kan naturligvis lave en funktion som gør koden mere læsbar.
Avatar billede lauritst Nybegynder
11. oktober 2005 - 15:28 #2
Ja, det er måske en mulighed. Er det den gængse måde at gøre det på?

Giver det i øvrigt ikke problemer med alle de "? Vil den ikke tro der er end of statement efter Insert into tabel(?
Avatar billede softspot Forsker
11. oktober 2005 - 16:19 #3
Jo, den skal afsluttes med at man sammensætter SQL, med fields og values

SQL = SQL & strSQLFields & ") VALUES(" & strSQLValues & ")"

I øvrigt skal der nok også laves et check på om der overhovedet er nogle felter at opdatere, men der er jo stadig et stykke vej fra idé til virkelighed her...

Jeg forsøgte blot at skitsere en metode, men kan godt se at den ikke var gjort helt færdig... :)
Avatar billede lauritst Nybegynder
11. oktober 2005 - 16:28 #4
ok. En udemærket ide som jeg da vil afprøve og jeg takker mange gange for svaret. Skal du i øvrigt skrive det som et svar for at jeg kan tildele point? (Jeg er ny i dette forum)
Avatar billede softspot Forsker
11. oktober 2005 - 16:33 #5
Ja, svar er dem man kan tildele point.

Jeg er dog af den holdning at du ikke skal give point før din udfordring er løst, så jeg synes bare du skal prøve at se om du kan få det til at fungere. Så kan du jo spørge til herinde indtil det fungerer - og derefter give point... :)
Avatar billede lauritst Nybegynder
13. oktober 2005 - 12:38 #6
Det er nye records der skal sættes ind, så der er ingen data (og dermed felter) at opdatere.
Avatar billede softspot Forsker
14. oktober 2005 - 02:15 #7
Der skulle gerne være felter at opdatere, ellers er der vel ikke nogen grund til at have en database... ;-)

Jeg kom til at tænke på om jeg har skudt ved siden af dit behov...? Det lyder snarere som om du skal tillade tomme værdier i dine felter i databasen, frem for at lave en masse check i ASP-siden. Kan du evt. vise hvad du har af kode indtil nu?
Avatar billede lauritst Nybegynder
14. oktober 2005 - 14:43 #8
Dette er formularsiden:

<%@LANGUAGE="VBSCRIPT"%>
<%strConn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("vikardatabasen.mdb")%>

<html>

<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>Indberetning af vikardata</title>
</head>

<body>


<h1>Indberetning til vikardatabasen</h1>
<%
Dim rsRecordset1
Dim rsRecordset2
Dim rsRecordset3




set rsRecordset1 = Server.CreateObject("ADODB.Recordset")
rsRecordset1.ActiveConnection = strConn
rsRecordset1.Source = "SELECT * FROM SD2 ORDER BY SD2.Sdkode"
rsRecordset1.CursorType = 0
rsRecordset1.CursorLocation = 2
rsRecordset1LockType = 3
rsRecordset1.Open
rsRecordset1_numRows = 0%>


<% set rsRecordset2 = Server.CreateObject("ADODB.Recordset")
rsRecordset2.ActiveConnection = strConn
rsRecordset2.Source = "SELECT vikartype FROM vikartype ORDER BY vikartype.vikartype"
rsRecordset2.CursorType = 0
rsRecordset2.CursorLocation = 2
rsRecordset2LockType = 3
rsRecordset2.Open
rsRecordset2_numRows = 0%>


<% set rsRecordset3 = Server.CreateObject("ADODB.Recordset")
rsRecordset3.ActiveConnection = strConn
rsRecordset3.Source = "SELECT * FROM vikarbureauer ORDER BY vikarbureauer.bureaunr"
rsRecordset3.CursorType = 0
rsRecordset3.CursorLocation = 2
rsRecordset3LockType = 3
rsRecordset3.Open
rsRecordset3_numRows = 0%>


<form name="form" method="post" action="add2.asp">
<TABLE BORDER="2">
<tr>
    <td>Fakturanr:</td> <td><input type="text" name="fakturanr" maxlength="20"> <br></td>
<td><br></td>
<td><a href="help.htm" target=" blank"><img src="/Image/quest.jpg" align="right"  alt="hjælp"  ></a></td>   
</tr><br>
<tr><td>


    Start dato </td>
<td><input type="text" name="startdato" maxlength="20"> </td>
<td> Start tidspunkt </td>
<td><input type="text" name="starttid" maxlength="20"> </td>
</tr>

<tr><td>
        Slut dato </td>
<td><input type="text" name="slutdato" maxlength="20"> </td>
<td> Slut tidspunkt </td>
<td><input type="text" name="sluttid" maxlength="20"> </td>
</tr>

<tr><td>
        Pris </td>
<td><input type="text" name="pris" maxlength="20"> </td>
<td>  </td>
<td> </td>
<td> </td>
</tr>
<tr></tr>
<tr>
<td> Afdeling:</td>
<td> <select size="1" name="afdeling">
<% While NOT rsRecordset1.EOF %>
<option value=" <%=(rsRecordset1.Fields.Item("sdkode").Value)%>"
selected><%=(rsRecordset1.Fields.Item("vikarkode").Value)%></option>
<%
rsRecordset1.MoveNext
Wend
SET rsRecordset1= nothing%></select> </td>
<td>  </td>
<td> </td>
<td> </td>
</tr>

<tr>
<td> Vikartype:</td>
<td> <select size="1" name="vikartype">
<% While NOT rsRecordset2.EOF %>
<option value=" <%=(rsRecordset2.Fields.Item("vikartype").Value)%>"
selected><%=(rsRecordset2.Fields.Item("vikartype").Value)%></option>
<%
rsRecordset2.MoveNext
Wend
SET rsRecordset2= nothing%></select> </td>
<td>  </td>
<td> </td>
<td> </td>
</tr>


<tr>
<td> Vikarbureau:</td>
<td> <select size="1" name="vikarbureau">
<% While NOT rsRecordset3.EOF %>
<option value=" <%=(rsRecordset3.Fields.Item("bureaunr").Value )%>"
selected><%=(rsRecordset3.Fields.Item("vikarbureau").Value)%></option>
<%
rsRecordset3.MoveNext
Wend
SET rsRecordset3= nothing%></select> </td>
<td>  </td>
<td> Afstemt:</td>
<td><input type="checkbox" name="afstemt" value=1>
</td>
</tr>
</TABLE>

<br>
<TABLE BORDER="0">
<tr><td></td>
<td>

<input type="submit" name="submit" value="Gem">  </td>

<td><input type="reset" value="Ryd"></td></tr>
</TABLE>
</form>


</body>

</html>
Avatar billede lauritst Nybegynder
14. oktober 2005 - 14:45 #9
Dette er den asp der behandler oplysninger fra formularen:

<%

'Dimension variables
Dim adoCon             'Holds the Database Connection Object
Dim rsAddComments        'Holds the recordset for the new record to be added to the database
Dim strSQL            'Holds the SQL query for the database


Set adoCon = Server.CreateObject("ADODB.Connection")
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("vikardatabasen.mdb")
Set rsAddComments = Server.CreateObject("ADODB.Recordset")

strSQL = "SELECT Faktura.afstemt,Faktura.[vikar burareau],Faktura.[vikar type],Faktura.vagtpris,Faktura.fakturanummer, Faktura.[afdeling] , Faktura.[Dato start], Faktura.[Dato slut], Faktura.[tid slut], Faktura.[tid start]  FROM Faktura;"


rsAddComments.CursorType = 2
rsAddComments.LockType = 3

rsAddComments.Open strSQL, adoCon
rsAddComments.AddNew

'HUSK! der skal indsættes resten af felterne fra reguest formen
rsAddComments.Fields("fakturanummer") = Request.Form("fakturanr")
rsAddComments.Fields("Afdeling") = Request.Form("afdeling")
rsAddComments.Fields("Dato start") = Request.Form("startdato")
rsAddComments.Fields("Dato slut") = Request.Form("slutdato")
rsAddComments.Fields("Tid slut") = Request.Form("sluttid")
rsAddComments.Fields("Tid start") = Request.Form("starttid")

rsAddComments.Fields("vagtpris") = Request.Form("pris")
rsAddComments.Fields("vikar type") = Request.Form("vikartype")
rsAddComments.Fields("Vikar burareau") = Request.Form("vikarbureau")
rsAddComments.Fields("afstemt") = Request.Form("afstemt")

rsAddComments.Update


rsAddComments.Close
Set rsAddComments = Nothing
Set adoCon = Nothing


Response.Redirect "confirm.htm"
%>
Avatar billede lauritst Nybegynder
27. december 2005 - 13:53 #10
Jeg lukker spørgsmålet, da jeg har fundet en løsning. Jeg får formularen til at sætte et 0 ind hvis der ikke er indtastet noget.
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