Toon posts:

[ASP] Update maakt velden leeg

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

Verwijderd

Topicstarter
Ik werk al enige tijd met ASP, maar loop nu toch tegen een raar probleempje aan.

Omdat ik nog verre van een expert ben, zoek ik als ik een nieuwe funtionaliteit wil toevoegen altijd eerst naar een werkend voorbeeld, in dit geval voor een artikel database met onderhoud via het web. Ik vond een prima voorbeeld op : http://www.codefixer.com/...nagement_system_part1.asp).

:) Dat hele voorbeeld in asp files gezet en getest, werkt perfect.

Maar mijn database (MSAccess) ziet er natuurlijk anders uit. Dus pad en naam veranderd in alle maintenance ASP files (en 1 HTML file voor display voor alle bezoekers). Daarbij natuurlijk goed opgelet dat de form field en database field namen in zowel declaratie (Dim) als sql statements correct en gelijk zijn.

Het vreemde is dat toevoegen prima werkt, deleten werkt en display werkt ook, maar het is update waarmee ik een probleempje heb sinds ik er mijn database onder gezet heb. Als ik het update asp doc gebruik, worden bij submit (of ik nu iets gewijzigd heb of niet) alle velden behalve 2 (adressant & datum) leeggemaakt.

8)7 Ik ben er wel 30 keer erdoor heen gegaan, het ook nog een paar keer vergeleken met het werkende tutorial exemplaar van de hierboven genoemde link. Ik vind niets wat hiervan de oorzaak zou kunnen zijn. Wordt er een beetje simpel van, en wil voor ik er de 31e keer doorheen loop, eerst hier vragen of ik niet iets heel simpels over het hoofd zie.

Ik zal een klein, relevant stukje van de asp file invoegen die de uiteindelijke update doet (hiervoor zit de asp file met het form waarin de wijzigingen gemaakt worden):

'declare your variables
Dim SQL, connection, recordset, ID
Dim sConnString, titel, tekst, datum, adressant, auteur

titel = request.form("titel")
tekst = request.form("tekst")
datum = request.form("datum")
adressant = request.form("adressant")
auteur = request.form("auteur")
ID = request.form("ID")
'receive the hidden form ID

'build the SQL
SQL = "UPDATE tblnews SET titel='" & titel & "', tekst='" & tekst & "', datum='" & datum & "', adressant='" & adressant & "', auteur='" & auteur & "' WHERE ID=" & ID

:? Wie kan mij de juiste kant opsturen voor een oplossing?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 21:28
Doe eens in plaats van je sql uitvoeren, een Response.Write(SQL) dan zie je precies wat voor query er daadwerkelijk uitgevoerd wordt.

Roomba E5 te koop


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-02 14:52

gorgi_19

Kruimeltjes zijn weer op :9

En had iemand als iets verteld over SQL Injection? :P

Oftewel: wees niet verbaasd als iemand je database gaat leeggooien :P

Wat een brak script trouwens :X Je kan beter gaan kijken naar een ander nieuwsscript. Zodra er een single quote in voor komt, crashed de boel.

[ Voor 37% gewijzigd door gorgi_19 op 29-05-2006 17:01 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
heten je form velden wel hetzelfde als in de Request.Form("formveldnaam")?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • ArjanC
  • Registratie: Juli 2001
  • Laatst online: 26-01 17:16
case sensitive op het ID ?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-02 14:52

gorgi_19

Kruimeltjes zijn weer op :9

Id is een nummer :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
:) Dank alvast voor alle respons, laat ik ze in 1 reply proberen te beantwoorden:

sig69
Die tip hielp inderdaad :

UPDATE tblnews SET titel='', tekst='', datum='5/29/2006', adressant='wwww', auteur='werwerwe' WHERE ID=46
Record Updated.


:/ Alleen snap ik dan nog niet waarom titel en tekst leeg zijn, maar goed ik weet iets meer, ook al had ik van het leeggemaakt zijn van de database velden dit natuurlijk ook op kunnen maken.

:? Dit is dus gelijk de volgende vraag, enig idee waarom die velden die leeg zijn na de submit van de update asp (en exact hetzelfde behandeld worden door de asp en sql als de velden die wel gevuld blijven) inderdaad nog steeds leeggemaakt worden?

