Avatar billede svjensen Nybegynder
29. maj 2003 - 08:45 Der er 10 kommentarer og
1 løsning

Sende data via funktion

I et tidligere spørgsmål (353258) fik jeg løst et problem med at sortere rækkefølgen på databaseposter. Løsningen blev at sende en kommasepareret liste til en send-fil, der splittede liste op i et array og derefter opdaterede DB. Filerne er sat ind nedenfor.

Jeg kunne imidlertid godt tænke mig, at gennemføre hele aktionen i én fil. Jeg forestiller mig at den nuværende funktion 'gemSortering()' ændres så den fylder rækkefølgen i et array fremfor en liste. Og at den derefter opdaterer DB i stil med den nuværende gemsort.asp.

Men hvordan?????

----------------------------------------
fil: 'linkkatsort.asp'

<!--#include file="connection.asp"-->

<html>
<head><title>Ændre sortering af linkkategorier</title>

<script language="JavaScript"> <!--

var sel;
var selo;

function checkSel ( frm ) {
  sel  = frm.model.selectedIndex;
  selo = frm.model.options;
  if ( 0 > sel ) {
    alert( "der skal vælges en kategori først" );
    return false;
  };
  return true;
}; //end checkSel ( Form object ) -> boolean

function checkDest ( dest ) {
  if ( 0>dest || dest >= selo.length ) {
    alert( "Kategorien kan ikke flyttes derhen" );
    return false;
  };
  return true;
}; //end checkDest ( integer ) -> boolean

function ombyt ( fra, til ) {
  var tmpTxt      = selo[fra].text;
  selo[fra].text  = selo[til].text;
  selo[til].text  = tmpTxt;
  var tmpVal      = selo[fra].value;
  selo[fra].value = selo[til].value;
  selo[til].value = tmpVal;
  return til;
}; //end ombyt ( integer, integer )

function flytOp( frm ) {
  if ( checkSel( frm ) && checkDest( sel-1 ) )
      frm.model.selectedIndex = ombyt( sel, sel-1 );
}; //end flytOp( form object )

function flytNed( frm ) {
  if ( checkSel( frm ) && checkDest( sel+1 ) )
      frm.model.selectedIndex = ombyt( sel, sel+1 );
}; //end flytNed( form object )

function gemSortering ( frm ) {
  var skj = "";
  selo = frm.model.options;
  for (var i=0; selo.length>i; i++ )
      skj += "," +selo[i].text;
  frm.skjultFelt.value = skj.substring(1);
  return true;
}; //end gemSortering ( form object )

// -->  </script>
<link rel="stylesheet" type="text/css" href="css/svj.css">
 
</head>
<body>

<p align=center>Kategorierne er vist i den rækkefølge de bliver præsenteret i dropdownmenuen.<br>
Du kan ændre rækkefølgen ved at markere kategorien og trykke 'flyt op'/'flyt ned'.<br>
Når du er tilfreds gemmer du rækkefølgen ved at trykke 'Gem'.</p>

<%
strSQL = "SELECT * from linkkat ORDER BY sortering"
set rs = conn.execute(strSQL)
%>

<p><form name="sfrm" action="gemsort.asp" onsubmit="return gemSortering(this);" method=post>
<table border=0 align=center>
  <tr>
    <td>
        <select name="model" size=15>
<!--  indsæt options med asp eller med håndkraft.  -->
<%
   
    Do while not rs.eof
        Response.Write "<option>" & rs("linkkategori") & "</option>"
        rs.movenext
   
    loop
%>
        </select></p>
    </td>
    <td>&nbsp;&nbsp;&nbsp;</td>
    <td>
        <p><input type='button' value='flyt op' onclick='flytOp(this.form)'><br><br>
          <input type='button' value='flyt ned' onclick='flytNed(this.form)'></p>

        <p><input type='submit' value='Gem'>
          <input type='hidden' name='skjultFelt' value=''></p>
    </td>
  </tr>
</table>
</form>

</body>
</html>

<!--#include file="close.asp"-->
-----------------------------------------------

Filen der sendes til:

fil: 'gemsort.asp'

<%@ language="vbscript" %>
<!--#include file="security/check_login.asp"-->

