[PHP/Javascript] Regels database uitvoer te lang

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • masser120
  • Registratie: Januari 2004
  • Laatst online: 08-06 15:46
Hoi mensen,

Ik zit een met een beetje een vaag probleem, dat waarschijnlijk te maken heeft met iets in php.

Ik heb na een beetje puzzelen en aanpassen van een scriptje via javascript een diashow gemaakt, waarbij de foto's en de beschrijvingen uit een MySQL database worden gehaald dmv PHP.

Bij elk album werkt dit perfect! Op een enkele na... De regels in een bepaalde beschrijving zijn behoorlijk lang en helaas ontstaat daardoor een nieuwe regel in het uiteindelijke HTML-bestand. Hierdoor werkt de javascript niet meer, aangezien een variabele alleen maar kan worden toegewezen op één regel.

Het PHP script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php echo '.......
...............
var Picture = new Array(); 
var Caption = new Array(); 
var showHot = false;';
$i=1;
  do {
    printf('
    Picture[%s]  = "%s";
    Caption[%s]  =  "<b>%s</b><br>%s";', $i, doresize($picwidth, $picheight, $myrow["adres"]), $i, str_replace('"', "'", $myrow["titel"]),  str_replace('"', "'", str_replace("\n", "<br>", $myrow["beschrijving"])) );
    $i++;
  } while ($myrow = mysql_fetch_array($result));
  
?>

var tss;
var iss;
var jss = 0;
var pss = <?php echo "$last";?>;
var stop = false;

var preLoad = new Array();


Dit resulteert in bijvoorbeeld het volgende album:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var Picture = new Array(); 
var Caption = new Array(); 
var showHot = false;
    Picture[1]  = "weerfoto/2005_08_29/IMG_1983.jpg";
    Caption[1]  =  "<b>Avond</b><br>Avondfoto markdal";
    Picture[2]  = "weerfoto/2005_08_29/IMG_1997.jpg";
    Caption[2]  =  "<b>Vrouw studeert</b><br>In het park aan de Mark";
    Picture[3]  = "weerfoto/2005_08_29/IMG_2004.jpg";
    Caption[3]  =  "<b>Warme omgeving.</b><br>Een warme omgeving (vanwege de kleuren)";
    Picture[4]  = "weerfoto/2005_08_29/IMG_2005.jpg";
    Caption[4]  =  "<b>Het Markdal</b><br>Het Markdal op een mooie zomeravond als de zon al achter de bomen is verdwenen.";
var tss;
var iss;
var jss = 0;
var pss = 4;
var stop = false;

var preLoad = new Array();


Dit werkt dus perfect. Alleen bij hele lange regels of regels met enters gebeurt er dus dit:

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
    Picture[181]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1556.jpg";
    Caption[181]  =  "<b>Golden Gate Bridge</b><br>We reden door. Toen we in de buurt van San Fransisco kwamen daalde de temperatuur in rap tempo. Vertrokken met 35graden en aangekomen in San Fransisco met 15graden (wat een verschil zeg!).
<br>We zijn een beetje omgereden om als eerste de Golden Gate bridge te kunnen zien. De mooiste brug van San Fransisco. Vervolgens zijn we eroverheen gereden.";
    Picture[182]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1568.jpg";
    Caption[182]  =  "<b>Lombard Street</b><br>Vervolgens reden we door San Fransisco in, op weg naar de volgende attractie: Lombard Street.
<br>Deze straat wilden we afrijden, daarvoor moesten we wel eerst lang in de file staan, want het was zondag en dus waren we niet de enige. We moesten wachten in een straat die een stijlheid had van maar liefst 37%! Ik liep uit de auto om te kijken hoever het nog was. Terwijl ik naar boven liep, kon ik de uitlaatgassen ruiken en ineens zag ik rechts aan de kant een auto staan met ontplofte motor! Maar goed, onze Ford Explorer kon het allemaal makkelijk aan en we zijn de straat naar beneden gereden. Best leuk!";
    Picture[183]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1573.jpg";
    Caption[183]  =  "<b>Union square</b><br>Daarna doorgereden naar Union square";
    Picture[184]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1577.jpg";
    Caption[184]  =  "<b>Stijle straten</b><br>Goed, doorgereden naar hotel bij Union Square, 's avonds lekker gegeten in de Cheesecake factory (dat Amerikanen al dat voedsel naar binnen kunnen werken zeg! Ik had nog niet eens de helft op en dat is voor een Nederlander al veel!), 's nachts buikpijn en diarree :p (wtf?) en volgende ochtend op tijd opgestaan om de hele stad af te lopen. Na een halve kilometer lopen kwamen we in wijken met van dit soort Victoriaanse huizen en werkelijk héle schuine straten!";
    Picture[185]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1578.jpg";
    Caption[185]  =  "<b>Lafayette park famous church, naam????</b><br>We liepen door en kwamen bij een beroemde kerk uit, maar ik kan daarvan de naam nergens meer op internet vinden. Verscheidene films (met trouwerijen) zijn hier opgenomen.
<br>Dit is de eerste kerk in de hele VS die ik gezien heb, die van binnen en buiten lijkt op een Europese kerk uit de 16e eeuw!";
    Picture[186]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1582.jpg";
    Caption[186]  =  "<b>Victoriaanse huizen</b><br>We liepen door in de Pacific Heights buurt en we bleven maar Victoriaanse huizen tegenkomen. Mooie huizen dus!";
    Picture[187]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1583.jpg";
    Caption[187]  =  "<b>The Needle in de mist</b><br>We liepen door richting Chinatown. Onderweg keken we tussen de Victoriaanse huizen door richting 'The Needle', waarvan het topje in de mist verscholen was (overigens was het die dag weer 15graden)";
    Picture[188]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1587.jpg";
    Caption[188]  =  "<b>Chinatown</b><br>We kwamen in Chinatown aan en ineens voelden we ons alsof we niet meer in Amerika waren. Alles was in het Chinees geschreven, we waren omgeven door Chinezen, over al was het markt, druk, druk, druk, het zat bomvol Chinezen! Wel erg vet :).";
    Picture[189]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1592.jpg";
    Caption[189]  =  "<b>No trespassing!</b><br>Violators will be shot!
<br>(wat ze daar wel niet verzinnen...)";
    Picture[190]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1594.jpg";
    Caption[190]  =  "<b>Alcatraz</b><br>We liepen door naar Pier39, een pier met heel veel winkels. Daar hadden we een mooi zicht op Alcatraz, waar we overigens niet naartoe zijn gegaan, omdat men een half jaar van tevoren moet reserveren :@.";


Elke keer wanneer een nieuwe regel ontstaat (wat ik al heb laten vervangen door de HTML tag <br> via Str_replace("\n","<br>",$text);) staat er <br>. Maar helaas maakt in de html code php daar ook nieuwe regels van, zodat het allemaal niet meer werkt.

Als ik via kladblok/dreamweaver dit gegenereerde stuk bewerk door die nieuwe regel telkens weg te halen doet deze het wel. Hierdoor krijg je dus dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    Picture[181]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1556.jpg";
    Caption[181]  =  "<b>Golden Gate Bridge</b><br>We reden door. Toen we in de buurt van San Fransisco kwamen daalde de temperatuur in rap tempo. Vertrokken met 35graden en aangekomen in San Fransisco met 15graden (wat een verschil zeg!).<br>We zijn een beetje omgereden om als eerste de Golden Gate bridge te kunnen zien. De mooiste brug van San Fransisco. Vervolgens zijn we eroverheen gereden.";
    Picture[182]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1568.jpg";
    Caption[182]  =  "<b>Lombard Street</b><br>Vervolgens reden we door San Fransisco in, op weg naar de volgende attractie: Lombard Street.<br>Deze straat wilden we afrijden, daarvoor moesten we wel eerst lang in de file staan, want het was zondag en dus waren we niet de enige. We moesten wachten in een straat die een stijlheid had van maar liefst 37%! Ik liep uit de auto om te kijken hoever het nog was. Terwijl ik naar boven liep, kon ik de uitlaatgassen ruiken en ineens zag ik rechts aan de kant een auto staan met ontplofte motor! Maar goed, onze Ford Explorer kon het allemaal makkelijk aan en we zijn de straat naar beneden gereden. Best leuk!";
    Picture[183]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1573.jpg";
    Caption[183]  =  "<b>Union square</b><br>Daarna doorgereden naar Union square";
    Picture[184]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1577.jpg";
    Caption[184]  =  "<b>Stijle straten</b><br>Goed, doorgereden naar hotel bij Union Square, 's avonds lekker gegeten in de Cheesecake factory (dat Amerikanen al dat voedsel naar binnen kunnen werken zeg! Ik had nog niet eens de helft op en dat is voor een Nederlander al veel!), 's nachts buikpijn en diarree :p (wtf?) en volgende ochtend op tijd opgestaan om de hele stad af te lopen. Na een halve kilometer lopen kwamen we in wijken met van dit soort Victoriaanse huizen en werkelijk héle schuine straten!";
    Picture[185]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1578.jpg";
    Caption[185]  =  "<b>Lafayette park famous church, naam????</b><br>We liepen door en kwamen bij een beroemde kerk uit, maar ik kan daarvan de naam nergens meer op internet vinden. Verscheidene films (met trouwerijen) zijn hier opgenomen.<br>Dit is de eerste kerk in de hele VS die ik gezien heb, die van binnen en buiten lijkt op een Europese kerk uit de 16e eeuw!";
    Picture[186]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1582.jpg";
    Caption[186]  =  "<b>Victoriaanse huizen</b><br>We liepen door in de Pacific Heights buurt en we bleven maar Victoriaanse huizen tegenkomen. Mooie huizen dus!";
    Picture[187]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1583.jpg";
    Caption[187]  =  "<b>The Needle in de mist</b><br>We liepen door richting Chinatown. Onderweg keken we tussen de Victoriaanse huizen door richting 'The Needle', waarvan het topje in de mist verscholen was (overigens was het die dag weer 15graden)";
    Picture[188]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1587.jpg";
    Caption[188]  =  "<b>Chinatown</b><br>We kwamen in Chinatown aan en ineens voelden we ons alsof we niet meer in Amerika waren. Alles was in het Chinees geschreven, we waren omgeven door Chinezen, over al was het markt, druk, druk, druk, het zat bomvol Chinezen! Wel erg vet :).";
    Picture[189]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1592.jpg";
    Caption[189]  =  "<b>No trespassing!</b><br>Violators will be shot!<br>(wat ze daar wel niet verzinnen...)";
    Picture[190]  = "fotoresize.php?X=944&Y=568&file=fotoMaarten/IMG_1594.jpg";
    Caption[190]  =  "<b>Alcatraz</b><br>We liepen door naar Pier39, een pier met heel veel winkels. Daar hadden we een mooi zicht op Alcatraz, waar we overigens niet naartoe zijn gegaan, omdat men een half jaar van tevoren moet reserveren :@.";


Deze doet het dus wel. Maar dit is handmatig aangepast. Is er niet een manier om gewoon door middel van php de regel in één keer door te laten lopen, zodat het niet fout gaat?

De link waarop de betreffende diashow te vinden is:
http://foto.pcmencia.nl/index.php?pageid=37&album=1

Zoals u misschien zult zien doen de andere diashows op de andere pagina's het wel, met hetzelfde scriptje.

Bij voorbaat reuze bedankt! _/-\o_

Acties:
  • 0 Henk 'm!

  • Helza
  • Registratie: Maart 2003
  • Laatst online: 10-06 17:03
Vervang de return "\n" naar de tekst \n

str_replace("\n",'\n',$text);

:)

