[PHP] geneste lus slaat waarde over

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • OSwimmer
  • Registratie: November 2001
  • Laatst online: 07-08 21:39
Ik ben mijn site aan het omzetten van ASP naar PHP. In ASP bestaat er echter een methode rsTable.eof om te kijken of je op de laatste rij van je recordsset bent. Bestaat er ook zo'n methode in PHP?

Ik zit met volgend probleem: als ik op lijn 24 check of we al aan het einde van de geselecteerde data uit de database zijn, springt hij effectief over naar de volgende lijn/record. Terwijl ik dat daar niet wil.

Ookspronkelijk script: http://www.volh.be/root/trainingsuren.asp
Nieuw script (met fout): http://volh.tomsworld.be/root/trainingsuren.php

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?
$strType = $row["strGroepTypeNaam"];
do
{
?>
<tr>
    <td width="8%"></td>
    <td><u><? echo $row["strGroepNaam"] ?></u>
        <table width="100%" cellpadding="0" cellspacing="0" class="tabelTekst">
        <?
        $strGroep = $row["strGroepNaam"];
        do
        {
        ?>
        <tr>
            <td width="6%"></td>
            <td width="15%"><? echo $row["strDagNaam"] ?></td>
            <td width="20%"><? echo $row["strTrainingBeginuur"] ?> - <? echo $row["strTrainingEinduur"] ?></td>
            <td width="20%"><? echo $row["strTrainingPlaats"] ?></td>
            <td width="45%"><? echo $row["strTrainingOpmerking"] ?></td>
        </tr>
        <?
            $row = mysql_fetch_array($rsTable);
            if (!mysql_fetch_array($rsTable))
            {
                $strTestGroep = "false";
            }
            else
            {
                $strTestGroep = $row["strGroepNaam"];
            }
        }
        while ($strGroep == $strTestGroep);
        ?>
        </table>
    </td>
</tr>
<?
    if (!mysql_fetch_array($rsTable))
    {
        $strTestType = "false";
    }
    else
    {
        $strTestType = $row["strGroepTypeNaam"];
    }
}
while ($strType == $strTestType);
?>

Greetz, OSwimmer


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Mysql_fetch_array is een uitgebreide versie van mysql_fetch_row ( staat in de handleiding )

bij mysql_fetch_row staat:
Volgende aanroepen naar mysql_fetch_row() zullen de volgende rij in de resultaat set teruggeven, of FALSE als er geen rijen meer zijn.
http://nl.php.net/manual/nl/function.mysql-fetch-row.php

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Denhomer
  • Registratie: Augustus 2000
  • Laatst online: 20-09 09:18

Denhomer

Doh !

je kan ook constructies maken als
code:
1
if (!($row=mysql_fetch_array($rsTable))===false)

Acties:
  • 0 Henk 'm!

  • OSwimmer
  • Registratie: November 2001
  • Laatst online: 07-08 21:39
LuCarD schreef op 27 januari 2004 @ 13:16:
Mysql_fetch_array is een uitgebreide versie van mysql_fetch_row ( staat in de handleiding )

bij mysql_fetch_row staat:

[...]

http://nl.php.net/manual/nl/function.mysql-fetch-row.php
Idd, geeft false als er geen rij meer is, maar als er nog wel een rij is, dan springt hij ook naar de volgende rij (terwijl ik dan eigenlijk gewoon de waarde true wil terugkrijgen).

Volledige source kan je bekijken op http://volh.tomsworld.be/root/trainingsuren.phps

Greetz, OSwimmer


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
vaak wordt het zo gedaan met mysql resultaten:
PHP:
1
2
3
4
while($row = mysql_fetch_array())
{
 // hier de loop
}


Ik snap alleen niet zo goed waar je die dubbele do-while voor nodig hebt (die weer binnen een while staan ?) :?

[ Voor 9% gewijzigd door ACM op 27-01-2004 13:42 ]


Acties:
  • 0 Henk 'm!

  • OSwimmer
  • Registratie: November 2001
  • Laatst online: 07-08 21:39
Probleem is opgelost doordat we de mysql_fetch_array op een andere plaatst gezet hebben.
@ACM: die genest lussen zijn nodig omdat trainingsuren worden ingedeeld volgens groepen, die groepen worden vervolgens ingedeeld in groeptypen.

Greetz, OSwimmer


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

De test die je nu doet die er voor zorgt dat een binnenste loop wordt afgebroken kun je ook in een if statement gebruiken die een nieuwe header neerzet.

psuedo:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$lastgroep=""
$lasthoofdgroep=""
while (fetch stuff){
  if ($fetch["hoofdgroep"]!=$hoofdgroep) {
    $lasthoofdgroep=$fetch["hoofdgroep"];
     echo "Hoofdgroepheader";
  }
  if ($fetch["groep"]!=$groep) {
    $lastgroep=$fetch["groep"];
     echo "Groepheader";
  }
  echo "rest van record zut";
}


Da's wat overzichtelijker imho.

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

Pagina: 1