Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasy, funkcje i PREG_REPLACE
Forum PHP.pl > Forum > PHP
esiek
Sprawa jest następująca:

mam funkcję pobierającą mi z bazy nazwę wpisu na podstawie ID:

  1. function nazwa_wpisu($z)
  2. {
  3. global $db_table_data;
  4.  
  5. $wykonaj = mysql_query("SELECT tytul FROM $db_table_data WHERE `id` = '$z' LIMIT 1");
  6. $znaleziono = mysql_num_rows($wykonaj);
  7. if(!empty($znaleziono))
  8. {
  9.  
  10. while($wiersz = mysql_fetch_array($wykonaj))
  11. {
  12. if(!empty($wiersz['tytul']))
  13. {
  14. return $wiersz['tytul'];
  15. }
  16. else
  17. {
  18. return "bez nazwy";
  19. }
  20. }
  21. }
  22. else
  23. {
  24. return "wpis nie istnnieje";
  25. }
  26. }



Wywołując w kodzie poprzez nazwa_wpisu(5); pokazuje mi nazwę wpisu o ID nr 5.

kolejno mam wyrażenie regularne które ma mi zamienić formułę {!NazwaWpisu id="5"} na nazwe wpisu z bazy danych. W tym celu mam wyrażenie regularne w klasie:

  1. $this -> plik = preg_replace("#\{\!NazwaWpisu id=\"([0-9]?)\"\}#ms", nazwa_wpisu("$1"), $this -> plik); // zwraca mi brak wpisu


Jeżeli usunę funkcję nazwa_wpisu z tej linijki

  1. $this -> plik = preg_replace("#\{\!NazwaWpisu id=\"([0-9]?)\"\}#ms", "$1", $this -> plik); // zwraca mi 5 - czyli prawidłowo interpretuje wyrażenie regularne


ostatecznie jeżeli ręcznie wpisze wartość ID

  1. $this -> plik = preg_replace("#\{\!NazwaWpisu id=\"([0-9]?)\"\}#ms", nazwa_wpisu(5), $this -> plik); // zwraca nazwę wpisu tak jak należy.



Jakiś pomysł gdzie leży problem?

klasa obsługuje mi system szablonów, kolejno funkcja nazwa_wpisu() leży gdzieś w innym pliku bez klasy itp.


Będę wdzięczny za pomoc!
Wazniak96
1. 12 linijka pierwszego kodu. mysql_num_rows() zwraca ilość znalezionych wierszy, czyli w przypadku nie odnalezienia żadnego zwróci 0, a nie null.
2. Nie jestem pewien czy to ma jakiekolwiek znaczenie, ale zanim dasz zmienną do zapytania spróbuj ją rzutować do int, i dla pewności wyświetl czy oby na pewno wartość trafia do funkcji.
nospor
Cytat
12 linijka pierwszego kodu. mysql_num_rows() zwraca ilość znalezionych wierszy, czyli w przypadku nie odnalezienia żadnego zwróci 0, a nie null.
No i co z tego? Poza tym 12 linijka nie zawiera mysql_num_rows, no chyba ze autor edytowal posta, ale nic na to nie wskazuje.

@esiek do tego typu spraw nalezy uzywac preg_replace_callback - sprawdzi sie tutaj wysmienicie
esiek
No i preg_replace_callback pomoglo wink.gif ale zanim odpisaliscie wink.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.