<HTML>
<HEAD>

<TITLE>
Links
</TITLE>
<link rel="stylesheet" type="text/css" href="css/svj.css">
</HEAD>
<BODY>

<%
arraystr = (request.form("skjultfelt"))
arrayid = Split(arraystr, ",")

    For i = LBound(arrayid) To UBound(arrayid)
        strSQL = "UPDATE linkkat SET "
        strSQL = strSQL & "sortering = " & i & " "
        strSQL = strSQL & "WHERE linkkategori = '" & arrayid(i) & "'"
        set rs = conn.execute (strSQL)
       
        strSQL = ""   
    Next
%>

</body>

</html>

<!--#include file="close.asp"-->
--------------------------------------------------
Avatar billede eagleeye Praktikant
29. maj 2003 - 11:04 #1
Vil du havde koden fra de to filer i samme fil?
Avatar billede svjensen Nybegynder
29. maj 2003 - 12:07 #2
Ja tak.
Jeg vil gerne væk fra altid at skulle loade en ny fil for at gemme, slette eller andet.
Avatar billede eagleeye Praktikant
30. maj 2003 - 08:56 #3
Du kommer ikke væk fra at siden er nød til at reloade for at lave ændringer i databasen. Prøv med dette:



<!--#include file="connection.asp"-->
<!--#include file="security/check_login.asp"-->

<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
arraystr = (request.form("skjultfelt"))
arrayid = Split(arraystr, ",")

    For i = LBound(arrayid) To UBound(arrayid)
        strSQL = "UPDATE linkkat SET "
        strSQL = strSQL & "sortering = " & i & " "
        strSQL = strSQL & "WHERE linkkategori = '" & arrayid(i) & "'"
        set rs = conn.execute (strSQL)
       
        strSQL = ""   
    Next
    Response.Redirect("SCRIPT_NAME")
end if
%>

<html>
<head><title>Ændre sortering af linkkategorier</title>

<script language="JavaScript"> <!--

var sel;
var selo;

function checkSel ( frm ) {
  sel  = frm.model.selectedIndex;
  selo = frm.model.options;
  if ( 0 > sel ) {
    alert( "der skal vælges en kategori først" );
    return false;
  };
  return true;
}; //end checkSel ( Form object ) -> boolean

function checkDest ( dest ) {
  if ( 0>dest || dest >= selo.length ) {
    alert( "Kategorien kan ikke flyttes derhen" );
    return false;
  };
  return true;
}; //end checkDest ( integer ) -> boolean

function ombyt ( fra, til ) {
  var tmpTxt      = selo[fra].text;
  selo[fra].text  = selo[til].text;
  selo[til].text  = tmpTxt;
  var tmpVal      = selo[fra].value;
  selo[fra].value = selo[til].value;
  selo[til].value = tmpVal;
  return til;
}; //end ombyt ( integer, integer )

function flytOp( frm ) {
  if ( checkSel( frm ) && checkDest( sel-1 ) )
      frm.model.selectedIndex = ombyt( sel, sel-1 );
}; //end flytOp( form object )

function flytNed( frm ) {
  if ( checkSel( frm ) && checkDest( sel+1 ) )
      frm.model.selectedIndex = ombyt( sel, sel+1 );
}; //end flytNed( form object )

function gemSortering ( frm ) {
  var skj = "";
  selo = frm.model.options;
  for (var i=0; selo.length>i; i++ )
      skj += "," +selo[i].text;
  frm.skjultFelt.value = skj.substring(1);
  return true;
}; //end gemSortering ( form object )

// -->  </script>
<link rel="stylesheet" type="text/css" href="css/svj.css">
 
</head>
<body>

<p align=center>Kategorierne er vist i den rækkefølge de bliver præsenteret i dropdownmenuen.<br>
Du kan ændre rækkefølgen ved at markere kategorien og trykke 'flyt op'/'flyt ned'.<br>
Når du er tilfreds gemmer du rækkefølgen ved at trykke 'Gem'.</p>

<%
strSQL = "SELECT * from linkkat ORDER BY sortering"
set rs = conn.execute(strSQL)
%>

<p><form name="sfrm" action="" onsubmit="return gemSortering(this);" method=post>
<table border=0 align=center>
  <tr>
    <td>
        <select name="model" size=15>
