[PHP] str_replace in array werkt maar 1x

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een cms systeem waarbij gebruikers zelf toe kunnen voegen. De foto wordt opgeslagen in de tabel fotos (id,naam,bestandsnaam,commentaar). Als je dan je pagina's bij gaat werken in de cms, moet je een foto kunnen laten weergeven door simpelweg {naam} te typen, waarbij 'naam' de naam van de foto is. De teksten zijn opgeslagen in de tabel teksten (id,naam,tekst,datum) waarbij naam de naam van de pagina is.

Dit is index.php:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php include("boven.php"); 
$result = mysql_query("SELECT tekst FROM teksten WHERE id='1'");
if ($result === false)
{
    echo "De query is niet uitgevoerd.<br />";
}
$row = mysql_fetch_assoc($result);
$fotos = mysql_query("SELECT naam,bestandsnaam,commentaar FROM fotos");
if ($fotos === false)
{
    echo "De query is niet uitgevoerd.<br />";
}
while ($row_fotos = mysql_fetch_assoc($fotos))
{
    $link = '
    <table border="0">
    <tr><td>
    <a href="fotos/upload/'.$row_fotos['bestandsnaam'].'">
    <img src="fotos/resized/'.$row_fotos['bestandsnaam'].'" alt="" style="border-style: none;" /></a>
    </td></tr><tr><td>'.$row_fotos['commentaar'].'</td></tr></table>';
    $tekst = str_replace("{".$row_fotos['naam']."}",$link,$row['tekst']);
}
echo nl2br($tekst);
include("onder.php"); ?>


In de tabel fotos staan 2 foto's (id,naam,bestandsnaam,commentaar)
4 bank n_Bank_copy.jpg de bank
3 juwelier n_Juwelier_copy.jpg de juwelier

Wat ik krijg op index.php:
code:
1
<br />  <table border="0"><br />    <tr><td><br />  <a href="fotos/upload/n_Juwelier_copy.jpg"><br />   <img src="fotos/resized/n_Juwelier_copy.jpg" alt="" style="border-style: none;" /></a><br />    </td></tr><tr><td>de juwelier</td></tr></table><br /><br />{bank}


Ik hoop dat het zo een beetje duidelijk is. Hoe kan ik ervoor zorgen dat alle namen worden omgezet in foto's?

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

je overschrijft $tekst elke keer met data uit de $row['tekst'].

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • magiel
  • Registratie: Januari 2005
  • Laatst online: 20-09 08:19
je wilt het als volgt:

code:
1
$tekst .= str_replace("{".$row_fotos['naam']."}",$link,$row['tekst']);


De punt voor de "=" plakt de nieuwe waarde achter de al bestaande.

Ik wil het er _niet_ over hebben.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
magiel schreef op donderdag 22 januari 2009 @ 17:16:
je wilt het als volgt:

code:
1
$tekst .= str_replace("{".$row_fotos['naam']."}",$link,$row['tekst']);


De punt voor de "=" plakt de nieuwe waarde achter de al bestaande.
Idd, stom van me... Maar hij doet het nog niet helemaal... Nu krijg ik dit:

code:
1
{juwelier}<br /><br /><br />    <table border="0"><br />    <tr><td><br />  <a href="fotos/upload/n_Bank_copy.jpg"><br />   <img src="fotos/resized/n_Bank_copy.jpg" alt="" style="border-style: none;" /></a><br />    </td></tr><tr><td>de bank</td></tr></table><br />   <table border="0"><br />    <tr><td><br />  <a href="fotos/upload/n_Juwelier_copy.jpg"><br />   <img src="fotos/resized/n_Juwelier_copy.jpg" alt="" style="border-style: none;" /></a><br />    </td></tr><tr><td>de juwelier</td></tr></table><br /><br />{bank}


Nu moet dus alles tussen { en } nog weggehaalt worden. Als ik simpelweg onder dit stuk

code:
1
$tekst .= str_replace("{".$row_fotos['naam']."}",$link,$row['tekst']);


dit neerzet

code:
1
$tekst .= str_replace("{".$row_fotos['naam']."}","",$row['tekst']);


doet hij het ook niet. Ook niet als ik die punt weghaal. Volgensmij klopt de logica in mijn script niet?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Kijk eens even goed naar dit regeltje:
PHP:
1
$tekst = str_replace("{".$row_fotos['naam']."}",$link,$row['tekst']);

Als ik daar eens van maak:
PHP:
1
$tekst = str_replace($letter, 'X', $row['tekst']);

En ik zet er een loopje omheen:
PHP:
1
2
3
4
$row['text'] = 'bla bla bla...';
foreach(array('a', 'b') as $letter) {
   $tekst = str_replace($letter, 'X', $row['tekst']);
}

Wat is dan aan het eind de output van $tekst?

LuCarD gaf het antwoord al. magiel stuurt je helaas de verkeerde kant op

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik snap wat er gebeurd. Als $row['tekst'] voor de 2e keer wordt vervangen krijg je weer het origineel, dus word alleen de 2e waarde van de array vervangen. Maar goed, de plaatjes worden wel allebei weergegeven, dus ik dacht dat ik in de goeie richting zat.

Op welke manier kan ik dit dan het beste doen? Ik zou echt niet weten wat de goede manier is...

[ Voor 29% gewijzigd door Verwijderd op 25-01-2009 17:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry dat ik hem kick, maar ik kan me niet voorstellen dat niemand me kan helpen?
Ik vraag niemand een script voor me te schrijven maar een zetje in de juiste richting zou fijn zijn.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Ik kan me niet voorstellen dat je er zelf niet uitkomt, maar goed. Een zetje kan wel. Stel je hebt een velletje papier met tekst, je maakt er een kopie van om aantekeningen op te maken. Als je de eerste aantekening hebt gemaakt, maak je dan een nieuwe kopie of ga je gewoon met hetzelfde velletje papier verder? En dan nog een vraag: is het niet makkelijker om gewoon direct op het eerste velletje te gaan schrijven? Wat moet je nog met het origineel?

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


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Verwijderd schreef op zondag 25 januari 2009 @ 17:19:
Sorry dat ik hem kick, maar ik kan me niet voorstellen dat niemand me kan helpen?
Ik vraag niemand een script voor me te schrijven maar een zetje in de juiste richting zou fijn zijn.
Kom op zeg, je ziet toch wat er gebeurt? $tekst wordt steeds overschreven. Dus ofwel print je in de lus, ofwel concat je alles aan elkaar met .= en print je na de lus.

March of the Eagles

Pagina: 1