Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Problem z str_replace()
Izaf
post 23.02.2010, 21:26:25
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.02.2010

Ostrzeżenie: (0%)
-----


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]


Ten post edytował Izaf 23.02.2010, 21:31:24
Go to the top of the page
+Quote Post
mortus
post 23.02.2010, 22:21:04
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Izaf
post 23.02.2010, 22:31:51
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.02.2010

Ostrzeżenie: (0%)
-----


$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 ;/
Go to the top of the page
+Quote Post
mls
post 23.02.2010, 22:39:11
Post #4





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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]);


Ten post edytował mls 23.02.2010, 22:42:40


--------------------
Go to the top of the page
+Quote Post
Izaf
post 23.02.2010, 22:46:17
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.02.2010

Ostrzeżenie: (0%)
-----


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.


Ten post edytował Izaf 23.02.2010, 22:50:04
Go to the top of the page
+Quote Post
mls
post 23.02.2010, 22:49:21
Post #6





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
d3f3nd3r
post 23.02.2010, 22:54:32
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 6
Dołączył: 9.08.2008

Ostrzeżenie: (0%)
-----


  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.  


Go to the top of the page
+Quote Post
Izaf
post 24.02.2010, 00:29:50
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.02.2010

Ostrzeżenie: (0%)
-----


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]);



Ten post edytował Izaf 24.02.2010, 01:33:40
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 8.07.2025 - 04:06