Just nu i M3-nätverket
Jump to content

Flytta post


Benghaaa

Recommended Posts

Hoho igen :) sitter nu och gör iordning menysystemet, man ska kunna lägga till och ta bort länkar som finns i en databas.

 

i tabellen meny:

ID - Räknare

dispLink - Länktext

Link-själva länken

 

Nu är problemet hur jag ska få alla länkar att hamna på rätt ställe när jag loopar ut dem, det bästa vore om man får alternativet att flytta upp eller ner som man själv vill. Hur?

 

Link to comment
Share on other sites

Huh? Jag läste på ett annat forum där någon hade valt att byta ID med posten som var över eller under posten man själv valt, jag har suttit och funderat ett tag och kollat på forum men inte hittat något som verkar vettigt

 

Link to comment
Share on other sites

Jag läste på ett annat forum där någon hade valt att byta ID med posten som var över eller under posten man själv valt

Då var de fulla eller inkompetenta =) Ett id är en unik identifierare för en post och skall inte ändras. Ett positionsindex är ett attribut och det är detta du skall ändra när du vill förändra den relativa ordningen, i det här fallet sorteringen i en meny.

 

Lite "pseudokod" kanske hjälper, där Idx står för ordningstal i menyn.

 

MoveUp(object)
- IF object.Idx>1
- - BEGIN
- - - Swap(object, objects[object.Idx-1])
- - END

MoveDown(object)
- IF object.Idx<NoOfObjects
- - BEGIN
- - - Swap(object, objects[object.Idx+1])
- - END

Swap(object1,object2)
- tmp=object1.Idx
- object1.Idx=object2.Idx
- object2.Idx=tmp

 

Link to comment
Share on other sites

Jadu, detdär blev jag inte mycket klokare av faktiskt :/ du har inget liknande i asp? det står helt tvärstill i huvet just nu :/

 

Link to comment
Share on other sites

du har inget liknande i asp?
Har du öht kollat på den kod som Jonas_Bo länkat till? Tycker jag verkar vara exakt det du letar efter (hoppas inte Anjuna gör något i onödan).

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Link to comment
Share on other sites

nja, det var väl mer åt det hållet jag hade tänkt mig, men inte i en sån lista och jag fick ingen ordning på det när jag försökte modifiera :/ +att jag inte hittade någon download länk :E

 

[inlägget ändrat 2007-01-16 23:34:37 av Benghaaa]

Link to comment
Share on other sites

Hm, jag krånglar bara till det med en massa objektmodeller. ASP är inte riktigt gjort för mitt sätt att tänka, även om det hanterar klasser.

Jag föreslår att du tittar på Jonas_Bo's lösning istället, som han länkade till.

 

hoppas inte Anjuna gör något i onödan

Jag började med kände att jag var för trött. Såg sedan att det ju redan fanns en lösning (missade det inlägget)

[inlägget ändrat 2007-01-16 23:39:07 av Anjuna Moon]

Link to comment
Share on other sites

Vad jag ser så är det inte en lösning, eftersom det inte finns någon nedladdning av det scriptet. men men, tack ändå

 

Link to comment
Share on other sites

Då får du nog titta lite mer noggrant :)

 

HTML-koden för SELECT:en och ASP-koden för Jonas_Bo's exempel står ju i klartext i hans inlägg. JavaScript-koden som behövs står i klartext i html-källan till live-exemplet som han länkar till i sitt inlägg.

 

Klipp-å-klistra ihop alltihop så kommer det att funka.

 

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2007-01-17 00:32:01 av Cluster]

Link to comment
Share on other sites

Sådär, nu har jag försökt mig på det hela. fick ihop det ganska så bra faktiskt förutom 1 sak: när jag har väl har flyttat raden, och vill spara den där: så åker den tillbaka. Jag är nästan helt säker på att jag har fel i min databas för just värdet sortindex.

 

Jonas_Bo skrev i sitt inlägg:

 

Jag har ett fält i tabellen som hanterar detta som jag kallar "sortindex".

 

Nrä man skapar en sida eller meny är den 99 som standard, sen får man gå in i en funktionssida i administratörsgränssnittet och ändra.

 

Vilket jag tolkade som att i tabellen finns en kolumn med namnet sortindex av typen tal och som har ett standardvärde på 99, alla inlägg har nu sortindex 99 men som sagt när jag väl vill spara så hoppar all tillbaka till sin ursprungliga plats.

 

 

