Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Przygotowanie danych do wysyłki do BD...
Forum PHP.pl > Forum > Przedszkole
StasiuX
Witam.

Chce wysłać dane do bazy danych (zmienna np. $tresc_komentarza) i muszę je odpowiednio przygotować, więc pomagam sobie funkcjami:

mysql_real_escape_string()
strip_tags()
nl2br()
wordwrap()

Pytanie rodzi się takie, czy ma znaczenie kolejność zastosowania tych funkcji na zmiennej $tresc_komentarza, a jeśli tak to jaka kolejność będzie dobra? smile.gif

Z góry dzięki za podpowiedź.

Pozdrawiam.
mls
Przed zapisem tylko (w tej kolejności):
- strip_tags();
- mysql_real_escape_string();
StasiuX
Czyli rozumiem, że funkcje nl2br() i wordwrap() mam zastosować przy odczycie danych z bazy?
mls
Dokładnie tak. I tylko nl2br(). Nie widzę sensu w łamaniu wierszy przez PHP, jeśli to samo może robić przeglądarka. A nawet lepiej.
phpion
Cytat(mls @ 11.02.2009, 23:51:40 ) *
Nie widzę sensu w łamaniu wierszy przez PHP, jeśli to samo może robić przeglądarka. A nawet lepiej.

Chyba nie do końca orientujesz się co robi wordwrap" title="Zobacz w manualu PHP" target="_manual.
StasiuX
Cytat(mls @ 11.02.2009, 21:51:40 ) *
Dokładnie tak. I tylko nl2br(). Nie widzę sensu w łamaniu wierszy przez PHP, jeśli to samo może robić przeglądarka. A nawet lepiej.


Wydaje mi się, że sens ma, bo przeglądarka nie "złamie" tekstu ciągłego. Jakkolwiek wielkie dzięki za pomoc.

Pozdrawiam
dr_bonzo
A co jak user bedzie chcial napisac komentarz/notke o tagu <input>?

Co do wordwrap - uzywalbym go przy wyswietlaniu danych - bo niepotrzebnie je "niszczysz" przed zapisaniem do bazy.
StasiuX
Cytat(dr_bonzo @ 11.02.2009, 21:58:48 ) *
A co jak user bedzie chcial napisac komentarz/notke o tagu <input>?

Co do wordwrap - uzywalbym go przy wyswietlaniu danych - bo niepotrzebnie je "niszczysz" przed zapisaniem do bazy.


strip_tags() zje <input> smile.gif.

Co do wordwrap() i nl2br() koledzy wyżej mi już objaśnili sprawę smile.gif.
dr_bonzo
No zje zje, temu lepiej uzyc htmlspecialchars() i zarowno sie zabezpieczysz przed html'em jak i wyswietlisz "<input>"
StasiuX
Cytat(dr_bonzo @ 11.02.2009, 22:18:25 ) *
No zje zje, temu lepiej uzyc htmlspecialchars() i zarowno sie zabezpieczysz przed html'em jak i wyswietlisz "<input>"


Ale ja nie chce wyświetlać "<input>", ma je zjeść i tyle na ten temat smile.gif. A funkcją htmlspecialchars() traktuję jeszcze dane wychodzące z bazy.

Cytat(dr_bonzo @ 11.02.2009, 22:18:25 ) *
No zje zje, temu lepiej uzyc htmlspecialchars() i zarowno sie zabezpieczysz przed html'em jak i wyswietlisz "<input>"


A czy htmlspecialchars() stosuje się przed wysłaniem danych do bazy, czy przy odczycie?
phpion
Cytat(StasiuX @ 12.02.2009, 10:06:28 ) *
A czy htmlspecialchars() stosuje się przed wysłaniem danych do bazy, czy przy odczycie?

Przy odczycie.
StasiuX
Cytat(phpion @ 12.02.2009, 08:33:33 ) *
Przy odczycie.


OK, czyli wyszło na to, że wysyłając dane do bazy filtruje je tylko przy użyciu funkcji mysql_real_escape_string(), a cała reszta ma zastosowanie tylko przy odczycie?

BTW
Czy jest ktoś chętny żeby przetestować mój system komentarzy? Wszystkie chwyty dozwolone smile.gif. Linka podeślę na PW.

Pozdrawiam
dr_bonzo
Cytat
A czy htmlspecialchars() stosuje się przed wysłaniem danych do bazy, czy przy odczycie?

Pomysl, dla koncowego usera bedzie to bez znaczenia, bo zamieni < na &lt;
Tylko raz w bazie bedziesz mial orginalny tekst, a raz pozmieniany ta funkcja.
StasiuX
Pozwolę sobie odkopać temat, bo mam problem z nim związany. Chodzi o funkcje wordwrap(), która zawija mi każdy wiersz po setnym znaku przy parametrach:

  1. <?php
  2. wordwrap($row['tresc'], 100, "\n", true)
  3. ?>


Problem w tym, że nie chce żeby zawijał się cały tekst, ale tylko wyrazy, które przekraczają 100 znaków. Jest na to jakiś szybki sposób, czy wypada napisać swoją funkcję?

Pozdrawiam
Spawnm
chyba własna funkcja.
daj np:
explode(' '); i sprawdzasz po kolei każdy wyraz czy ma więcej jak 100 znaków.
StasiuX
Tak też zrobię. Dzięki za odp.

Pozdrawiam

Napisałem własną funkcję łamiącą tylko za długie wyrazy, nie cały tekst. Pewnie można lepiej, ale działa smile.gif. Jakby co proszę o poprawki.

  1. <?php
  2. function wrap_long_word($text, $how_long) {
  3.  $words = strtok($text, " \n\t");
  4.  
  5.  if (strlen($words) > $how_long) {
  6.    $too_long[] = $words;
  7.  }
  8.  
  9.  while ($words !== false) {
  10.    $words = strtok(" \n\t");
  11.    if (strlen($words) > $how_long) {
  12.      $too_long[] = $words;
  13.    }
  14.  }
  15.  
  16.  for ($x = 0, $cnt = count($too_long); $x < $cnt; $x++ ) {
  17.    $wrap = utf8_wordwrap($too_long[$x], $how_long, "\n", true);
  18.    $broken[] = $wrap;
  19.  }  
  20.  
  21.  $text_fix = str_replace($too_long, $broken, $text);
  22.  return $text_fix;
  23. }
  24. ?>


Pozdrawiam
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.