Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Emotki w bazie
Forum PHP.pl > Forum > Bazy danych
Majcon
Cześć wymyśliłem sobie aby emotki
znajdowały się w bazie danych tz. tabela
emotki i pole emotka oraz link np
<lol2>|emotki/lol2.gif
Tylko nasuwa się pytania czy pobranie 199
rekordów co wiadomość na czacie nie obciąży
serwera ? i czy ogólnie nie będzie lagowac ?
Aktualnie kod zamieniając emotki wygląda tak
  1. $em1 = array ('&lt;sex&gt;' , ':*' ) ;
  2. $em2 = array ('<img src="emots/
  3. sex.gif" />' , '<img src="emots/
  4. cmok.gif" />' ) ;
  5. $txt = str_replace ($em1, $em2,
  6. $txt);

A może ktoś zna lepszy sposób ?
PrinceOfPersia
Cytat
Tylko nasuwa się pytania czy pobranie 199
rekordów co wiadomość na czacie nie obciąży
serwera ?

odpowiedź jest prosta: JavaScript i przekazujesz niesparsowany tekst AJAXem, a skrypt w przeglądarce podmienia emotki. Jeszcze można użyć np. ciasteczka do zcache'owania tych 199 rekordów na dysku twardym użytkownika.
Majcon
Czyli wrzucić to do bazy czy nie ?
sazian
lepiej zapisywać w bazie już sparsowany tekst+oryginał

jeśli ktoś chce edytować tekst to ma oryginalny
jeśli ktoś chce go wyświetlić to ma już sparsowany(wszystkie znaczki zostały już przerobione na odpowiednie img)

wtedy miejsce przechowywania emotek jest mało istotne

oczywiście takie rozwiązanie ma swoje wady, np. zmiana/dodanie emotki wymusza ponowne parsowanie wszystkich tekstów
Majcon
To jest czat i nikt nie będzie edytowac tekstu ;p (chyba)

A wszystko zmieniam przy pobraniu tekstu przed wyświetlanie np bbcode itp
Sobak
Zrób tak jak Ci napisał sazian. Skoro jesteś pewien, że opcja edycji/zmiany sposobu parsowania nie jest potrzebna, to możesz nawet zrezygnować z trzymania oryginału w bazie. Tak czy inaczej trzymanie wersji sparsowanej jest zdecydowanie wskazane - parsujesz BBCode tylko raz, przy zapisie.
PrinceOfPersia
Z drugiej strony załóżmy zmianę motywu emotek, np. dogrywasz parę emotek i podmieniasz nazwy plików graficznych. Albo zmieniasz hierarchię plików na serwerze i zamiast emots/cmok.gif, chcesz zrobić /static/images/emots/cmok.gif
I teraz tak. Jak w bazie będzie coś takiego :* , :-) , :-( , haha.gif
to bez problemu sparsujesz jeszcze raz.
a jak będą twardo zakodowane '<img src="emots/
cmok.gif" />', to po jakiejkolwiek zmianie konfiguracji, zamiast obrazka zobaczymy pusty prostokąt.

Ale to daję pod rozwagę wink.gif W sumie jeśli to jest tylko czat, czyli "napisz i zapomnij" to pewnie nie będzie mieć aż tak wielkiego znaczenia.

Cytat
Tylko nasuwa się pytania czy pobranie 199 rekordów co wiadomość na czacie nie obciąży serwera ?

generalnie jest coś takiego jak cache zapytań w bazach danych, i teoretycznie serwer baz danych typu MySql zchachowałby ci te 199 rekordów.
Majcon
Dzięki wszystkim

Postanowiłem zapisywać oryginalną wiadomość w bazie bez edycji powód ajax i tak laguje a pozatym inne rzeczy tam jeszcze będą więc już około 1s trwa wysłanie i emotki wrzuce do bazy :-) mam nadzieję że to dobra decyzja jeszcze raz dziękuję :-)
Sobak
@PrinceOfPersia: to jest niewątpiliwie problem, dlatego na takie sytuacje chyba jednak najlepiej zapisywać także tekst oryginalny i w razie konieczności ponownie sparsować istniejące rekordy - pewnie trochę to potrwa, ale to raczej nie robota cykliczna tylko epizodyczna, wywołana właśnie zmianami.
Majcon
Stworzyłem tą funkcję do emotek
  1. $emotki = $db->query("SELECT * FROM `emots`");
  2. while($e = $emotki->fetch_assoc()) {
  3. $em1 = array($e['emot']);
  4. $em2 = array("<img src=\"pliki/emots/".$e['nazwa']."\" />");
  5. $txt = str_replace($em1, $em2, $txt);
  6. }


i myślę że to dobre rozwiązanie bo np. jakbym teraz chciał zmienić ścieżkę to wystarczy w jednym miejscu a nie jak było wcześniej haha.gif hm tylko nie miałem pomysłu na nazwę pól w bazie

jakby ktoś widział błąd to proszę dac znać

A co do przechowania wiadomości to przechowuje oryginalną smile.gif no prawie bo addslashes haha.gif ;D

dzięki za szybkie odpowiedzi
Sobak
IMO bez sensu. Nie rozumiem dlaczego przy takiej budowie funkcja str_replace() ma otrzymywać tablice. Lepiej zrób w pętli tworzenie tablicy ze wszystkimi oryginałami i zamiennikami, a potem faktycznie podaj tablice jako argumenty w str_replace(), ale wywołaj ją tylko jeden raz.
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.