Här kan ni se problemet http://benghaa.mine.nu/bild/loop.asp

 

Link to comment
Share on other sites

Hur ser asp-koden ut (främst då den som tar emot formulärvärdena), i filen loop.asp?

Glöm inte LOG-taggar.

 

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2007-01-17 17:01:51 av Cluster]

Link to comment
Share on other sites

[log] <%

Set conn = Server.CreateObject("ADODB.Connection")

connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\www\KVK\db\db.mdb"

conn.open connStr

 

Set RecSet = Server.CreateObject("ADODB.Recordset")

sql = "SELECT * FROM meny ORDER by sortindex"

RecSet.Open sql, conn, adOpenStatic, adLockOptimistic

 

Do While Not RecSet.EOF

Response.Write "<OPTION VALUE="""&RecSet("sortindex")&""">"&RecSet("dispLink")&"</OPTION>"

RecSet.MoveNext

Loop

 

 

%>[/log]

 

 

Link to comment
Share on other sites

Ok, men var är asp-koden som ändrar i databasen?

//eforum.idg.se/viewmsg.asp?entriesid=890048#890127

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Link to comment
Share on other sites

ursäkta att jag varit borta.

 

Value för sortindex skall inte vara i option value utan där skall postens Id vara.

sortindet sköter sig självt

med andra ord:

Response.Write [GRÅ]"<OPTION VALUE="[/GRÅ][GRÅ]""[/GRÅ]&RecSet([GRÅ]"id"[/GRÅ])&[GRÅ]""[/GRÅ][GRÅ]">"[/GRÅ]&RecSet("d
ispLink[GRÅ]")&"[/GRÅ]</OPTION>"

 

 

[color="#0000ff"]If[/color] [b]Request[/b].form([GRÅ]"task"[/GRÅ]) = [GRÅ]"changesortorder"[/GRÅ] [color="#0000ff"]Then[/color]
fields = [color="#0000ff"]Split[/color]([b]Request[/b].form([GRÅ]"sortorder"[/GRÅ]), [GRÅ]","[/GRÅ])
[color="#0000ff"]For[/color] i=0 [color="#0000ff"]To[/color] ([color="#0000ff"]UBound[/color](fields))
[color="#0000ff"]If[/color] [color="#0000ff"]Len[/color](fields(i)) > 0 [color="#0000ff"]Then[/color] Conn.[color="#0000ff"]Execute[/color]([GRÅ]"UPDATE tabell SET sortindex="[/GRÅ]&(i + 1)&[GRÅ]" [color="#ff0000"]WHERE Id ="[/GRÅ] & fields(i)&[GRÅ]""[/GRÅ])[/color]
[color="#0000ff"]Next[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

 

Annars blir det fel i det rödmarkerade - du har väl inte så många poster med id 99?!

[inlägget ändrat 2007-01-17 19:07:27 av Jonas_Bo]

Link to comment
Share on other sites

Nu du, börjar det verkligen närma sig. Problemet är nu följande: jag kan flutta och modifiera, men sen när jag väljer Spara. så händer det inget på skärmen (men i databasen händer det grejer) och om jag väljer spara igen byts ordningen helt.

 

[log]<FORM action="loop.asp?do=" method="post" name="apan">

<input type="hidden" name="sortorder">

<input type="hidden" name="task"><br>

<Select name="fields" size="25" Class="fields" style="width: 220px;">

<%

Set conn = Server.CreateObject("ADODB.Connection")

connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\www\KVK\db\db.mdb"

conn.open connStr

 

Set RecSet = Server.CreateObject("ADODB.Recordset")

sql = "SELECT * FROM meny ORDER by sortindex ASC"

RecSet.Open sql, conn, adOpenStatic, adLockOptimistic

 

Do While Not RecSet.EOF

Response.Write "<OPTION VALUE="""&RecSet("ID")&""">"&RecSet("dispLink")&"</OPTION>"

RecSet.MoveNext

Loop

 

 

%>

</Select>

</p>

<p>

<%

If Request.form("task") = "changesortorder" Then

fields = Split(Request.form("sortorder"), ",")

For i=0 To (UBound(fields))

If Len(fields(i)) > 0 Then Conn.Execute("UPDATE meny SET sortindex="&(i + 1)&" WHERE Id =" & fields(i)&"")

Next

End If

 

RecSet.close

conn.close

%>[/log]

 

Räknade även ut att om man uppdaterar sidan, så får man inte det problemet, altså när man trycker på spara så ska sidan uppdateras

[inlägget ändrat 2007-01-18 00:52:38 av Benghaaa]

Link to comment
Share on other sites

Detta borde funka (orkar inte sätta upp databasen för att testa):[log]

[MÄRK]<%[/MÄRK]@LANGUAGE=[GRÅ]"VBSCRIPT"[/GRÅ] CODEPAGE=[GRÅ]"1252"[/GRÅ][MÄRK]%>[/MÄRK]
[MÄRK]<%[/MÄRK]
[color="#0000ff"]Set[/color] conn = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])
connStr = [GRÅ]"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\www\KVK\db\db.mdb"[/GRÅ]
conn.open connStr

[color="#0000ff"]If[/color] [b]Request[/b]([GRÅ]"task"[/GRÅ]) <> [GRÅ]"changeSortOrder"[/GRÅ] [color="#0000ff"]Then[/color] 

   [color="#0000ff"]Set[/color] objRS=conn.[color="#0000ff"]Execute[/color]([GRÅ]"SELECT ID, dispLink FROM meny ORDER by sortindex ASC"[/GRÅ])
   [color="#0000ff"]If[/color] objRS.EOF [color="#0000ff"]Then[/color]
      [color="#0000ff"]Do[/color] Until RecSet.EOF
         intNumOpt=intNumOpt+1
         strOpts=strOpts&[GRÅ]"<OPTION VALUE="[/GRÅ][GRÅ]""[/GRÅ]&objRS([GRÅ]"ID"[/GRÅ])&[GRÅ]""[/GRÅ][GRÅ]">"[/GRÅ]&objRS([GRÅ]"dispLink"[/GRÅ])&[GRÅ]"</OPTION>"[/GRÅ]&vbCrLf
         objRS.MoveNext
      [color="#0000ff"]Loop[/color]
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
   [color="#0000ff"]Set[/color] objRS=[color="#0000ff"]Nothing[/color]

   conn.close
   [color="#0000ff"]Set[/color] conn=[color="#0000ff"]Nothing[/color]
[MÄRK]%>[/MÄRK]
<!DOCTYPE HTML [color="#0000ff"]Public[/color] [GRÅ]"-//W3C//DTD HTML 4.01//EN"[/GRÅ] [GRÅ]"http://www.w3.org/TR/html4/strict.dtd"[/GRÅ]>
<html>
<head>
<meta http-equiv=[GRÅ]"Content-Type"[/GRÅ] content=[GRÅ]"text/html; charset=iso-8859-1"[/GRÅ]>
<title>Sortera menyn</title>
</head>

<body>
<FORM action=[GRÅ]"?task=changeSortOrder"[/GRÅ] method=[GRÅ]"post"[/GRÅ] name=[GRÅ]"myMenuSortOrderForm"[/GRÅ]>
   <[color="#0000ff"]Select[/color] name=[GRÅ]"sortorder"[/GRÅ] size=[GRÅ]"<%=intNumOpt%>"[/GRÅ] [color="#0000ff"]Class[/color]=[GRÅ]"fields"[/GRÅ] style=[GRÅ]"width:auto;"[/GRÅ]>
   [MÄRK]<%[/MÄRK]=strOpts%>
   </[color="#0000ff"]Select[/color]>
</FORM>
</body>
</html>
[MÄRK]<%[/MÄRK]
[color="#0000ff"]Else[/color]
   arrFields = [color="#0000ff"]Split[/color]([b]Request[/b].form([GRÅ]"sortorder"[/GRÅ]), [GRÅ]","[/GRÅ])
   [color="#0000ff"]For[/color] i=0 [color="#0000ff"]To[/color] ([color="#0000ff"]UBound[/color](arrFields))
   [color="#0000ff"]If[/color] [color="#0000ff"]Len[/color](arrFields(i)) > 0 [color="#0000ff"]Then[/color]
      Conn.[color="#0000ff"]Execute[/color]([GRÅ]"UPDATE meny SET sortindex="[/GRÅ]&(i + 1)&[GRÅ]" WHERE Id ="[/GRÅ] & arrFields(i)&[GRÅ]""[/GRÅ])
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
   [color="#0000ff"]Next[/color]

   conn.close
   [color="#0000ff"]Set[/color] conn=[color="#0000ff"]Nothing[/color]

   [b]Response[/b].Redirect([GRÅ]"?"[/GRÅ])
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[MÄRK]%>[/MÄRK]

[/log]

Se även: http://eforum.kicks-ass.net/codeview/?file=sortMenuForm.asp'>http://eforum.kicks-ass.net/codeview/?file=sortMenuForm.asp

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2007-01-18 01:02:32 av Cluster]

Link to comment
Share on other sites

 

 

Jag skulle rekommendera att placera koden för ändringen högst upp.

Efter det att du skapat conn och öppnat db

[log]

[MÄRK]<%[/MÄRK]
[color="#0000ff"]Set[/color] conn  = ...
conn.open ...

[color="#0000ff"]If[/color] [b]Request[/b]([GRÅ]"task"[/GRÅ]) = [GRÅ]"changesortorder"[/GRÅ] [color="#0000ff"]Then[/color]
arrFields = [color="#0000ff"]Split[/color]([b]Request[/b].form([GRÅ]"sortorder"[/GRÅ]), [GRÅ]","[/GRÅ])
   [color="#0000ff"]For[/color] i=0 [color="#0000ff"]To[/color] ([color="#0000ff"]UBound[/color](arrFields))
   [color="#0000ff"]If[/color] [color="#0000ff"]Len[/color](arrFields(i)) > 0 [color="#0000ff"]Then[/color]
      Conn.[color="#0000ff"]Execute[/color]([GRÅ]"UPDATE meny SET sortindex="[/GRÅ]&(i + 1)&[GRÅ]" WHERE Id ="[/GRÅ] & arrFields(i)&[GRÅ]""[/GRÅ])
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
   [color="#0000ff"]Next[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[color="#006400"]'stäng inte conn här[/color]
[MÄRK]%>[/MÄRK]
[color="#006400"]'... skapa html[/color]

[/log]

[inlägget ändrat 2007-01-18 10:12:33 av Jonas_Bo]

Link to comment
Share on other sites

Jag skulle rekommendera att placera koden för ändringen högst upp.
Eller längst ned som i mitt (fullständiga) exempel :)

http://eforum.kicks-ass.net/codeview/?file=sortMenuForm.asp'>http://eforum.kicks-ass.net/codeview/?file=sortMenuForm.asp

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Link to comment
Share on other sites

Nuff said!
Snart ;)

 

då blir det ju en tom sida. Mitt är bättre om han vill göra en ändring direkt efter sparning.
Varför skulle det bli det?

Har som sagt iof inte testat, men visst skall den ladda om efter (iom Response.Redirect("?"))? Om koden sedan ligger först eller sist i filen är egalt.

 

Dessutom så görs i mitt exempel inga nya databasoperationer om man uppdaterar (F5).

 

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2007-01-18 11:42:19 av Cluster]

Link to comment
Share on other sites

nu körde jag på Jonas_Bo's råd men jag får ändå inte rätt :E frågade även en lärare i skolan och han sa att man ska spara först och sen skriva ut det

 

 

fick koden till såhär:

 

[log]<%if request.querystring("do")="" then%>

<FORM action="loop.asp" method="post" name="apan">

<input type="hidden" name="sortorder">

<input type="hidden" name="task"><br>

<Select name="fields" size="25" Class="fields" style="width: 220px;">

<%

Set conn = Server.CreateObject("ADODB.Connection")

connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\www\KVK\db\db.mdb"

conn.open connStr

 

Set RecSet = Server.CreateObject("ADODB.Recordset")

sql = "SELECT * FROM meny ORDER by sortindex ASC"

RecSet.Open sql, conn, adOpenStatic, adLockOptimistic

 

If Request.form("task") = "changesortorder" Then

fields = Split(Request.form("sortorder"), ",")

For i=0 To (UBound(fields))

If Len(fields(i)) > 0 Then Conn.Execute("UPDATE meny SET sortindex="&(i + 1)&" WHERE Id =" & fields(i)&"")

Next

End If

 

%>

 

</p>

<p>

<%

Do While Not RecSet.EOF

Response.Write "<OPTION VALUE="""&RecSet("ID")&""">"&RecSet("dispLink")&"</OPTION>"

RecSet.MoveNext

Loop

 

 

 

RecSet.close

conn.close

%>

<%End If%>[/log]

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...