<!--  indsæt options med asp eller med håndkraft.  -->
<%
   
    Do while not rs.eof
        Response.Write "<option>" & rs("linkkategori") & "</option>"
        rs.movenext
   
    loop
%>
        </select></p>
    </td>
    <td>&nbsp;&nbsp;&nbsp;</td>
    <td>
        <p><input type='button' value='flyt op' onclick='flytOp(this.form)'><br><br>
          <input type='button' value='flyt ned' onclick='flytNed(this.form)'></p>

        <p><input type='submit' value='Gem'>
          <input type='hidden' name='skjultFelt' value=''></p>
    </td>
  </tr>
</table>
</form>

</body>
</html>

<!--#include file="close.asp"-->
Avatar billede svjensen Nybegynder
31. maj 2003 - 11:52 #4
Det virker delvist.
Jeg kan i DB se at den skriver ændringerne, men når den redirecter/reloader, får jeg en besked om at siden ikke kunne findes (HTTP 404 - Filen blev ikke fundet).

Er det fordi du forventer, at jeg erstatter "SCRIPT_NAME" med noget andet? og i givet fald; hvad?

Har du i øvrigt et forslag til hvordan jeg nemt kopierer kode fra eksempelvis dit svar til min editor, uden at skal redigere det hele igennem for at indsætte fx < og > i stedet for koderne for det?
Avatar billede eagleeye Praktikant
31. maj 2003 - 12:53 #5
Prøv at slå denne fra i IE, så skulle du gerne få en bedre fejl kode/beskrivelse:
funktioner -> internetindstillinger -> avanceret -> fjern kryds i "vis meddelelse om uskadelige http-fejl"

Ved at copy/paste det ind i notepad først og så copy/paste fra notepad ind i din editor. Eller Paste Special -> As HTML code
Avatar billede svjensen Nybegynder
31. maj 2003 - 16:00 #6
Nu får jeg følgende:

"HTTP Error 404
404 Not Found

The Web server cannot find the file or script you asked for. Please check the URL to ensure that the path is correct.

Please contact the server's administrator if this problem persists."


I adressefeltet står der: http://svjensen/SCRIPT_NAME
Hvor svjensen er min localhost.
Filen jeg arbejder med hedder test1.asp.
Avatar billede eagleeye Praktikant
31. maj 2003 - 20:26 #7
ARh prøv at rette denne linje:

Response.Redirect("SCRIPT_NAME")

Til:

Response.Redirect(Request.ServerVariables("SCRIPT_NAME"))
Avatar billede svjensen Nybegynder
01. juni 2003 - 10:04 #8
Det hjalp. Jeg takker.

Hvorfor egentlig vælge:
'Response.Redirect(Request.ServerVariables("SCRIPT_NAME"))'

fremfor at loade siden vha.:
Response.Redirect("test1.asp")

Giver det nogle fordele jeg ikke lige kan gennemskue?
Avatar billede eagleeye Praktikant
01. juni 2003 - 10:30 #9
Det givre sådan set det samme som at skrive, så der er ikke noget i vejen for at skrive, måske er det enda hurtigere for man skal ikke først hendte det i ServerVariables.:

Response.Redirect("test1.asp")

Hvis man engang ændre filnavnet så behøver man ikke ændre det i den linje ved at skrive:
Response.Redirect(Request.ServerVariables("SCRIPT_NAME"))
Avatar billede svjensen Nybegynder
01. juni 2003 - 13:37 #10
Jeg er happy med det svar jeg har fået, og har derfor også givet point.
Men jeg vil sætte pris på om du gider hjælpe mig med en enkelt ting mere.

Jeg kan nemlig ikke få ovenstående til at loade i en anden frame end standarden. I mit aktuelle tilfælde ønsker jeg at loade siden i rammen 'menu', mens standard er 'main'.

Jeg håber, at du gider hjælpe.

Søren
Avatar billede svjensen Nybegynder
01. juni 2003 - 13:39 #11
Jeg skal måske lige tilføje, at jeg ikke er interesseret i at de øvrige frames ændres. De skal altså forblive på den side, de nu en gang er på.
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