Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: stripslashes() a odpowiedzi zapytania SELECT
Forum PHP.pl > Forum > PHP
tazak
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
Ludvik
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ś...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.