Probleme mit While Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit While Schleife

    Hallo,

    ich habe eine reihe von Schleifen in denen wiederum Schleifen auftauchen.
    Wenn ich eine Variable für eine While Schleife über dem gesamten Block definiere läuft die While Schleife nur 1x durch.
    Definiere ich diese Variable direkt über der While Schleife funktioniert es.

    Ich habe unten den Code für:
    1. den nicht funktionierenden
    2. den für funktionierenden
    Schleifen durchlauf.

    Es geht um $zeile2 bei der 2. While Schleife.

    Ich bin für jede Hilfe dankbar.


    So funktioniert es NICHT
    ------------------------------

    PHP-Code:
    $zeile 1;
    $zeile2 1;   #<------------------So funktioniert es nicht

    while ( $zeile 10 )
    {
    #1
    echo $zeile." | ";
    for( 
    $a $a 10 $a++ )
    {
    #2
      
    echo "<b>_".$a."_</b>";
      for( 
    $b $b 10 $b++ )
      {
    #3
      
    echo $b;
      while ( 
    $zeile2 )
      {
    #4
        
    echo "<font color='red'><b>".$zeile2."</b></FONT>";
        
    $zeile2++;
      }
    #4
      
    }#3
    }#2
    echo "<br>";
    $zeile++;
    }
    #1 


    So funktioniert es
    ------------------------------

    PHP-Code:
    $zeile 1;

    while ( 
    $zeile 10 )
    {
    #1
    echo $zeile." | ";
    for( 
    $a $a 10 $a++ )
    {
    #2
      
    echo "<b>_".$a."_</b>";
      for( 
    $b $b 10 $b++ )
      {
    #3
      
    echo $b;
      
    $zeile2 1;  #<----------------------- So funktioniert es
      
    while ( $zeile2 )
      {
    #4
        
    echo "<font color='red'><b>".$zeile2."</b></FONT>";
        
    $zeile2++;
      }
    #4
      
    }#3
    }#2
    echo "<br>";
    $zeile++;
    }
    #1 
    MfG
    PHP MySQL Coder

  • #2
    idr. benutzt man ohnehin for()-schleifen für sowas. warum du nicht?

    Kommentar


    • #3
      Ich habe....

      das Beipiel nur vereinfacht.

      Eigentlich lese ich in den While Schleifen den Inhalt einer MySQL DB aus und da habe ich das besagte Problem.

      Danke
      MfG
      PHP MySQL Coder

      Kommentar


      • #4
        $zeile2 hat nachher den wert 10. nenne mir einen guten grund, warum da beim zweiten durchlauf der ersten while-schleife die zweite whileschleife also anspringen sollte?

        Kommentar


        • #5
          na dann überlegt mal welchen wert $zeile2 hat nach dem ersten durchlauf von $zeile? nämlich 3. und damit wird beim nächsten durchlauf der ersten schleife die zweite schleife nicht mehr ausgeführt da !(3 < 3)

          aber wenn du die lösung hast, warum brauchst du dann noch hilfe
          ... und besucht mal den ebay(TM)-browser überhaupt: Lauge
          und damit das Fragen nen Ende hat: Der Progger davon sitzt mir gegenüber !

          Kommentar


          • #6
            in meinem beitrag bitte die 10 durch eine 3 ersetzen

            wahscheinlich hat er angst, dass die definition von $zeile2 mitten im code vom PHP-Interpreter nicht mehr gefunden wird.

            Kommentar


            • #7
              Ich frage in den While Schleifen DB Tabellen ab, dann müsste ich vor der 2. While schleife immer die Daten neu abfragen.
              Und da es Sehr viele sind, wird die DB Sehr langsam.
              Deshalb habe ich mir gedacht die Daten nur einmal auszulesen. Und mir jedem neuen durchlauf neu anzuzeigen.
              Zuletzt geändert von php-mysql-coder; 16.12.2003, 15:41.
              MfG
              PHP MySQL Coder

              Kommentar


              • #8
                @TobiaZ
                hätte er nicht diese langen pfeile dran. ich hätte sie auch net entdeckt. ja ja php muß manchmal schon ganz schön was leisten ...


                @php-mysql-coder
                bei deinem letzten post denke ich hier liegt vielleicht eine sql optimierung an. denn eine gute query kann dir so manche while-schleife ersparen. etwas mehr von deinen tabs und selects, dann können wir dir vielleicht bei der opimierung helfen.
                ... und besucht mal den ebay(TM)-browser überhaupt: Lauge
                und damit das Fragen nen Ende hat: Der Progger davon sitzt mir gegenüber !

                Kommentar


                • #9
                  Danke, hier der Abfrage-Code. Vereinfacht


                  PHP-Code:
                  $result = @mysql_query("SELECT * FROM Users"$mysql_conn);

                  while ( 
                  $zeile = @mysql_fetch_array($result) )
                  {
                    
                  // Alle Monate durchgehen
                    
                  for( $monat $monat 13 $monat++ )
                    {
                     
                  // In den Monaten alle Tage durchgehen
                     
                  for( $tag $tag 32 $tag++ )
                     {
                      
                  $result2 = @mysql_query("SELECT * FROM Anwesenheit"$mysql_conn);

                      while ( 
                  $zeile2 = @mysql_fetch_array($result2) )
                      {
                       
                  //Daten ausgeben ob an diesem Tag anwesend
                      
                  }
                     }
                    }
                   } 
                  Zuletzt geändert von php-mysql-coder; 16.12.2003, 15:53.
                  MfG
                  PHP MySQL Coder

                  Kommentar


                  • #10
                    ist doch ok. aber es passt net ganz zu deinem post die variable for der 2. schleife immer wieder neu abzufragen. das erledigt hier doch deine while geschichte...

                    PS: ich hoffe das * gehört auch zur vereinfachung des posts... und laß das @ weg. es wird eigentlich eher selten und nur in speziellen fällen benutzt!
                    ... und besucht mal den ebay(TM)-browser überhaupt: Lauge
                    und damit das Fragen nen Ende hat: Der Progger davon sitzt mir gegenüber !

                    Kommentar


                    • #11
                      In der 1. While Schleife werden Anzahl X User abgefragt und in der 2. While Schleife werden Anzahl X Abwesenheiten geprüft.

                      Das bedeutet, dass ich bei jedem User alle Abwesenheiten überprüfe.

                      Wenn ich nun Bei jeder Überprüfung ein und die selben Daten immer wieder Abfragen muss ca. 300 pro User, dann wird die Darstellungsgeschwindigkeit extrem verlangsamt.

                      Deshalb wollte ich die die Daten nur 1x auslesen.

                      PS. Das * ist auch nur zur vereinfachung.
                      MfG
                      PHP MySQL Coder

                      Kommentar


                      • #12
                        also wenn ich das richtig verstehe willst du doch alle user und alle anwesenheiten des jahres darstellen?

                        mit anderen worten: 300 user * 12 monate * 31 tage in einer tabelle.

                        dann liegt dein problem in der darstellung (also die html seite wird sehr groß) aber nicht unbedingt an deiner abfrage. letzeendlich fragst du ja pro user nur einmal seine anwesenheit.

                        -- ach jetzt sehe ich was
                        du kannst evtl. so die db etwas entlasten:
                        PHP-Code:
                        $result2 = @mysql_query("SELECT * FROM Anwesenheit WHERE user_id = " $zeile["user_id"], $mysql_conn); 
                        dann bekommst du immer nur die anwesenheiten des jeweils in der vorschleife aufgerufenen users (user_id ist von mir jetzt hinzugedacht - mußt dafür deine verbindung einsetzen)

                        ...oder anders nach deinem prinzip. nimm die 2.schleife heraus und setze sie vor die erste schleife. fülle damit ein array und arbeite dann mit diesem generierten array in deiner user schleife
                        ... und besucht mal den ebay(TM)-browser überhaupt: Lauge
                        und damit das Fragen nen Ende hat: Der Progger davon sitzt mir gegenüber !

                        Kommentar


                        • #13
                          Die Dauer liegt nicht in der Darstellung sondern in den ständigen Datenbank aufrufen/connects.



                          ...oder anders nach deinem prinzip. nimm die 2.schleife heraus und setze sie vor die erste schleife. fülle damit ein array und arbeite dann mit diesem generierten array in deiner user schleife

                          --------------------------------------------------------------------------------------------

                          Das ist eine gute Idee, werds mal ausprobieren.
                          Hast du evtl. ein Beispiel.
                          Zuletzt geändert von php-mysql-coder; 16.12.2003, 16:29.
                          MfG
                          PHP MySQL Coder

                          Kommentar


                          • #14
                            must ja nicht zwingend ein array benutzen:

                            mysql_seek() oder wie das heißt.

                            Kommentar


                            • #15
                              also resume:

                              1. in ein array füllen - eine sql und ein array
                              2. mysql_data_seek und mysql_fetch_row liefern dir immer den nächsten satz aus deiner abfrage. ein array gespart zwei neue befehle hinzu (finde nu auf anhieb hier nur keine so rechte anwendung - wird aber schon eine geben)
                              3. für jeden user eine sql mit user_id = $zeile["user_id"] absetzen

                              such dir was aus
                              ... und besucht mal den ebay(TM)-browser überhaupt: Lauge
                              und damit das Fragen nen Ende hat: Der Progger davon sitzt mir gegenüber !

                              Kommentar

                              Lädt...
                              X