Avatar billede fomse Nybegynder
01. marts 2004 - 19:15 Der er 22 kommentarer og
1 løsning

Hvorfor virker dette ikke?

Jeg har følgende:

default.asp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Tilmeld</title>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</head>
<body>
<form action="tilmeld.asp" method="post" name="form1" id="form1">
<table cellspacing="2">
<tr>
<td>
<table>
<tr>
<td colspan="2"><strong>Lørdag</strong></td>
</tr>
<tr>
<td>Navn:</td>
<td>
<input type="text" name="fname" size="20" maxlength="50">
</td>
</tr>   
</table>
</td>
<td>
<table>
<tr>
<td colspan="2"><strong>Tirdag</strong></td>
</tr>
<tr>
<td>Navn:</td>
<td>
<input type="text" name="fname2" size="20" maxlength="50">
</td>
</tr>   
</table>
</td>
</tr>
<tr>
<td colspan=2><input type="button" value="Tilmeld"></td>
</tr>
</table>
</form>
Se <a href="vis.asp">tilmeldinger</a>
</body>
</html>

tilmeld.asp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<title>Untitled</title>
</head>
<body>
<%
dim conn, strConn
strConn  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(".")+"/db.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open strConn
fname = request.form("fname")
fname2 = request.form("fname2")   
conn.execute("insert into tilmeld(fname, fname2) values ('"&fname&"', '"&fname2&"')")
response.write "Din tilmelding er modtaget"
%>
<br>
<br>
<a href="default.asp">Tilbage</a>
</body>
</html>

Problemet er at den ikke submitter indholdet og ligger det i databasen. Hvad gør jeg galt?

Fomse:-)
Avatar billede thesurfer Nybegynder
01. marts 2004 - 19:17 #1
<input type="button" value="Tilmeld">

Skal være:

<input type="submit" value="Tilmeld">
Avatar billede thesurfer Nybegynder
01. marts 2004 - 19:19 #2
Og det ville være en meget god ide med et check, før du prøver på at indsætte i databsen:

<%
if request.servervariables("request_method") = "POST" then
' der er submittet..

dim conn, strConn
strConn  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(".")+"/db.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open strConn
fname = request.form("fname")
fname2 = request.form("fname2") 
conn.execute("insert into tilmeld(fname, fname2) values ('"&fname&"', '"&fname2&"')")
response.write "Din tilmelding er modtaget"

end if
%>
Avatar billede thesurfer Nybegynder
01. marts 2004 - 19:20 #3
Eller måske:

if request.servervariables("request_method") = "POST" then
' der er submittet..

dim conn, strConn
strConn  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(".")+"/db.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open strConn
fname = request.form("fname")
fname2 = request.form("fname2")
conn.execute("insert into tilmeld(fname, fname2) values ('"&fname&"', '"&fname2&"')")
response.write "Din tilmelding er modtaget"

else
response.write "Du skal vælget noget! Gå tilbage igen.."

end if
Avatar billede fomse Nybegynder
01. marts 2004 - 19:34 #4
Men hvis jeg nu vil tillade at kun det ene felt er udfyldt! Hvordan gør jeg det?
Avatar billede thesurfer Nybegynder
01. marts 2004 - 19:41 #5
prøv med:
<script type="text/JavaScript">
function val(frm)
{

if (frm.fname != "" && frm.fname2 != "") {
  alert("Du må kune udfylde 1 felt!");
  return false;
} else {
  return true;
}

}
</script>

<form action="tilmeld.asp" method="post" name="form1" id="form1" onsubmit="return val(this)">
Avatar billede fomse Nybegynder
01. marts 2004 - 19:41 #6
Stillede Zero Value på felterne til Yes og det virker!!!
Avatar billede thesurfer Nybegynder
01. marts 2004 - 19:43 #7
Hvad er det lige at den skal checkes for?
- Skal begge felter udfyldes?
- Må der KUN være 1 felt der er udfyldt?
- Hvad?
Avatar billede fomse Nybegynder
01. marts 2004 - 19:45 #8
Hmm Hvis man laver en Count så tæller den de tomme felter med! Hvorfor det?
Avatar billede fomse Nybegynder
01. marts 2004 - 19:46 #9
Begge felter må udfyldes, eller det ene af dem (ligemeget hvilket)
Avatar billede thesurfer Nybegynder
01. marts 2004 - 19:47 #10
1) Skriv hvad det er du vil.
2) Smid din kode her ind.. så skal man ikke gætte sig frem til den..
Avatar billede thesurfer Nybegynder
01. marts 2004 - 19:47 #11
dvs, midst 1 felt SKAL være udfyldt?
Avatar billede fomse Nybegynder
01. marts 2004 - 19:53 #12
1: Enten kan begge felter være udfyldt, eller mindst et.
2: Den skal tælle hvormange der er tilmeldt fx. om tirsdagen (ikke tælle tomme telter)

