Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa addslashes/stripslashes

[es] :: PHP :: Problem sa addslashes/stripslashes

[ Pregleda: 3114 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

KeyboardSound
Banjaluka

Član broj: 8657
Poruke: 73
*.com.



Profil

icon Problem sa addslashes/stripslashes07.03.2005. u 08:22 - pre 232 meseci
Php 4.3.0/Mysql 3.23.55
magic_quotes_gpc On On
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off

Dakle problem je u sledecem:

Ako u php formi za unos upisem ime' u bazu mi se automatski upisuje ime\' sto je OK - pretpostavljam zbog: magic_quotes_gpc On On.
E sad kad dobijam podatke iz baze mogu da uradim stripslashes i prikaz ce biti originalan (ime').
Medjutim problem je ako u php formi za pretragu unesem podatak koji cu da koristim za pretragu sa ,,like,,
1.select from tabela where naziv like '%ime%' - vraca ime\'
2.select from tabela where naziv like '%ime\'%' - vraca prazan string

U stvari mislim da je problem u Mysql-u jer kada koristim phpmysqladmin vidim da je u tabeli upisano ime\' ali kada napravim sql upit (koristeci phpmysqladmin) select from tabela where naziv like '%ime\'%' opet nista
U svakom slucaju moje pitanje bi bilo: sta treba da podesim da bi radio like upit u slucaju da zelim ukljuciti i navodnike kao dio stringa u upitu?

Malo sam ja ovo konfuzno napisao ali nadam se da ce mi neko moci pomoci.

Pozdrav svima
 
Odgovor na temu

MileG

Član broj: 28981
Poruke: 997



+7 Profil

icon Re: Problem sa addslashes/stripslashes07.03.2005. u 14:27 - pre 232 meseci
Pokusaj sa: "%ime\'%" to bi trebalo da radi...
 
Odgovor na temu

KeyboardSound
Banjaluka

Član broj: 8657
Poruke: 73
*.com.



Profil

icon Re: Problem sa addslashes/stripslashes08.03.2005. u 06:40 - pre 232 meseci
Nista "%ime\'%" ne pomaze, opet prazan string.
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: Problem sa addslashes/stripslashes08.03.2005. u 15:18 - pre 232 meseci
Stvar je vrlo jednostavn treba da koristis jedinstveni nacin pristupa podacima iz baze. Ako si koristio addslashes prilikom ubacivanja u bazu, onda addslashes treba da koristis i pri kreiranju upita koji ce vrsiti pretragu nad bazom. Ustvari najbolje bi bilo da podatke iz forme prebacis u njihov originalni oblik a da onda koristis *escape* funkcije odredjene baze (npr mysql_escape_string).
Owl
 
Odgovor na temu

KeyboardSound
Banjaluka

Član broj: 8657
Poruke: 73
*.com.



Profil

icon Re: Problem sa addslashes/stripslashes09.03.2005. u 09:16 - pre 232 meseci
Nece pa nece

Forma za unos podataka mi se sastoji se iz dvije stranice. Na prvoj postoji samo jedno input polje.
Dakle pretpostavka ja da u to input polje neko upise string koji sadrzi i navodnike.
Forma mi radi tako da pomocu mysql like upita sada provjeravam da li takav vec postoji u tabeli ili ne. Ako ne postoji forma nudi obrasce za unos konkretnih podataka, a ako unesenom djelu stringa odgovara vise zapisa u tabeli forma nudi izbor za koji tacno zapis se zele unijeti podaci i onda opet ide druga stranica unosa.

E sad poslusah sta rece _owl_ :
Posto imam magic_quotes_gpc On najprije sam uradio stripslashes, pa sam pomocu mysql_real_escape_string uradio escape-ovanje.
Kada to odradim i na prvoj stranici unesem npr. ime' , upisem ostale podatke na drugoj i pogledam u phpmyadmin-u u tabeli stoji ime\'

E sad po logici forme ako ponovo upisem ime' trebalo bi da prepozna da takav zapis vec postoji u tabeli (u kontekstu price odozgo), medjutim to se ne desava.
Dakle upisem ime' ,mysql_real_escape_string od njega napravi ime\' pa takav podatak pomocu like uporedjujem sa ime\' koje vec postoji u bazi ali vraca mi prazan string. Ako upisem ime\' onda mysql_real_escape_string od njega napravi ime\\\' i to nije to.


Pomoc
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: Problem sa addslashes/stripslashes09.03.2005. u 14:55 - pre 232 meseci
Testiranje bi trebao da vrsis pomocu svog programa, dakle i unos i pretragu.

Owl
 
Odgovor na temu

KeyboardSound
Banjaluka

Član broj: 8657
Poruke: 73
*.com.



Profil

icon Re: Problem sa addslashes/stripslashes10.03.2005. u 07:46 - pre 232 meseci
Citat:
_owl_: Testiranje bi trebao da vrsis pomocu svog programa, dakle i unos i pretragu.


Slazem se, ali opet mi nije jasno sta se desava.
Mozda sam ovo pitanje trebao postaviti na Mysql forumu jer sam juce probao u Command promptu, pristupio Mysql serveru (uzgred i tamo sam opet vidio ime\') i jednostavno nisam mogao definisati upit sa like (koji ukljucuje i navodnik) takav da mi rezultat vrati ime\'

Mozda se nesto treba podesiti u Mysql-u, mozda to uopste ne moze, a najvjerovatnije ce sve zavrsiti tako da cu podatke ubacivati u bazu bez escape-ovanja
 
Odgovor na temu

KeyboardSound
Banjaluka

Član broj: 8657
Poruke: 73
*.com.



Profil

icon Re: Problem sa addslashes/stripslashes21.03.2005. u 06:53 - pre 232 meseci
Evo sad konkretno:

Ako u command promptu (na Mysql serveru) ili u phpMyadmin-u ukucam sledeci query:
insert into tabela (naziv) values ('O\'Toole')
i pogledam u DB vidim da stoji O'Toole
Medjutim kada hocu da unesem preko svoje forme upiosuje mi u DB O\'Toole. Ponavljam radim sa ukljucenim magic_quotes i ne koristim addsleshes (mada sam probao iskljuciti magic_quo i koristiti addslashes i dobije isto).
Zato i imam problema sa like upitima.
E sad mi nije jasno oko tih backslasheva da li ustvari u DB treba literarno da stoji O'Toole ili O'\Toole. Ako treba da stoji O'Toole a pri insertu ubacujem O\'Toole u cemu je onda uopste svrha tih backsalsheva.

 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Problem sa addslashes/stripslashes21.03.2005. u 07:39 - pre 232 meseci
Cekaj, kako tebi izgleda query koji izvrsavas u svom kodu? Ako upisujes addslashes("O\'Toole") onda je to isto sto i "O\\\'Toole" i u bazi ces imati ubaceno "O\'Toole". Ako pak upisujes addslashes("O'Toole") onda ces u bazi imati samo "O'Toole". Barem bih ja ovako napamet tako odgovorio. Naravno, magic_quotes iskljuci ili addslashes zameni sa conditional_addslashes koju ces sam definisati.

Ako ti ova poruka ne resi problem, napravicu test case pa cemo videti da isteramo ovo do kraja.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

KeyboardSound
Banjaluka

Član broj: 8657
Poruke: 73
*.com.



Profil

icon Re: Problem sa addslashes/stripslashes21.03.2005. u 09:34 - pre 232 meseci
Sada je OK mada mi nije bas najjasnije.
Uradio sam magic_quotes off i ne koristim addslashes vec mysql_real_escape_string i sada se ponasa OK, sto znaci:
Unosim iz forme u DB podatke obradjene prethodno sa mysql_real_escape_string i u bazu mi upisuje npr. O'Toole, a kada pretrazujem sa ,,like,, isto koristim mysql_real_escape_string.

Ovdje mi se namece pitanje zasto uopste da koristim bilo kakvu vrstu escap-ovanja spec. karaktera (kad u DB svakako stoji O'Toole - u originalno unesenom obliku)?
 
Odgovor na temu

KeyboardSound
Banjaluka

Član broj: 8657
Poruke: 73
*.com.



Profil

icon Re: Problem sa addslashes/stripslashes21.03.2005. u 09:44 - pre 232 meseci
Zaboravih ovo:
Kada sam imao ukljucene magic_quotes, nisam koristio addslashes ni mysql_real_escape_string, a u DB mi se upisivalo O\'Toole - misterija?
 
Odgovor na temu

KeyboardSound
Banjaluka

Član broj: 8657
Poruke: 73
*.com.



Profil

icon Re: Problem sa addslashes/stripslashes21.03.2005. u 10:25 - pre 232 meseci

Evo resenja!!!!!
Sad sam se sjetio. Ja sam podatke prenosio preko dvije stranice, pa tek onda upisivao, sto znaci da su mi magic_quotes radili dva puta escape-ovanje.

Hvala svima!
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Problem sa addslashes/stripslashes21.03.2005. u 15:03 - pre 232 meseci
Hehe..

A zasto escape, pa zato sto inace ovo ne bi radilo:
Code:

mysql_query("INSERT INTO test VALUES (' O'Toole ')"); /* string u MySQL upitu bi se prekinuo iza O */



http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Problem sa addslashes/stripslashes22.03.2005. u 22:32 - pre 232 meseci
Prenos aktuelne diskusije sa phpsec liste, preporucujem svima da se na istu prijave.

Citat:

Citat:

I think I understand Jared's confusion. I've seen tutorials that tell you
to addslashes() on inserting into the db and stripslashes() on the way out.


Chris Shiflett:

I understand.

Unfortunately, there are many bad practices taught in articles. This particular example isn't as bad as some I've seen. It has two flaws that are immediately evident, based upon your brief description:

1. addslashes() needs to be considered a last resort. It can help, and I do recommend that people use it when there is nothing else, but if you are using a popular database such as MySQL, there is going to be a better alternative. Articles need to be teaching people to look for a native escaping function specific to their database before resorting to addslashes().

2. Instructing people to use stripslashes() when they receive data from the database makes them believe that the escaping modifies the data. As you correctly point out, this isn't true. Thus, rather than the article helping developers understand how something works, it is hurting them. Another minor point is that this step modifies the data. For example, if the string is:

Code:
Escape single quotes (') with a backslash (\').


The escaped string will be:

Code:
Escape single quotes (\') with a backslash (\\\').


What is stored in the database is:

Code:
Escape single quotes (') with a backslash (\').


What is returned after stripslashes() is run is:

Code:
Escape single quotes (') with a backslash (').


That's probably not the desired behavior. :-)


Citat:
The escape characters themselves are not stored in MySQL


That's right. The escaping is only to make sure the query isn't modified by the data. The data itself is preserved, which is the whole point of escaping.

Am I right on this?

Yep. :-)

Chris

http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

[es] :: PHP :: Problem sa addslashes/stripslashes

[ Pregleda: 3114 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.