[ASP] Update SQL wordt niet uitgevoerd?

Pagina: 1
Acties:
  • 115 views sinds 30-01-2008
  • Reageer

  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Onderstaande code lijkt bij mij niet te functioneren: er wordt niets geupdate! deblock heeft gewoon een bestaande waarde.

Heeft iemand enig idee waar de fout zit?

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<%
if(request("deblock") <> "") then 
set deBlock = Server.CreateObject("ADODB.Command")
deBlock.ActiveConnection = MM_urs_STRING
deBlock.CommandText = "UPDATE pollder.urs_gebruikers  SET active = 0 WHERE gebruiker_id = " + request.QueryString("deblock")
deBlock.CommandType = 1
deBlock.CommandTimeout = 0
deBlock.Prepared = true
deBlock.Execute()
Response.Buffer = true
Response.Redirect( "gebruikers_index.asp" )
end if
%>

[ Voor 18% gewijzigd door rik op 03-06-2003 20:33 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Dr's is dus echt helemaal niets te zeggen met deze informatie. Kortom; zelf debuggen.
  • Gaat hij uberhaupt de loop in.
  • Waarom gebruik je soms Request en soms Request.Querystring.
  • Waarom wil je een waarde optellen bij een string?
  • Hoe ziet je connectionstring er uit.
  • "Hoe doet het niet"; m'n glazen bol is kapot, helaas. Definieer dus: "Wat het niet doet". Foutmeldingen; er komt gewoon helemaal niets op het scherm, etc.
  • Hoe ziet je SQL statement er uit als je deze op het scherm print?
  • Wat heb je zelf allemaal geprobeerd; enig idee wat je zelf aan het doen bent of baseer je je puur op wat Macromedia voor je bakt?

[ Voor 32% gewijzigd door gorgi_19 op 03-06-2003 20:52 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • xtra
  • Registratie: November 2001
  • Laatst online: 13-08 11:30
Laat maar :)

[ Voor 88% gewijzigd door xtra op 03-06-2003 20:45 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 heeft stiekem wel je opmerking net gelezen.. ;) En vrij legitiem. Standaard staat deze(=CommandTimeOut ) op 30 seconden. Ik ben benieuwd waarom deze naar 0 moet.
CommandTimeOut Indicates how long to wait while executing a command before terminating the attempt and generating an error.
Het zou het kunnen zijn; alleen niet te zeggen zonder een error.

[ Voor 11% gewijzigd door gorgi_19 op 03-06-2003 20:51 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • xtra
  • Registratie: November 2001
  • Laatst online: 13-08 11:30
If you set the property to zero, ADO will wait indefinitely until the execution is complete.
Helaas heeft ook mijn glazen bol het begeven, maar als rik zegt dat de query alleen maar niet update zal de pagina waarschijnlijk niet 'indefinitely' wachten.

  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Even wat antwoorden dan maar :)

Ja, hij gaat zeker de loop in want de pagina redirect naar zichzelf (zonder querystring). Als ik die redirect weghaal dan functioneert het updaten nog steeds niet, en krijg ik de pagina te zien. Onderaan de pagina check ik de variabele blocked en die is dan gewoon 4: een gebruiker_id welke gewoon bestaat.

Maar zien jullie iets geks in de SQL? De block.execute() wordt toch gewoon ondersteund door IIS5?

De timeout staat op 0, omdat DreamWeaver dat doet (het is deels gegenereerde code namdelijk). Als ik het weghaal is er echter nog geen verbetering.

De Request moet inderdaad nog veranderd worden naar Request.Querystring, heb ik even over het hoofd gezien.

Ook de + is gegenereerd door dreamweaver. Maar als ik er een & van maak werkt het nog steeds niet.

Ik maak overigens gebruik van een MySQL database, via een DSN.

[ Voor 18% gewijzigd door rik op 03-06-2003 21:14 ]


  • xtra
  • Registratie: November 2001
  • Laatst online: 13-08 11:30
Debuggen dus.
  • Werkt het wel als je bij "WHERE gebruiker_id=" een vaste waarde invult in plaats van de querystring?
  • Als je de query met Response.Write op het scherm zet, ziet hij er dan uit als bedoeld?
  • Werkt die query wel vanuit Access of iets vergelijkbaars?
  • Moet je de query niet afsluiten met ';'? (Ik weet ook nooit wanneer het wel en wanneer het niet noodzakelijk is.)
En voor alle zekerheid :) : Heeft DreamWeaver niet ergens On Error Resume Next tussen gezet? En kun je wel records opvragen met de connection die je gebruikt?

