Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> stripslashes() a odpowiedzi zapytania SELECT
tazak
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 21.02.2004
Skąd: Tychy

Ostrzeżenie: (0%)
-----


mam konkretne pytanie: czy jest potrzebne i w jakim celu, stosowanie funkcji stripslashes() do ciagów otrzymanych z bazy mysql np. w takim przykladowym kodzie:
  1. <?php
  2.  
  3. $zapytanie = &#092;"select * from ksiazki\";
  4. $wynik = mysql_query($zapytanie);
  5. $wiersz = mysql_fetch_array($wynik);
  6. echo stripslashes($wiersz['tytul']);
  7.  
  8. ?>

powyzszy kod pochodzi z ksiazki 'php i MySql Vademecum profesjonalisty'. jest tam przykladowa baza danych ksiazek, ktora poprostu dziala nieprawidlowo jak jak sie ją odpali.
tzn. jezeli w bazie mamy tytul ksiazki skladajacy sie z 'dziesieciu slaszy': \\\\\\\\\\ to po zapytaniu SELECT i zastosowaniu stripslashes na stonie otrzymuje tylko 5 slaszy \\\\\.
Z tego typu przeksztaleceniami (stripslashes) spotkalem sie w roznych przykladach w internecie oraz w kodach prezentowanych chodziazby na tym forum (jest tego mnostwo).
przed napisaniem tego postu przeszukalem dobrze forum i nikt nie poruszal tej kwestii. jedyne wytlumaczenia z jakimi sie spotkalem to takie ze trzeba uzywac stripslashes poniewaz przy wpisie do bazy danych dalismy addslashes w celach jak wiadomo bezpieczenstwa (kazdy w temacie wie o co chodzi). ale moim zdaniem to addslashes sie traci w momencie wpisu danych do bazy ktora wszelkie znaki \\ \" \' pomija i zastepuje pojedynczymi.

Przykladowo:
uzytkownik w formularzu wpisuje 'tytul' ksiazki zawierajacy te 10 slaszy czyli: \\\\\\\\\\
potem odczytujemy to przez $_POST['tytul'], uzywamy na zmiennej funkcji addslashes() (oczywiscie wszelkie magic_quotes_ w konfigu na Off).
wynikiem czego jest otrzymanie zmiennej zawierajacej 20 slaszy, ktorą taką to zmienna mozemy wstawic bezpiecznie do bazy przy pomocy INSERT np:
  1. INSERT INTO `ksiazki` (`id`,`tytul`) VALUES (NULL, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\');

gdzie pole tytul jest dla przykladu typu VARCHAR(10) i wszytko dziala poprawnie.
przy odczycie z bazy zgodnie z kodem php przytoczonym powyzej server mysql zwraca do zmiennej $wiersz['tytul'] lancuch 10 znakow (tych 10 slaszy) tzn. nie formatuje tekstu wyjscowego za pomoca '\'. podobnie wszelkie apostrofy i cydzyslowy zajmuja po jednym bajcie i nie sa one w jakis sposob dodatkowo 'sleszowane'. Wiec stosowanie tutaj funkcji stripslashes jest moim zdaniem bez sensu, bo jak napisalem wczesniej robi sie z pierwotnego tytulu tylko '5 slaszy' ktore widzi uzytkownik na stronie www.

sie rozpisalem ale mysle ze ktos zrozumie o co mi chodzi bo po przejrzeniu kilku ksiazek oraz wielu skryptow na sieci mam metlik w glowie jezeli chodzi o te sprawe... wiec jak ktos ma jakies wyjasnienia to prosze o odpwiedz .... dzieki
Go to the top of the page
+Quote Post
Ludvik
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Addslashes dodaje slashe, żeby się zapytanie nie rozsypało, a w bazie danych tego nie zobaczysz, więc stripslashes raczej nie jest na miejscu w tym przypadku. Z resztą sam do tego doszedłeś...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 20:08