Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> automatyczne przeszukiwanie rekordu z mysql i link
mb83
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 2.02.2012

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


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? :-)
Go to the top of the page
+Quote Post
Greg0
post
Post #2





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


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
Go to the top of the page
+Quote Post
mb83
post
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 2.02.2012

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


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?
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




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
Go to the top of the page
+Quote Post
mb83
post
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 2.02.2012

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


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źć? :-)
Go to the top of the page
+Quote Post
Turson
post
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  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;
Go to the top of the page
+Quote Post
mb83
post
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 2.02.2012

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


unexpected T_FUNCTION ...
literówka? ale dzięki, dokładnie o to mi chodziło :-)
Go to the top of the page
+Quote Post
Turson
post
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Jaką masz wersję PHP? Bodajże od 5.3 można używać anonimowych funkcji
Go to the top of the page
+Quote Post
mb83
post
Post #9





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 2.02.2012

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


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ą?
Go to the top of the page
+Quote Post
skarabe.pl
post
Post #10





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

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


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.

Ten post edytował skarabe.pl 16.06.2014, 18:02:41
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 17.09.2025 - 07:26