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

Nesto mi nejasno oko mysql_real_escape_string

[es] :: PHP :: Nesto mi nejasno oko mysql_real_escape_string

[ Pregleda: 2860 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

djordje
Novi Sad

Član broj: 3704
Poruke: 1725
*.dynamic.sbb.co.yu.



+3 Profil

icon Nesto mi nejasno oko mysql_real_escape_string19.03.2007. u 16:41 - pre 207 meseci
Od nedavno koristim mysql_real_escape_string umesto addslashes. Da li je potrebno prilikom citanja podataka iz baze pozvati stripslashes (ili neku slicnu funkciju) da ukloni dodate escape znake?

Recimo, kod mene na kompu gde imam PHP 5.xx i MySQL 5 kada dodam podatak u bazu pomocu mysql_real_escape_string i ucitam ga bez ikakvog "ciscenja", apostrofi se sasvim regularno pojave. Medjutim, na godadijevom serveru gde je php 4.x i mysql 3.23, prilikom ucitavanja dobijam: \'

Pitanje glasi: Koji je pravilan postupak za upisivanje bezbednih podataka u bazu i citanja iz nje i po mogucstvu da bude nezavisan od verzija?
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.62.53.*

Sajt: www.websolutions.co.rs


Profil

icon Re: Nesto mi nejasno oko mysql_real_escape_string22.03.2007. u 21:43 - pre 207 meseci
Pravilan upis je sa addslashes('tekst koji upisujes').
Najpravilniji ispis podataka je sledeci:
<? echo convertLineBreak(convertLineFeed(stripslashes("tekst koji ispisujes"))); ?>
A evo ti kod za funkcije convertLineBreak() i convertLineFeed()
Code:

function convertLineFeed($text) {
  $text = str_replace(LINE_FEED,"",$text);
  return $text;
}

function removeLineBreak($text) {
  $text = str_replace(LINE_BREAK, " ", $text);
  return $text;
}

function convertLineBreak($text) {
  $text = str_replace(LINE_BREAK.LINE_BREAK.LINE_BREAK.LINE_BREAK.LINE_BREAK, LINE_BREAK.LINE_BREAK, $text);
  $text = str_replace(LINE_BREAK.LINE_BREAK.LINE_BREAK.LINE_BREAK, LINE_BREAK.LINE_BREAK, $text);
  $text = str_replace(LINE_BREAK.LINE_BREAK.LINE_BREAK, LINE_BREAK.LINE_BREAK, $text);
  $text = str_replace(LINE_BREAK, "<BR>", $text);
  return $text;
}


Poz
djLapac
 
Odgovor na temu

djordje
Novi Sad

Član broj: 3704
Poruke: 1725
*.smin.itsisp.net.



+3 Profil

icon Re: Nesto mi nejasno oko mysql_real_escape_string22.03.2007. u 23:01 - pre 207 meseci
Citat:
Pravilan upis je sa addslashes('tekst koji upisujes').


Ali ja sam pitanje postavio bas u cilju izbegavanja addslashes jer ta funkcija nije sigurna. Zelim da koristim mysql_real_escape_string, a pitanje je kako uraditi inverznu operaciju prilikom pikazivanja texta na strani. da li isto sa stripslashes?
 
Odgovor na temu

afwt
AF Web Team
Novi Sad/Chicago

Član broj: 8220
Poruke: 337
*.hsd1.il.comcast.net.

Sajt: milos.srdjevic.net/blog


+1 Profil

icon Re: Nesto mi nejasno oko mysql_real_escape_string23.03.2007. u 04:46 - pre 207 meseci
Nastavi da koristis mysql_real_escape_string() funkciju za pripremu podataka za unos u bazu, nista drugo, i uvek prosledjuj konekciju kao drugi parametar (isplatice ti se navika kasnije).

GoDaddy-jev server ima podesen magic_quotes_runtime na ON, i zato ti se to desava. Vise o tome citaj u PHP manualu, a tamo ti pise i resenje:

na srecu, za razliku od magic_quotes_gpc, ovaj moze da se ukljucuje/isljucuje @runtime, tako da samo na sam pocetak skripte stavi set_magic_quotes_runtime(false);

Procitaj manual dobro za sta sluzi ova funkcija, i informisi se dobro o magic_quotes uopste! Ako ti je magic_quotes_gpc ukljucen (to sve vidis u phpinfo() ili php.ini fajlu jel jeste ili nije ukljuceno), onda prvo moras da uradis stripslashes() na sve $_POST i $_GET, pa tek onda da radis real_escape, da ne bi dodao duple sleseve...

Takodje, ako radis neki formular za pretragu, pa ces neku varijablu koristiti kao "WHERE data LIKE '%$var%'", onda $var posle real_escape-a moras da provuces kroz $var = addcslashes($var, '%_'); da ti i te karaktere eskejpuje, da ne zapucas server.

I eto ti crash-course za rad sa bazom. :-)