Acties:
  • 0 Henk 'm!

  • masser120
  • Registratie: Januari 2004
  • Laatst online: 08-06 15:46
Helza schreef op woensdag 22 november 2006 @ 21:50:
Vervang de return "\n" naar de tekst \n

str_replace("\n",'\n',$text);

:)
Nee helaas, werkt niet. Nu staat er overal ineens \n voor en niet <br> (wat op zich wel logisch is)

Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn ella 👌

nl2br

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:24

crisp

Devver

Pixelated

Of omzetten naar het JS-equivalent:
PHP:
1
$data = addcslashes($data, "\0\n\r\t\\'/");

of strippen (en dan alsnog quotes, NULL's en forward slashes escapen):
JavaScript:
1
2
$data = str_replace(array("\n", "\r", "\t"), '', $data);
$data = addcslashes($data, "\0\\'/");

note dat ik er hier vanuit ga dat je single quotes gebruikt voor string-literals in JS hetgeen mijn voorkeur altijd geniet, TS gebruikt double quotes dus zal of de functies aan moeten passen of single quotes moeten gaan gebruiken voor string literals ;)

Intentionally left blank


  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 01-04 08:48
Hoe zet jij het eigenlijk in de database? en hoe ziet de string er in de database uit?

Anoniem: 174951

