Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] addslashes()
Forum PHP.pl > Forum > Przedszkole
antoniak
Witam,


W panelu administracyjnym dodaję treść za pomocą formularza addslashes($_POST['opis_pelny']) dla bezpieczeństwa, ale później dane wyświetlane
są w postaci wiadomo podwajanych \\ jeśli są w opisie " '

Czy są jakieś inne funkcje, które uchronią przed sql injection, a nie będą później te dane wyświetlane z backslash, chyba, że w panelu administracyjnym nie potrzebnie stosować tej metody?
planet
potem robisz stripslashes() przed wyświetleniem danych.
antoniak
dzięki, ale w bazie danych każda edycja artykułu powoduje ciągle podwajanie \\\\\\ bo w formularza większość dodaje kod HTML

później wygląda tak


<div id=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"

i cała reszta kodu, a to jeśli jest dużo artykułów to później te "śmieci" zajmują więcej na serwerze sciana.gif
Fifi209
Próbowałeś z mysql_real_escape_string" title="Zobacz w manualu PHP" target="_manual ?
antoniak
teraz sprawdzałem, ale niestety dalej dodaje do bazy danych backslash bo w kodzie HTML pełno mamy "
ale i nie tylko bo czasem też sam muszę używać " '

Edit: dodam, że kod HTML jest wprowadzany w textarea i dalej nie wiem, które zabezpieczenie zastosować, aby nie miałem backslash jeśli w tym kodzie znajduje się cudzysłów etc.
zeten
  1. <?php
  2. $text = str_replace(''', '<cudzyslow>', $text); //zamieniamy znak ' na <cudzyslow>
  3.  
  4. $text = str_replace('<cudzyslow>', ''', $text); //zamieniamy <cudzyslow> na znak '
  5. ?>


;-)
antoniak
czyli teraz tak robię to pierwsze dodaję tam gdzie czytam z bazy danych, a drugie w miejsce gdzie jest formularz, który dodaje do bazy? ;-)
zeten
Cytat(antoniak @ 2.08.2009, 14:00:49 ) *
czyli teraz tak robię to pierwsze dodaję tam gdzie czytam z bazy danych, a drugie w miejsce gdzie jest formularz, który dodaje do bazy? ;-)


  1. <?php
  2. $text = str_replace(''', '<cudzyslow>', $text); //zamieniamy znak ' na <cudzyslow>
  3. ?>


Tutaj 'kodujesz' dane, które będziesz umieszczał w bazie.

  1. <?php
  2. $text = str_replace('<cudzyslow>', ''', $text); //zamieniamy <cudzyslow> na znak '
  3. ?>


Tutaj 'dekodujesz' dane, które będziesz pobierał z bazy i wyświetlał na stronie.
antoniak
zrobiłem tak


function str_replace($teskt) {

$teskt = str_replace('<cudzysłów>', '\'', $teskt);

}
.................
i gdzie pobieram dane z bazy
$db->query("SELECT `id`, `xx`, '<cudzysłów> . str_replace(opis_pelny) . <cudzysłów>', `typ`,

i na stronie mam błąd
Warning: Wrong parameter count for str_replace() in właśnie w tej linijce, gdzie zaznaczam dane z bazy
zeten
Cytat(antoniak @ 2.08.2009, 16:04:57 ) *
zrobiłem tak
function str_replace($teskt) {

$teskt = str_replace('"', '\'', $teskt);

}
.................
i gdzie pobieram dane z bazy
$db->query("SELECT `id`, `xx`, `'" . str_replace(opis_pelny) . "'`, `typ`,

i na stronie mam błąd
Warning: Wrong parameter count for str_replace() in właśnie w tej linijce, gdzie zaznaczam dane z bazy


Nie można tworzyć funkcji o nazwie istniejącej funkcji ;-)

  1. <?php
  2. function apostrof($txt) {
  3.   $txt = str_replace(''', '<apostrof>', $txt);
  4.   RETURN $txt;    
  5. }
  6. ?>


;-) No ale nie wiem czy Ci to pomoże. W bazie zamiast ' będziesz miał <apostrof> ;-) ;-)
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.