Koden:
default.asp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Tilmeld</title>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</head>
<body>
<form action="tilmeld.asp" method="post" name="form1" id="form1" >
<table cellspacing="2">
<tr>
<td>
<table>
<tr>
<td colspan="2"><strong>Lørdag</strong></td>
</tr>
<tr>
<td>Navn:</td>
<td>
<input type="text" name="fname" size="20" maxlength="50">
</td>
</tr>   
</table>
</td>
<td>
<table>
<tr>
<td colspan="2"><strong>Tirdag</strong></td>
</tr>
<tr>
<td>Navn:</td>
<td>
<input type="text" name="fname2" size="20" maxlength="50">
</td>
</tr>   
</table>
</td>
</tr>
<tr>
<td colspan=2><input type="submit" value="Tilmeld"></td>
</tr>
</table>
</form>
Se <a href="vis.asp">tilmeldinger</a>
</body>
</html>

tilmeld.asp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<title>Untitled</title>
</head>
<body>
<%
if request.servervariables("request_method") = "POST" then
' der er submittet..
dim conn, strConn
strConn  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(".")+"/db.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open strConn
fname = request.form("fname")
fname2 = request.form("fname2")
conn.execute("insert into tilmeld(fname, fname2) values ('"&fname&"', '"&fname2&"')")
response.write "Din tilmelding er modtaget"
else
response.write "Du skal vælget noget! Gå tilbage igen.."
end if
%>
<br>
<br>
<a href="default.asp">Tilbage</a>
</body>
</html>

vis.asp:
<%
dim conn, strConn
strConn  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(".")+"/db.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open strConn
set rs = conn.execute("select count(fname) as antal from tilmeld")
response.write "Der er <font color=""#FF0000""><strong>" & rs("antal") & " </strong></font>tilmeldt<br><br>"
set rs = conn.execute("select fname from tilmeld Order By fname Asc")
response.write "Træning lørdag:"
response.write "<table>"
response.write "<tr>"
response.write "<td><strong>Navn:</strong></td>"
response.write "</tr>"
do while not rs.eof
response.write "<tr>"
response.write "<td>"& rs("fname") &"</td>"
response.write "</tr>"
rs.movenext
loop   
response.write "</table>"
response.write "<br><br>"
set rs2 = conn.execute("select count(fname2) as antal2 from tilmeld")
response.write "Der er <font color=""#FF0000""><strong>" & rs2("antal2") & " </strong></font>tilmeldt<br><br>"
set rs = conn.execute("select fname2 from tilmeld Order By fname2 Asc")
response.write "Træning tirsdag:"
response.write "<table>"
response.write "<tr>"
response.write "<td><strong>Navn:</strong></td>"
response.write "</tr>"
do while not rs.eof
response.write "<tr>"
response.write "<td>"& rs("fname2") &"</td>"
response.write "</tr>"
rs.movenext
loop   
response.write "</table>"
%>
Avatar billede thesurfer Nybegynder
01. marts 2004 - 19:58 #13
HTML/JavaScript-delen:

<script type="text/JavaScript">
function val(frm)
{

if (frm.fname != "" && frm.fname2 != "") {
  alert("Du skal udfylde mindst 1 felt!");
  return false;
} else {
  return true;
}

}
</script>

<form action="tilmeld.asp" method="post" name="form1" id="form1" onsubmit="return val(this)">


ASP-delen
Jeg tænkte på noget i stil med:

set rs = conn.execute("select count(fname) as antal from tilmeld where fname <> Null")
Avatar billede thesurfer Nybegynder
01. marts 2004 - 20:00 #14
Eller muligvis:
set rs = conn.execute("select count(fname) as antal from tilmeld where fname <> Null and fname <> """" ")

Der er flere måde at checke om et felt er tomt.. der er f.eks også: len(fname) > 0
Avatar billede thesurfer Nybegynder
01. marts 2004 - 20:01 #15
Men allerede ved "count(fname)" vælger du, at det er feltet "fname" der ikke må være tomt, ik?
Avatar billede fomse Nybegynder
01. marts 2004 - 20:11 #16
Kanon!! Det virkede!

Jeg brugte:
set rs = conn.execute("select count(fname) as antal from tilmeld where fname <> Null and fname <> """" ")

Smid et svar, så får du lidt ekstra point:-)
Avatar billede thesurfer Nybegynder
01. marts 2004 - 20:13 #17
OK, her er et svar :)
Avatar billede thesurfer Nybegynder
01. marts 2004 - 20:14 #18
Jeg ved ikke lige hvor mange "må ikke være nul" parametere man skal ha' med.. Det kan være at du kan nøjes med "fname <> Null", dvs uden:  and fname <> """"
Avatar billede fomse Nybegynder
01. marts 2004 - 20:25 #19
Jeg takker mange gange:-)
Avatar billede thesurfer Nybegynder
01. marts 2004 - 20:26 #20
Det var så lidt :)
Avatar billede fomse Nybegynder
01. marts 2004 - 21:10 #21
Et lille spørgsmål!!

Hvordan undgår jeg at den submitter hvergang hvid man opdaterer siden tilmeld.asp?
Avatar billede thesurfer Nybegynder
01. marts 2004 - 22:03 #22
Hvis siden har været submittet 1 gang, og man reloader (enten via CTRL+5, F5, eller andet), så vil browseren spørge om man vil submitte igen..
Man plejer at læse problemet ved at redirecte brugere til en anden side..

f.eks. (i bunden af din asp side): response.redirect "tak.asp"
Avatar billede thesurfer Nybegynder
01. marts 2004 - 22:03 #23
Altså i stedet for:
response.write "Din tilmelding er modtaget"

For når man bruger response.redirect, så vil alt under den linie IKKE blive sendt til browseren..
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