![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 14.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam taki kod:
gdzie $zmienna to ścieżka dostępu do pliku (np. "C:\Documents and Settings\User\Moje dokumenty\Moja muzyka\fotki\"). I problem polega na tym, że do bazy zapisuje się wartość bez dodanych backslash'y i po wyciągnięciu tego z bazy za pomocą stripslashes otrzymuję ścieżkę w postaci "C:Documents and SettingsUserMoje dokumentyMoja muzykafotki". Natomiast ostatnia linia powyższego kodu wyświetla zmienną w postaci prawidłowej, czyli "C:\Documents and Settings\User\Moje dokumenty\Moja muzyka\fotki". Czyli funkcja addslashes działa dopóki nie dodaję danych do bazy. W czym tkwi problem? Co robię źle? Pozdrawiam cezarek |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 14.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Czyli zamiast addslashes powinienem użyć mysql_real_escape_string, a stripslashes wyrzucić, bo jest niepotrzebne? W ten sposób gdy w zmiennej pojawi się np. cudzysłów znów robi się zamieszanie.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Czyli zamiast addslashes powinienem użyć mysql_real_escape_string, a stripslashes wyrzucić, bo jest niepotrzebne? Tak W ten sposób gdy w zmiennej pojawi się np. cudzysłów znów robi się zamieszanie. Nie -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 14.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Być może znów popełniam jakiś błąd, ale gdy wyciągam tą zmienną z cudzysłowem z bazy i umieszczam w polu input
aby ją wyedytować, to nic mi się nie pojawia. Gdy tą zmienną umieszczam gdzieś np. między znacznikami <p></p> wszystko jest, jak być powinno. Poza tym dlaczego piszesz, że addslashes nie do tego służy? Między innymi tutaj utaj http://forum.php.pl/index.php?showtopic=158959, http://forum.php.pl/index.php?showtopic=157979 polecana jest właśnie ta funkcja wraz z stripslashes. Sam z książek stosowałem właśnie te funkcje. Jeśli dobrze rozumiem manual, to addslashes właśnie do tego celu powinna być używana. Najdziwniejsze jest to, że kod, który podałem na początku działa na serwerze webd.pl, a na dreamhost.com nie. Ten post edytował cezarek 14.11.2010, 23:16:15 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Do zabezpieczenia przez SQL Injection służy wspomniany wyżej mysql_real_escape_string. To, że ktoś używa addslashes w tym celu, oznacza tylko, że przeczytał zły kurs/książkę lub źle zinterpretował manual.
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Wszystko jest ok, ale jeżeli chcesz dodać takie pole do atrybutu VALUE w inputcie użyj http://pl2.php.net/html_entities
Warto pamiętać o podaniu kodowania jako 3 argument. -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
To, że używasz starych kursów widać poprzez <?= bo choć jest to poprawne, oznacza, że używasz dyrektywy, która powoduje problemy z XML.
Addslashes jest podawane w kursach, bo wspomniana przez chłopaków funkcja nie jest staruszkiem aż takim ( wyszła w gałęzi 4.3, czyli ostatniej z serii PHP4 ) i wcześniej tak się robiło. Ale trzeba było uważać na magic_quotes_gpc (które robi właśnie addslashes, przez co możesz je podwójnie wykonać, nie wiedząc o tym) i inne syfy, więc nie jest to lubiane i akceptowane rozwiązanie w chwili obecnej, gdy nigdy nie wiesz czym Cię uraczy hosting w php.ini przy zakupie serwera i czy da się prosto pewne rzeczy włączyć/wyłączyć czy też nie. W efekcie musisz sprawdzać czy owa, nienawidzona prze wielu, dyrektywa jest włączona i wedle niej aplikować bądź nie addslashes, a sam widzisz, że to mało eleganckie, a przede wszystkim upierdliwe. Jeśli walisz cokolwiek do value formularzy to zawsze może zajść konflikt apostrofów (pojedynczych i podwójnych) i dlatego wrzucanie tam treści zakończy się problemami. Tekst zobaczysz w Źródle strony, ale nie na samej stronie, bo przeglądarka tego nie zinterpretuje dobrze. Tutaj trzeba użyć wspomnianej html_entities z właściwą dla Ciebie w skrypcie flagą quotów (nie zawsze jest to wartość domyślna). -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 14.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Super, wszystko hula jak należy. Wielkie dzięki, chłopaki za pomoc i wyjaśnienie. Po odpowiedzi wookieb miałem właśnie pytać o to dlaczego nie addslashes, ale w pracy nie miałem czasu się zalogować - dzięki thek.
Fakt podstawy PHP poznawałem kilka lat temu i przez dłuższy czas nie dłubałem nic. Trochę się pozmieniało. A jeśli chodzi o "<?=", to lepiej używać zwykłego "<? echo"? |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Tak, ponieważ short tages są czasami wyłączone, a poza tym powodują błędy przy zagnieżdżaniu XMLa.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Osobiście używam "pełnej" wersji czyli: <?php
Powód edycji: [thek]: I to jest rozwiązanie najlepsze. Nigdy nie sprawi problemów.
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 04:46 |