Ik denk dat je dit "probleem" beter kan voorkomen door te zorgen dat de data gelijk correct in de database komt te staan. Misschien een nl2br voordat je de data in de database zet? Ten minste... neem aan dat je dat gebruikt.

Even nog wat anders, is het misschien niet makkelijker om multi-dimension array array te gebruiken ipv afbeedling[] en omscrhijving[]:

photo[0]['afbeelding']
photo[0]['omscrhijving']
photo[1]['afbeelding']
photo[1]['omscrhijving']
etc.

dat werkt wat overzichtelijker lijkt me, omdat je bij een foreach vervolgens in 1 loop de afbeelding+omscrhijving kan uitlezen en blijft je code denk ik leesbaarder!

just my 2ct

  • Helza
  • Registratie: Maart 2003
  • Laatst online: 10-06 17:03
masser120 schreef op woensdag 22 november 2006 @ 21:58:
[...]


Nee helaas, werkt niet. Nu staat er overal ineens \n voor en niet <br> (wat op zich wel logisch is)
oh wacht even, zoals ik het nu begrijp hebt je de linefeeds naar <br> al instaan maar je hebt nogsteeds linefeeds in de uiteindelijk output.. dat komt doordat een linefeed ook wel als \r\n (windows linefeeds, unix linefeeds, mac linefeeds, gotta love it)

