Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] ID z tekstu i pobieranie zawartości z bazy
Forum PHP.pl > Forum > Przedszkole
oomaster
Witam,

Czy ktoś orientuje się jak najlepiej rozwiązać tego typu:

Mam tekst pobierany z bazy:
Cytat
Lorem ipsum dolor sit amet, [wklej=1] consetetur sadipscing elitr, sed diam nonumy eirmod [wklej=2] tempor invidunt ut labore et dolore [wklej=3] magna aliquyam erat, sed diam voluptua.


Jak widzicie w tekście są wstawki: [wklej=1],[wklej=2],[wklej=3] i teraz jak najlepiej zamiast nich pobrać zawartość z bazy danych ?

Czyli: [wklej=1] pobiera dane rekordu o ID 1 i wkleja tekst z bazy dla tego ID np. <p>Tekst z bazy danych</p>
Michael2318
preg_match + do tablicy zapisujesz sobie wszystkie 'wklejki' z bazy, czyli:
  1. $wklej[1] = $row['wklejka'];


I potem zwyczajnie to podmieniasz.
oomaster
Cytat(Michael2318 @ 3.05.2013, 20:32:08 ) *
preg_match + do tablicy zapisujesz sobie wszystkie 'wklejki' z bazy, czyli:
  1. $wklej[1] = $row['wklejka'];


I potem zwyczajnie to podmieniasz.


A możesz jakoś bardziej obrazowo to przedstawić bo nie mogę tego połapać.

Mam:
  1. $value = preg_replace("#\[wklej=(.*?)\]#si",'<div>\\1</div>',$value);

Ale co dalej ?
Michael2318
  1. <?php
  2.  
  3. $wklej[1] = 'Zammiennik pierwszy';
  4. $wklej[2] = 'Zammiennik drugi';
  5. $wklej[3] = 'Zammiennik trzeci';
  6.  
  7. $string = 'Lorem ipsum dolor sit amet, [wklej=1] consetetur sadipscing elitr, sed diam nonumy eirmod [wklej=2] tempor invidunt ut labore et dolore [wklej=3] magna aliquyam erat, sed diam voluptua.';
  8. $tablica = preg_match_all("#\[wklej=\d\]#si", $string, $matches);
  9. for($i=0; $i<count($matches[0]); $i++)
  10. {
  11. $string = str_replace($matches[0][$i], $wklej[$i], $string);
  12. }
  13. echo $string;
  14.  
  15. ?>
oomaster
Dzięki wielkie tyle ,że ja nie wiem czy będzie [wklej=1] czy [wklej=432] czy [wklej=652]

Więc pojawia się problem na początku :-/
Michael2318
  1. <?php
  2.  
  3. $wklej[1] = 'Zammiennik pierwszy';
  4. $wklej[2] = 'Zammiennik drugi';
  5. $wklej[3] = 'Zammiennik trzeci';
  6.  
  7. $string = 'Lorem ipsum dolor sit amet, [wklej=1] consetetur sadipscing elitr, sed diam nonumy eirmod [wklej=2] tempor invidunt ut labore et dolore [wklej=3] magna aliquyam erat, sed diam voluptua.';
  8. $tablica = preg_match_all("#\[wklej=\d\]#si", $string, $matches);
  9. for($i=0; $i<count($matches[0]); $i++)
  10. {
  11. $number = preg_replace("#\[wklej=(.*?)\]#si", "\\1", $matches[0][$i]);
  12. $string = str_replace($matches[0][$i], $wklej[$number], $string);
  13. }
  14. echo $string;
  15.  
  16. ?>
oomaster
Próbowałem trochę działać z bazą ale nie wyświetla się zmiany...

EDIT: Rozwiązanie problemu i działa :-)
  1. <?
  2. $txt = 'Lorem ipsum dolor sit amet, [foto id="97" size="small"] consetetur sadipscing elitr, sed diam nonumy eirmod tempor [foto id="143" size="big"] invidunt ut labore et dolore magna [foto id="139" size="big"] aliquyam erat, sed diam voluptua.';
  3. $tablica = preg_match_all('#\[foto id="(.*?)" size="(.*?)"\]#si', $txt, $matches);
  4. $comma_separated = implode(",", $matches[1]);
  5. $res = @mysql_query('SELECT id, img FROM foto WHERE id IN ('.$comma_separated.') ORDER BY FIELD(`id`, '.$comma_separated.') ASC;');
  6. $i=0;
  7. while( $row = mysql_fetch_assoc($res)) {
  8. $wklej[$i] = '<b>'.$row['id'].'</b>'; $txt = str_replace($matches[0][$i], $wklej[$i], $txt);
  9. $i++;
  10. }
  11. echo $txt;


Tylko czy to jest wydaje i nie będzie zbytnio obciążać ?
Michael2318
Jest OK, takie rozwiązanie miałem Ci zaproponować na PW, ale nie chciało mi się tego dokładnie objaśniać, a sądziłem że drogą skrótową do niczego nie dojdziemy wink.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.