Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wyciągnięcie określonych znaków z stringu
Forum PHP.pl > Forum > Przedszkole
Th0e
Witam! Tworzę stronę na której każdy mógłby coś napisać. Teksty trafiają do bazy danych, tak więc przydało by się to zabezpieczyć przed np SQL Injection, więc postanowiłem użyć preg_replace, żeby wyciągało jedynie litery i cyfry, ale oczywiście nie działa smile.gif. Oto kod:

  1. $nadawca = $_POST['nadawca'];
  2. $tresc = $_POST['tresc'];
  3. $adresat = $_POST['adresat'];
  4.  
  5. $tresc2 = wordwrap($tresc, 50, "\n", true); //dzielenie długich ciągów znaków
  6. $tresc3 = preg_replace("/[^A-Z0-9]/", "", $tresc2); //pobieranie z textu znaków
  7.  
  8.  
  9. if(!empty($nadawca) && !empty($adresat) && !empty($tresc)){
  10. mysql_query("INSERT INTO `pytania` (nadawca, tresc, odbiorca) VALUES('$nadawca','$tresc3','$adresat')") or die("nie udało się wysłać! Spróbuj jeszcze raz!");
  11. header("Location: kontakt.php?co=wyslano");
  12. }


Liczę na pomoc smile.gif Pozdrawiam.
kubek3898
O ilę się nie mylę przed sql injection zabezpiecza:
Michael2318
Wszystko tutaj: http://4programmers.net/Php/Ochrona_przed_...tion_-_podstawy
Wystarczy addslashes
Th0e
czyli taki kod:

  1. $nadawca = $_POST['nadawca'];
  2. $tresc = $_POST['tresc'];
  3. $adresat = $_POST['adresat'];
  4.  
  5. $tresc2 = addslashes($tresc);
  6. $tresc3 = wordwrap($tresc2, 50, "\n", true); //dzielenie długich ciągów znaków
  7.  
  8. $nadawca2 = addslashes($nadawca);
  9.  
  10. if(!empty($nadawca) && !empty($adresat) && !empty($tresc)){
  11. mysql_query("INSERT INTO `pytania` (nadawca, tresc, odbiorca) VALUES('$nadawca2','$tresc3','$adresat')") or die("nie udało się wysłać! Spróbuj jeszcze raz!");
  12. header("Location: kontakt.php?co=wyslano");
  13. }


jest już w 100% zabezpieczony? ($adresat to formularz typu select)
fragov
Najlepiej przerzuć się na PDO, od wersji 5.5 mysql_real_escape_string nie będzie obsługiwany. smile.gif
Na chwilę obecną lepiej mysql_real_escape_string no i tutaj trochę info o mysql_real_escape_string vs addslashes.

  1. $nadawca = mysql_real_escape_string($_POST['nadawca']);
  2. $tresc = mysql_real_escape_string(wordwrap($_POST['tresc'], 50, "\n", true);
  3. $adresat =mysql_real_escape_string( $_POST['adresat']);
  4.  
  5. if(!empty($nadawca) && !empty($adresat) && !empty($tresc)){
  6. mysql_query("INSERT INTO `pytania` (nadawca, tresc, odbiorca) VALUES('$nadawca','$tresc','$adresat')") or die("nie uda?o si? wys?a?! Spróbuj jeszcze raz!");
  7. header("Location: kontakt.php?co=wyslano");
  8. }


btw. to czy w formularzu jest select czy input to nie ma różnicy, często można dane podmienić np livehttpheaders. smile.gif
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.