Avatar billede christina137 Nybegynder
19. august 2008 - 08:56 Der er 21 kommentarer og
1 løsning

Update i sql med ASP + FCKeditor

I efterfølgene koder skulle jeg på hjemmesiden kunne gå ind i CMS-systemet - trykke på linket "Shop info" og et emne til redigering.

Jeg kan godt nå så langt, men FCKeditoren er bare blank - den hiver ikke oplysningerne fra databasen.

index.asp inkluderer bl.a. cms_index.asp og denne inkluderer bl.a. siderne cms_info.asp og denne side: info_edit.asp

<%
If Request.ServerVariables("CONTENT_LENGTH") <> 0 then
    i_id = Request.Form("iid")
    i_over = Request.Form("iover")
    i_txt = Request.Form("itxt")
   
    sqlU = "UPDATE info SET iover='"&iover&"', itxt='"&i_txt&"' WHERE iid="&i_id&""
    Conn.Execute(sqlU)
   
    Response.Redirect("info_edit.asp")
End if

infoid = Request.QueryString("infoid")
Sqlinfo = "SELECT * FROM info ORDER BY i_over ASC"
set rsinfo = Conn.Execute(sqlinfo)
%>
    <form method="post" action="info_edit.asp" name="opdaterinfo">
        <%=isHidden%>
        Overskrift: <input type="text" name="overskrift" value="<%=headerValue%>" />
        <%
        'Dim oFCKeditor
        Set oFCKeditor = New FCKeditor
        oFCKeditor.BasePath = "fckeditor/"
        oFCKeditor.Value = ""&contentValue&""
        oFCKeditor.Toolbarset = "Basic"
        oFCKeditor.Width = "430"
        oFCKeditor.Create "itxt"
        %>
        <br /><br />
        <input type="submit" value="<%=btnSend%>" />
    </form>

Jeg er ikke så stærk i koder, så jeg ved godt at fejlen sikkert er indlysende, men jeg kan ikke finde den.
Avatar billede softspot Forsker
19. august 2008 - 09:03 #1
Jeg vil mene du også skal sørge for at sætte teksten i FCKEditor-objektet. Jeg tror det er noget med

        oFCKeditor.Text = rsinfo("itxt")

Hvis det ikke fungerer, så prøv

        oFCKeditor.Value = rsinfo("itxt")
Avatar billede christina137 Nybegynder
19. august 2008 - 09:11 #2
Jeg får bare denne reaktion:

Fejltype:
ADODB.Recordset (0x800A0CC1)
Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
/eksamenstest/byskov/cms/info_edit.asp, line 24

- Det er uanset hvilket forslag jeg bruger.
Avatar billede softspot Forsker
19. august 2008 - 09:15 #3
Det lyder umiddelbart som om tabellen ikke indeholder et felt der hedder itxt, men jeg synes da du opdaterer feltet i din UPDATE-sætning (ved postback), så det forstår jeg ikke helt... Kan du vise koden omkring den linie der fejler (og gerne markere den linie der fejler)?
Avatar billede christina137 Nybegynder
19. august 2008 - 09:37 #4
linie 24 (markeret med -- --):

        'Dim oFCKeditor
        Set oFCKeditor = New FCKeditor
        oFCKeditor.BasePath = "fckeditor/"
        -- oFCKeditor.Value = rsinfo("itxt") --
        oFCKeditor.Toolbarset = "Basic"
        oFCKeditor.Width = "430"
        oFCKeditor.Create "itxt"

Linie 28 (markeret med -- --):

        'Dim oFCKeditor
        Set oFCKeditor = New FCKeditor
        oFCKeditor.BasePath = "fckeditor/"
        oFCKeditor.Value = ""&contentValue&""
        oFCKeditor.Toolbarset = "Basic"
        oFCKeditor.Width = "430"
        oFCKeditor.Create "itxt"
            -- oFCKeditor.Text = rsinfo("itxt") --
Avatar billede softspot Forsker
19. august 2008 - 09:43 #5
Hvordan ser info-tabellen ud (kan du vise tabellens felter og type)?

Det er i øvrigt Value der er den korrekte egenskab på FCKEditor-objektet, når du skal tildele teksten:

        oFCKeditor.Value = rsinfo("itxt")

og den linie skal gerne fyres af inden kaldet til oFCKeditor.Create (men muligvis efter den andre indstillinger for editoren).
Avatar billede christina137 Nybegynder
19. august 2008 - 09:52 #6
Har prøvet seneste forslag lige før Create - men den melder samme fejl.

