webForumDet fria alternativet

Dynamiskt formulär

ASPur ASP

13 svar · 391 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

Hej!
Kan man göra ett dynamiskt inmatningsformulär med textrutor? Har försökt lite men jag har svårt att hålla i sär Html och ASP. det jag vill göra är att på en sida kan man välja hur många textrutor som ska visas på nästa sida.

Det hela hör i hop med min CD-databas. Alla skivor har ju inte samma antal låtar, och jag vill inte ha tomma fält i databasen.........

/Henrik

------------------
Henke

VideMedlem sedan dec. 19998 577 inlägg
#2

Ett sätt är såhär:

<form action="denna_fil.asp" method="post">
<%
If Request.Form("ant_chk") = "" then
%>
<input type="text" name="ant_chk">
<input type="submit" name="b1">
<%
Else
For i = 1 To Request.Form("ant_chk")
%>
<input type="text" name="song<%=i%>">
<%
Next
End If
%>
<input type="submit" name="b1">
</form>

Nu kommer du att få så många fält som du skriver in i formuläret innan... med namnen song1, song2, song3 osv...

Lycka till!

Mvh, Vide

------------------
Function onLick(name)
Punch.name(in_the_ear)
End Function

Jourhavande Vide

erkaMedlem sedan dec. 19996 522 inlägg
#3

Hur gör man en smidig insert sträng för att sätta in dynamiskt antal låtar då ?

kan man loppa igenom alla där oxå ? hur ?

------------------
------------------------
www.trenchcoat.se/erik/
- gillar du oxå film?
------------------------

VideMedlem sedan dec. 19998 577 inlägg
#4

Lättast är att loopa igenom alla objekt i Request.Form... och sedan i loopen göra en If-sats eller en Case, och alla objekt som dom första fyra bokstäverna är "song", dessa är då låtar... Sedan bygger du SQL-strängen dynamiskt utifrån det...

------------------
Nu har du sjungit på sista refrängen
Jourhavande Vide

erkaMedlem sedan dec. 19996 522 inlägg
#5

gärna kod exempel om du har ? vet att jag försökte med det en gång men det gick åt helvete **he he he**

------------------
------------------------
www.trenchcoat.se/erik/
- gillar du oxå film?
------------------------

Andreas LMedlem sedan sep. 2000215 inlägg
#6

Ett annat sätt kan väl vara att bara ha en textarea som man skriver in låttitlarna i, med ex. ett mellanslag emellan.

Eftersom man antagligen lägger låtarna i en enskild tabell så borde det gå fint att använda Split() för att skapa en array av textsträngen som innehåller låttitlarna.

Sen så går det ju fint att loopa igenom arrayn och skicka in datan i den aktuella tabellen. På så vis så slipper man det extra steget när man skall tala om hur många titlar man vill registrera
Det borde väl fungera fint om man bara skall mata in låttitlarna?

...bara lite alternativa funderingar alltså. ;)

------------------
"Life's a bitch who sucks... then you marry one who doesn't"

devotionMedlem sedan jan. 20013 582 inlägg
#7

Tack för alla tipsen!
Jag testade att göra en kod som ser ut så här:

<%@ Language = VBScript %>
<% Option Explicit %>
<!--#INCLUDE VIRTUAL="adovbs.inc" -->
Dim Antal
Antal = 1
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">

<form name="form1" method="post" action="">

<% Do until Antal > 10%>
   <input type="text" name="textfield"> <br>
   
<% Antal = Antal + 1 %>
<% Loop %>
   <p>
   <input type="submit" name="Submit" value="Submit">
  </p>
</form>
</body>
</html>

Detta funkade, men är ju statiskt...

Sen ändrade jag koden och satte in variabler i stället. Variablerna lagrade värdet från formuläret där man väljer antal låtar. Då ser koden ut så här:

<%@ Language = VBScript %>
<% Option Explicit %>
<!--#INCLUDE VIRTUAL="adovbs.inc" -->

<% Dim Nu %>
<% Dim Antal %>
<% Nu = 1 %>

<% Antal = Request.Form("Antal") %>
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">

<form name="form1" method="post" action="">

<% Do until Nu > Antal %>
   <input type="text" name="textfield"> <br>
   
<% Nu = Nu + 1 %>
<% Loop %>
   <p>
   <input type="submit" name="Submit" value="Submit">
  </p>
</form>
</body>
</html>

......och då funkar ingenting!!!
Är detta helt fel sätt att göra??

/Henrik

------------------
Henke

[Redigerat av devotion den 25 jan 2001]

@ndersMedlem sedan juni 200032 969 inlägg
#8

får du något felmeddelande eller hänger sig sketen bara?

prova att konvertera antal till tal med cint():

<% Antal = CInt(Request.Form("Antal")) %>

kräver dock att det verkligen kommer en nuffra från fältet antal, men det kanske man kan utgå ifrån att det gör i det här fallet?

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>

devotionMedlem sedan jan. 20013 582 inlägg
#9

Inget felmeddelande alls. Men man kan verkligen säga att sketen hänger sig...

Windows har slut på virituellt minne och hårddisken håller på att hoppa ur chassit...

Varför?

------------------
Henke

@ndersMedlem sedan juni 200032 969 inlägg
#10

om du ändrar följande:

<% Do until Nu > Antal %>
<input type="text" name="textfield"> <br>

<% Nu = Nu + 1 %>
<% Loop %>

till:

<% 
Dim i
For i = 1 to CInt(Antal) 
response.write "<input type=""text"" name=""textfield""><br>"
next
%>

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>

devotionMedlem sedan jan. 20013 582 inlägg
#11

Tack för tipset! Det börjar lossna nu!!

Nu ser koden ut så här och fungerar!

<%@ Language = VBScript %>
<% Option Explicit %>
<!--#INCLUDE FILE="adovbs.inc" -->

<% Dim Antal 
Dim i
%>

<% Antal = Request.Form("Antal") %>

<html>
<head>
<title>Mata in uppgifter!</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">

<form name="song_form" method="post" action="">

<%For i = 1 to CInt(Antal)%> 
<input type="text" name="song<%=i%>"><BR>
<%next%>

<p>
<input type="submit" name="submit" value="Skicka!">
</p>
</form>
</body>
</html>

Jag har även gjort så att textfältets namn ökar med 1 hela tiden. MEN, när jag sedan skickar infon till tabellen i databasen måste ju även Form.Request vara lika många som textfälten och ha samma namn. Det blir nästa problem att lösa. man kanske kan ha det på samma sida, eller kan man skicka med en variabel?

/Henrik

------------------
Henke

devotionMedlem sedan jan. 20013 582 inlägg
#12

Frågan är då hur man ska göra med Request.Form. Eftersom de måste variera med antalet låtar från sidan innan. Hur gör man det dynamiskt? Och nästa problem blir ju Insert/addNew. Den strängen måste ju också varieras med tanke på antal fält på sidan innan?

Vide, har du något bra förslag på att lösa detta?

------------------
Henke

VideMedlem sedan dec. 19998 577 inlägg
#13

Beror på hur du har byggt din databas... Förslagsvis så har du en tabell men artist, en för album och en för låtar. Varje fält har ett unikt id.

I artist så har du statisk info om artisten.

I Album så har du fältet id och fältet album, i id lägger du in id:t på den artist som den tillhör , altså en relation till Tabellen Artist och fältet id där...

I songs har liknande album ett fält för id som kopplas till primärnyckeln i Album.

Sedan skapar du SQLsträngen dynamiskt:

<%

For each item in Request.Form
Select case Left(Item,4)
Case "song"
strSQL = "INSERT INTO songs (id, song)"
strSQL = strSQL&Albums_id&", "&Request.Form(item)
databas.execute(strSQL)
End Select
Next
%>

Nu har du fått en idé om hur det kan gå till... :)

------------------
Nu har du sjungit på sista refrängen
Jourhavande Vide

[Redigerat av Vide den 26 jan 2001]

devotionMedlem sedan jan. 20013 582 inlägg
#14

Tack så jättemycket för hjälpen!

Den här CD-databasen började som ett sätt att lära sig ASP, men ju mer jag lärt mig desto fler funktioner vill jag ha med....

Koden fungerar alldeles utmärkt och ser ut så här:

For each item in Request.Form
Select case Left(Item,4)
Case "song"
strSQL = "INSERT INTO song(album_id, song_name) VALUES(" & iAlbum_id & ", '" & Request.Form(item) & "')"
objConn.execute(strSQL)
End Select
Next

Nu är det så att jag vill ha fler dynamiska fält för varje låt/post. T ex. Längd, kompositör, text osv. Dessa fälten har jag gjort som med låtnamnsfältet, dvs att det första heter song1, det andra song2 osv. Kan man utöka koden för att även sätta in andra värden i tabellen. det ska ju ske i samma INSERT INTO sats.

------------------
Henke

[Redigerat av devotion den 26 jan 2001]

[Redigerat av devotion den 26 jan 2001]

132 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)