Avatar billede krel Nybegynder
14. juni 2008 - 22:43 Der er 26 kommentarer

UPDATE hvorfor virker det ikke?

Hjæææææææææææææææææææææææælp!

Er ved at blive helt irreteret over ikke at kunne får det her update til at virke - det er som den sletter querystring'en når jeg submitter siden?

Her lidt kode at kigge på:
li 71. <form action="angiv.asp?kamp=<%=request.querystring("kamp")%>" method="post" name="angiv">
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/fpdb/kongeloge.mdb")
li.75.Set rs=Conn.Execute("select * from [EM_KAMPE] where kamp = "&request.querystring("kamp")&"")
%>
<table border="0" width="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td align="center" width="150px"><p align="right"><%=rs("hjemmehold")%></td>
        <td align="center"> <input name="hjemmal" size="2"></td>
        <td align="center">-</td>
        <td align="center"> <input name="udemal" size="2"></td>
        <td align="center" width="150px"><p align="left"><%=rs("udehold")%></td>
    </tr>
</table>
<%
strhje = request.form("hjemmal")
strude = request.form("udemal")
if strhje > strude then strresul = "1"
if strhje < strude then strresul = "2"
if strhje = strude then strresul = "x"
Conn.Close
Set Conn = Nothing
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/fpdb/kongeloge.mdb")
Set rs=Conn.Execute("UPDATE [EM_KAMPE] SET [hjemmal] = "&strhje&", [udemal] = "&strude&", [res] = "&strresul&" , [done] = 1 WHERE [kamp] = "&request.querystring("kamp")&"")
Response.Redirect "euro2008_copy(1).asp"
Conn.Close
Set Conn = Nothing
%>
<p align="center"><a href="java script: document.angiv.submit();">INDSÆT RESULTAT AF KAMPEN!</a></p>
</form>

Ved ikke helt om det med at først åbne en db-forbindelse for at trække data ud og så lukke den igen for at åbne igen for at opdatere indhold i db er den rigtige måde at gøre det på men har virket før....

og så os lige fejlen self:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'kamp ='.

/dokumenter/angiv.asp, line 75

mvh.
Kristian
Avatar billede erikjacobsen Ekspert
14. juni 2008 - 23:06 #1
request.querystring("kamp") er tom
Avatar billede krel Nybegynder
15. juni 2008 - 12:48 #2
ja det kan jeg så godt se den siger....

men hvorfor er den det? når jeg på linket til denne side har angiv.asp?kamp=<%=rs("kamp")%> og at der kommer til at stå fx. ../../angiv.asp?kamp=9 i URL når så jeg trykker på submit bliver angiv kørt uden altså kun angiv.asp...

kan ikke lige se hvordan det kan være at request.querystring 'taber' kamp når der submittes...
Desuden er den der jo når siden indlæses ellers ville jeg jo ikke kunne trække de to hold ud af databasen hvor kamp = request.querystring("kamp")

...

link til siden:
http://www.tourdefoxdecarvalho.dk/dokumenter/angiv.asp?kamp=9

mvh.
Kristian
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 12:59 #3
Den siger da også noget andet nu.
Avatar billede krel Nybegynder
15. juni 2008 - 13:10 #4
arh ja en fejl i min update linie, men det forstår jeg heller ikke for har blot slette noget i head for at man kan markere på siden ellers intet ændret...
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 13:17 #5
Hvis der er fejl i UPDATE-sætningen, må du hellere skrive den ud så du kan se hvad der står i den. Access har altid været kendt for at drille udviklere, ved ikke at fortælle hvad der er galt.
Avatar billede krel Nybegynder
15. juni 2008 - 13:17 #6
her er min linie 96:

Set rs=Conn.Execute("UPDATE [EM_KAMPE] SET [hjemmal] = "&strhje&", [udemal] = "&strude&", [res] = "&strresul&", [done] = 1 WHERE [kamp] = "&request.querystring("kamp")&"")

Det jeg gerne ville ende med var at posterne,
- hjemmal
- udemal
- done
blev opdatere i tabellen EM_KAMPE hvor kamp var = kamp fra querystrig

