View Full Version : upisivanje podataka u bazu s asp-om
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
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 ???
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
Iz sigurnosnih razloga preporučam cybermasterov način.
A također, nećeš morati paziti da li ti je posjetitelj utipkao " ili '.
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.
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
Moralo bi raditi i bez zagrade, ako je to ASP 3 kod?
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
to se lako blokira : replace(str,"'","''",)
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?
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'.
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????????
vBulletin® v3.7.4, Copyright ©2000-2009, Jelsoft Enterprises Ltd.