while Schleife und Geburtstag

Wolfsbein

Erfahrenes Mitglied
Ich habe bisher folgenden Code:
PHP:
$day = date("d");
$month = date("m");
$found = false;
    while ($found == false)
    {
        while ($result_array=mysql_fetch_array($mysql_result))
        {
            if (shortenBirth($result_array["BIRTH"]) == "$day.$month")
            {
                $date = "$day.$month";
                $name = $result_array["FNAME"]. " ".$result_array["LNAME"];
                $found = true;
            }
       
        } 
         $day++;
         if ($day > "31")
         {
            $day = "01";
            $month++;
         }
         if ($month > "12")
         {
            $month = "01";
            $day = "01";
         }
    }
Der haut auch wunderbar hin, aber leider nur, wenn jemand heute also am aktuellen Datum Geburtstag hat. Ansonsten läuft sich die Schleife tot -> Timeout. Woran liegts?
 
Öhm... was willst du mit dem Code bezwecken? Steig da nicht so ganz durch...

Na ja, der Fehler ist jedenfalls, dass du nach einem Durchlauf der äußeren Schleife ja schon alle Arrays aus dem Result gefetcht hast. (%)) Somit kriegst du von mysql_fetch_array() ab dem zweiten Durchlauf nur noch false zurückgeliefert.



reima
 
oehm, ganz einfach:
while ($found == false) <--- $found ist solange false, bis du's auf true setzt, d.h. ein geburtstag gefunden wurde ... wenn aber niemand geburtstag hat, dann laeuft deine schleife ein bisschen laenger ;)
 
Ja danke. mysql_fetch_array genau das ist das Problem, dass nach dem ersten Durchlauf nichts mehr gefunden wird. Wie kann ich das umgehen?
Bezwecken will ich mit dem Code, dass ich herausfinden kann, wann der nächste Geburtstag ist. Also nicht nur wer heute hat, sondern wer z.B. morgen oder in 10 Tagen hat.
 
Ok ich habe das ganze umgeschrieben und es haut jetzt hin:
PHP:
while ($result_array[$i] = mysql_fetch_array($mysql_result))
    {
        $i++;
    }
    $arrayDays = array( "01","02","03","04","05","06","07","08","09","10",
                        "11","12","13","14","15","16","17","18","19","20",
                        "21","22","23","24","25","26","27","28","29","30","31");
    $arrayMonths = array("01","02","03","04","05","06","07","08","09","10","11","12");
    for($d=0;$d<31;$d++)
    {
        if($arrayDays[$d] == $day) {break;}
    }
    //echo $arrayDays[$d];
    for($m=0;$m<12;$m++)
    {
        if($arrayMonths[$m] == $month) {break;}
    }
    //echo $arrayMonths[$m];
                                    
    $countArray = count($result_array);
    $found = false;
    // dient zum Abbruch nach zwei ganzen Durchlaeufen
    $overflow=0;
    while ($found == false)
    {
        for ($i = 0; $i<$countArray; $i++)
        {
            if (shortenBirth($result_array[$i]['BIRTH']) == "$arrayDays[$d].$arrayMonths[$m]")
            {
                $date = "$arrayDays[$d].$arrayMonths[$m]";
                $name = $result_array[$i]["FNAME"]. " ".$result_array[$i]["LNAME"];
                $found = true;
            }
        }
        
        $d++;
        if ($d > 30)
        {
            $d = 0;
            $m++;
        }
       
        if ($m > 11)
        {
            $m = 0;
            $d = 0;
            $overflow++;
            if ($overflow == 2) {$date="&nbsp;"; $name="Leider wurde noch kein Geburtstag angegeben."; break;}
        }    
    }
Das einzige Problem ist jetzt noch, wenn zwei oder mehr am gleichen Tag haben. Aber das werde ich auch noch hinkriegen. Für Tipps bin ich trotzdem dankbar ;).
 
Zurück