Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Wyciągamy dane z bazy, tag <img src=...
Forum PHP.pl > Forum > Przedszkole
in5ane
Elo, mam pytanko. Jak zrobić, że jak pobieram dane z bazy i mam już:
  1. <?php
  2. $row = mysql_fetch_array ($query);
  3. ?>

i teraz chcę zrobić coś takiego, że jeżeli skrypt napotka w wyciągniętym tekście z bazy danych tag <img src=blabla.jpg>, to żeby przed tym img dodało <a href="img.php">, a po tym img dodało </a>.

Jak coś takiego zrobić? Może jakiś IF? Jakieś specjalne funkcje? Jakieś inne pomoce?


Z góry dziękuję.
Inzabi
Użyj wyrażen regularnych i funkcji na przykład preg_replace.
in5ane
No dobrze, na początku wiem jak zrobić z tym <a href=""> ale co zrobić z tym </a> jak tak <img kończy się tylko tak />
A przecież wiele tagów może mi się kończyć właśnie na />

A więc?

Obecny kod:
  1. <?php
  2. include('config.php');
  3.  
  4. $query = "SELECT * FROM page_news WHERE id = '35'";
  5. $result = mysql_query($query);
  6. $row = mysql_fetch_array($result);
  7.  
  8. $tresc = $row['tresc'];
  9.  
  10. echo str_replace("<img", "<a href=\"http://www.wp.pl\"><img", $tresc);
  11. ?>
drPayton
  1. <?php
  2. preg_match_all('/<img[[:space:]].*?src="([^"]+)".*?>/is', $tresc, $matches, PREG_SET_ORDER);
  3. foreach($matches AS $match) {
  4. $tresc = str_replace($match[0], '<a href="" title="">'.$match[0].'</a>', $tresc);
  5. }

Mniej więcej tak. Pod $match[0] masz cały tag img, pod $match[1] masz to co jest w src tagu img, np
  1. <?php
  2. $match[0] = '<img src="http://adres.pliku.z.obrazkiem/obrazek.jpg" alt="" blebleble inne atrybuty />';
  3. $match[1] = 'http://adres.pliku.z.obrazkiem/obrazek.jpg';
  4. ?>

Nie zrobiłem tego preg_replace'em, z uwagi na to, iż ta metoda daje możliwość w obrębie pętli foreach na np, określenie rozmiarów obrazka etc, a zakładam, że chodzi o dodanie popupów winksmiley.jpg
in5ane
Ale to ma pobierać z bazy.
A przykładowa treść w bazie to:
Kod
<p style="text-align: justify;">Lorem ipsu<strike>m dolor sit amet, conse</strike>ctetuer adipiscing elit. Curabitur nisi ante, adipiscing eget, fermentum sed, egestas ac, elit. Etiam sed dolor. In porttitor ullamcorper lig<b>ula. Nam in ipsu</b>m. Mauris rhoncus mi nec odio. Duis interdum. Nam iaculis felis sed lorem. Nulla rhoncus odio nec erat. Sed elit ligula, nonummy ac, tincidunt quis, dignissim vita<i>e, magna. Phasellus eget augue vel nulla bibendum ultrices. Nullam pellentesque eros ultricies turpis. Sed neque est, lacinia a, suscipit ut, luctus ut, ipsum. Vest</i>ibulum blandit tellus quis est. Nam aliquam libero id tellus. Sed lectus. Nulla elementum. Duis ac lacus. Etiam eget nisi vel ante hendrerit dictum. Etiam augue. Curabitur ut massa ut nunc convallis tincidunt.</p>
<p>&nbsp;</p>
<p style="text-align: justify;">Etiam ac sem. Nulla facilisi. Phasellus hendrerit imperdiet enim. Phasellus ac lectus rhoncus elit sollicitudin consequat. Quisque tortor mauris, lobortis imperdiet, elementum sit amet, con<u>dimentu</u>m vitae, diam. Cras lectus ligula, faucibus et, placerat vel, ultrices et, turpis. Proin et orci. Duis varius hendrerit lorem. Sed eu mi. Sed mi eros, vehicula sed, tincidunt vel, rhoncus et, nunc.<img width="150" height="216" border="2" align="right" src="/userfiles/image/foty/26901757.jpg" alt="" style="padding: 5px; margin-left: 5px;" /></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Mauris egestas, dui id rutrum pulvinar, ante augueultrices libero, vel hendrerit leo lacus a elit. Phasellus nunc tellus, tempor eu, convallis placerat, iaculis eget, metus. In imperdiet faucibus leo. Duis vehicula elementum nisl. Ut turpis. Proin massa leo, feugiat a, sollicitudin a, suscipit nec, nulla. Donec convallis consequat tortor. Duis sed pede ut pede ornare ornare. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi ullamcorper. Aenean ac diam. Fusce velit velit, mollis sit amet, vulputate eu, auctor vitae, erat.</p>
drPayton
Skąd ten string się bierze to nie ma znaczenia akurat. Z czym konkretnie masz problem?
Ogólnie, według tego co napisałeś:
  1. <?php
  2. include('config.php');
  3.  
  4. $query = "SELECT * FROM page_news WHERE id = '35'";
  5. $result = mysql_query($query);
  6. $row = mysql_fetch_array($result);
  7.  
  8. $tresc = $row['tresc'];
  9.  
  10. preg_match_all('/<img[[:space:]].*?src="([^"]+)".*?>/is', $tresc, $matches, PREG_SET_ORDER);
  11. foreach($matches AS $match) {
  12. $tresc = str_replace($match[0], '<a href="ADRES" title="TYTUŁ">'.$match[0].'</a>', $tresc);
  13. }
  14. echo $tresc;