( man kommer fra siden http://www.tourdefoxdecarvalho.dk/dokumenter/euro2008_copy(1).asp ) og her bruges kamp fra listen.

Hvad går galt - syns altid jeg har prob lige specielt med update ;(
Avatar billede krel Nybegynder
15. juni 2008 - 13:19 #7
^^

og så også posten
- res
den skal også opdateres....
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 13:30 #8
Du har nu mange andre problemer med din kode, men det kommer vi måske til ;)

Men hvad med at få udskrevet din update-sætning, så du kan se hvad der er galt?
Avatar billede krel Nybegynder
15. juni 2008 - 13:35 #9
udskrive? er ikke den store programør, roder blot lidt så hvordan udskriver man sin update??
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 14:26 #10
Og alligevel laver du kode, du lægger på nettet, vidt åben for SQL-injections ... ?
Hvad med at lære det først?

Men udskrift er nu ret nemt:

sql="UPDATE [EM_KAMPE] SET [hjemmal] = "&strhje&", [udemal] = "&strude&", [res] = "&strresul&", [done] = 1 WHERE [kamp] = "&request.querystring("kamp")&""
response.write sql & "<br>"
Set rs=Conn.Execute(sql)
Avatar billede krel Nybegynder
15. juni 2008 - 14:33 #11
SQL-injections ??
- bliver jo nød til at starte et sted.. desuden er det jeg laver hverken super hemmeligt eller noget nogen betaler i dyre domme for at få lavet det er ganske enkelt bare sjob og ballade...

med hensyn til udskrift så skriver den jo are lige det der star i koden PÅNÆR de ting der skal hentes fra form'sne den har request.querystring med....
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 14:38 #12
Jo, men, det jeg ikke forstår: hvorfor så ikke starte med at finde et sted, der beskriver hvordan man skal gøre?

Og mht til udskrift: Nemlig! Hvad skriver den så?
Avatar billede krel Nybegynder
15. juni 2008 - 14:50 #13
Den skriver dette:

UPDATE [EM_KAMPE] SET [hjemmal] = , [udemal] = , [res] = x, [done] = 1 WHERE [kamp] = 15

altså har den querystring med... ?
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 14:53 #14
Men hvad så med de andre værdier. Hvorfor er de tomme?

Har du tænkt på at du laver 2 ting på samme tid:

1) Viser din <form>
2) Og reagerer som om det bliver trykket på submit

?
Avatar billede krel Nybegynder
15. juni 2008 - 15:01 #15
ja den skal jo hente det fra de to inputs - derfor tom.

MEN det spørg jeg faktisk også om i mit spm *mener jeg.

men hvordan skal man ellers først hente data fra db'en og så opdatere db'en over flere sider??

sådan at submit evt. linke til opret og så man puttede form-resultater i en querystring ala opret.asp?kamp="&request.querystring("kamp")&"&hjemmal="&request.form("hjemmal")&"&udemal="&request.form("udemal")&"&res="&strresultat&"

og så på opret.asp smide det i db'en (UPDATE)

???
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 15:06 #16
Det var da en mulighed - du overfører blot som i dit eksempel heropppe foroven stadig indtastede værdier med method "post" og skal aflæse dem med request.form.

Det du skal tænke på, er at hele din .asp side kører færdig, før brugeren for den at se. Dvs. du laver i dit eksempel her både en SELECT og en UPDATE (hvis den virkede), før brugeren kan skrive noget.

Det holder ikke, vel?
Avatar billede krel Nybegynder
15. juni 2008 - 15:11 #17
ok når du siger færdig så mener du hente, skrive, opdatere eller slette inden brugere for noget som helst at se (inden men begynder at HENTE fra db'en)..

mht. opret.asp så siger man stadig reuest.form i stedet for request.qerystring ved fx. hjemmal som er en af de input der er?

dvs. form kan huskes på tværs af asp sider eller hvordan? så skal den måske slet ikke med i querysting??
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 15:16 #18
Færdig? Alle din vbscript-kode udføres, inden brugeren ser resultatet.
Avatar billede krel Nybegynder
15. juni 2008 - 15:29 #19
ok.
^^
du skrev tidligere jeg havde mange andre problemer med min kode ????
Avatar billede krel Nybegynder
15. juni 2008 - 16:05 #20
arh. hvordan er det man slår ie til at vise hele fejl-meddelser i stedet for den hvor der bare står fejl 500 intern serverfejl (IKKE egne fejlsider, men sider hvor man kan se detaljer)

??
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 16:21 #21
Jeg kender ikke noget til IE - I Firefox kan du se fejlene i fejlkonsollen.

Men du kan jo vise hvad du har nu, så kan vi se om vi kan forbedre det lidt.
Avatar billede krel Nybegynder
15. juni 2008 - 16:47 #22
ok først angiv.asp:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/fpdb/kongeloge.mdb")
Set rs=Conn.Execute("select * from [EM_KAMPE] where kamp = "&request.querystring("kamp")&"")
strhje = request.form("hjemmal")
strude = request.form("udemal")
if strhje > strude then strresul = "1"
if strhje < strude then strresul = "2"
if strhje = strude then strresul = "x"
%>
<form action="opret.asp?kamp=<%=request.querystring("kamp")%>&res=<%=strresul%>" method="post" name="angiv">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td align="center" width="150px"><p align="right"><%=rs("hjemmehold")%></td>
        <td align="center"> <input name="hjemmal" size="2"></td>
        <td align="center">-</td>
        <td align="center"> <input name="udemal" size="2"></td>
        <td align="center" width="150px"><p align="left"><%=rs("udehold")%></td>
    </tr>
</table>
<p align="center"><a href="java script: document.angiv.submit();">INDSÆT RESULTAT AF KAMPEN!</a></p>
</form>
<%
Conn.Close
Set Conn = Nothing
%>

og så har jeg lavet opret.asp som ren asp ingen html-kode:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/fpdb/kongeloge.mdb")
strhjemmal = (Trim(Replace(request.form("hjemmal"),"'","''" )))
strudemal = (Trim(Replace(request.form("udemal"),"'","''" )))
strresultat = request.querystring("res")
sql="UPDATE [EM_KAMPE] SET [hjemmal] = "&strhjemmal&", [udemal] = "&strudemal&", [res] = "&strresultat&", [done] = 1 WHERE [kamp] = "&request.querystring("kamp")&""
Set rs=Conn.Execute(sql)
Response.whrite "sql"
Conn.Close
Set Conn = Nothing
%>
Avatar billede erikjacobsen Ekspert
15. juni 2008 - 16:59 #23
Den der replace hjælper sædvanligvis på det med sql-injection. Men de to felter er talfelter, ikke - du bør kontrollere at det et tal (et antal cifre).

Men request.querystring("res") er en streng, ikke? Den skal have en replace. Men værdien skal vel også have '....' omkring i SQL-strengen.

Det hedder ikke Response.whrite

Du skal vel afslutte nummer 2 med en response.redirect, så brugeren kan se at der sker noget.

Hvorfor har du noget med request.form i den første?
Avatar billede krel Nybegynder
15. juni 2008 - 17:33 #24
arh nu tror jeg at jeg ved hvor du vil hen med det der injection.
sådan at der kommer tal i tal-felter i db'en og tekst i tekst osv. osv. har set her på E at mange har en side der tjekker alle tyer felter og så includer de den på alle de sider de har med en eller anden form for input ????

response.redirect self. har den også været men ved ikke hvorfor jeg ville prøve det med write.... *underligt*

request.form i den første bruger jeg til at lave strresultat
- men hvis der findes en anden smartere måde??

det to input er jo henholdsvis hjemmehold - udehold så bruger dette til at lave stilling 1 / x / 2 og så vil jeg proppe dette i db'en...
Avatar billede krel Nybegynder
16. juni 2008 - 19:02 #25
fik det hele til at virke så super tak for din tid erikjacobsen.

svar - point?
Avatar billede erikjacobsen Ekspert
16. juni 2008 - 21:15 #26
Nej tak, samler ikke.
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