Avatar billede bremer Nybegynder
18. december 2005 - 16:09 Der er 19 kommentarer og
1 løsning

Mulighed for at rediger i HELE min liste på en gang

Hej Alle sammen,

ville høre om man der er mulighed for at rediger i hele liste, og ikke kun én af gang via. et id . jeg kode ser sådan ud pt

                  <%
    id = cint(Request.QueryString("id"))
    set rs = conn.execute("SELECT * FROM film WHERE id="&id)
    if rs.eof then response.end
    %>

Det så jeg gå efter er:
mulighed for at rediger i alle mine poster på én gang - og derefter klik på submit knappen, også herefter skulle alle lister være opdatere.

Håber i kan hjælpe mig :)

VH- Bremer
Avatar billede thesurfer Nybegynder
18. december 2005 - 16:18 #1
Man kan jo nøjes med at bruge: set rs = conn.execute("select * from film")

Og så kunne jeg forestille mig en loop, der henter den nuværende rs med de tilhørende data, og smider den i de rette felter.

Når man så submitter (onsubmit) afvikles en funktion (lavet i JavaScript), som samler de respektive data, i 1 felt per emne, separaret af et (eller flere) specialtegn.

Du kan så via ASP splitte dataene op, via dette/disse specialtegn.

/theSurfer
Avatar billede bremer Nybegynder
18. december 2005 - 16:26 #2
phya. det lyder svært, - kan Du lave et eksempel?

mit første felt er "navn"

Det ville være cool, hvis du kunne det :)

VH - bremer
Avatar billede thesurfer Nybegynder
18. december 2005 - 16:31 #3
Jeg laver lige et test-eksempel, med "navn" og "alder".. så kan du selv rette det til..

/theSurfer
Avatar billede bremer Nybegynder
18. december 2005 - 16:32 #4
COOL! tak...
Avatar billede thesurfer Nybegynder
18. december 2005 - 16:43 #5
Der går lige noget tid :-)

/theSurfer
Avatar billede thesurfer Nybegynder
18. december 2005 - 17:49 #6
Så er eksemplet færdig..

I min har, er der noget jeg kalder "lokal-kode". Det er den kode, jeg har brugt lokalt (uden database), da jeg ikke har en database.

Der er også noget der hedder "database-kode". Det er kode du kan bruge, når du bruger databasen.

Opret 2 filer.

- index.asp (eller "test.asp", det er lige meget)
- opdater.asp (hvis du ændre dette navn, skal du også ændre det i "action" i formen i "index.asp"/"test.asp")

I index.asp indsætter du følgende kode:

<%
dim t ' t = tæller
t = 0

' ---- lokal kode, start

dim rs

dim tNavn, tAlder, xnavne
tNavn = "Hans,Jens,Ole,Kenneth,Michael,Thomas"
tNavn = split(tNavn, ",")
tAlder = "10,20,30,40,60,90"
tAlder = split(tAlder, ",")

' ---- lokal kode, slut

%>

<%
'set rs = conn.execute("select * from film") ' database-kode
'if rs.bof or rs.eof then ' database-kode
'    response.write "ingen data i databasen" ' database-kode
'else ' database-kode
%>
<form name="frmRediger" action="opdater.asp" method="post" onsubmit="return ret(this)">
<%
    'do while not rs.eof ' database-kode
    do while rs <= 5 ' lokal-kode
   

    ' response.write "Navn: <input type='text' name='navn" & t & "' value='" & rs("navn") & "'>" & vbCrLf ' database-kode
    response.write "Navn: <input type='text' name='navn" & t & "' value='" & tNavn(rs) & "'>" & vbCrLf ' lokal-kode
    response.write "<br>" & vbCrLf
    ' response.write "Alder: <input type='text' name='alder" & t & "' value='" & rs("alder") & "'>" & vbCrLf ' database-kode
    response.write "Alder: <input type='text' name='alder" & t & "' value='" & tAlder(rs) & "'>" & vbCrLf ' lokal-kode
    response.write "<br><br>" & vbCrLf

    ' xnavne = xnavne & rs("navn") & ";:;" ' database-kode
    xnavne = xnavne & tNavn(rs) & ";:;"

    t = t + 1
    rs = rs + 1 ' lokal-kode
    loop
%>