[Ovu poruku je menjao Nemanja Avramović dana 23.03.2007. u 20:59 GMT+1]
ZelenaLutrija.com - Saznajte sve o lutriji za zelenu kartu (doživotni boravak u Sjedinjenim Američkim Državama)
 
Odgovor na temu

djordje
Novi Sad

Član broj: 3704
Poruke: 1725
*.dynamic.sbb.co.yu.



+3 Profil

icon Re: Nesto mi nejasno oko mysql_real_escape_string23.03.2007. u 19:30 - pre 207 meseci

Default setovanja na godaddy za PHP4 su sledeca:

Code:

magic_quotes_gpc    On    On
magic_quotes_runtime    Off    Off



izgleda da se ne moze promeniti

magic_quotes_gpc = off

U phpinfo() mi pokazuje i nakon izmene ini fajla isto

Code:

magic_quotes_gpc    On    On
magic_quotes_runtime    Off    Off


[Ovu poruku je menjao djordje dana 23.03.2007. u 22:39 GMT+1]
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
*.dynamic.sbb.co.yu.



+19 Profil

icon Re: Nesto mi nejasno oko mysql_real_escape_string24.03.2007. u 14:18 - pre 207 meseci
E onda uradi ono na šta ćeš svakako doći kasnije:
napravi svoju funkciju za prihvat promenljivih iz GET i POST-a.

Dakle u skriptama bi umesto $Prom= $_GET["var"] stavljao $Prom= UzmiIzGeta("var");
A u toj funkciji bi očitao magic_quotes pa bi (ili ne bi) vrednost uzetu pre toga iz GET, obradio sa
stripslashes. Unapredjenje funkcije bi bilo da kao drugi parametar proslediš dali da traži u GET, POST ili u oba,
a treći parametar dodatnu obradu vrednosti, recimo da ga odmah obradi sa IntVal($var);
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

djordje
Novi Sad

Član broj: 3704
Poruke: 1725
*.dynamic.sbb.co.yu.



+3 Profil

icon Re: Nesto mi nejasno oko mysql_real_escape_string24.03.2007. u 23:22 - pre 207 meseci
To sam i uradio! Hvala mnogo!
 
Odgovor na temu

djordje
Novi Sad

Član broj: 3704
Poruke: 1725
*.dynamic.sbb.co.yu.



+3 Profil

icon Re: Nesto mi nejasno oko mysql_real_escape_string26.03.2007. u 12:49 - pre 207 meseci
Evo neka pocetna verzija funkcije

Code:
function GetPostVar($var_name){
        if(isset($_POST[$var_name]) and $_POST[$var_name]!=""){
                if(get_magic_quotes_gpc()){
                        return stripslashes($_POST[$var_name]);
                }else{
                        return $_POST[$var_name];
                }
        }else{
                return false;
        }
}
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
*.dynamic.sbb.co.yu.



+19 Profil

icon Re: Nesto mi nejasno oko mysql_real_escape_string26.03.2007. u 15:29 - pre 207 meseci
Ovo ja koristim:
Code:
function GrabPostGet($name, $flags='') {
  global $ModifyValueFlags;
  $ModifyValueFlags= strtoupper($flags);
  $R= ''; // default
  // take GET if no P-flag
  if ((strpos($ModifyValueFlags,'P')===false)and(isset($_GET[$name]))) $R= $_GET[$name];
  // override with POST if no G-flag
  if ((strpos($ModifyValueFlags,'G')===false)and(isset($_POST[$name]))) $R= $_POST[$name]; 
  if (is_string($R)) $R= rtrim($R);
  if (ini_get("magic_quotes_gpc") == "1") $R = StripslashArray($R);
  // apply flags
  if($flags) $R= ModifyValueByFlags($R, true);
  return $R;
}
function StripslashArray($data) {
  return is_array($data) ? array_map('StripslashArray', $data) : stripslashes($data);
}

U poslednjem redu pre izlaska šaljem vrednost na dodatnu obradu, zavisno od parametra $flags, obrađujem sa trim, strtoupper, strtolower, urldecode, intval, (float), limitiram dužinu stringa i slično.
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

[es] :: PHP :: Nesto mi nejasno oko mysql_real_escape_string

[ Pregleda: 2860 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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