Avatar billede shm1976 Nybegynder
04. maj 2003 - 17:21 Der er 6 kommentarer

mysql gennemløb af løkke flere gange

Jeg har problemer med at få gennemløbet følgende kode mere en 1 gang. Der sker det at while løkken gennemløbes, hvorefter det ser ud som om rutinen dør før jeg når at kalde

$res=mysql_fetch_array($res_query) or Die(mysql_error());

nogle forslag til løsninger ?

nedenfor er vist min kode......

//*****************  der gennemløbes for 4 måneder *******************
    for ($i=0;$i<4;$i++)
    {
   
//********************************************************************
//        Her hentes aktiviteter for den pågældende måned
//********************************************************************

    $strSql="Select AktivitetId, Type, Kommentar, DATE_FORMAT(Dato,'%d.') AS ny_dato,TIME_FORMAT(Tid,'%k:%i') AS ny_tid from tb_aktivitet where DATE_FORMAT(Dato,'%m') = ".($mnd_nr+$i);
    $res_query=mysql_query($strSql);
    $res=mysql_fetch_array($res_query) or Die(mysql_error()); 
?>
    <td><hr><table>
<?
      while(!($res==0))
      {
//********************************************************************
//  Her hentes den post som svarer til brugerens id og
//              den aktuelle aktivitet
//********************************************************************
      $strSql="Select * from tb_aktspiller where SpillerId =".$userId_session." And AktivitetId=".$res["AktivitetId"];
      $rs_query=mysql_query($strSql);
      $rs=mysql_fetch_array($rs_query) or Die(mysql_error());

//********************************************************************
//    Her skrives data til siden for den aktuelle post
//********************************************************************
?>
            <form method="post" target="opd_tilmelding.php"><tr>
            <? if ($rs["Tilbudt"]=="1")
                {
            ?>
                <td><input type="checkbox" name="<? echo $rs["id"]; ?>" value="<? echo $rs["Accepteret"]; ?>" onclick="submit()"></td>
            <?     }
            else
                {
            ?>
                <td>&nbsp;</td>
            <?    }
            ?>
            <td><? echo $res["ny_dato"]; ?></td>
            <td><? echo type_tr($res["Type"]); ?><br><? echo $res["Kommentar"]; ?></td>
            <td><? echo $res["ny_tid"]; ?></td></tr></form>

<?
//********************************************************************
//  Her skulle næste aktivitet gerne vælges og while gennemløbes igen
//********************************************************************

        $res=mysql_fetch_array($res_query) or Die(mysql_error());
          }
    ?>
    </table></td>
    <?   
    }
    ?>

    </tr>
Avatar billede erikjacobsen Ekspert
04. maj 2003 - 17:26 #1
Du kan ligesågodt bruge standardmåden:   

while($res=mysql_fetch_array($res_query))

Og kun bruge mysql_fetch_array det ene sted!
Avatar billede Slettet bruger
04. maj 2003 - 17:30 #2
Nu er det sjældent særligt optimalt at lave sååå maaange sql kald som du laver i dit script... Måske skulle du optimere det lidt...
Anyways... det er faktisk mere eller mindre umugligt at sige hvor din fejl opstår henne...
Hvad med en lille smule fejl søgning?

f.eks.
$res=mysql_fetch_array($res_query) or Die(mysql_error());
echo $res;
eller
køre dit query i phpmyadmin og se hvad du får ud af det der?
Avatar billede jakoba Nybegynder
04. maj 2003 - 17:30 #3
du laver 2 mysql queries efter hinanden. de skal have hver deres while løkke.

 
//********************************************************************
//        Her hentes aktiviteter for den pågældende måned
//********************************************************************

    $strSql="Select AktivitetId, Type, Kommentar, DATE_FORMAT(Dato,'%d.') AS ny_dato,TIME_FORMAT(Tid,'%k:%i') AS ny_tid from tb_aktivitet where DATE_FORMAT(Dato,'%m') = ".($mnd_nr+$i);
    $res_query=mysql_query($strSql);
    $res=mysql_fetch_array($res_query);              // aldig 'or die' på mysql_fetch_array
?>
    <td><hr><table>
<?
    while(!($res==0)) {                    // ydre WHILE løkke
//********************************************************************
//  Her hentes den post som svarer til brugerens id og
//              den aktuelle aktivitet
//********************************************************************
        $strSql="Select * from tb_aktspiller where SpillerId =".$userId_session." And AktivitetId=".$res["AktivitetId"];
        $rs_query=mysql_query($strSql);
        $rs=mysql_fetch_array($rs_query);              // aldig 'or die' på mysql_fetch_array     

//********************************************************************
//    Her skrives data til siden for den aktuelle post
//********************************************************************
        while (!$rs==0) {                  // indre WHILE løkke
?>
            <form method="post" target="opd_tilmelding.php"><tr>
            <? if ($rs["Tilbudt"]=="1")
                {
            ?>
                <td><input type="checkbox" name="<? echo $rs["id"]; ?>" value="<? echo $rs["Accepteret"]; ?>" onclick="submit()"></td>
            <?    }
            else
                {
            ?>
                <td>&nbsp;</td>
            <?    }
            ?>
            <td><? echo $res["ny_dato"]; ?></td>
            <td><? echo type_tr($res["Type"]); ?><br><? echo $res["Kommentar"]; ?></td>
            <td><? echo $res["ny_tid"]; ?></td></tr></form>

<?
//********************************************************************
//  Her skulle næste aktivitet gerne vælges og while gennemløbes igen
//********************************************************************
                          // find evt næste i indre WHILE
            $rs=mysql_fetch_array($rs_query);              // aldig 'or die' på mysql_fetch_array              }

                          // find evt næte i ydre WHILE
        $res=mysql_fetch_array($res_query);              // aldig 'or die' på mysql_fetch_array
    } 
    ?>
    </table></td>
    <? 
    }
    ?>
Avatar billede shm1976 Nybegynder
04. maj 2003 - 17:32 #4
tjah - og så havde det også virket med det samme :-)

tak for hjælpen.....
Avatar billede atomizer Nybegynder
04. maj 2003 - 17:33 #5
Prøv med denne algoritme:

$conn = mysql_connect("mysql.xyz.dk","user","pass");
mysql_select_db("DinDB");
$query="SELECT <<et eller andet smart>> FROM <<Hvor det nu ligger>>";
//Eller hvad du nu har som query
$data = mysql_query($query) or die("Error");
while($rs = mysql_fetch_object($data))
{
printf($rs->DBfelt);
}
mysql_close($conn);
Det skulle virke
//Atomizer
Avatar billede jakoba Nybegynder
04. maj 2003 - 17:45 #6
lidt gæt, men denne ene sql kommando

$strSql = "
    SELECT tai.AktivitetId,
          tai.Type,
          tai.Kommentar,
          DATE_FORMAT(tai.Dato,'%d.') AS ny_dato,
          TIME_FORMAT(Tid,'%k:%i') AS ny_tid,
          tas.*
    FROM tb_aktivitet AS tai JOIN tb_aktspiller AS tas
        ON tai.AktivitetId = tas.AktivitetId
    WHERE DATE_FORMAT(tai.Dato,'%m') = " .($mnd_nr+$i) ."
      AND tas.SpillerId  =" .$userId_session ."
      AND tas.AktivitetId =" .$res["AktivitetId"] ."
";

henter vist alle de data du skal bruge med een kommando.
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