<input type="hidden" name="navne" value="" style="width:100px;">
<input type="hidden" name="aldre" value="" style="width:100px;">
<input type="hidden" name="xnavne" value="<% response.write xnavne %>" style="width:100px;">

<input type="submit" name="submit" value="Submit">
</form>

<script type="text/JavaScript">
var antal = <% response.write t %>;
var n = "";
var a = "";

function ret(f)
{
    var el = f.elements;
    for(i=0; i < antal; i++) {
        if (el[i].type == "text") { // vi skal kun kigge på type="text"
            n = n + el("navn" + i).value + ";:;";
            a = a + el("alder" + i).value + ";:;";
        }
    }
    document.frmRediger.navne.value = n;
    document.frmRediger.aldre.value = a;

return true;
}
</script>

<%
'end if ' database-kode
%>


I opdater.asp indsætter du følgende kode:

<%

if request.servervariables("request_method") = "POST" then ' check om formen er submittet
' yep.. formen er submittet

Response.write "Der er følgende opdateringer:<br><br>" & vbCrLf & vbCrLf

dim n, a, xn
n = request.form("navne")
a = request.form("aldre")
xn = request.form("xnavne")

n = split(n, ";:;")
a = split(a, ";:;")
xn = split(xn, ";:;")

dim i
for i = 0 to ubound(n) - 1
  response.write "conn.execute(""update TabelNavn set navn = '" & n(i) & "', alder = " & a(i) & " where navn = '" & xn(i) & "'"")"
    response.write "<br>" & vbCrLf

    ' Databasen opdateres med:
    ' conn.execute(update TabelNavn set navn = '" & n(i) & "', alder = " & a(i) & " where navn = '" & xn(i) & "')"
next

else
    ' nope.. den er ikke submittet..
    ' brugeren har selv indtastet "opdater.asp" i adressefeltet!
    '
    ' giv brugeren en besked:
    response.write "Intet at lave, da formen ikke er submittet"
end if

%>


Load "index.asp" via din webserver (plejer at være "localhost" eller online).
Du kan nu redigere i både navnene og aldrene.

Klik på Submit-knappen, for at "se" ændringerne.

/theSurfer
Avatar billede thesurfer Nybegynder
18. december 2005 - 17:50 #7
Rettelse:
"I min har" = "I min kode"
.. spørg mig ikke :-)

/theSurfer
Avatar billede thesurfer Nybegynder
18. december 2005 - 17:52 #8
PS:
Forskellen på "lokal-kode" og "database-kode" er, at jeg ikke bruger recordset'et (rs("noget-her")) i min lokal-kode, da der ikke er nogen forbindelser til nogen database..

Databasen er "erstattet" af array'ene tNavn og tAlder..

/theSurfer
Avatar billede bremer Nybegynder
18. december 2005 - 19:01 #9
det ser fint ud, - dog kan jeg ikke helt se mig ud af det... - i forhold til at jeg skal have en database på? - hvad skal jeg rette...

PS. jeg sysnes ikke den opdater... - eller er det bare mig ?

hvor og hvordan skal jeg så indsætte min dataforbindelse? i forhold til din kode?

Den dataforbindelse jeg bruger:

              <%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../../db/databasen.mdb")
Conn.Open DSN

%>
              <%
    set rs = conn.execute("SELECT * FROM film ORDER BY navn DESC")
    while not rs.eof
        %>


Håber du kan hjælpe mig... - jeg er ikke for go' (endnu) til dette her :S

