Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z str_replace()
Forum PHP.pl > Forum > Przedszkole
Izaf
Witam.

Jest to mój pierwszy post także proszę mnie nie bić, a przynajmniej nie mocno.

Chcę zmienić w bazie użytkowników forum phpbb3, wszystkim użytkownikom podpis.

Mam taki kod:
  1. <?
  2. $connection = @mysql_connect("localhost","user","pass")
  3. or die('Brak poł?czenia z serwerem MySQL.<br />Bł?d: '.mysql_error());
  4. $db = @mysql_select_db("db", $connection)
  5. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  6.  
  7. $ask = mysql_query("Select * from `phpbb_users` where username_clean='izaf'");
  8. $row = mysql_fetch_array($ask, MYSQL_NUM);
  9.  
  10. $zmienna = str_replace("http://www.xxx.pl/galeria/banery/$row[8].jpg", "http://www.xxx.pl/Generator/Generator/klata.php?nick=$row[8]", $row[58]);
  11. echo $zmienna;
  12. ?>


otrzymuje w wyniku:
  1. [url=http://www.xxx.pl:37mnjgni][img:37mnjgni]http://www.xxx.pl/galeria/banery/izaf.jpg[/img:37mnjgni][/url:37mnjgni]


To jest próba dla jednego użytkownika.Na Krasnalu wszystko działa jak powinno, niestety na serwerze pozostawia string, który chcę zmienić bez zmian. Tak jakby go w ogóle nie znajdywał w $row[58].

W momencie, gdy kod zmieniam na:
  1. <?
  2. $connection = @mysql_connect("localhost","user","pass")
  3. or die('Brak poł?czenia z serwerem MySQL.<br />Bł?d: '.mysql_error());
  4. $db = @mysql_select_db("db", $connection)
  5. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  6.  
  7. $ask = mysql_query("Select * from `phpbb_users` where username_clean='izaf'");
  8. $row = mysql_fetch_array($ask, MYSQL_NUM);
  9.  
  10. $zmienna = str_replace("/galeria/banery/$row[8]", "/Generator/Generator/klata.php?nick=$row[8]", $row[58]);
  11. echo $zmienna;
  12. ?>


Wynik:
  1. [url=http://www.xxx.pl:37mnjgni][img:37mnjgni]http://www.xxx.pl/Generator/Generator/klata.php?nick=izaf.jpg[/img:37mnjgni][/url:37mnjgni]


Kod działa jak powinien, czyli tak jakby miał problemy z kropkami.

Macie może jakieś pomysły co zrobić, że to działało tak jak potrzebuję?

Oczekiwany wynik:
  1. [url=http://www.xxx.pl:37mnjgni][img:37mnjgni]http://www.xxx.pl/Generator/Generator/klata.php?nick=izaf[/img:37mnjgni][/url:37mnjgni]
mortus
Wygląda na to, że $row[8] to nic innego jak nazwa obrazka z rozszerzeniem. Spróbuj zatem tak:
  1. $nick = array_shift(explode('.', $row[8]));
  2. $zmienna = str_replace("/galeria/banery/$row[8]", "/Generator/Generator/klata.php?nick=$nick", $row[58]);

Nie wiem, czy jest to szybkie rozwiązanie, ale zawsze jakieś. Daj znać jak zadziałało.
Izaf
$row[8] to pozycja w tabeli username_clean, nick pisany z malych liter czyli "izaf". Także to rozwiązanie nic nie da.

Ewidentnie widać, że str_replace ma jakiś problem z "." bo na tym serwerze nie działa nawet:

  1. <?
  2.  
  3. str_replace(".jpg", "", $jakis_string);
  4.  
  5. ?>


Nie wiem co mam z tym zrobić, bo nie chce mi się ponad 300 razy zmieniać sig ręcznie ;/
mls
Nie rozumiem w czym problem. Skoro początkowo (sądząc po warunkach w str_replace) adres wygląda tak: http://www.xxx.pl/galeria/banery/izaf.jpg a podmieniany ciąg to tylko /galeria/banery/izaf to oczywiste jest, że wynik będzie zawierał na końcu .jpg.

Jak chcesz podmienić ciąg nie znając rozszerzenia pliku z obrazkiem, to lepiej będzie zapisać to tak:
  1. $zmienna = preg_replace("#/galeria/banery/" . preg_quote($row[8], '#') . ".+?$#i", "/Generator/Generator/klata.php?nick=" . $row[8], $row[58]);
Izaf
Cytat(mls @ 23.02.2010, 22:39:11 ) *
Nie rozumiem w czym problem. Skoro początkowo (sądząc po warunkach w str_replace) adres wygląda tak: http://www.xxx.pl/galeria/banery/izaf.jpg a podmieniany ciąg to tylko /galeria/banery/izaf to oczywiste jest, że wynik będzie zawierał na końcu .jpg.


Tak, ale przeczytaj cały post. To co opisałeś miało w moim przypadku sprawdzenie czy str_replace w ogóle działa. Na końcu postu napisałem jakiego wyniku oczekuję.

Może napiszę tak: Nie mogę zamienić żadnego stringa zawierającego "." czyli nie zamienię "www.xxx.pl" oraz "izaf.jpg", ponieważ próba nie przynosi żadnego rezultatu.

EDIT: Zadziałało pięknie. Dziękuję za pomoc.

Pozdrawiam.
mls
Polecam wobec tego włączyć raportowanie błędów. Nic w PHP (jak i prawie każdym języku programowania) nie dzieje się bez przyczyny.
d3f3nd3r
  1.  
  2. <?
  3. $connection = @mysql_connect("localhost","user","pass")
  4. or die('Brak poł?czenia z serwerem MySQL.<br />Bł?d: '.mysql_error());
  5. $db = @mysql_select_db("db", $connection)
  6. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  7.  
  8. $ask = mysql_query("Select * from `phpbb_users` where username_clean='izaf'");
  9. $row = mysql_fetch_array($ask, MYSQL_NUM);
  10. $jpg='.jpg';
  11. $zmienna = str_replace("/galeria/banery/$row[8]$jpg", "/Generator/Generator/klata.php?nick=$row[8]", $row[58]);
  12. echo $zmienna;
  13. ?>
  14.  
  15.  


Izaf
Cytat(mls @ 23.02.2010, 22:39:11 ) *
Nie rozumiem w czym problem. Skoro początkowo (sądząc po warunkach w str_replace) adres wygląda tak: http://www.xxx.pl/galeria/banery/izaf.jpg a podmieniany ciąg to tylko /galeria/banery/izaf to oczywiste jest, że wynik będzie zawierał na końcu .jpg.

Jak chcesz podmienić ciąg nie znając rozszerzenia pliku z obrazkiem, to lepiej będzie zapisać to tak:
  1. $zmienna = preg_replace("#/galeria/banery/" . preg_quote($row[8], '#') . ".+?$#i", "/Generator/Generator/klata.php?nick=" . $row[8], $row[58]);


Działa, lecz niestety częściowo. W wyniku dostaję:

  1. [url=http://www.xxx.pl:xn8bikeu][img:xn8bikeu]http://www.xxx.pl/Generator/Generator/klata.php?nick=izaf


Także brakuje tego co znajduje się po podstawionej części. W każdym razie dziękuję.

Problem rozwiązany:

  1. $zmienna1 = preg_replace("#/galeria/banery/" . preg_quote($row[8], '#') . ".+?g" . "#", "/galeria/banery/Generator/Generator/klata.php?nick=" . $row[8], $row[58]);

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.