ff denken, volgens is het dan iets zoals:

preg_replace("/\\r\\n|\\n|\\r/", '<br />', $myrow["beschrijving"]);

niet getest natuurlijk, want dat zou niet leuk zijn :P

  • masser120
  • Registratie: Januari 2004
  • Laatst online: 08-06 15:46
crisp schreef op woensdag 22 november 2006 @ 23:25:
Of omzetten naar het JS-equivalent:
PHP:
1
$data = addcslashes($data, "\0\n\r\t\\'/");

of strippen (en dan alsnog quotes, NULL's en forward slashes escapen):
JavaScript:
1
2
$data = str_replace(array("\n", "\r", "\t"), '', $data);
$data = addcslashes($data, "\0\\'/");

note dat ik er hier vanuit ga dat je single quotes gebruikt voor string-literals in JS hetgeen mijn voorkeur altijd geniet, TS gebruikt double quotes dus zal of de functies aan moeten passen of single quotes moeten gaan gebruiken voor string literals ;)
Verdomd, het werkt! Ontzettend bedankt!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 10:26
nl2br() plaatst gewoon een <br /> voor elke \n, de newlines worden niet vervangen. Dat zou dus sowieso geen oplossing zijn. TS gebruikte al een str_replace() om hier omheen te werken.
Pagina: 1