gorgi_19
Ik neem aan dat je met injection bedoeld dat iemand een SQL statement als zogenaamde tekst invoert? Ik hoop dat voorkomen te hebben door de login die noodzakelijk is om dit gedeelte van de site binnen te komen. Zelfs al tik je de url van de add of update asp-pagina direct in, dan redirect hij je naar het login scherm als je dat nog niet bent. En slechts 3 a 4 mensen binnen onze stichting krijgen van mij een userid en password, en die mensen moet ik nog uit gaan leggen dat ze '<BR>' in moeten gaan tikken in plaats van RETURN, dus die acht ik niet in staat om een SQL statement in te tikken, al zouden ze dat al willen, het is ook hun stichting... 8)

Omdat er vaak stukjes uit bijvoorbeeld Word ingeclipped zal gaan worden, is dat niet echt praktisch en moet ik dus nog een oplossing voor verzinnen. Ideeën :?

Wat betreft het quote (') tekentje, was ik met testen al achtergekomen doordat ik tekst ingeclipped had in het tekst vak die inderdaad een quootje had en dus daar dan ook braaf afkapte.

4of9
"namen hetzelfde"? Yep, da's het eerste dat ik checkte omdat dat het meest voor de hand lag. tekst heet dus overal tekst, of het nu in de database is, in het form veld of in de declaratie (Dim). Hetzelfde geldt voor de andere velden.


gorgi_19 & burp2001
gorgi_19 gaf reeds het correcte antwoord, met cijfers (het is in de MSAccess database een autonummer veld om unique key garantie te hebben) is dit geen punt van aandacht.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-02 14:52

gorgi_19

Kruimeltjes zijn weer op :9

Dit is dus gelijk de volgende vraag, enig idee waarom die velden die leeg zijn na de submit van de update asp (en exact hetzelfde behandeld worden door de asp en sql als de velden die wel gevuld blijven) inderdaad nog steeds leeggemaakt worden?
Je hebt geen textboxen met de betreffende names?
Wat betreft het quote (') tekentje, was ik met testen al achtergekomen doordat ik tekst ingeclipped had in het tekst vak die inderdaad een quootje had en dus daar dan ook braaf afkapte.
ASP:
1
Replace(tekstje, "'","''")

Maar het blijft ranzig. :)

[ Voor 32% gewijzigd door gorgi_19 op 29-05-2006 19:28 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Controleer eens of er geen foutje in de name van je form in je html zit... Al gezegd... Misschien dat je twee forms met dezelfde name hebt? :? Zou zo niet weten wat het anders zou kunnen zijn...

...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


Verwijderd

Topicstarter
Ik buig diep, :o , met rood hoofd, want het was toch een ouderwetse typo, die ik dus een keer of 30 over het hoofd gezien heb :( (maar door DeverauX toch nog voor de 31e keer ging nalopen).

:? Resteert toch nog die ene vraag :

Teksten zullen vaak vanuit Word ingeclipped worden met ctrl-c/ctrl-v. In Word kun je veel meer layout specs meegeven, waarvan niet alles nodig is in de website database natuurlijk, maar wel de RETURNs aan het einde van elke zin.

De quote kon je in asp inderdaad met een replace oplossen (ben het met je eens dat dit verre van fraai is gorgi_19), maar de RETURNs komen gewoon niet over, de zinnen worden gewoon aan elkaar geplakt.
Dus er valt niets te replacen . . . Zelfs al tik ik in het tekstvenster een verse tekst in met de Add asp, met returns, dan worden die daar wel getoond, maar niet in de uiteindelijke display asp (de enige asp die website bezoekers te zien krijgen).

Heb je daar ook een tip voor?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-02 14:52

gorgi_19

Kruimeltjes zijn weer op :9

Replace(tekstje, VbCrLf, "<br>")

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Maak dan meteen een functie die alles in één keer doet...zowel voor vbcrlf, htmlencode, sql-injection.

...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


Verwijderd

Topicstarter
DeverauX, je hebt gelijk, ik ga er voor zitten.
Maar ik ging er eigenlijk van uit dat die RETURNs (vbcrlf's) tijdens het clippen in de tekstbox verloren waren gegaan, omdat als ik de tekst terug kopieer in Word (vanuit de display asp), ze dan ook verdwenen waren.
Heb nu getest, en merk dat ze pas met het uitvoeren van de asp file verdwijnen, dus als ik het replace stukje ervoor zet, zou het wel goed opgeslagen moeten worden. Ook als ik nu verse tekst via de Add functie toevoeg, en dan kopieer naar Word staan alle carriage returns er nog in.

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Verwijderd schreef op maandag 29 mei 2006 @ 20:42:
DeverauX, je hebt gelijk, ik ga er voor zitten.
Maar ik ging er eigenlijk van uit dat die RETURNs (vbcrlf's) tijdens het clippen in de tekstbox verloren waren gegaan, omdat als ik de tekst terug kopieer in Word (vanuit de display asp), ze dan ook verdwenen waren.
Heb nu getest, en merk dat ze pas met het uitvoeren van de asp file verdwijnen, dus als ik het replace stukje ervoor zet, zou het wel goed opgeslagen moeten worden. Ook als ik nu verse tekst via de Add functie toevoeg, en dan kopieer naar Word staan alle carriage returns er nog in.
Weet niet of je dit bedoelt of van plan bent maar ik zou het niet in de database veranderen...als in de data gereplaced met <br> in je database plempen...

Data onafhankelijk van presentatie enzo...

Je moet gewoon een weergave functie maken voor data uit de database. Voor html (<>) en voor de vbcrlf's.

Zoiets bedoel ik dus
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FUNCTION encodeString( inputString )
    fixQuotes = Replace( inputString, "'", "''")
    encodeString = Replace( fixQuotes, "\", "/")
END FUNCTION

FUNCTION showContent( theString, output_type )

    If output_type = "enable_html" Then

        theString = Replace( theString, VbCrLf, "<br />")
        showContent = theString
    Else
        theString = Server.HTMLEncode( theString )
        theString = Replace( theString, VbCrLf, "<br />")
        showContent = theString
    End If
END FUNCTION


Succes ermee. :)

...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


Verwijderd

Topicstarter
DeverauX,

Ik wilde het inderdaad dusdanig in de database opslaan dat presentatie binnen de website nooit een probleem zou zijn. Per slot van rekening is het niet de bedoeling dat het vanaf de website geprint wordt.

Maar, je hebt gelijk, OSI model volgned ( B) applicatie->presentatie->sessie->transport->netwerk->datalink->fysieke opslag) , moet ik dat soort dingen gescheiden houden. Ik zou beter moeten weten, zit al bijna 20 jaar in ICT ;)

:/ Overigens had ik het bij het verkeerde eind. De display asp vertoonde de teksten gewoon aan elkaar, zonder ook maar een pixel ruimte tussen de zinnen. Als ik vandaar uit een ctrl-c/ctrl-v terug naar Word deed, waren alle tekens ook in Word weg, dus ook RETURNs. Als ik echter dezelfde tekst weer uit de database in edit mode benaderede en dan de tekst vanuit de textarea box naar Word clipte, bleek dat de RETURNs er nog wel waren.

;) Dus moet ik van de onderhouds asp's afblijven (en al helemaal van de database) en enkel de display asp aanpassen op juiste tekstweergave.

Bedankt voor je tips.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 21:28
Verwijderd schreef op dinsdag 30 mei 2006 @ 09:54:
DeverauX,

Ik wilde het inderdaad dusdanig in de database opslaan dat presentatie binnen de website nooit een probleem zou zijn. Per slot van rekening is het niet de bedoeling dat het vanaf de website geprint wordt.

Maar, je hebt gelijk, OSI model volgned ( B) applicatie->presentatie->sessie->transport->netwerk->datalink->fysieke opslag) , moet ik dat soort dingen gescheiden houden. Ik zou beter moeten weten, zit al bijna 20 jaar in ICT ;)
Het OSI model heeft hier niet zo veel mee te maken hoor :Y)
:/ Overigens had ik het bij het verkeerde eind. De display asp vertoonde de teksten gewoon aan elkaar, zonder ook maar een pixel ruimte tussen de zinnen. Als ik vandaar uit een ctrl-c/ctrl-v terug naar Word deed, waren alle tekens ook in Word weg, dus ook RETURNs. Als ik echter dezelfde tekst weer uit de database in edit mode benaderede en dan de tekst vanuit de textarea box naar Word clipte, bleek dat de RETURNs er nog wel waren.

;) Dus moet ik van de onderhouds asp's afblijven (en al helemaal van de database) en enkel de display asp aanpassen op juiste tekstweergave.

Bedankt voor je tips.
Overigens is het misschien niet een slecht idee om de teksten in 2 kolommen op te slaan: een met de originele (onbewerkte) tekst, en een met de tekst in html-formaat. Anders moet je bij elke pageview complete lappen tekst weer omzetten, en bij grote teksten kan dat aardig wat performance gaan vreten.

[ Voor 4% gewijzigd door sig69 op 30-05-2006 10:11 ]

Roomba E5 te koop


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

De redundantie in data vind ik dan erger dan reeds omgezette teksten gewoon in een globaal sessieobject ofzo te zetten.

[ Voor 5% gewijzigd door DeverauX op 30-05-2006 10:35 ]

...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

Pagina: 1