Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: automatyczne przeszukiwanie rekordu z mysql i link
Forum PHP.pl > Forum > PHP
mb83
witam,
mam stronę piłkarską i są na niej m.in. dwa działy:
Aktualności i Kluby
Chciałbym aby była taka możliwość:
Dodaję jakiegoś newsa, skrypt sam przeszukuje treść pobraną i jeżeli w tekście znajdzie nazwę zespołu, która jest w katalogu Klubów to automatycznie utworzy link do tego wpisu w katalogu.
W ogóle zastanawiam się czy jest to możliwe? :-)
Greg0
Najprostszy sposób to str_replace(), tylko musisz sobie odpowiednie tablice przygotować.
Tutaj szybki przykład żeby dać pogląd na rozwiązanie: http://codepad.org/cKx7HoWw
mb83
a jak to teraz napisać aby zespoły pobierał z mysql (wszystkie) i na tej podstawie sprawdzał czy dany zapis istnieje i podmieniał linki w wyświetlanym newsie?
nospor
Cytat
a jak to teraz napisać aby zespoły pobierał z mysql (wszystkie)
No ale co, z bazy nie umiesz pobrac danych?
Pobierasz z bazy zespoły, zapisujesz do tablicy i robisz str_replace
mb83
problem mam jeszcze z nazewnictwem zespołów.
Bo chodzi o to, że czasami nie napiszę takiej nazwy jak w katalogu tylko inną.
Wymyśliłem sobie coś takiego, że w tekście napiszę:
  1. "w sobotę był mecz, który wygrali [z112=Niebiescy]..."

i skrypt zamieni na coś takiego:
  1. "w sobotę był mecz, który wygrali <a href='?id=112'>Niebiescy</a> ..."


i jak to wszystko ugryźć? :-)
Turson
  1. $text = "w sobotę był mecz, który wygrali [z112=Niebiescy]...";
  2. '#\[(.*)=(.*)\]#',
  3. function($matches){
  4. return '<a href="strona?id='.$matches[0].'">'.$matches[2].'</a>';
  5. },
  6. $text);
  7. echo $text;
mb83
unexpected T_FUNCTION ...
literówka? ale dzięki, dokładnie o to mi chodziło :-)
Turson
Jaką masz wersję PHP? Bodajże od 5.3 można używać anonimowych funkcji
mb83
jest błąd przy kilku zespołach w jednej informacji:
kod:
  1. $text = "Drużyna [100=Czerwona] pokonała drużynę [112=Niebieskich]";
  2. '#\[(.*)=(.*)\]#',
  3. function($matches){
  4. return '<a href="strona?id='.$matches[0].'">'.$matches[2].'</a>';
  5. },
  6. $text);
  7. echo $text;

daje taki efekt:
  1. Drużyna <a href="strona?id=[100=Czerwona] pokonała drużynę [112=Niebieskich]">Niebieskich</a>


co może być tego przyczyną?
skarabe.pl
Należy zmodyfikować wyrażenie regularne tak, żeby odpowiednie wyrażenia pracowały jako "ungreedy" - załatwia się to znakiem "?" lub modyfikatorem "U". Czyli tak:

'#\[(.*)=(.*)\]#U'

lub tak:

'#\[(.*?)=(.*?)\]#'

EDIT: chodzi o to, że ten pierwszy (.*) w Twoim przykładzie nie wyszukuje, tak jak byś się spodziewał, "100", tylko "100=Czerwona] pokonała drużynę [112" (do napotkania DRUGIEGO znaku "=").
EDIT: jest jeszcze jeden błąd:

Nie
  1. return '<a href="strona?id='.$matches[0].'">'.$matches[2].'</a>';

tylko
  1. return '<a href="strona?id='.$matches[1].'">'.$matches[2].'</a>';

$matches[0] zawiera cały ciąg, który pasuje do wyrażenia.
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.