Ladeanzeige während FOR-Schleife

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

  • Ladeanzeige während FOR-Schleife

    Hi! Ich bin grade dabei ein Galerie scirpt zu schreiben und ich wollte, da das Thumbnail erstellen, etc. viel zeit beansprucht, eine statusanzeige einfügen.
    Ich habs so versucht (Sry viel Code Die Statusanzeige findet ihr am unteren Teil der For-Schleife)
    PHP-Code:
    <?php
    //
    //[...]
    //
    $ordner_arrayscandir($g_pfad);
    $array_num=count($ordner_array);

    $sql="SELECT gid FROM galery WHERE g_name='$event_name'";
    $result=mysql_query($sql) OR die(mysql_error());
    $g_id=mysql_result($result,0,0);

    //Datum für die Datenbank
    $timetime();

    // Erechnung der Statusanzeige
    $statusnumber=200/$array_num-2;

    //Begin der Schleife
    for($n=2;$n<$array_num;$n++)
    {
    $i=$n-1;
    //
    //[...]
    //
    echo'
    <html>

        <head>
            <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
            <meta name="generator" content="Adobe GoLive">
        </head>

        <body bgcolor="#5ba649">
            <div align="center">
    <table width="519" border="0" cellspacing="46" cellpadding="0" 
    background="../images/content/loadingbar/back.jpg" height="246">
                    <tr>
                        <td>
                            <div align="center">'
    ;
                            echo    
    $i;echo' / '; echo $array_num-2; echo' Bildern umgewandelt!<br>
                                <br>
                                <table width="64" border="0"
     cellspacing="0" cellpadding="0" bgcolor="#3e3e3e">
                                    <tr>
                                        <td>
                                            <table width="200" border="0" cellspacing="1" cellpadding="0">
                                                <tr>
    <td bgcolor="white"><img src="../images/content/loadingbar/color.jpg" alt="" height="20" 
    width="'
    ;echo $statusnumber; echo'" border="0"></td>
                                                </tr>
                                            </table>
                                        </td>
                                    </tr>
                                </table>
                            </div>
                        </td>
                    </tr>
                </table>
            </div>
            <p></p>
        </body>

    </html>
    '
    ;    
        
    $statusnumber=$statusnumber*$i;
    }
    mysql_close($link);


        
    }
    }
    else{

    echo
    ' Sie haben nicht die Berechtigung dazu!';
    }
    };
    ?>
    Problem ist das einmal der Statusbalken nicht funtzt, also er wird nicht angezeigt... Die Anzeige x/y Bildern geht.
    Und es wird wegen der schleife nicht einmal gepostet sondern ich hab dann halt zig Ladescreens untereinander...


    Ich hab auch schon viel von flush(); gehört, ich hab nur keine Ahnung wie ich die funktion einsetzen soll oder was sie letzendlich bewirkt, hab natürlich auch im manual nachgeschaut aber nur Bahnhof, sry! Könnt ihrs mir vielleicht plausibel und mehr oder weniger verständlich erklären? Ich hoffe ihr könnt mir da helfen

    Schonmal vielen Dank wer bis hier gelesen hat.

    Mc.
    Zuletzt geändert von Mc.; 08.09.2005, 17:48.

  • #2
    http://www.php-resource.de/forum/sho...threadid=50454

    erst lesen

    Kommentar


    • #3
      Haste diesen gelesen ??
      Und bitte auch umsetzen.

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Habs gelesen und grad geändert. Sry dafür

        Und was meintest du mit "umsetzen"?

        Thx, Mc.

        Kommentar


        • #5
          verändert sich denn $statusnumber von iteration zu iteration?
          wahrscheinlich nicht, zumindest sehe ich nicht, woher $i kommt.

          Kommentar


          • #6
            In dem jetzigen Zustand deines Codes funktioniert das auch nicht. Es wird jedesmal eine komplette Seite mit<head>, <body> usw. übergeben. Deshalb siehst du das auch mehrfach untereinander.

            Du musst PHP sagen, dass es Daten schon während des Abarbeitens an den Client senden muss. Und dann darf da nicht so viel drin sein, also z.B. nur die Grafik für den Balken.

            Schau dir sonst mal die Tutorials an, da war auch eins über Fortschrittsbalken, wenn ich mich recht erinnere.

            Kommentar


            • #7
              Original geschrieben von penizillin
              verändert sich denn $statusnumber von iteration zu iteration?
              wahrscheinlich nicht, zumindest sehe ich nicht, woher $i kommt.
              Hast du wahrscheinlich übersehen:

              PHP-Code:
              //Begin der Schleife
              for($n=2;$n<$array_num;$n++)
              {
              $i=$n-1
              Sieht vl umständlich aus aber $i muss im ersten Umlauf 1 sein, deshalb benutz ich hier $i und nicht $n weil $n=2 im ersten Umlauf, weil scandir() auch "." und ":" beinhaltet.

              Allerdings beunruhigen mich die Werte die $statusnumber ausgiebt:

              PHP-Code:
              1.8461538461538
              3.6923076923077
              11.076923076923
              44.307692307692
              221.53846153846
              1329.2307692308
              9304.6153846154
              74436.923076923
              669932.30769231
              6699323.0769231
              73692553.846154
              884310646.15385
              11496038400
              160944537600
              2414168064000
              38626689024000
              6.56653713408E+014
              1.1819766841344E+016
              2.2457556998554E+017
              4.4915113997107E+018
              9.4321739393925E+019
              2.0750782666664E+021
              4.7726800133326E+022
              1.1454432031998E+024
              2.8636080079996E+025
              7.4453808207989E+026
              2.0102528216157E+028
              5.6287079005239E+029
              1.6323252911519E+031
              4.8969758734558E+032
              1.5180625207713E+034
              4.8578000664682E+035
              1.6030740219345E+037
              5.4504516745773E+038
              1.9076580861021E+040
              6.8675691099674E+041
              2.5410005706879E+043
              9.6558021686142E+044
              3.7657628457595E+046
              1.5063051383038E+048
              6.1758510670456E+049
              2.5938574481592E+051
              1.1153587027084E+053
              4.9075782919171E+054
              2.2084102313627E+056
              1.0158687064268E+058
              4.7745829202062E+059
              2.291799801699E+061
              1.1229819028325E+063
              5.6149095141625E+064 
              Original geschrieben von Heini81
              [...]
              Schau dir sonst mal die Tutorials an, da war auch eins über Fortschrittsbalken, wenn ich mich recht erinnere.
              lEs gibt ein Tutorial hier. Allerdings ist des eher eine Notlösung für mich da ich dann auf dieses Design angewiesen bin, und ich hab glaube ich gelesen das es auf dem MAc nicht funtzt, was erforderlich sein sollte.

              Danke trotzdem ich hoffe ihr könnt mir irgendwie helfen! Wie gesagt vl geht es mit flush() ich kann nur nichts damit anfangen...

              Mc.
              Zuletzt geändert von Mc.; 08.09.2005, 18:16.

              Kommentar


              • #8
                Das hier ist ein Beispiel aus dem Manual zu flush:

                PHP-Code:
                for ($i 0$i<10$i++){

                       echo 
                "<br> Zeile ".$i;

                       
                flush();
                       
                sleep(2);

                Dieses Beispiel arbeitet mit sleep, damit dieFunktionsweise von flush überhaupt sichtbar wird.

                Wenn du an der Stelle, wo per echo etwas ausgegeben wird, vielleicht sowas wie
                PHP-Code:
                echo "<img src='balken.gif' width=xxx height=xxx>"
                machst, könnte es klappen...

                Edit: Damit reihst du eben mehrere kleineGrafiken nebeneinander, die dann den Balken bilden.

                Du musst nur den ganzen Rest HTML-Codeaus der Schleife rausnehmen. In der Schleife darf nur das obige als Ausgabe drin sein.

                Kommentar


                • #9
                  Also meinst du das Bild in der Schleife lassen und den HTML Code der drüber steht über die schleife, und den HTML Code der unter dem Balken steht unter die schleife? Das dürfte doch au net funtzen weil dann die Tabelle net angezeigt werden kann oder?
                  es wird doch erst die Schleife fertig ausgeführt und dann der restliche HTML Code!? Wie soll ich des anstellen? mit Frames?

                  Und bei mir funtzt des Script nur so, aber jetzt weiß ich was es bewirkt, danke
                  PHP-Code:
                  <?php
                  for ($i 0$i<10$i++){

                         echo 
                  "<br> Zeile ".$i;

                         
                  flush();
                         
                  ob_flush();
                         
                  sleep(2);
                  }
                  ?>
                  Danke schonmal Mc.
                  Zuletzt geändert von Mc.; 08.09.2005, 18:32.

                  Kommentar


                  • #10
                    Naja, dann musst du den Balken irgendwie aus der Tabelle auslagern oder so ähnlich. Ansonsten würde bei jeden Schleifensurchlauf eine neue Tabelle erstellt werden.

                    Kommentar


                    • #11
                      Soweit war ich auch schon

                      Wie soll das gehen, die Tabelle "spalten" und vor, bzw. nach die schleife stellen kann net gehen, weil erst die Schleife durchlaufen wird bevor der Code hinter ihr ausgeführt werden kann. Somit wäre die letze hälfte der Tabelle net da -> Fehler beim ausführen.

                      Also wie dann?

                      Danke im voraus, Mc.

                      Kommentar


                      • #12
                        Am besten diese Tabellen-Bastelei verwerfen und was richtiges machen...

                        Es führt kein Weg dran vorbei, du musst den Balken vor oder hinter die Tabelle setzen... Evtl. kannst du den ja in ein DIV packen und positionieren, habe aber gerade keine Idee, wie...

                        Kommentar


                        • #13
                          EDIT:

                          K, ich habs hinbekommen
                          Mit Layern funtzt es, wens interessiert hier das Script:

                          PHP-Code:
                          <html>

                              <head>
                                  <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
                                  <meta name="generator" content="Adobe GoLive">
                                  <style type="text/css" media="screen"><!--
                          #layer1 { visibility: visible; position: absolute; top: 137px; left: 466px; width: 203px; height: 19px }
                          --></style>
                              </head>

                              <body bgcolor="#5ba649">
                                  <div align="center">
                                      <table width="519" border="0" cellspacing="46" cellpadding="0" background="../images/content/loadingbar/back.jpg" height="246">
                                          <tr>
                                              <td>
                                                  <div align="center">
                                                              <br>
                                                      <table width="64" border="0" cellspacing="0" cellpadding="0" bgcolor="#3e3e3e" height="25">
                                                          <tr>
                                                              <td>
                                                                  <table width="202" height="25" border="0" cellspacing="1" cellpadding="0">
                                                                      <tr>
                                                                          <td bgcolor="white">
                                                                          </td>
                                                                      </tr>
                                                                  </table>
                                                              </td>
                                                          </tr>
                                                      </table>
                                                  </div>
                                              </td>
                                          </tr>
                                      </table>
                                  </div>
                                  <p></p>
                              </body>

                          </html>
                                                                              
                                                      <div id="layer1">
                                                          <?php
                          for ($i 0$i<30$i++){
                          $n="4";
                                 echo 
                          '<img src="../images/content/loadingbar/color.jpg" alt="" height="21" width="'.$n.'" border="0">';
                                 
                          flush();
                                 
                          ob_flush();
                                 
                          sleep(2);
                                 }
                          ?></div>
                          Danke an alle die mir geholfen haben! Mc.
                          Zuletzt geändert von Mc.; 08.09.2005, 19:03.

                          Kommentar


                          • #14
                            Das sleep(2) solltest du herausnehmen, das macht alles nur langsamer... Bewirkt eine 2-Sekunden-Pause...

                            Kommentar


                            • #15
                              Ähm ich sag etz mal nichts dazu und verweise dich selbst auf deine Signatur

                              Des habe ich dringelassen da ich es auf mit dem Beispielscript erst probiert habe, weil des net so umfangreich ist wie des eigentliche Problemscript ^^
                              Das macht es einfacher.

                              Mc.

                              Kommentar

                              Lädt...
                              X