Avatar billede mydream Nybegynder
05. maj 2005 - 18:46 Der er 5 kommentarer og
1 løsning

2 while løkker indeni hinanden

Jeg forsøger her at køre to while løkker indeni hinanden:

----------
/* HER CHECKER VI OM TIDEN KAN BOOKES ALTSÅ OM DER ER TID NOK TIL ALLE MODULER */
$Tid = $Senestetid;
$M = $Antalmoduler;
$T = '0';
$Testresultat2 = $M;
$LookupMan = mysql_query("select * from ABooking Where Ugenummer = '$Denneuge' and Ugedag = 'Mandag' ORDER BY TidFra");
                           
/* SÅ LOOPER JEG INDTIL ALLE TIDER ER CHECKET */
while ($T<$M) /* sålænge der er flere tider der skal checkes */
{
    while ($LookMan = mysql_fetch_array($LookupMan)) /* sålænge der er bookinger */
    {
    if ($LookMan['TidFra'] < $Tid)
    {
        if ($Tid < $LookMan['TidTil'])
        {
        $Testresultat = '-1';
        }
    }
    $Testresultat2 = $Testresultat2 + $Testresultat;

    /*HER UDSKRIVER JEG EN CHECKLINJE, DER VISER OM DER TÆLLES OP */
    echo  $LookMan['TidFra'].' til '.$LookMan['TidTil'].'Tid:'.$Tid.' Testresultat:'. $Testresultat.' Sluttestresultat:'.$Testresultat2.' $T ='.$T.' $M='.$M.'<br>';
    }
$Tid = date("H:i:s", strtotime("+30 minutes ".$Tid)); /* Tid + 1 modul */
$T = $T+1;
}

-----
Jeg kan se udfra den testlinje jeg udskriver, at $T og $Tid ikke bliver talt op.

Er det fordi der ligger 2 while løkker, eller er det et helt andet problem?
Avatar billede coderdk Praktikant
05. maj 2005 - 19:23 #1
Det er fordi den kun løber én gang igennem, din første while ser ikke ud til at give mening:

while ( $Senestetid < $Antalmoduler )

Det ser ud som om du blander to ting, der ikke kan blandes...

Noget helt andet er at:

$LookupMan = mysql_query("select * from ABooking Where Ugenummer = '$Denneuge' and Ugedag = 'Mandag' ORDER BY TidFra");

Nok burde være inde i det første while loop?
Avatar billede coderdk Praktikant
05. maj 2005 - 19:24 #2
Uddybende forklaring, din anden while vil kun blive løbet igennem én gang, uanset hvor mange gange det første loop kører, derfor ser du nok kun din echo én gang. Prøv efter:

$T = $T+1;

At skrive:

echo "T er nu $T og Tid er nu $Tid<br>";
Avatar billede mydream Nybegynder
05. maj 2005 - 19:53 #3
Jeg kører ikke while ( $Senestetid < $Antalmoduler )
men while ($T<$M) hvor $T blot er en tæller.

Den inderste loop løber faktisk igennem de 2 gange, der passer (der er 2 bookingrækker). Men som du siger den yderste kun een gang.

Du kan se min testlinje her http://www.prowebdesign.dk/Abook/Booking/test.php?Behandlingsnavn=Rygmassage
Avatar billede coderdk Praktikant
05. maj 2005 - 20:12 #4
Nej, den inderste løkke vil kun blive kørt én gang. At den så løber igennem flere gange er jo naturligt nok. Jeg tror du vil gøre dette:

/* HER CHECKER VI OM TIDEN KAN BOOKES ALTSÅ OM DER ER TID NOK TIL ALLE MODULER */
$Tid = $Senestetid;
$M = $Antalmoduler;
$T = '0';
$Testresultat2 = $M;
                         
/* SÅ LOOPER JEG INDTIL ALLE TIDER ER CHECKET */
while ($T<$M) /* sålænge der er flere tider der skal checkes */
{
    $LookupMan = mysql_query("select * from ABooking Where Ugenummer = '$Denneuge' and Ugedag = 'Mandag' ORDER BY TidFra");
    while ($LookMan = mysql_fetch_array($LookupMan)) /* sålænge der er bookinger */
    {
    if ($LookMan['TidFra'] < $Tid)
    {
        if ($Tid < $LookMan['TidTil'])
        {
        $Testresultat = '-1';
        }
    }
    $Testresultat2 = $Testresultat2 + $Testresultat;

    /*HER UDSKRIVER JEG EN CHECKLINJE, DER VISER OM DER TÆLLES OP */
    echo  $LookMan['TidFra'].' til '.$LookMan['TidTil'].'Tid:'.$Tid.' Testresultat:'. $Testresultat.' Sluttestresultat:'.$Testresultat2.' $T ='.$T.' $M='.$M.'<br>';
    }
$Tid = date("H:i:s", strtotime("+30 minutes ".$Tid)); /* Tid + 1 modul */
$T = $T+1;
}
Avatar billede mydream Nybegynder
05. maj 2005 - 22:53 #5
Så lykkedes det endelig ved hjælp af nogle få flytninger. Sikke et bøvl. Vil du lægge et svar, for jeg brugte dine forslag?

Tak for hjælpen
Avatar billede coderdk Praktikant
05. maj 2005 - 23:15 #6
Yes yes :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester