Gå til innhold

[Løst] Filtrere ut bilder fra blogginnlegg gjennom SQL


Anbefalte innlegg

Hei.

 

For å sette dere inn i selve problemstillingen:

 

Jeg lager en oversikt over nyeste innlegg brukere poster fra sin blogg. Problemet er at jeg ønsker at det velges ett tilfeldig bilde fra blogginnlegget som vises som forsidebilde på denne listen.

 

Jeg har tenkt over noen løsninger, men kommet frem til at følgende ikke vil fungere:

 

- når brukere laster opp bilder, kan man legge til bildene i databasen slik at jeg enkelt kan finne et bilde som forsidebilet. Problemet oppstår om brukeren velger å ikke bruke det spesifikke bildet man har lastet opp - da vil det vises uansett noe som er litt dumt hvis bildet for eksempel ikke har noe med selve blogginnlegget å gjøre.

 

Så, har noen en idè til hvordan jeg kan finne alle bildene, eller ett tilfeldig bilde, gjennom et blogginnlegg med PHP og MySQL?

Endret av winter2012
Lenke til kommentar
Videoannonse
Annonse

Ja, det er det jeg også tenker. Har søkt litt på Google men ikke funnet noen treff som gir meg det jeg vil ha eller nærmere. Men det du skriver høres veldig smart ut og er nok den beste løsningen. Litt usikker på hvordan jeg skal filtrere ut img-taggene fra innlegget.

Lenke til kommentar

Hvis du går ut i fra at et blogginnlegg inneholder dette: Heija bloggen, se her da <img src="bilde1" /> og her <img src="bilde2" />

 

så kan du bruke følgende kode

<?php
$entry = teksten-her-oppe ^
$imgs = explode("<img", $entry);

$images = array();
foreach($imgs as $a){
$img = explode('src="', $a);
$img = explode('"', $img[1]);

// evt sjekke om det er et bilde her
array_push($image, $img[0]); // Husker ikke helt rekkefølgen om det er string eller array først
}

$frontpic = $images[rand(0, (count($images)-1))];

Det er mitt forslag hvertfall

Lenke til kommentar

Ja, det er det jeg også tenker. Har søkt litt på Google men ikke funnet noen treff som gir meg det jeg vil ha eller nærmere. Men det du skriver høres veldig smart ut og er nok den beste løsningen. Litt usikker på hvordan jeg skal filtrere ut img-taggene fra innlegget.

 

Du kan filtrere dem ut med for eksempel preg_match_all, noe slikt:

 

<?php

$string =
'Test hei
<img src="bilde1">
string
<img src="bilde2" />
Mere tekst her........
<img src="DSAAAAAAAAAAAAAAAAAAAA">
';

preg_match_all('/<img[^>]+>/i', $string, $var);

echo 'Det finnes totalt <strong>' . count($var[0]) . '</strong> img-tager i stringen. Disse ble funnet:<br>';

foreach($var[0] as $id => $value)
echo '#' . ($id+1) . ': ' . htmlspecialchars($value) . '<br>';

?>

Lenke til kommentar

Takk begge to for god respons:)

 

Ja, det er det jeg også tenker. Har søkt litt på Google men ikke funnet noen treff som gir meg det jeg vil ha eller nærmere. Men det du skriver høres veldig smart ut og er nok den beste løsningen. Litt usikker på hvordan jeg skal filtrere ut img-taggene fra innlegget.

 

Du kan filtrere dem ut med for eksempel preg_match_all, noe slikt:

 

&--#60;?php

$string =
'Test hei
&--#60;img src="bilde1"&--#62;
string
&--#60;img src="bilde2" /&--#62;
Mere tekst her........
&--#60;img src="DSAAAAAAAAAAAAAAAAAAAA"&--#62;
';

preg_match_all('/&--#60;img[^&--#62;]+&--#62;/i', $string, $var);

echo 'Det finnes totalt &--#60;strong&--#62;' . count($var[0]) . '&--#60;/strong&--#62; img-tager i stringen. Disse ble funnet:&--#60;br&--#62;';

foreach($var[0] as $id =&--#62; $value)
echo '#' . ($id+1) . ': ' . htmlspecialchars($value) . '&--#60;br&--#62;';

?&--#62;

 

Denne fikk jeg til å fungere utmerket, virker som om dette var en god løsning. Prøvde ut litt hvordan jeg kan sette en limit og evt. sette et tilfeldig bilde som forsidebilde men fikk det ikke helt til, har du noen tips til hvordan jeg kan gjøre dette? Tusen takk for hjelpen, dette sparte meg for mye bry,

Endret av winter2012
Lenke til kommentar

Takk begge to for god respons:)

 

Ja, det er det jeg også tenker. Har søkt litt på Google men ikke funnet noen treff som gir meg det jeg vil ha eller nærmere. Men det du skriver høres veldig smart ut og er nok den beste løsningen. Litt usikker på hvordan jeg skal filtrere ut img-taggene fra innlegget.

 

Du kan filtrere dem ut med for eksempel preg_match_all, noe slikt:

 

&--#60;?php

$string =
'Test hei
&--#60;img src="bilde1"&--#62;
string
&--#60;img src="bilde2" /&--#62;
Mere tekst her........
&--#60;img src="DSAAAAAAAAAAAAAAAAAAAA"&--#62;
';

preg_match_all('/&--#60;img[^&--#62;]+&--#62;/i', $string, $var);

echo 'Det finnes totalt &--#60;strong&--#62;' . count($var[0]) . '&--#60;/strong&--#62; img-tager i stringen. Disse ble funnet:&--#60;br&--#62;';

foreach($var[0] as $id =&--#62; $value)
echo '#' . ($id+1) . ': ' . htmlspecialchars($value) . '&--#60;br&--#62;';

?&--#62;

 

Denne fikk jeg til å fungere utmerket, virker som om dette var en god løsning. Prøvde ut litt hvordan jeg kan sette en limit og evt. sette et tilfeldig bilde som forsidebilde men fikk det ikke helt til, har du noen tips til hvordan jeg kan gjøre dette? Tusen takk for hjelpen, dette sparte meg for mye bry,

 

Sette limit? På hvilken måte?

 

Her er en metode for å hente ut et tilfeldig bilde av bildene hvertfall: bruk array_rand for å få ut et tilfeldig bilde og DOMDocument for å extracte innholdet i src="" tagen på bildet.

 

Eksempel:

 

<?php

$DOM = new DOMDocument();

$string =
'Test hei
<img src="bild1e1">
string
<img src="bilde2" />
Mere tekst her........
<img src="bilde3" />
<img src="bilde4" />
fffffff
';

preg_match_all('/<img[^>]+>/i', $string, $var);

echo 'Det finnes totalt <strong>' . count($var[0]) . '</strong> img-tager i stringen. Disse ble funnet:<br>';

foreach($var[0] as $id => $value)
echo '#' . ($id+1) . ': ' . htmlspecialchars($value) . '<br>';

echo '<br><br>';

$randomPic = array_rand($var[0], 1);

$DOM->loadHTML($var[0][$randomPic]);
$tag = $DOM->getElementsByTagName('img');
foreach ($tag as $i)
echo '<strong>Random bilde-URL:</strong> ' . $i->getAttribute('src');

?>

  • Liker 1
Lenke til kommentar

Takk begge to for god respons:)

 

Ja, det er det jeg også tenker. Har søkt litt på Google men ikke funnet noen treff som gir meg det jeg vil ha eller nærmere. Men det du skriver høres veldig smart ut og er nok den beste løsningen. Litt usikker på hvordan jeg skal filtrere ut img-taggene fra innlegget.

 

Du kan filtrere dem ut med for eksempel preg_match_all, noe slikt:

 

&--#60;?php

$string =
'Test hei
&--#60;img src="bilde1"&--#62;
string
&--#60;img src="bilde2" /&--#62;
Mere tekst her........
&--#60;img src="DSAAAAAAAAAAAAAAAAAAAA"&--#62;
';

preg_match_all('/&--#60;img[^&--#62;]+&--#62;/i', $string, $var);

echo 'Det finnes totalt &--#60;strong&--#62;' . count($var[0]) . '&--#60;/strong&--#62; img-tager i stringen. Disse ble funnet:&--#60;br&--#62;';

foreach($var[0] as $id =&--#62; $value)
echo '#' . ($id+1) . ': ' . htmlspecialchars($value) . '&--#60;br&--#62;';

?&--#62;

 

Denne fikk jeg til å fungere utmerket, virker som om dette var en god løsning. Prøvde ut litt hvordan jeg kan sette en limit og evt. sette et tilfeldig bilde som forsidebilde men fikk det ikke helt til, har du noen tips til hvordan jeg kan gjøre dette? Tusen takk for hjelpen, dette sparte meg for mye bry,

 

Sette limit? På hvilken måte?

 

Her er en metode for å hente ut et tilfeldig bilde av bildene hvertfall: bruk array_rand for å få ut et tilfeldig bilde og DOMDocument for å extracte innholdet i src="" tagen på bildet.

 

Eksempel:

 

<?php

$DOM = new DOMDocument();

$string =
'Test hei
<img src="bild1e1">
string
<img src="bilde2" />
Mere tekst her........
<img src="bilde3" />
<img src="bilde4" />
fffffff
';

preg_match_all('/<img[^>]+>/i', $string, $var);

echo 'Det finnes totalt <strong>' . count($var[0]) . '</strong> img-tager i stringen. Disse ble funnet:<br>';

foreach($var[0] as $id => $value)
echo '#' . ($id+1) . ': ' . htmlspecialchars($value) . '<br>';

echo '<br><br>';

$randomPic = array_rand($var[0], 1);

$DOM->loadHTML($var[0][$randomPic]);
$tag = $DOM->getElementsByTagName('img');
foreach ($tag as $i)
echo '<strong>Random bilde-URL:</strong> ' . $i->getAttribute('src');

?>

 

Dette var akkurat det jeg trengte,

takk igjen for hurtig respons.

Lenke til kommentar

&--#60;?php

$DOM = new DOMDocument();

$string =
'Test hei
&--#60;img src="bild1e1"&--#62;
string
&--#60;img src="bilde2" /&--#62;
Mere tekst her........
&--#60;img src="bilde3" /&--#62;
&--#60;img src="bilde4" /&--#62;
fffffff
';

preg_match_all('/&--#60;img[^&--#62;]+&--#62;/i', $string, $var);

echo 'Det finnes totalt &--#60;strong&--#62;' . count($var[0]) . '&--#60;/strong&--#62; img-tager i stringen. Disse ble funnet:&--#60;br&--#62;';

foreach($var[0] as $id =&--#62; $value)
echo '#' . ($id+1) . ': ' . htmlspecialchars($value) . '&--#60;br&--#62;';

echo '&--#60;br&--#62;&--#60;br&--#62;';

$randomPic = array_rand($var[0], 1);

$DOM-&--#62;loadHTML($var[0][$randomPic]);
$tag = $DOM-&--#62;getElementsByTagName('img');
foreach ($tag as $i)
echo '&--#60;strong&--#62;Random bilde-URL:&--#60;/strong&--#62; ' . $i-&--#62;getAttribute('src');

?&--#62;

Kan komme til nytte i framtiden, så stjeler den jeg også ^^ Endret av molty
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...