[PHP] UBB: [img=nr] vervangen door image uit db?

Pagina: 1
Acties:

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
Ik ben bezig met een klein CMS-je, en in dit cms is het dus ook mogelijk om plaatjes in te voegen uit de database. In de database staat een tabel:
code:
1
2
3
+-------+-----+-----+
| imgID | url | alt |
+-------+-----+-----+

Stel de volgende record voor:
code:
1
2
3
4
5
+-------+--------------+--------------------+
| imgID | url       | alt           |
+-------+--------------+--------------------+
| 0     | gfx/ieps.gif | Dit is een plaatje |
+-------+--------------+--------------------+

Nu moet in de content de ubbcode [ img=0] vervangen worden door
[img]"gfx/ieps.gif"[/img]

Het probleem is wanneer je een "gewone" regex replace doet, je er geen db-request tussendoor kan doen...

ik zit nou een tijdje te klooien maar ik word er niet wijzer van :?

iemand een tip, hint, idee?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

Je zou uit [img=1] de id kunnen halen..
Met deze id zou je het specifieke plaatje uit de DB kunnen op halen.. (simpele "where ID=''")

Als je nu de url van het plaatje in een variable zet, dan kan je hem wel gebruiken in je ereg_replace..

Prutser

42


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
Maar hoe haal ik dan in 1e instantie die id uit de [img ] tag?

:? * drm 's gedachten zitten in de knoop

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 18:23

Pelle

🚴‍♂️

Op vrijdag 28 september 2001 13:30 schreef drm het volgende:
Maar hoe haal ik dan in 1e instantie die id uit de [img ] tag?

:? * drm 's gedachten zitten in de knoop
Kan je, voor je de pagina print, eerst niet kijken of er in de tekst [img]-tags staan? Zo ja, gooi ze even in een array en loop daarna die array door om naar aanleiding van de id's met behulp van je database de <img>-tags te createn.
Vervolgens ga je bij het printen van die tekst met een regex de [img]-tags vervangen door de bijbehorende <img>-tag.

* Pelle denkt dat het zo wel moet lukken

/edit
zin liep niet helemaal :)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
Hoe krijg ik dan bijvoorbeeld uit de volgende string
code:
1
2
3
4
5
bla meuk lorem ipsum en nog wat van die zooi [img=0] 
bla bla, [b]vel[/b] illum dolore eu feugiat nulla facilisis 
at [img=129] nonummy [url="http://sjaak.nl"]nibh[/url] 
euismod tincidunt ut laoreet dolore [img=500512] bla melp 
lerp ruelfnog

een array met per index de volgende informatie:
startpositie tag
eindpositie tag
id nummer

:?

dan weet ik genoeg... Maar daar kom ik dus niet uit...
En ik weiger de string character voor character door te lopen, want er moet gewoon een betere manier zijn...

edit: even ietsiepietsie beter leesbaar

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
beetje lame, maar is er niemand die (verder) antwoord heeft (of tips)?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • tomato
  • Registratie: November 1999
  • Niet online
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
function insert_image($id) {
   // SELECT blabla FROM blabla WHERE ID = $id
   return "[img]\"".$row["url"]."\"[/img]";
}

$p = "/\\[img=[0-9]+\]/ie";
$r = "insert_image($1)";

$s = preg_replace($p, $r, $s);
?>

Ofzo, verder moet je hier maar eens kijken als het niet lukt.

Een redelijk alternatief voor een replace callback zou in dit geval een preg_split met de flag PREG_SPLIT_DELIM_CAPTURE in combinatie met een implode zijn, anders zou het toch echt op handmatig parsen uitkomen ben ik bang.

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

PHP:
1
2
3
<?
$img_id = eregi_replace( "\\[img=([^[]*)\]", "\\1", $contents );
?>

Nu is de inhoud van $line toch 0??

Dan doe je volgens mij het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
<?
$sql = "select blabalblablabla where id='$img_id'";
$items = mysql_query($sql);
$item = mysql_fetch_array($items);

$url = $item[url];
$alt = $item[alt];

$contents = eregi_replace( "\\[img=([^[]*)\]", "[img]\"$url\"[/img]", $contents);
?>

Fouten voorbehouden svp :p

42


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
Op vrijdag 28 september 2001 16:00 schreef tomato het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
function insert_image($id) {
   // SELECT blabla FROM blabla WHERE ID = $id
   return "[img]\"".$row["url"]."\"[/img]";
}

$p = "/\\[img=[0-9]+\]/ie";
$r = "insert_image($1)";

$s = preg_replace($p, $r, $s);
?>

Ofzo, verder moet je hier maar eens kijken als het niet lukt.

Een redelijk alternatief voor een replace callback zou in dit geval een preg_split met de flag PREG_SPLIT_DELIM_CAPTURE in combinatie met een implode zijn, anders zou het toch echt op handmatig parsen uitkomen ben ik bang.
tomato is mijn held!!!
Dat is echt een rielekste manier, ik wist dus niet dat je ook functies aan kon roepen binnen een preg_replace... nu dus wel, en dat opent perspectieven wat betreft parsen!!!

Thnx for ur help, Prutser ook :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
for the record en search

De regex heeft geen haakjes, dus die moest ik wel veranderen in
code:
1
/\\[img=([0-9]+)\]/ie

maar ach...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Op vrijdag 28 september 2001 16:27 schreef drm het volgende:
tomato is mijn held!!!
Dat is echt een rielekste manier, ik wist dus niet dat je ook functies aan kon roepen binnen een preg_replace...
Dat komt omdat je held tomato (wie kent hem niet ;)) de e modifier heeft toegevoegd aan je regex.. modifiers zijn die dingen die na de afsluitende delimiter staan.. /regex/ie <-- hierbij zijn dit: '//' de delimiters en dit: 'ie' de modifiers

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 15-09 16:01

killercow

eth0

hmfz, zou het kunnen dat hij bij maar 1 nummer teruggeeft?
ik krijg dus steeds een van de eerste 10 plaatjes te zien :(
iemand enig idee? bedankt alvast

openkat.nl al gezien?


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 15-09 16:01

killercow

eth0

up ^

openkat.nl al gezien?


Verwijderd

kijk op http://www.phpfreakz.com en kijk of de regex goed staat...
Pagina: 1