/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Update Database via form.
Fra : neon


Dato : 09-06-03 11:51

Nu har jeg læst tutorial'en med .asp igennem, og nu ville jeg
prøve at skrive et script hvor man ved hjælp af nogle forms kunne
updatere sin database.

Den melder ikke fejl, men den vil til gengæld heller ikke
updatere, som jeg tror er pga. en del manglende koder.

I må ikke spørge mig hvorfor jeg har skrevet det sådan, for jeg
ved det faktisk ikke selv

Her er koden:

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

strSQL = "Select * from index"

Set q = Conn.Execute(strSQL)
%>

<form method="post" action="adm2.asp" name="rediger">
<input type="text" name="dato" size="83" value="<%Response.Write
q("dato")%>">
<textarea name="nyhed" wrap="virtual"><%Response.Write
q("text")%></textarea>
<input type="text" name="link" size="100" value="<%Response.Write
q("link")%>">
<input type="text" name="url" size="100" value="<%Response.Write
q("url")%>">
<center><input type="submit" value="gem?">
</form>

<%

z = Request.Form("z")

strSQL = "Update index Set dato='" & dato & "', text='" & text &
"', link= '" & link & "' Where ID=" & z

Conn.Close
Set Conn = Nothing
%>

I min database har jeg koloner som hedder; id, dato, text, link
og url. Min database navn er jo cont.mdb, og tabellen deri hedder
index.

Håber i kan hjælpe, jeg har siddet 5 timer i går for at finde
problemet, og det gik jo ikke så godt

På forhånd tak!

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jonas Schmeltz Aaber~ (09-06-2003)
Kommentar
Fra : Jonas Schmeltz Aaber~


Dato : 09-06-03 12:38

neon wrote in dk.edb.internet.webdesign.serverside.asp:
> Nu har jeg læst tutorial'en med .asp igennem, og nu ville jeg
> prøve at skrive et script hvor man ved hjælp af nogle forms kunne
> updatere sin database.

- Hvilket tutorial? HTML.dk's?! Denne nyhedsgruppe (og de andre, der
er tilgængelige fra html.dk) er IKKE html.dk's! Desværre er der
mange der misforstår dette! De er en del af usenet.

> Den melder ikke fejl, men den vil til gengæld heller ikke
> updatere, som jeg tror er pga. en del manglende koder.

Hvis den ikke melder fejl, så prøv at checke om din browser kan vise
fejl. I menuen Funktioner vælger du elementet
"Internetindstillinger..." og vælger fanebladet "Avanceret". Rul ned
til elementet "Vis meddelelser om uskadelige HTTP-fejl". Fjern
markeringen i denne's boks og luk vinduet. Opdater nu siden og se,
om der ikke skulle komme en fejlmeddelelse.

> I må ikke spørge mig hvorfor jeg har skrevet det sådan, for jeg
> ved det faktisk ikke selv
- Ja så kan det jo godt være et problem at hjælpe...


> <textarea name="nyhed" wrap="virtual"><% Response.Write q("text")
%></ textarea>
- Dette felt skal hedde "text", hvis det skal gemmes i databasen!
Og et tip:
Hvis du skal skrive "<% Response.Write xyz %>" så brug istedet
dette: <%= xyz %> - meget kortere og giver samme resultat!

> <%
>
> z = Request.Form("z")
>
> strSQL = "Update index Set dato='" & dato & "', text='" & text &
> "', link= '" & link & "' Where ID=" & z
>
> Conn.Close
> Set Conn = Nothing
> %>
- Her sker faktisk ikke særlig meget - du skriver en tekststreng, og
lukker forbindelsen til databasen (som du åbnede i første omgang da
du hentede variablen "z"). Det er derfor der ingen fejlmeddelelse
kommer. Du mangler en Execute()-kommando før der kommer noget
resultat.


Er alle tre dele på samme side (adm2.asp)?!
I såfald skal du lave en If-sætning, der tester om du opdaterer
eller skal til det.

Eks.:
<% If Request.Form("mode") = "opdater" Then
[connection åbn]
[update-del]
[connection luk]
Else
%>
[connection åbn]
[tildel variabler værdier]
[connection luk]
<form method="post">
<input type="hidden" name="mode" value="opdater">
[...]
<input type="submit">
</form>
<%
End If
%>

For ikke at optage for meget "plads" på serveren når du har en
forbindelse åben, skal du lukke den så hurtigt som muligt.
Derfor anbefaler jeg, at du tildeler nogle variabler værdierne og
derefter tilføjer til html-koden.
Eks.:
[åbn]
strNavn = q("navn")
[luk]
Response.Write "Navn: " & strNavn


Håber du kommer lidt videre....
MVH Jonas (aka Juke)

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

neon (16-06-2003)
Kommentar
Fra : neon


Dato : 16-06-03 19:17

Hej, undskyld jeg først svare nu, men pga af eksamen, og min computer
som ikke virker så godt mere kan jeg først nu.

Jeg tror jeg fattede lidt af det, men noget af det røg desværre ikke
ind.

Jeg har lavet en mere enkel database, og kun en form, bare lige for at
få det på plads, hvis jeg kan det.

Her er den kode som skulle opdatere database, men der sker ikke rigtig
noget.

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

If Request.Form("opdater") = "mode" Then

strSQL = "Select * From db01 Where id = " & Request.Querystring("id")

