Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: znowu preg_replace
Forum PHP.pl > Forum > PHP
ITI
Mam problem, szukałem na forum i w google i nigdzie nic nie moge znalezc, co by mi pomoglo go rozwiazac.

Chodzi o to, ze mam tekst, w ktorym umieszczam obrazki korzystajac z tekstu :ico634left: z czego "ico" to rozmiar obrazka, potem jego numer w bazie oraz polozenie (left lub right).

Mam funkcje, ktora ma za zadanie wyswietlic obrazek:

  1. function obrazek($rozmiar,$id,$polozenie) {
  2. global $tab_gal;
  3.  
  4. $query = mysql_query("SELECT foto,nazwa,opis FROM $tab_gal WHERE id='$id' LIMIT 1");
  5. $wynik = mysql_fetch_array($query);
  6.  
  7. $foto = $wynik["foto"];
  8. $nazwa = $wynik["nazwa"];
  9. $opis = $wynik["opis"];
  10.  
  11. return '<div style="float: '.$polozenie.'; padding: 5px;"><img src="galeria/'.$rozmiar.'/'.$foto.'" alt="'.$nazwa.'" title="'.$nazwa.'" border="0"><br>'.$opis.'</div>';
  12. }


W tresci strony uzywam takiego zapytania:

  1. $pattern = "/:([a-zA-Z]+)([0-9]+)([a-zA-Z]+):/";
  2. $replacement = obrazek('$1','$2','$3');
  3.  
  4. $opis_kat = nl2br(preg_replace($pattern, $replacement, $tekst));


Nie chce mi sie obrazek wyswietlac sad.gif tzn. jest taki przypadek,z e jak w kodzie funkcji wpisze sobie, zeby wyswietlalo ID obrazka, to wyswietla poprawnie ten, ktory idzie z preg_replace, ale obrazek sie nie wyswietl (sciezki dobre smile.gif).
Jak wpisze w $replacement = obrazek('$1','$2','$3') - zamiast $2 jakąś konkretną cyfrę, to wtedy obrazek mi się wyświetla sad.gif

Nawet w przypadku jeżeli kod początkowy będzie :ico634left: to widzę, że id obrazka leci nr 634, ale obrazek sie nie wyswietli, a jak wpisze na stale $replacement = obrazek('$1','634','$3') to wtedy obrazek się wyświetli.

Nie wiem co z tym mam zrobić, bo już po prostu zgłupiałem sad.gif Zazwyczaj sobie radzę z różnymi takimi rzeczami i rzadko szukam pomocy na forach, ale tym razem sytuacja mnie do tego zmusiła smile.gif

Jak ktoś zna jakieś rozwiązanie, będę wdzięczny.
Fifi209
użyj preg_replace_callback ?
ITI
Dzięki smile.gif Jednak nie było to takie trudne, ale jak się nie wie co stosować i w jakich przypadkach to tak bywa.

A rozwiązałem to w taki sposób:

funkcja:

  1. function obrazek($wynik) {
  2. global $tab_gal;
  3.  
  4. $rozmiar = $wynik[1];
  5. $id = $wynik[2];
  6. $polozenie = $wynik[3];
  7.  
  8. $query = mysql_query("SELECT foto,nazwa,opis FROM $tab_gal WHERE id='$id' LIMIT 1");
  9. $wynik = mysql_fetch_array($query);
  10.  
  11. $foto = $wynik["foto"];
  12. $nazwa= $wynik["nazwa"];
  13. $opis = $wynik["opis"];
  14.  
  15. return '<div style="float: '.$polozenie.'; padding: 5px;"><img src="galeria/'.$rozmiar.'/'.$foto.'" alt="'.$nazwa.'" title="'.$nazwa.'" border="0"><br>'.$opis.'</div>';
  16. }


Kod wyszukiwania:

  1. $pattern = "/:([a-zA-Z]+)([0-9]+)([a-zA-Z]+):/";
  2. $replacement = 'obrazek';
  3. $opis_kat = nl2br(preg_replace_callback($pattern, $replacement, $tekst));


Jeszcze raz wielkie dzięki 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.