VH- bremer
Avatar billede thesurfer Nybegynder
18. december 2005 - 19:17 #10
Hvis du fjerner kommentering ('-tegnet) fra de linier, der har "' database-kode" i slutningen, og sætter kommentering ('-tegn) ved de linier, har "' lokal-fil" i slutningen, skulle du gerne kunne bruge databasen.

Oprettelsen af forbindelsen til databasen, skal bare ske inden den første "' database-kode"-linie.

Prøv det.

/theSurfer
Avatar billede bremer Nybegynder
18. december 2005 - 20:20 #11
okay, Nu har jeg prøvet at lave en så det passer til mig database, men hvorfor så jeg uploader den, frem kommer hele databasen ¨nå jeg har sat den fra 01 til og med 08

plus min explorer gå ned :(

sådan ser det ud: - set det okay ud eller hvad ?

de to tabeller hedder "fornavn" og "nr" som jeg ønsker et udtræk på...




              <%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../db/databasen.mdb")
Conn.Open DSN

%>

<%
set rs = conn.execute("SELECT * FROM film WHERE nr BETWEEN '01' AND '08'") ' database-kode
if rs.bof or rs.eof then ' database-kode
    response.write "ingen data i databasen" ' database-kode
else ' database-kode
%>
<form name="frmRediger" action="opdater.asp" method="post" onsubmit="return ret(this)">
<%
    do while not rs.eof ' database-kode
    'do while rs <= 5 ' lokal-kode
   

    response.write "fornavn: <input type='text' name='fornavn" & t & "' value='" & rs("fornavn") & "'>" & vbCrLf ' database-kode
    ' response.write "fornavn: <input type='text' name='fornavn" & t & "' value='" & tfornavn(rs) & "'>" & vbCrLf ' lokal-kode
    response.write "<br>" & vbCrLf
    response.write "nr: <input type='text' name='nr" & t & "' value='" & rs("nr") & "'>" & vbCrLf ' database-kode
    'response.write "nr: <input type='text' name='nr" & t & "' value='" & tnr(rs) & "'>" & vbCrLf ' lokal-kode
    response.write "<br><br>" & vbCrLf

    xfornavn = xfornavn & rs("fornavn") & ";:;" ' database-kode
    ' xfornavn= xfornavn & tfornavn(rs) & ";:;"

    t = t + 1
    'rs = rs + 1 ' lokal-kode
    loop
%>

<input type="hidden" name="fornavn" value="" style="width:100px;">
<input type="hidden" name="nr" value="" style="width:100px;">
<input type="hidden" name="xfornavn" value="<% response.write xfornavn %>" style="width:100px;">

<input type="submit" name="submit" value="Submit">
</form>

<script type="text/JavaScript">
var antal = <% response.write t %>;
var n = "";
var a = "";

function ret(f)
{
    var el = f.elements;
    for(i=0; i < antal; i++) {
        if (el[i].type == "text") { // vi skal kun kigge på type="text"
            n = n + el("fornavn" + i).value + ";:;";
            a = a + el("nr" + i).value + ";:;";
        }
    }
    document.frmRediger.fornavn.value = n;
    document.frmRediger.nr.value = a;

return true;
}
</script>

<%
end if
%>


håber du kan/vil med så den kan komme til at virke :)
Avatar billede thesurfer Nybegynder
18. december 2005 - 21:58 #12
Når du skriver: de to tabeller hedder "fornavn" og "nr" som jeg ønsker et udtræk på...

Så mener du "kolonner" i stedet for "tabeller", ik? Du har kun tabellen "film"..? :-)

Hvilken type er "nr"? navnet "nr" indikerer at det er et tal..

Hvis "nr" er af typen "tal", skal der ikke bruges '-tegn.. dvs:

set rs = conn.execute("SELECT * FROM film WHERE nr BETWEEN 01 AND 08") ' database-kode

Jeg ved ikke om den accepterer "01" og "08" som tal.. prøv at lave dem om til "1" og "8"..

/theSurfer
Avatar billede bremer Nybegynder
19. december 2005 - 21:03 #13
Hej igen,

jeg har nu prøvet at ændre din kode, - til tabelnavn "fornavn" & "nr"(som er almindelig tekst) - var der evt. en mulighed for at du kunne rette den til mig ?

- som jeg skriv før, jeg prøvet - men det vil sku ikke virke... :(

håber du kan/vil hjælpe mig...

VH - bremer
Avatar billede thesurfer Nybegynder
19. december 2005 - 22:11 #14
Det var mig, der havde lavet en KÆMPE brøler! :-)

Uden "rs.movenext" vil den løbe ind i en uendelig loop.. :-)
Sorry mate..

Dette scriptet er baseret på en database, og alt "lokal"-halløj (fra tidligere script) er fjernet.

*** index.asp:

<%
option explicit

dim t ' t = tæller
t = 0

dim xnavne
xnavne = ""

dim conn, dsn, rs

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("db1.mdb")
Conn.Open DSN

set rs = conn.execute("select * from film")
if rs.bof or rs.eof then
    response.write "ingen data i databasen"