strSQL = "Update db01 set "
strSQL = strSQL & "content= ' " & Request.Form("opdater") & " ' "
strSQL = strSQL & " Where id = " & Request.Querystring("id") & " "

Conn.Execute(strSQL)

Else
%>

<form action="edit.asp" method="post">
<input type="hidden" name="opdater" value="mode">
<input type="text" name="opdater">
<input type="submit" value="Gem">
</form>

<%
End If
%>

Håber nogen kan hjælpe mig lidt videre.

På forhånd tak!

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Torben Brandt (16-06-2003)
Kommentar
Fra : Torben Brandt


Dato : 16-06-03 19:37

neon wrote:
> Her er den kode som skulle opdatere database, men der sker ikke rigtig
> noget.

<snip : asp-opdateringskode>

> <form action="edit.asp" method="post">
> <input type="hidden" name="opdater" value="mode">
> <input type="text" name="opdater">
> <input type="submit" value="Gem">
> </form>

Det fungerer ikke fordi både hidden- og text-feltet hedder det samme.
Begge værdier bliver godt nok sendt med, men når du så skriver
Request.Form("opdater") så er det et array med begge værdier. Derfor
kommer du aldrig ind i IF-sætningen.
Prøv at bruge to forskellige felt-navne.

> strSQL = "Select * From db01 Where id = " & Request.Querystring("id")
Hvad skal ovenstående linie bruges til. Den bliver jo straks overskrevet
af nedenstående. Har dog ingen betydning.

En anden lille fejl er i
> strSQL = "Update db01 set "
> strSQL = strSQL & "content= ' " & Request.Form("opdater") & " ' "
> strSQL = strSQL & " Where id = " & Request.Querystring("id") & " "
I din form sender du ikke noget id med. Der skal vel også være et
text-felt med navnet id (og så skal du skrive Request.Form("id") i
stedet for Request.QueryString("id")).
Dette ville give en SQL-syntax-fejl, hvis du kom ind i If-sætningen, så
husk også at rette den :)

Torben


neon (16-06-2003)
Kommentar
Fra : neon


Dato : 16-06-03 20:32

> En anden lille fejl er i
> > strSQL = "Update db01 set "
> > strSQL = strSQL & "content= ' " & Request.Form("opdater") & " ' "
> > strSQL = strSQL & " Where id = " & Request.Querystring("id") & " "
> I din form sender du ikke noget id med. Der skal vel også være et
> text-felt med navnet id (og så skal du skrive Request.Form("id") i
> stedet for Request.QueryString("id")).

Men, jeg skal ikke selv bestemme "id". Jeg har en anden side, hvor du
trykker på den pågælende nyhed, hvor den så sender en videre til denne
edit.asp. Der skulle man så med denne ene form bare ændre indholdet, uden
at indtaste id nummer. Derfor prøvede jeg med QueryString.

Dvs. at edit.asp skal vide hvilken id den skal rette via den forgående
side. Ved ikke om det er forklaret godt nok. Håber jeg.

På forhånd tak!

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (16-06-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 16-06-03 21:08

neon skrev:

> Men, jeg skal ikke selv bestemme "id". Jeg har en anden side,
> hvor du trykker på den pågælende nyhed, hvor den så sender en
> videre til denne edit.asp. Der skulle man så med denne ene
> form bare ændre indholdet, uden at indtaste id nummer. Derfor
> prøvede jeg med QueryString.

Brug et skjult felt i stedet:

<input type="hidden" name="id" id="id" value="<%=
Request.Querystring("id") %>">

> Dvs. at edit.asp skal vide hvilken id den skal rette via den
> forgående side.

Så kan du linke til edit.asp med id i querystringen (fx
edit.asp?id=42). Når du submitter formen på edit.asp følger id-
nummeret med fordi det er gemt som et nyt formfelt.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

neon (17-06-2003)
Kommentar
Fra : neon


Dato : 17-06-03 12:51

Okay, jeg er kommet lidt videre, men mangler bare lige finalen.
Jeg tror godt jeg ved hvad der er galt, men har ikke lige nogen
ide om hvordan jeg får det fixet. De jeg havde viste sig at være
ubruglige. Men her er mit script;

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

If Request.Form("opdater") = "mode" Then

strSQL = "Update db01 set "
strSQL = strSQL & "content= ' " & Request.Form("opdater") & " ' "
strSQL = strSQL & " Where id = " & Request.Form("id")

Conn.Execute(strSQL)

Else
%>

<form action="edit.asp" method="post">
<input type="hidden" name="id" id="id" value="<%=
Request.Querystring("id") %>">
<input type="text" name="opdater" value="mode">
<input type="submit" value="Gem">
</form>

<%
End If
%>

Den vil godt opdatere det nu, men kun med "mode". Det er nok
fordi der står mode ved inputten, og foroven, men jeg har ingen
ide om hvad der skal stå.

Håber i stadig gider at hjælpe, det var været en stor hjælp!

Tak på forhånd.

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

neon (18-06-2003)
Kommentar
Fra : neon


Dato : 18-06-03 15:19

&gt; If Request.Form("opdater") = "mode" Then

Dette skal laves om til ;

If Request.Form("opdater") = <> "" Then

Så virker det. Fandt selv ud af det :)

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177551
Tips : 31968
Nyheder : 719565
Indlæg : 6408826
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste