webForumDet fria alternativet

formulär som postas till samma sida

ASP

10 svar · 204 visningar · startad av soffan76

Medlem sedan maj 2001684 inlägg
Frågan#1

Hej!

Jag undrar hur det fungerar med formulär som postas till samma sida och läggs in i en databas. Det går ju bra om formulärfälten från början är tomma för då kan man ju bara lägga in en IF sats allra först...

<% If Request.Form("namn")="" THEN %>

Men om de nu redan är ifyllda, hur gör man då?

------------------
Sofia

Medlem sedan mars 2001484 inlägg
#2

Jag antar att du vill få reda på hur du uppdaterar befintlig information. När du hämtar upp värdena till fälten kan du göra en <input type="hidden" value="<%=ID%>" name="ID"> och sedan hämta upp den med ID = Request.Form("ID"). Sedan nåt sånt här:

if ID <> "" then
SQL = "UPDATE..."
else
SQL = "INSERT INTO
end if

------------------
/ jeps0

[Redigerat av jepsO den 18 maj 2001]

Medlem sedan mars 20002 836 inlägg
#3

hello,

detta brukar jag använda mig av:

If Request.Form > "" Then
'## -- gör vad du ska när formuläret postas --
Else
'## -- vad ska hända om formuläret ej postas --
End If

Kolla även in denna: http://cgi.webforum.nu/wf/Forum11/HTML/003302.html

cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

Medlem sedan maj 20011 312 inlägg
#4

Ändra i databasen istället och tillåt nollvärden så slipper du massa onödiga if-satser...sen för att obligatoriska fält i form så använd java-script...här är min kod:

Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM sseerrss"
RecSet.Open Visa, Connect, 3, 3

RecSet.AddNew
RecSet("Username") = Request.Form("username")
RecSet("Password") = Request.Form("password")
RecSet("E-post") = Request.Form("epost")
Medlem sedan maj 20011 312 inlägg
#5

Detta ska vara i slutet också...

RecSet.Update

RecSet.Close
Set RecSet = nothing
Connect.Close
Set Connect = nothing
Medlem sedan mars 2001484 inlägg
#6

Såhär brukar jag göra för att kontrollera om obligatoriska fält inte är tomma:

Säg att vi har tre fält varav två är obligatoriska:

<form method="POST" action="sida.asp" name="myForm">
<input type="hidden" name="action"> (förklarar varför denna behövs nedan)
För- och efternamn*
<input type="text" value="<%=fenamn%>" name="fenamn">
E-postadress*
<input type="text" value="<%=email%>" name="email">
Telefon
<input type="text" value="<%=tele%>" name="tele">
<input type="button" value="Posta" onClick="submit_form('Posta')">

JavaScipt-funktionen submit_form() ser ut såhär:

function submit_form(value) {
if (document.myForm.fenamn.value == "") {
alert('Du måste fylla i ditt för- och efternamn.');
document.myForm.fenamn.focus();
}
else if (document.myForm.email.value == "") {
alert('Du måste fylla i din e-postadress.');
document.myForm.email.focus();
}
else {
document.myForm.action.value = value;
document.myForm.submit();
}
}

Informationen hämtas sedan upp som vanligt:

if trim(Request.Form("action")) = "Posta" then
...
end if

Vad som händer är alltså att JavaScript-funktionen kontrollerar om de obligatoriska fälten är tomma. "If not" tilldelar den hidden-fältet värdet "Posta" och submittar informationen.

Jag anser den här metoden vara mer praktisk än ren ASP, eftersom man då måste skicka iväg information och omge koden med fler if-satser.

------------------
/ jeps0

Medlem sedan mars 20002 836 inlägg
#7

oj, oj ...

varför lägga till med recordset?
Finns vissa tillfällen då det är lyckat att lägga till med recordset och det är tex vid en medlemsansökan där användarnamn ej får ha dubletter.

I detta läga så är det ju onödigt att först hämta alla poster som finns i tabellen och sedan lägga till.

Bättre att göra på detta viset och lite snällre mot servern:

strSQL = "INSERT INTO TBL_TABELL(FLD_FIELD) VALUES('" & strFieldInput & "')"
objConn.Execute(strSQL)

En sak till. Det är inte alltid som javascriptlösningen är den bästa lösningen för att validera formulärfält.
[r]
Tex om man har "dynamiska" formulrfält som ska visas beroende på användare, då kan jscript lösningen vara klart knölig att använda.
[/r]
Själv tycker jag det är irriterande att hela tiden få upp dessa alerts när man ska submitta. :o

cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

[Redigerat av PatrikB den 18 maj 2001]

Medlem sedan mars 2001484 inlägg
#8

Ptcha... Det är ju en smakfråga. Ibland kombinerar jag JavaScript-validering med ASP-validering. Det går ju t.ex. inte att kontrollera om ett användarnamn är upptaget. JavaScript-valideringen får ta hand om simplare kontroller av typen "är fältet tomt?", medan ASP får kolla om e-postadressen är giltig etc.

------------------
/ jeps0

Medlem sedan mars 20002 836 inlägg
#9

... precis ... det var därför som jag gav ASP lösningen eftersom detta är asp-forumet ;o

+ att ju fler lösningar man ser detsto mer börjar man tänka HUR kan man lösa detta smidigare *ler*

cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

Medlem sedan maj 20011 312 inlägg
#10

Jag har ännu inte förstått funktionen av recordsets men i detta fallet så var det en registrering det handlade om i min kod som jag klippte ut det ifrån...används recordset bara för att undvika dubbleter?

Medlem sedan mars 20002 836 inlägg
#11

nej, man kan kolla efter dubbletter på annat sätt oxå.
om man tex insertar till db ändå så kommer det att genereras ett fel. om man då har On Error Resume Next "påslaget" så behöver man ej använda recordset för att lägga till.

Annars är det så här att ADODB.Recordset använder man BARA när man ska hämta poster från db och tex visa dem på en sida.
Om du ska lägga till nya poster, editera redan befintliga poster eller ta bort poster så ska man INTE använda ADODB.Recordset utan man använder istället .Execute metoden i ADODB.Connection ojbektet.

Som sagt ... sök på IDG här på forumet så ska du få se vad det sägs om deras "ASP-skola"
cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)