[php] while loop wordt maar 1 keer uitgevoerd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tjeemp
  • Registratie: Januari 2005
  • Laatst online: 03-01-2015

Tjeemp

BEER N TEA

Topicstarter
Ik ben bezig met een template systeem, en nu ben ik bezig met een stuk dat verschillende soorten database tabellen moet uit kunnen lezen.

dit is nog even een test omgeving, voordat ik het in het uiteindelijke systeem ga inbouwen.
ik wil hier alleen de inhoud van de tabel laten zien.
nu wordt de 2e while maar 1 keer uitgevoerd, terwijl die elke keer uitgevoerd moet worden als de eerste while wordt uitgevoerd.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$content = array("select * from " . $use_table . " ORDER BY id $order LIMIT $amount", "{id}", "{date}", "{author}", "{title}", "{text}");

$result1 = mysql_db_query("$option[mysql_db]", "SHOW COLUMNS FROM " . $use_table);
$result2 = mysql_db_query("$option[mysql_db]", $content[0]);

echo "<table>";
$page = "<tr><td>{id} - {title} - {author} - {text}</td></tr>";

if (mysql_num_rows($result2) > 0) {
    while($item = mysql_fetch_array($result2)) {
        $i = 1;
        $html = $html . $page;
        while($col = mysql_fetch_array($result1)) {
            $col_part = $col[0];
            $html = str_replace($content[$i], $item[$col_part], $html);
            $i++;
        }
    }
}
echo $html;


http://82.92.37.54/~timo/template/show.php
dat is wat er op het moment uit komt....

www.timovanderzanden.nl | Beer 'n' Tea


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 29-07 21:42
Om je resultaat her te gebruiken moet je het resultaat eerst in een aparte array zetten. Dat komt omdat de interne pointer aan het einde van de 2e while loop aan het einde van het resultaat blijft steken. Op die manier kun je de pointer 'resetten'.

Ook nog een oplossing is om gebruik te maken van mysql_data_seek(). Is denk ik wat handiger.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 28-07 23:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Kwestie van debuggen. Je loop wordt niet maar 1 keer uitgevoerd, maar je overschrijft de $html variabele steeds in de binnenste loop. Met een debugger of simpelweg wat print_r() calls hier en daar had je daar zelf natuurlijk ook achter kunnen komen.

Bleeeh, ik moet beter lezen. Sorry :)

[ Voor 9% gewijzigd door .oisyn op 26-01-2006 22:59 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 25-07 23:41
Logisch; als je alle rijen gefetcht hebt dan ben je klaar. Dus ofwel je query binnen de lus zetten (zodat je 'm elke keer opnieuw uitvoert en nieuwe resultaten krijgt) of inderdaad de database cursor terug zetten met mysql_data_seek(). Beide zijn niet echt efficiënt, omdat je dan alle resultaten weer van de database server moet halen.

Als het geheugen het toelaat is het daarom beter om eerst alle resultaten in een array te zetten en daarmee verder te werken, zoals Sybr_E-N als eerste voorstelde. Hoogstwaarschijnlijk is dat dus de beste oplossing.

@.oisyn: volgens mij moet je beter debuggen. ;) Ik zie $html niet overschreven worden - iig. niet zonder dat de oude inhoud bewaard blijft.

[ Voor 13% gewijzigd door Soultaker op 26-01-2006 19:24 ]


Acties:
  • 0 Henk 'm!

  • Tjeemp
  • Registratie: Januari 2005
  • Laatst online: 03-01-2015

Tjeemp

BEER N TEA

Topicstarter
met mysql_data_seek gaat het erg goed... bedankt voor de hulp

www.timovanderzanden.nl | Beer 'n' Tea