verschachtelte schleifen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • verschachtelte schleifen

    hallo community,

    habe hier ein problem mit einer verschachtelten schleife und hoffe, daß mir jemand helfen kann. im grunde geht es darum, daß ich tabellenzellen entweder mit einer checkbox oder einem roten hintergrund füllen möchte. dies erfolgt in abhängigkeit eines wertes in einem bestimmten tabellenfeld. die werte des datenabnkfelds hole ich mir auf folgende weise in ein array:

    PHP Code:
    $query mysql("$dbName""SELECT stamp FROM ausleihe WHERE code='$code'") or die(mysql_error());
    $rows mysql_num_rows($query);

    $daten = array("1");

    while (
    $result mysql_fetch_array($query)) {

        
    array_push($daten$result["0"]);

        } 

    funktioniert wunderbar! was auch wunderbar funktioniert ist die erstellung der tabelle. mit folgendem code bekomme ich eine tabelle deren zellen mit checkboxen gefüllt sind und verschiedene werte besitzen:


    PHP Code:

    for($k=1$k<=12$k++) { // fuer jeden monat eine zeile

        
    $anzahlTage date("t"mktime(0,0,0,$k,1,$jahr));

        echo 
    "<tr><td>$monatName[$k]</td>\n";
                
            for(
    $p=1$p<=$anzahlTage$p++) { // fuer jeden tag eine spalte
                
                
    $mysqlDatum date("Ymd"mktime(0,0,0,$k,$p,$jahr));
                
                    echo 
    "<td><input type=\"checkbox\" name=\"leihen[]\" value=\"".$mysqlDatum."\"></td>\n";
                }
                

    echo 
    "</tr>\n";

    was leider nicht mehr funktioniert, die zellen in abhängigkeit des datenbankinhalts zu füllen. wenn $mysqlDatum==$daten[$p] ist, so soll diese zelle bloß mit einem leerzeichen gefüllt werden, ansonsten mit einer checkbox. leider funktionieren folgende zwei klägliche versuche nicht:

    versuch 1:
    PHP Code:
    for($k=1$k<=12$k++) { // fuer jeden monat eine zeile

        
    $anzahlTage date("t"mktime(0,0,0,$k,1,$jahr));

        echo 
    "<tr><td>$monatName[$k]</td>\n";
                
        for(
    $p=1$p<=$anzahlTage$p++) { // fuer jeden tag eine spalte
                
            
    $mysqlDatum date("Ymd"mktime(0,0,0,$k,$p,$jahr));
                            
            for (
    $q=0$q<=$rows$q++) {
                                        
                if (
    $mysqlDatum == $daten[$q]) {
                                        
                echo 
    "<td bgcolor=\"#ff0033\">&nbsp;</td>\n";
                                        
                } else {
                
                echo 
    "<td><input type=\"checkbox\" name=\"leihen[]\" value=\"".$mysqlDatum."\"></td>\n";
                                                        
                }
            }

        }
                
    echo 
    "</tr>\n";


    sowie:

    PHP Code:
    for($k=1$k<=12$k++) { // fuer jeden monat eine zeile

        
    $anzahlTage date("t"mktime(0,0,0,$k,1,$jahr));

        echo 
    "<tr><td>$monatName[$k]</td>\n";
                
            for(
    $p=1$p<=$anzahlTage$p++) { // fuer jeden tag eine spalte
                
                
    $mysqlDatum date("Ymd"mktime(0,0,0,$k,$p,$jahr));
                                        
                    if (
    $mysqlDatum == $daten[$p]) {
                                        
                        echo 
    "<td bgcolor=\"#ff0033\">&nbsp;</td>\n";
                                        
                    } else {
                
                        echo 
    "<td><input type=\"checkbox\" name=\"leihen[]\" value=\"".$mysqlDatum."\"></td>\n";
                                                        
                    }

            }
                
        echo 
    "</tr>\n";

    die datenbanktabelle ist mit den werten 20040101, 20040102, 20041230 und 20041231 gefüllt. bei der zweiten variante werden nur die ersten beiden array-werte verglichen. bin für jegliche tipps dankbar!

  • #2
    wo wird denn $jahr definiert?
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Comment


    • #3
      $jahr wird über $_GET["jahr"] an dieses skript übergeben. der einfachheit halber könnte man für das beispiel $jahr mit 2004 ersetzen. in der späteren anwendung sollte man das jahr frei wählen können.

      Comment


      • #4
        ok. kannst du mal aufmalen, was du an daten hast, und was da raus kommen soll?

        irgendwie habe ich nämlich deine bisherigen gedankengänge nicht nachvollziehen können ..
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Comment


        • #5
          okay!



          bild 01.jpg zeigt die tabelle ohne datenbank vergleich. möchte man nun den monitor ausleihen klickt man die entsprechenden checkboxen für die tage an.

          bild 02.jpg zeigt die tabelle mit dem vergleich der einträge in der datenbank. es wurde vorher der 1.1., 2.1., 30.12. und 31.12. angeklickt und in der datenbank gespeichert. leider setzt er mir die roten felder nur am 1.1. und am 2.1.
          Attached Files

          Comment


          • #6
            Versuche grad zu verstehen ....

            Wo kommt den $daten[] her ?
            Last edited by chansel0049; 06-05-2004, 17:32.
            chansel0049
            ----------------------------------------------------
            if you've reached the bottomline - dig further!
            Übersetzer gesucht? http://www.babelport.com

            Comment


            • #7
              $daten ist ein array das mit werten aus dem mysql_query gefüllt wird.

              Comment


              • #8
                Sorry na klar... Blind gewesen,

                Lass dir mal in der Innersten Schleife die Werte von $k und $p ausgeben!
                chansel0049
                ----------------------------------------------------
                if you've reached the bottomline - dig further!
                Übersetzer gesucht? http://www.babelport.com

                Comment


                • #9
                  die werte sehen gut aus!
                  k bleibt solange '1' bis p '31' durchlaufen hat. k wird dann zur '2' und bleibt '29' mal '2'. usw...

                  Comment


                  • #10
                    Danke für eure mühe!
                    hab's jetzt selber rausbekommen. und zwar musste ich nur eine while schleife an die richtige stelle setzen.
                    falls es noch jemanden interessieren sollte, hier der code mit der richtigen schleifenverschachtelung:

                    PHP Code:
                    for($k=1$k<=12$k++) { // fuer jeden monat eine zeile
                        
                    $anzahlTage date("t"mktime(0,0,0,$k,1,$jahr));
                        echo 
                    "<tr><td>$monatName[$k]</td>\n";
                            for(
                    $p=1$p<=$anzahlTage$p++) { // fuer jeden tag eine spalte
                            
                    $mysqlDatum date("Ymd"mktime(0,0,0,$k,$p,$jahr));
                            
                    $q=0;
                            
                    $gefunden 0;
                                while(
                    $q<=$rows && $gefunden==0) {
                                    if (
                    $mysqlDatum == $daten[$q]) {
                                    echo 
                    "<td bgcolor=\"#ff0033\">&nbsp;</td>\n";
                                              
                    $gefunden=1;
                                    }
                                
                    $q++;
                                }
                                if (
                    $gefunden == 0) {
                                echo 
                    "<td><input type=\"checkbox\" name=\"leihen[]\" value=\"".$mysqlDatum."\"></td>\n";
                                }
                                 }
                        echo 
                    "</tr>\n";

                    Comment

                    Working...
                    X