else
%>
<form name="frmRediger" action="opdater.asp" method="post" onsubmit="return ret(this)">
<%
    do while not rs.eof   

    response.write "Navn: <input type='text' name='navn" & t & "' value='" & rs("fornavn") & "'>" & vbCrLf
    response.write "<br>" & vbCrLf
    response.write "Alder: <input type='text' name='alder" & t & "' value='" & rs("nr") & "'>" & vbCrLf
    response.write "<br><br>" & vbCrLf

    xnavne = xnavne & rs("fornavn") & ";:;"

    t = t + 1
    rs.movenext
    loop
%>

<input type="hidden" name="navne" value="" style="width:100px;">
<input type="hidden" name="aldre" value="" style="width:100px;">
<input type="hidden" name="xnavne" value="<% response.write xnavne %>" style="width:100px;">

<input type="submit" name="submit" value="Submit">
</form>

<script type="text/JavaScript">
var antal = <% response.write t %>;
var n = "";
var a = "";

function ret(f)
{
    var el = f.elements;
    for(i=0; i < antal; i++) {
        if (el[i].type == "text") { // vi skal kun kigge på type="text"
            n = n + el("navn" + i).value + ";:;";
            a = a + el("alder" + i).value + ";:;";
        }
    }
    document.frmRediger.navne.value = n;
    document.frmRediger.aldre.value = a;

return true;
}
</script>

<%
Conn.Close
set rs = nothing
Set Conn = Nothing

end if
%>

*** opdater.asp:

<%
Option Explicit

if request.servervariables("request_method") = "POST" then ' check om formen er submittet
' yep.. formen er submittet

dim conn, dsn

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("db1.mdb")
Conn.Open DSN

Response.write "Der er følgende opdateringer:<br><br>" & vbCrLf & vbCrLf

dim n, a, xn
n = request.form("navne")
a = request.form("aldre")
xn = request.form("xnavne")

n = split(n, ";:;")
a = split(a, ";:;")
xn = split(xn, ";:;")

dim i
for i = 0 to ubound(n) - 1
    conn.execute("update film set fornavn = '" & n(i) & "', nr = '" & a(i) & "' where fornavn = '" & xn(i) & "'")
    response.write "conn.execute(""update film set fornavn = '" & n(i) & "', nr = '" & a(i) & "' where fornavn = '" & xn(i) & "'"")"
    response.write "<br>" & vbCrLf
next

Conn.Close
Set Conn = Nothing

else
    ' nope.. den er ikke submittet..
    ' brugeren har selv indtastet "opdater.asp" i adressefeltet!
    '
    ' giv brugeren en besked:
    response.write "Intet at lave, da formen ikke er submittet"
end if
%>

/theSurfer
Avatar billede thesurfer Nybegynder
19. december 2005 - 22:12 #15
Som du sikkert kan regne ud, kan du godt fjerne disse test-linier:

    response.write "conn.execute(""update film set fornavn = '" & n(i) & "', nr = '" & a(i) & "' where fornavn = '" & xn(i) & "'"")"
    response.write "<br>" & vbCrLf

De viser bare de SQL strengen, med de nye værdier.

/theSurfer
Avatar billede bremer Nybegynder
19. december 2005 - 23:28 #16
det ser fint ud, men hvorfor står der nu... "xnavne" og "aldre" nogle steder?
når det kun er fornavn og nr som jeg skal opdater...

eller er det lige meget?

VH. bremer
Avatar billede thesurfer Nybegynder
19. december 2005 - 23:32 #17
Det er fordi jeg (fra start af) brugte "navn" og "alder" som input felter..
Det er bare navnene på de input felter, der er på den første side..

Hvis du laver om på formen, skal du rette det til, i opdater.asp.

- Jeg smider lige et svar..

/theSurfer
Avatar billede thesurfer Nybegynder
19. december 2005 - 23:41 #18
Takker for points :-)

/theSurfer
Avatar billede bremer Nybegynder
19. december 2005 - 23:43 #19
okay,

men jeg få denne fejl frem:

Microsoft VBScript compilation error '800a0400'

Expected statement

/undermappe/index.asp, line 11

option explicit



:(
Avatar billede thesurfer Nybegynder
19. december 2005 - 23:46 #20
Option Explicit tvinger programmøren (mig, dig, osv) til at definere/dimme ALLE variablerne.
Så bliver man informeret når man laver stavefejl, da den så ikke kender variablen.

Når man bruger Option Explicit, så SKAL linien være den første i ASP filen.
Du har garanteret sat noget ind for den linie..

Flyt linien op, så det er den første i ASP filen.

/theSurfer
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