[PHP] variabele in echo statement

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik voer de het loop uit:
PHP:
1
2
3
4
for($i=0;$i<$row['news_paragraphs'];$i++){
echo "<tr><td><textarea rows='10' cols='60' wrap='virtual' 
name=item".$i.">$row[news_item".$i."]</textarea></td></tr>";
}

Nou krijg ik de volgende foutmelding terug:
Parse error: parse error, unexpected T_VARIABLE, expecting ']' in c:\www\ib\admin\news\change.php on line 46

Dit slaat op het gedeelte
PHP:
1
"...$row[news_item".$i."]..."

Het item bestaat uit meerdere paragrafen, waarvan het aantal opgeslagen is in de database. Een paragraaf heet news_item0 t/m news_item9. Nou moet ik dus dat nummer achter news_item krijgen. Kennelijk vindt de parser dat geen tof idee... maar het is wel van belang dat het lukt.

Is er een manier om dit voor elkaar te krijgen?
Ik heb de volgende combinaties al geprobeerd:
PHP:
1
2
3
4
5
"...$row[news_item".$i."]..."
"...$row[news_item"$i"]..."
"...$row[news_item".($i)."]..."
"...$row[news_item"$i"]..."
"...$row[news_item$i]..."

[ Voor 16% gewijzigd door Kaastosti op 30-11-2002 00:55 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

PHP:
1
2
3
4
for ($i=0; $i < $row['news_paragraphs']; $i++) {
  echo "<tr><td><textarea rows='10' cols='60' wrap='virtual' name=item".$i.">" . 
       $row['news_item' . $i] . "</textarea></td></tr>";
}

* CyberSnooP doet z'n best niet te gaan klagen over niveau en data-modellen met genummerde velden etc.

[ Voor 55% gewijzigd door CyberSnooP op 30-11-2002 01:00 . Reden: ook nog m'n best de layout heel te laten en goeie php te maken ]

|_____vakje______|


  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Aha op die manier... 't was 'm bijna... dit vond ie leuker
PHP:
1
2
echo "<tr><td><textarea rows='10' cols='60' wrap='virtual'
name=item".$i.">".$row['news_item'.$i.'']."</textarea></td></tr>";

Maaaruh wat is er mis met data-modellen met genummerde velden? Het is de enige manier om dit soort data op te slaan :) ..ik ben nog niet zo gek lang met php bezig, maar tot zover gaat 't nog best ok vind ik zelf

[ Voor 58% gewijzigd door Kaastosti op 30-11-2002 01:05 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Verwijderd

die laatste .'' dat zou niet moeten hoeven...

Over het data-model:
PHP:
1
2
3
4
5
6
7
//waarom bv niet 
$news_items[$id]; 
//en eventueel, voor als $row je main datastructuur is
$row[news_items]=$news_items[$id]; 

//ipv 
$row['news_item'.$i]


Dan kun je gewoon de array leeg laten lopen met een foreach.

[ Voor 25% gewijzigd door Verwijderd op 30-11-2002 10:33 ]


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Verwijderd schreef op 30 november 2002 @ 10:30:
die laatste .'' dat zou niet moeten hoeven...

Over het data-model:
PHP:
1
2
3
4
5
6
7
//waarom bv niet 
$news_items[$id]; 
//en eventueel, voor als $row je main datastructuur is
$row[news_items]=$news_items[$id]; 

//ipv 
$row['news_item'.$i]


Dan kun je gewoon de array leeg laten lopen met een foreach.
Iets in mij zegt dat deze wijziging niet eenvoudig door te voeren is, omdat $row ontleend wordt uit een database met een fout ontwerp.
Post je database structuur eens
[edit]nee, niet de create table directives, maar maar iets in de zin van:
tabelnaam ( id, nogeenveld, ...)
Ik heb namelijk het vermoeden dat er ergens in jou tabel iet staat als:
tabelnaam (nieuws_item1,nieuws_item2,nieuws_item2)
En dat is enorm fout. Dat hoort in meerdere tabellen.

Localhost, sweet localhost


  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Jah dat klopt. Het gaat om een nieuwspostingssysteem, waarbij ik het op wil kunnen delen in alinea's. Aangezien een normale varchar maar 255 karakters aankan heb ik er een BLOB van gemaakt. Het nadeel daarvan is echter dat het niet uit maakt of je zelf lege regels toevoegt, aangezien die er gewoon tussenuit worden gehaald. Je krijg dus een grote lap tekst. Dit heb ik proberen op te vangen dmv meerdere kolommen voor alinea's.

news (news_id, news_title, news_date, news_time, news_image, news_source, news_link, news_depth, news_item1, news_item2, etc.)

dat news_ overal voor is gewoon voor de duidelijkheid uit welke tabel een gegeven komt... is wat extra tikwerk, maar wel overzichtelijk :)

Dat die tabel er niet netjes uitziet was ik ook al achter.. maar op welke manier wil je dat in verschillende tabellen doen dan? een tabel als:
news_item1 (news_id, news_item1) lijkt me toch ook niet wenselijk voor 10 tabellen :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Verwijderd

Kaastosti schreef op 30 november 2002 @ 17:32:
Jah dat klopt. Het gaat om een nieuwspostingssysteem, waarbij ik het op wil kunnen delen in alinea's. Aangezien een normale varchar maar 255 karakters aankan heb ik er een BLOB van gemaakt.
MySQL kent toch ook wel gewone tekstvelden waar de lege regels niet uitgeknipt worden :?
ik weet verder niet zo veel van MySQL ;)
Dit heb ik proberen op te vangen dmv meerdere kolommen voor alinea's.
lijkt mij dat je dan per tekst maar een maximum aantal alinea's mag gebruiken. Komt ook niet echt super over imo.
Dat die tabel er niet netjes uitziet was ik ook al achter.. maar op welke manier wil je dat in verschillende tabellen doen dan? een tabel als:
news_item1 (news_id, news_item1) lijkt me toch ook niet wenselijk voor 10 tabellen :)
dat is ook niet handig nee :) Wat je bijvoorbeeld wel zou kunnen doen, is een bepaald teken, of nog liever een tekenreeks, nemen die het einde van een alinea aanduidt (en dus logischerwijs het begin van een evt. nieuwe alinea.)

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

  • Tekstvelden kun je ook gewoon het type TEXT geven of LONGTEXT, al is dat volgens mij een verkapte BLOB, maar dat terzijde.
  • Nieuwe regels in normale tekst zijn een (systeem afhankelijk) newline-karakter. In HTML is het echter de code <BR> (of <BR /> voor de XHTML-ers onder ons). Je moet dus je newlines door Break-tags vervangen wat toevallig heel handig gaat met nl2br()
  • Meerdere alineas los je beter op met een volgend model:
    Tabel news:
    Velden: id, title, ...
    Tabel paragraphs:
    Velden: id, news_id, order_nr, text

    Je hebt dan dus wel 2 queries nodig om je informatie op te halen nl:
    • SELECT ... FROM news WHERE id = $newsid
    • SELECT text FROM paragraphs WHERE news_id = $newsid ORDER BY order_nr
Disclaimer: Het is maar een schets om je een idee te geven :)

|_____vakje______|


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Ook al lijkt het probleem erg lastig, toch is dit een erg simpel probleem die op te lossen valt door goed te lezen in de php manual.

Hierbij moet je voornamelijk opletten hoe je arrays gebruikt in combinatie met variabelen.

Daarnaast is inderdaad je database model niet erg optimaal en zeer zeker niet genormaliseerd.

Lees eerst eens hoe je arrays en variabelen precies gebruikt, Lees daarna eens iets over normaliseren, als je dan nog problemen hebt kun je altijd nog een goede topic starten.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1

Dit topic is gesloten.