Jeżeli nic nie pomieszałem, to taki kod powinien wszystkie obrazki w stringu (tu: pobranym z bazy i zapisanym do zmiennej $tresc) "otoczyć" linkiem...
Można prościej, zwykłym preg_replace'em, ale jak już pisałem wcześniej dzięki takiemu podejściu można wewnątrz pętli foreach np sprawdzić czy plik istnieje, sprawdzić jego rozmiary, utworzyć miniaturę etc
in5ane
A jak mogę pobrać sobie nazwę zdjęcia i ścieżki z src ? No bo w tym tekście może być np. 10 obrazków i żeby pobrało i każdy obrazek który będzie linkiem miał w adresie tam index.php?obrazek=$nazwa_obrazka.

Z góry thx smile.gif


@edit: już wiem tongue.gif, ja głupi tongue.gif
drPayton
No właśnie do tego miało to służyć winksmiley.jpg A we wcześniejszym poście napisałem jak:
W obrębie pętli foreach (przykładowe dane oczywiście)
  1. <?php
  2. $match[0] = '<img src="http://adres.pliku.z.obrazkiem/obrazek.jpg" alt="" blebleble inne atrybuty />';
  3. $match[1] = 'http://adres.pliku.z.obrazkiem/obrazek.jpg';
  4. ?>

A nazwę ze ścieżki pobierasz tak:
  1. <?php
  2. $img  = explode('/', $match[1]);
  3. $imgFile = array_pop($img);
  4. $temp  = explode('.', $imgFile);
  5. $imageExtension = array_pop($temp); // rozszerzenie
  6. $imageName  = implode('.', $temp); // nazwa pliku
  7. $image = $imageName . '.' . $imageExtension;
  8. ?>
in5ane
I zrobiłem tak:
  1. <?php
  2. preg_match_all('/<img[[:space:]].*?src="([^"]+)".*?>/is', $tresc, $matches, PREG_SET_ORDER);
  3. foreach($matches AS $match) {
  4. ////image////
  5. $img = explode('/', $match[1]);
  6. $imgFile = array_pop($img);
  7. $temp = explode('.', $imgFile);
  8. $imageExtension = array_pop($temp); // rozszerzenie
  9. $imageName = implode('.', $temp); // nazwa pliku
  10. $image = $imageName . '.' . $imageExtension;
  11. ////image////
  12. $tresc = str_replace($match[0], "<a href=\"#\" onClick=\"javascript:NoweOkno($image)\">$match[0]</a>", $tresc);
  13. }


  1. <script language='JavaScript' type='text/javascript'>
  2. function NoweOkno(url)
  3. {
  4. window.open('img-news.php?name='url, 'picture', 'width=680,height=540,left=100,top=30,scrollbars=yes,toolbar=no');
  5. };


I mi to w ogóle nie śmiga. Nie otwiera się okienko.
drPayton
Nie:
  1. <?php
  2. (...)
  3. ////image////
  4. $tresc = str_replace($match[0], "<a href=\"#\" onClick=\"javascript:NoweOkno($image)\">$match[0]</a>", $tresc);
  5. (...)
  6. ?>

tylko:
  1. <?php
  2. (...)
  3. ////image////
  4. $tresc = str_replace($match[0], "<a href=\"#\" onClick=\"javascript:NoweOkno('$image')\">".$match[0]."</a>", $tresc);
  5. (...)
  6. ?>

A jeżeli nadal nie będzie działało, zobacz w źródło strony i ewentualnie podaj tu odpowiedni jego fragment
in5ane
Nie śmiga...

w źródle:
  1. <a href="#" onClick="javascript:NoweOkno(26901757.jpg)"><img width="150" height="216" border="2" align="right" style="padding: 5px; margin-left: 5px;" alt="" src="/userfiles/image/foty/26901757.jpg" /></a>


Strona się odświeża, do adresu dodaje się # i lipa.
drPayton
Edytowałem post (zanim odpisałeś jeszcze), zapomniałem dodać apostrofów do parametru funkcji JS. Dodaj i sprawdź
in5ane
Nie działa
drPayton
Źródło...
in5ane
  1. <a href="#" onClick="javascript:NoweOkno('26901757.jpg')"><img width="150" height="216" border="2" align="right" style="padding: 5px; margin-left: 5px;" alt="" src="/userfiles/image/foty/26901757.jpg" />
drPayton
"Swoją" część zrobiłem, to jak widzę działa jak należy. Natomiast Twój problem to JS. Sam mam problemy z popupami na IE7 więc dalej już nie pomogę
in5ane
Dobra, to pytanie do innych żeby pomogli.
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.