Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasy, funkcje i PREG_REPLACE
esiek
post 10.11.2013, 00:36:15
Post #1





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 6.11.2008
Skąd: Warszawa

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


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!


--------------------
allebhp.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Wazniak96
post 10.11.2013, 11:44:15
Post #2





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


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.
Go to the top of the page
+Quote Post
nospor
post 10.11.2013, 13:02:25
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
esiek
post 12.11.2013, 07:31:24
Post #4





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 6.11.2008
Skąd: Warszawa

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


No i preg_replace_callback pomoglo wink.gif ale zanim odpisaliscie wink.gif


--------------------
allebhp.pl
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: 14.08.2025 - 00:20