[php-smarty] looping probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 19:17

HenkS

Da_king alias HenkS

Topicstarter
ik heb 2 problemen met smarty:

1: hij geeft de waarde niet goed weer
2: hij laat alleen de laatste waarde van de array zien

mijn code:
PHP:
1
2
3
4
5
6
7
8
9
10
$sql_vragen = "SELECT rv.v_id, v.vraagid, v.tekst_in_presentatie ".
                            "FROM vragen v, referentie_vragen rv ".
                            "WHERE rv.v_id=v.id AND rv.z_id = '".$_SESSION['user_id']."'";

$vragen = $db->FetchAll($sql_vragen);
for($a=0;$a<count($vragen);$a++){
    
    $smarty->assign("vragen", $vragen[$a]);

}


ik parse het in een forloop en niet meteen via fetchall, omdat ik straks in die loop nog een query moet gaan uitvoeren en daar ook nog variabelen moet parsen, maar dat voor later


als ik in de for loop dit doe:
print_r($vragen[$a]); dan krijg ik netjes 6 arrays te zien:

1 van de 6 ziet er zo uit:

Array ( [v_id] => 433 [vraagid] => 7.1.0.a5 [tekst_in_presentatie] => Om hoeveel HBO-V studenten ging het hierbij in het verslagjaar. )


mijn template ziet er zo uit:

{foreach from=$vragen item=a}


<tr>
<td>{$a.vraagid}</td>
</tr>
{/foreach}

en wat krijg ik dan te zien:

4
7
O

dus zie de array... alleen de 1e letter/cijfer van alles, en maar 1 array ipv 6

ik heb op smarty.php.net naar foreach gezocht enz, maar ben nog niet zo ervaren ermee en kom er echt niet uit :(

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

In je PHP overschrijf je elke keer de smarty variable vragen.

Dus de totale inhoud van smarty variable vragen is:
Array ( [v_id] => 433 [vraagid] => 7.1.0.a5 [tekst_in_presentatie] => Om hoeveel HBO-V studenten ging het hierbij in het verslagjaar. )


Dus als je de loop in de PHP code weghaalt en de fetchall data gelijk naar smarty toegooit dan moet het wel werken,....

[edit]
Hmmm tekst is een beetje onlees baar geworden....

dit zou moeten werken:
PHP:
1
2
3
4
5
6
$sql_vragen = "SELECT rv.v_id, v.vraagid, v.tekst_in_presentatie ".
                            "FROM vragen v, referentie_vragen rv ".
                            "WHERE rv.v_id=v.id AND rv.z_id = '".$_SESSION['user_id']."'";

$vragen = $db->FetchAll($sql_vragen);
$smarty->assign("vragen", $vragen);


Geen verandering nodig voor je smarty template

[ Voor 40% gewijzigd door LuCarD op 28-12-2004 15:07 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 19:17

HenkS

Da_king alias HenkS

Topicstarter
ff wennen die nieuwe layout hier haha, te lang geen vraag meer gesteld :)

maar ik wil het niet in 1x parsen, omdat ik per vraagid die daar terug komt, straks een nieuwe query moet doen en daar ook dingen uit wilt parsen...

moet zo toch ook kunenn, maar hoe?

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Tuurlijk kan dat, dan moet je array opnieuw opbouwen, en aan de eind van de loop aan Smarty doorgeven.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$sql_vragen = "SELECT rv.v_id, v.vraagid, v.tekst_in_presentatie ".
                            "FROM vragen v, referentie_vragen rv ".
                            "WHERE rv.v_id=v.id AND rv.z_id = '".$_SESSION['user_id']."'";

$vragen = $db->FetchAll($sql_vragen);
// count in je conditie is niet handig, deze wordt namelijk elke keer uitgevoerd als je door de for loop gaat
// Handiger is om een tijdelijke variable te maken. Of een foreach loop.
for($a=0;$a<count($vragen);$a++){

//     
// Doe hier je dingen met $vragen  
//

}   

$smarty->assign("vragen", $vragen);

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Wat jij aan het doen bent in de loop is telkens op nieuw een element aan vragen assignen. Het vorige element wat je aan vragen geassigned hebt overschrijf je telkens zodat alleen de laatste daadwerkelijk getoond wordt.

Sowieso zijn opmerkingen als 'ik moet vervolgens binnen deze lus telkens weer een query uitvoeren' enorme alarmsignalen dat je in de eerste querie gewoon een join moet gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'