PDA

View Full Version : upisivanje podataka u bazu s asp-om


k4q4m3
13-05-2003, 21:30
set news = newsdb.Execute "insert into tblNews ([Title], [Body]) values ('" & Request.Form("naslov") & "', '" & Request.Form("vijest") & "')"
Problem je u ovom redu koda, javlja mi slijedecu gresku:

Microsoft VBScript compilation (0x800A0401)
Expected end of statement

Molio bih vas da mi pomognete, znam da je greska sigurno neka banalna, i najvjerojatnije sam pogrijesio s navodnicima, al nikako nemogu naci gdje.

cybermaster
13-05-2003, 22:11
ja to radim malo drugacije,evo ti cijeli kod koji mora raditi:

Set news = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT tblnews.* FROM tblnews;"
news.CursorType = 2
news.LockType = 3
news.Open strSQL, strCon

news.AddNew


news.Fields("title") = Request.Form("naslov")
news.Fields("body") = Request.Form("vijest")

news.Update
news.Requery

spyder
13-05-2003, 23:16
Originally posted by k4q4m3
set news = newsdb.Execute "insert into tblNews ([Title], [Body]) values ('" & Request.Form("naslov") & "', '" & Request.Form("vijest") & "')"
Problem je u ovom redu koda, javlja mi slijedecu gresku:

Microsoft VBScript compilation (0x800A0401)
Expected end of statement

Molio bih vas da mi pomognete, znam da je greska sigurno neka banalna, i najvjerojatnije sam pogrijesio s navodnicima, al nikako nemogu naci gdje.

Nije mi jasno zašto stavljaš Title i Body u uglate zagrade ???

kezo
14-05-2003, 08:38
vjerovatno zato jer je to pravilnije, i jedini način da možeš pozivati rezervirane riječi i brojeve kao imena kolona .

a što se tiće samog stringa, trebao bi pogledati ove dvije varijable da ne pokupe možda kakav navodnik i prekinu string

Debug
14-05-2003, 09:16
Iz sigurnosnih razloga preporučam cybermasterov način.
A također, nećeš morati paziti da li ti je posjetitelj utipkao " ili '.

Debug
14-05-2003, 09:25
samo da dodam, kod cybermasterovog načina, nije potrebno otvarati cijeli recordset tj. SELECT tblnews.* FROM tblnews

U stvari, ne treba nam niti jedan redak u recordsetu, osim onog kojeg ćemo dodati sa addnew. Jedino, ukoliko će se neki podaci i prikazati na stranici onda sa dodatkom WHERE učitamo samo one podatke koji su potrebni.

Ovo govorim iz razloga brzine izvršavanja skripte.

k4q4m3
14-05-2003, 10:41
set news = newsdb.Execute ("insert into tblNews ([Title], [Body]) values ('" & Request.Form("naslov") & "', '" & Request.Form("vijest") & "')")
evo ispravnog koda, kao sto vidite, samo je trebalo poslije execute staviti sve u zagradu

hvala svima na pomoci

Debug
14-05-2003, 11:07
Moralo bi raditi i bez zagrade, ako je to ASP 3 kod?

Debug
14-05-2003, 11:28
A šta misliš da će se dogoditi ako ja kao zlonamjerni :rolleyes: korisnik u textbox vijest utipkam sljedeći niz znakova:
');DELETE * FROM tblNews WHERE ([Body] <> '

Imaš ideju? :D

kezo
14-05-2003, 11:53
to se lako blokira : replace(str,"'","''",)

Debug
14-05-2003, 13:49
Nisam primjetio da se igdje blokira.
Direktno u execute metodi je pozvano Request.Form("naslov") , bez ikakve provjere što se tu nalazi.

A čak i da se blokira tako, onda znači da posjetitelj ne smije upisati ' .
I'm what's itd. postaju I"m what"s?
Na šta to liči?

nidzho
14-05-2003, 17:33
Originally posted by Debug
A čak i da se blokira tako, onda znači da posjetitelj ne smije upisati ' .
I'm what's itd. postaju I"m what"s?
Na šta to liči? Upravo na to što si napisao :)
U VBScriptu escapeaš navodnike sa dvostrukim navođenjem istih. Isto vrijedi za apostrofe u SQL-u - ako napišeš INSERT INTO ... VALUES ('''burek'''), u bazi će se zapisati 'burek'.

k4q4m3
17-05-2003, 14:37
Originally posted by Debug
A šta misliš da će se dogoditi ako ja kao zlonamjerni :rolleyes: korisnik u textbox vijest utipkam sljedeći niz znakova:
');DELETE * FROM tblNews WHERE ([Body] <> '

Imaš ideju? :D
ako nisi primjetio, ovdje je naveden samo jedan red skripte, odakle znas da nisam tak nesto sprijecio kod slanja podataka????????