deBlock.CommandTimeout en deBlock.Prepared zijn voorlopig in ieder geval niet nodig. Haal ze er dus uit om het zo simpel mogelijk te houden.

[ Voor 15% gewijzigd door xtra op 04-06-2003 09:53 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

xtra schreef op 04 June 2003 @ 09:51:
Debuggen dus.
• Werkt die query wel vanuit Access of iets vergelijkbaars?
't is MySQL waarmee hij werkt.. ;)
• Moet je de query niet afsluiten met ';'? (Ik weet ook nooit wanneer het wel en wanneer het niet noodzakelijk is.)
Neuh.. Dat heeft Access bedacht dat die achter al z'n queries een; wil hebben. Voor de rest hoeft het eik niet.

En zou je nog antwoord kunnen geven op de vraag:
"Hoe doet het niet"; m'n glazen bol is kapot, helaas. Definieer dus: "Wat het niet doet". Foutmeldingen; er komt gewoon helemaal niets op het scherm, etc.

[ Voor 29% gewijzigd door gorgi_19 op 04-06-2003 09:55 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • xtra
  • Registratie: November 2001
  • Laatst online: 13-08 11:30
gorgi_19 schreef op 04 June 2003 @ 09:54:
[...]

't is MySQL waarmee hij werkt.. ;)

[...]
Dat weet ik :) Maar met een ODBC-koppeling valt het best te doen. En anders de 'iets vergelijkbaars'.
Neuh.. Dat heeft Access bedacht dat die achter al z'n queries een; wil hebben. Voor de rest hoeft het eik niet.
Geeft Oracle ook niet net zolang lege regels totdat je ';' intikt? Maar inderdaad, het is vrijwel nooit nodig.
En zou je nog antwoord kunnen geven op de vraag:

[...]
Ja, zijn we meteen weer ontopic :)

[ Voor 6% gewijzigd door xtra op 04-06-2003 10:13 ]


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
De code lijkt niet te worden uigevoerd, in ieder geval wordt er niets geupdate. Dat is wat ie niet doet :-) Ik weet niet of ik ergens kan zien of dat er een error wordt gegeven door mysql, ik neem aan dat ik dan een error zou zien/zou moetenafvangen?

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%
if(request("block") <> "") then 

set Block = Server.CreateObject("ADODB.Command")
Block.ActiveConnection = MM_urs_STRING
Block.CommandText = "UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=" & request("block")
Block.CommandType = 1
Block.Execute()

Response.Buffer = true
Response.Redirect( "gebruikers_index.asp" )

end if
%>


Iemand die iets geks ziet aan deze code? Inderdaad het verkeerde stukje maar afgezien van block/deblock hetzelfde.

[ Voor 50% gewijzigd door rik op 04-06-2003 22:22 ]


Verwijderd

Als er zich een error voordoet zal het ASP script gestopt worden en een fourmelding gegeven worden, tenzij je 'On Error Resume Next' in je pagina hebt staan, dus controleer daar op.

Als er zich een error voordoet, kan je in het Error object informatie vinden. Als de error zich voordoet binnen je ADO objecten, dan kan je vaak nog meer error informatie vinden in de Errors collectie van je Connection object.

  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
MrX: er zit geen on error/resume code in de pagina. Overigens staat bovenstaand blok helemaal bovenaan de pagina, net na de connectie-include voor de databasekoppeling. Die koppeling werkt gewoon.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%
if(request("block") <> "") then 

set Block = Server.CreateObject("ADODB.Command")
Block.ActiveConnection = MM_urs_STRING
Block.CommandText = "UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=" & request("block")
Block.CommandType = 1

Response.Write "UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=" & request("block")
Response.End
' Block.Execute()

' Response.Buffer = true
' Response.Redirect( "gebruikers_index.asp" )

end if

* gorgi_19 is wel eens heel benieuwd naar deze code.

En heeft iemand je wel eens verteld dat je vrij gevoelig bent voor SQL Injection Attacks? :P
Andere vraag: Waarom is active opeens 1 in je statement; in je eerste statement moest deze 0 worden.

[ Voor 56% gewijzigd door gorgi_19 op 04-06-2003 22:30 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Klopt, bij een active state van 1 ben je gewoon een actieve gebruiker, is deze 0 dan ben je geblokkeerd en kan je dus niet inloggen.

Wat betreft je attack, zit wat in natuurlijk. Deze pagina kan echter alleen door de systeembeheerder worden bekeken, en is met sessies beveiligd. Je tip heeft me wel aan het denken gezet :)

Net voor de grap eens keihard een gebruiker_id gedefineerd maar dat hielp dus ook niet. Iets zegt me dat die Execute geen donder doet?

[ Voor 18% gewijzigd door rik op 04-06-2003 22:40 ]


Verwijderd

rik schreef op 04 June 2003 @ 22:25:
MrX: er zit geen on error/resume code in de pagina. Overigens staat bovenstaand blok helemaal bovenaan de pagina, net na de connectie-include voor de databasekoppeling. Die koppeling werkt gewoon.
Mogelijkerwijs zit in de include file een 'On Error Resume Next'.

Zo niet, dan is er geen Error. In dat geval vraag ik me af of de inderdaad wel binnen je IF statement komt. Probeer eens, zoals Gorgi dat aangeeft, te testen of je wel daarbinnen komt door binnen de IF iets naar het scherm te schrijven.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

rik schreef op 04 June 2003 @ 22:35:
Wat betreft je attack, zit wat in natuurlijk. Deze pagina kan echter alleen door de systeembeheerder worden bekeken, en is met sessies beveiligd. Je tip heeft me wel aan het denken gezet :)
Een beetje offtopic, maar vrij gevaarlijk; bewust bugs c.q. security leaks er in laten zitten.

Echter, stel je voor dat er een uitbouw komt, of er een andere bug in zit, welke je niet weet. Dan wordt het verhaal opeens een stuk anders. :)

Ik had je code iets aangepast; was wel benieuwd wat je nu te zien kreeg. :)

Verder nog, als tip, een kleine quote
7.1 Gebruik geen request(variabele)
Definieer altijd of je Request.Form, Request.Querystring of Request.Cookies, etc. gebruikt. Op deze wijze is er minder kans op malafide code of input die je niet verwacht.

7.2 Filter single quotes uit je input als je ze wilt gebruiken in een query

Stel je hebt de query:
“Insert into blaat (veld1) Values (‘” & Request.Form(“blaat”) & “’)”

We vullen vervolgens in, in het veld blaat: Gorgi’s Game. De query zou er dan uit zien als:
“Insert into blaat (veld1) Values (‘Gorgi’s Game’)”

en je ziet zelf al dat dit fout gaat door de single quote. Er moeten op een of andere manier zorgen dat deze dus niet meer voorkomt; dit kan door middel van escapen. Als we de ‘ vervangen door ‘’ (2x een single quote achter elkaar) dan treedt dit probleem niet meer op.

Een betere code zou dan ook zijn:
“Insert into blaat (veld1) Values (‘” & Replace(Request.Form(“blaat”),”’”,”’’”) & “’)”

[ Voor 55% gewijzigd door gorgi_19 op 04-06-2003 22:42 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Gorgi, je code geeft: UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=1

Het is zowiezo een querystring, de pagina wordt aangeroepen middels een simpele link namelijk. Om dan te gaan voorkomen dat mensen het via een post gaan benaderen lijkt me wat overdreven :) Ik zou inderdaad kunnen checken of dat het id een getal is, en af kunnen breken bij de eerste spatie (die er niet in zit).

[ Voor 66% gewijzigd door rik op 04-06-2003 22:46 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

rik schreef op 04 June 2003 @ 22:43:
Gorgi, je code geeft: UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=1
En voor deze eens rechtstreeks uit op je database, zonder tussenkomst van ASP.
Wat gebeurd er dan?

* gorgi_19 gaat toch maar een nickchange naar gorgi overwegen.. :+
Het is zowiezo een querystring, de pagina wordt aangeroepen middels een simpele link namelijk.
Mja.. 't is een risico. :) Ik geef het alleen maar aan; 't is aan jou om te kijken wat je er mee doet. :)
Ik zou inderdaad kunnen checken of dat het id een getal is, en af kunnen breken bij de eerste spatie (die er niet in zit).
IsNumeric() :P

[ Voor 39% gewijzigd door gorgi_19 op 04-06-2003 22:53 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

Gooi eens <%@ LANGUAGE="VBSCRIPT" %><% Option Explicit %> boven je pagina. Werkt veel fijner.

Is id numeriek in je DB? Anders tussen ' ' zetten of cint() doen.

Huur mij in als freelance SEO consultant!


Verwijderd

Zet voor de lol eens 'On Error Resume Next' bovenaan, en dan onder block.Execute():
Visual Basic .NET:
1
2
3
4
5
If Error.Number <> 0 Then
   Response.Write _
      "Error: " & Error.Number & _
      "; Description: " & Error.Description
End If

En zorg dat je niet geredirect wordt, want anders zie je natuurlijk niets van je foutmelding.

[ Voor 12% gewijzigd door Verwijderd op 04-06-2003 23:04 ]


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
De eerste twee regels van mijn pagina:

ASP:
1
2
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/urs.asp" -->


De id is autoincrement nummeriek inderdaad.

Ik zal de db eens met de hand benaderen inderdaad. Wat raar dat ik daar niet eerder aan gedacht heb :)
Gorgi: begrijp me niet verkeerd, meedenkers zijn altijd fijn natuurlijk :)

Update
Zojuist heb ik

UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=4

ingevoerd in Mysqladmin en die zegt: Affected rows: 0. Verder geen error.

Er is echter wel degelijk een gebruiker met gebruiker_id 4 ??

Gebruiker_id is int(4) en zoals gezegd autoincrement. Iemand die het snapt?

[ Voor 43% gewijzigd door rik op 04-06-2003 23:19 . Reden: beetje krom gecopy/past ]


  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

<% Option Explicit %>

Is wel handig, krijg je tenminste een fout melding als er een var niet bestaat of gedeclareerd is.

Hmm, schrijf je gehele update code eens opnieuw. Misschien dat je gewoon wat stoms doet, heb ik soms ook wel eens.

[ Voor 35% gewijzigd door CrashOne op 04-06-2003 23:13 ]

Huur mij in als freelance SEO consultant!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=4
ingevoerd in Mysqladmin en die zegt: Affected rows: 0. Verder geen error.
Mooi, dan weten we iig dat je ASP-code in eerste instantie goed is. Dan zit er wat geks met je database dus. :)

Nu gaan we verder testen. Doet
SQL:
1
UPDATE pollder.urs_gebruikers SET active=1

wel wat? Ook weer direct uitvoeren, zonder tussenkomst van je database.

[ Voor 8% gewijzigd door gorgi_19 op 04-06-2003 23:16 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
CrashOne: doe ik voor je :)


Dit is heel vreemd. Ik heb net

ASP:
1
UPDATE pollder.urs_gebruikers SET active=1;


gedaan en dat werkte! Sterker nog:

ASP:
1
UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=4;


werkt nu opeens wel? Iemand enig idee? Ik vind dit wat onlogisch nu :)

Verwijderd

Mental note: I shall not test UPDATE, DELETE and INSERT queries on my production database without a good roll back plan. ;)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 04 June 2003 @ 23:23:
Mental note: I shall not test UPDATE, DELETE and INSERT queries on my production database without a good roll back plan. ;)
Erhm.. Want? Brengt een beetje spanning in het leven joh! :+
En het geeft vooral een extra adrenaline stoot als je alleen weekbackups hebt.. :P

Ontopic:
Dus
SQL:
1
UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=4;

Doet het wel en
SQL:
1
UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id=4

Doet het niet?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
MrX: de database is nog niet in gebruik ;)

Gorgi_19: Eigenlijk precies andersom, tenminste indien je die ; per ongeluk vergeten bent. Dezelfde code werkte net niet, en nu opeens wel. Beetje vaag niet? Kan het zijn dat de database gelockt was ofzo? Vaagg..

  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Nu werkt het dus wel via Mysqladmin, maar niet via mn ASP.

Thought:
Kan het zijn dat Mysql alleen update als de oude waarde niet overeenkomt met de nieuwe waarde (en dus niet hoeft te updaten)? In dat geval zijn de affected rows inderdaad 0.

  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Net even getest of dat het aan de _ ligt in de gebruiker_id maar dat was het niet. Kon me iets herinneren dat ik daar ooit problemen mee had.