Sql-databasen hedder: galleri

tabellen hedder: info

felterne hedder (i nævnte rækkefølge):
i_id int(11) nej
i_over VarChar(50) ja
i_txt longtext ja
Avatar billede w13 Novice
19. august 2008 - 09:54 #7
Hvis der er underscore, skal du vel ikke bruge rsinfo("itxt") men rsinfo("i_txt") ?
Avatar billede softspot Forsker
19. august 2008 - 09:58 #8
Ja, der skal naturligvis være underscore i i_txt, hvis det er det feltet hedder i databasen. Jeg tog udgangspunkt i at din UPDATE fungerede... (det kan du så nu konkludere, at den ikke gør, da feltnavnene ikke stemmer overens med de feltnavne du har i tabellen).
Avatar billede softspot Forsker
19. august 2008 - 09:59 #9
Din update skal altså rettes til:

    sqlU = "UPDATE info SET i_over='"&iover&"', i_txt='"&i_txt&"' WHERE i_id="&i_id&""

og din FCKeditor-initiering skal se således ud:

        'Dim oFCKeditor
        Set oFCKeditor = New FCKeditor
        oFCKeditor.BasePath = "fckeditor/"
        oFCKeditor.Toolbarset = "Basic"
        oFCKeditor.Width = "430"
        oFCKeditor.Value = rsinfo("i_txt")
        oFCKeditor.Create "itxt"
Avatar billede christina137 Nybegynder
19. august 2008 - 10:04 #10
Har prøvet at rykke kodelinien op og ned uden held.

Her er siden cms_info.asp (hvis fejlen nu skulle ligge her):

<!-- #include file="../includes/dbconnect.asp" -->
<h2>Shop info</h2>

<a href="cms_index.asp?page=info&act=shop_info">Shop info</a><br /><br />

<%
if request.QueryString("act") = "shop_info" then
    sql = "SELECT * FROM info ORDER BY i_id ASC"
    set rs = Conn.Execute(sql)
end if
%>

<table>
    <%
    if request.QueryString("act") <> "" then
    do until rs.eof%>
        <tr>
            <td>
                <a href="?page=info_edit&iid=<%=rs("i_id")%>&action=edit"><%=rs("i_over")%></a>
            </td>
            <td>
                <a href="?page=info_edit">Ny</a> - <a href="?page=info_edit&iid=<%=rs("i_id")%>&action=del">Slet</a>
            </td>
        </tr>
    <%rs.movenext
    loop
    end if
    %>
</table>
Avatar billede softspot Forsker
19. august 2008 - 10:06 #11
Du bør i øvrigt udføre et minimum af validering på de felter som postes til siden, så du undgår (tilfældig eller overlagt) SQL-injection. Dvs. du skal mindst udskifte apostroffer med dobbelt apostroffer i tekstfelter og du bør ligeledes kontrollere at der rent faktisk er talværdier i dine numeriske felter. Eksempelvis:

    i_id = Request.Form("iid")
    i_over = Request.Form("iover") & "" ' HEDDER DENNE IKKE OVERSKRIFT???
    i_txt = Request.Form("itxt") & ""

    if isnumeric(i_id) then
      i_over = replace(i_over, "'", "''")
      i_txt = replace(i_txt, "'", "''")

      sqlU = "UPDATE info SET i_over='"&iover&"', i_txt='"&i_txt&"' WHERE i_id="&i_id&""
      Conn.Execute(sqlU)
   
      Response.Redirect("info_edit.asp")
    else
      Rseponse.Write("Der er fejl i data!")
      Response.End
    end if
Avatar billede softspot Forsker
19. august 2008 - 10:07 #12
Rettede du fejlnavnet i rsinfo??
Avatar billede christina137 Nybegynder
19. august 2008 - 10:10 #13
Overskriften bliver stadig ikke vist, men nu kan jeg se memo :-)
Avatar billede softspot Forsker
19. august 2008 - 10:14 #14
Når ud indlæser data, benytter du en variabel der hedder headervalue til at sætte værdien af overskrift...

        Overskrift: <input type="text" name="overskrift" value="<%=headerValue%>" />

hvor er denne variabel defineret og initieret??

Du kunne evt. bruge

        Overskrift: <input type="text" name="overskrift" value="<%=rs("i_over")%>" />

istedet, så tror jeg du får overskriften at se :-)
Avatar billede christina137 Nybegynder
19. august 2008 - 10:51 #15
Nu virker det næsten:

<%
If Request.ServerVariables("CONTENT_LENGTH") <> 0 then
    i_id = Request.Form("iid")
    i_over = Request.Form("iover")
    i_txt = Request.Form("itxt")
   
    if isnumeric(i_id) then
      i_over = replace(i_over, "'", "''")
      i_txt = replace(i_txt, "'", "''")   
   
    sqlU = "UPDATE info SET i_over='"&iover&"', i_txt='"&i_txt&"' WHERE i_id="&i_id&""
    Conn.Execute(sqlU)
   
    Response.Redirect("info_edit.asp")
    Response.Write("Der er fejl i Data!")
    Response.End
    end if
End if

infoid = Request.QueryString("infoid")
Sqlinfo = "SELECT * FROM info ORDER BY i_over ASC"
set rsinfo = Conn.Execute(sqlinfo)
%>
    <form method="post" action="info_edit.asp" name="opdaterinfo">
        <%=isHidden%>
        Overskrift: <input type="text" name="overskrift" value="<%=rsinfo("i_over")%>" />
        <%
        'Dim oFCKeditor
        Set oFCKeditor = New FCKeditor
        oFCKeditor.BasePath = "fckeditor/"
        oFCKeditor.Toolbarset = "Basic"
        oFCKeditor.Width = "430"
        oFCKeditor.Value = rsinfo("i_txt")
        oFCKeditor.Create "itxt"
        %>
        <br /><br />
        <input type="submit" value="<%=btnSend%>" />
    </form>

Men den vælger hver gang 3. id i databasen.
Avatar billede christina137 Nybegynder
19. august 2008 - 10:52 #16
Der gik lige lidt tid, da vi mistede netforbindelse midlertidigt.
Avatar billede w13 Novice
19. august 2008 - 11:00 #17
Det er vel fordi den sorterer med: ORDER BY i_over ASC
Dvs. vælger den overskrift, der kommer først i alfabetet.
Avatar billede softspot Forsker
19. august 2008 - 11:08 #18
Ja, du skal nok udpege den række i databasen du ønsker at vedligeholde (dvs. det ville jeg jo synes var mest logisk i en vedligeholdelsessituation - men jeg kender jo ikke kravene til din formular)...

Jeg ville forvente en SELECT der så således ud:

sqlinfo = "SELECT * FROM info WHERE id = " & infoid
Avatar billede softspot Forsker
19. august 2008 - 11:09 #19
(når man altså vælger at se stort på validering (HVILKET MAN ALDRIG BØR!)... :-)
Avatar billede christina137 Nybegynder
19. august 2008 - 11:37 #20
Det hele er kommet til at se sådan ud og det virker.

<%
If Request.ServerVariables("CONTENT_LENGTH") <> 0 then
%>
<!-- #include file="../includes/dbconnect.asp" -->
<%
    i_id = Request.Form("iid")
    i_over = replace(Request.Form("iover"),"'","''")
    i_txt = replace(Request.Form("itxt"),"'","''")   
   
    sqlU = "UPDATE info SET i_over='"&i_over&"', i_txt='"&i_txt&"' WHERE i_id="&i_id&""
    Conn.Execute(sqlU)
   
    Response.Redirect("cms_index.asp?page=info&act=shop_info")
End if

infoid = Request.QueryString("iid")
Sqlinfo = "SELECT * FROM info WHERE i_id="&infoid&""
set rsinfo = Conn.Execute(sqlinfo)
%>
    <form method="post" action="info_edit.asp" name="opdaterinfo">
        <input type="hidden" name="iid" value="<%=infoid%>" />
        Overskrift: <input type="text" name="iover" value="<%=rsinfo("i_over")%>" />
        <%
        'Dim oFCKeditor
        Set oFCKeditor = New FCKeditor
        oFCKeditor.BasePath = "fckeditor/"
        oFCKeditor.Toolbarset = "Basic"
        oFCKeditor.Width = "430"
        oFCKeditor.Value = rsinfo("i_txt")
        oFCKeditor.Create "itxt"
        %>
        <br /><br />
        <input type="submit" value="<%=btnSend%>" />
    </form>

Send et svar eller hvad det nu kræver, for at jeg kan give dig point - de er velfortjent - tak for hjælpen :-)
Avatar billede softspot Forsker
19. august 2008 - 11:45 #21
Velbekomme :)
Avatar billede softspot Forsker
19. august 2008 - 13:41 #22
Tak for point :)
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