[ Voor 149% gewijzigd door rik op 05-06-2003 00:35 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

offtopic:
Kan je iets meer de Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif knop gebruiken om een post te editen? Nu komt het over alsof je je post steeds weer omhoog schopt. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

rik schreef op 04 June 2003 @ 23:37:
Nu werkt het dus wel via Mysqladmin, maar niet via mn ASP.

Thought:
Kan het zijn dat Mysql alleen update als de oude waarde niet overeenkomt met de nieuwe waarde (en dus niet hoeft te updaten)? In dat geval zijn de affected rows inderdaad 0.
Dat zou best wel eens zo kunnen zijn. Update ze voor de lol eens naar een andere waarde en je weet meer.

  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Verwijderd schreef op 04 juni 2003 @ 23:49:
[...]

Dat zou best wel eens zo kunnen zijn. Update ze voor de lol eens naar een andere waarde en je weet meer.
Nee, helaas, het lijkt toch aan de ASP te liggen. Of misschien iets geks met de DSNconnectie of MySQL ODBC driver?

Dit is de code, en die werkt nog steeds niet :(

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% Option Explicit %>

<!--#include file="Connections/urs.asp" -->
<%
if(request.QueryString("block") <> "") then 
dim Block
set Block = Server.CreateObject("ADODB.Command")

Block.ActiveConnection = MM_urs_STRING
Block.CommandText = "UPDATE pollder.urs_gebruikers SET active=1 WHERE gebruiker_id = " & request.QueryString("block")
'Block.CommandType = 1
Block.Execute

Response.Write Block.CommandText 

Block.ActiveConnection.Close

'Response.End
'Response.Buffer = true
'Response.Redirect( "gebruikers_index.asp" )

end if
%>

[ Voor 22% gewijzigd door rik op 05-06-2003 02:50 . Reden: die comment was wat onoverzichtelijk ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

En je krijgt geen foutmelding? :? Want regel 15 lijkt me niet correct. Mogen we de inhoudt van urs.asp eens zien?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Geen foutmelding, en regel 15 werkt gewoon. De inhoud van urs.asp:


ASP:
1
2
3
4
5
6
7
8
9
10
<%
' FileName="Connection_odbc_conn_dsn.htm"
' Type="ADO" 
' DesigntimeType="ADO"
' HTTP="false"
' Catalog=""
' Schema=""
Dim MM_urs_STRING
MM_urs_STRING = "dsn=urs;uid=pollder;pwd=password;"
%>


Verwijst dus gewoon naar de dsn eigenlijk.

Verwijderd

De code die jij hiervoor gaf heeft bepaalde dingen uitgecommentarieerd zoals gorgi eerder suggereerde, maar dat was alleen vooor debugging, dus dan is het ook niet zo vreemd dat het niet werkt. Ik vraag me af of je nu de verkeerde code geeft, of dat je gewoon niet weet wat die code doet.

Heb je overigens mijn suggestie al geprobeerd?

  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
MrX: De comments heb ik geplaatst omdat ik wil weten of dat de SQL werkt, die redirect geloof ik wel. Als ik die redirect weer "aan" zou zetten zou ik de response.write niet meer kunnen zien immers. Als je goed kijkt hebben de gecommente lijnen niets met de SQL uitvoering temaken.

Block.CommandType heb ik weggequote omdat deze volgens mij niet nodig is: default is goed genoeg (mi).

Bij de Response.write staat achteraan een stukje weggequote inderdaad, deze was eerst in gebruik ipv Block.CommandText (en nu dus niet meer nodig).
(EDIT: Dit heb ik even weggehaald om eea te verduidelijken)

Wat betreft urs.asp, deze comments zijn voor DreamWeaver, die neemt ze op bij de instellingen.

Je suggestie heb ik inderdaad geprobeerd, maar zoals gezegd kwam er maar geen foutmelding :'(

Overigens is dit helemaal geen ingewikkelde code, ik vraag me dus af of dat het niet aan mn ODBC koppeling/driver ligt.. Momenteel draai ik het dus op IIS met een ODBC richting MySQL op een ANDERE (Linux) server via Internet. Zou het kunnen zijn dat ik daardoor een read-only verbinding heb?

[ Voor 21% gewijzigd door rik op 05-06-2003 02:53 . Reden: aanvulling ]


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Overigens is dit helemaal geen ingewikkelde code, ik vraag me dus af of dat het niet aan mn ODBC koppeling/driver ligt.. Momenteel draai ik het dus op IIS met een ODBC richting MySQL op een ANDERE (Linux) server via Internet. Zou het kunnen zijn dat ik daardoor een read-only verbinding heb?
Dit is afhankelijk van hoe je de recordset opent oftewel de gebruikte cursor- en locktype.
Als dit een oorzaak was geweest dan had je echter wel een foutmelding gekregen ;)
Kan het zijn dat Mysql alleen update als de oude waarde niet overeenkomt met de nieuwe waarde (en dus niet hoeft te updaten)? In dat geval zijn de affected rows inderdaad 0.
Dit is idd het geval. In MySQL wordt een record alleen geupdate wanneer er ook daadwerkelijk iets valt te updaten. Oftewel weet je zeker dat van de gebruikers_id's die je probeert te updaten de huidige waarde van active <> 1 is?

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Ik heb net even nagevraagd hoe het zit met de rechten vanaf afstand, en die zijn gewoon hetzelfde als op de machine zelf. Ik moet dus gewoon kunnen schrijven naar de database.

Maar toen.. ik zal even uitleggen wat het idee is van de pagina:

De pagina bevat 2 tabellen, en twee recordsets. Tabel 1 "Gemachtigde gebruikers" wordt gevuld door recordset 1, welke alle gebruikers selecteerd waarbij de waarde van active "1" is. Die 1 is overigens een int.
Bij tabel 2 "Geblokkeerde gebruikers" is het precies andersom: recordset2 zoekt de mensen waarbij active een waarde van "0" (int) heeft.

Per row is er een link, verwijzend naar zichzelf maar dan met een commando. Bij de eerste tabel met actieve gebruikers, heet de link "Blokkeren", en wordt de querystring ?block=3 meegegeven waarbij de 3 een dynamisch gebruiker_id weergeeft. Klik je op deze link dan laad je dus dezelfde pagina echter dan met een parameter.

Volgens de code in dit forum wordt er dus gekeken of dat er een parameter "block" is meegegeven. Zo ja, wordt het betreffende record geupdate met "active=0". Logischerwijs was deze 1, anders stond hij niet in die tabel met actieve gebruikers. Een extraatje is dat de pagian wordt herladen zonder querystring, zodat een refresh vanaf gebruikerskant niet nogmaals de actie in werking zou zetten. Door dit weg te quoten is het enige verschil dat in de uri dus die "?block=3" blijft staan; de pagina zou verder gewoon identiek en werkend moeten zijn.

Bij de tabel met geblokkeerde gebruikers is het idee hetzelfde: er word in de praktijk echter een variabele "deblock" meegestuurd in plaats van "block". Het stuk code dat in werking treedt is exact hetzelfde, echter dan wordt active naar "1" gezet zodat de gebruiker weer actief is.

Hoop dat ik het idee zo een beetje heb toegelicht.

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Verander de naam van je veld "active" eens in "actief" ofzo :)
/me Deveraux heeft zo'n vermoeden dat active een reserved word is

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29
Deveraux: Gedaan, helaas zonder resultaat.

Maar... Ik heb het nu maar gewoon gescheiden, een beetje jammer wel. Doch, het werkt! Heeel raar want het is (nagenoeg) dezelfde code. Dit is het geworden:

Block.asp:
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>

<!--#include file="Connections/urs.asp" -->

<%
if(Request.QueryString("block") <> "") then
Command1__user = Request.QueryString("block")
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_urs_STRING
Command1.CommandText = "UPDATE pollder.urs_gebruikers  SET active = 0 WHERE gebruiker_id = " + Replace(Command1__user, "'", "''") + ""
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()

end if

Response.Buffer = true
Response.Redirect( "gebruikers_index.asp" )

%>


Eigenlijk hetzelfde qua code dus.

Mn sessiecontrole wil ik plaatsen in de include, dat lijkt me het makkelijkst. Ik zal <% Option Explicit %>
er nog even bij zetten trouwens.
Pagina: 1