Ankündigung

Einklappen
Keine Ankündigung bisher.

Progress Info

Einklappen

Neue Werbung 2019

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

  • Progress Info

    Guten Tag
    Ich versuche seit längerem eine info zum Ladezustand der Seite an zu zeigen.
    Bei der eingabe eines Buchstabens beginnt der Suchlauf. Wenn nun ein "e" welches in vielen Nachnamen vorkommt eingegeben wird Startet der Suchlauf.

    Die gefundenen Daten werden nun im id=content eingefügt.
    Wie kann ich eine Sanduhr, Progressbar einblenden lassen, bis die Daten vorhanden sind.
    Hab schon einiges probiert. Leider absolut ohne erfolg.

    Für eine Hilfestellung wäre ich dankbar.

    Der Aufbau mener Seite:
    Code:
    <?php
        //Wird benötigt, dass alle SESSION Variablen gelesen werden können.
        session_start();
    
        //Prüfung ob ein gültiger User angemeldet ist
        if (strlen($_SESSION["user"][0]["id_adr"])==0)
        {
                exit(header("location:main.php"));
        }
        include 'content_head.php';
    ?>
    
    <body>
    
    <!--Bootstrap original codes-->
    <nav class="navbar navbar-default navbar-fixed-top">
            <?php include './menue/top_menue.php'?>
    </nav>
    
    <!-- Sidenav -->
    <nav id="mySidenav" class="w3-sidenav w3-collapse w3-theme-l5 w3-animate-left" style="z-index:3;width:250px;margin-top:51px;">
        <a href="javascript:void(0)" onclick="w3_close()" class="w3-right w3-xlarge w3-padding-large w3-hover-blue w3-hide-large" title="close menu">
            <i class="fa fa-remove"></i>
        </a>
        <?php include 'menue/suchen_Accordion.php'?>
    </nav>
    
    <!-- Überlagerungs Effekt beim Öffnen sidenav auf kleinen Bildschirmen-->
    <div class="w3-overlay w3-hide-large" onclick="w3_close()" style="cursor:pointer" title="close side menu" id="myOverlay"></div>
    
    <!-- Den Content um 250px verschieben wenn Sidenav sichtbar ist -->
    <div class="w3-main" style="margin-left:250px">
    
        <div class="w3-row w3-padding-64 ">
            <div id="info_Box">Start</div>
            <div id="content" class="w3-container">
                <?php
                    if (isset($_SESSION['user']['passw']))
                        {
                            include 'konfig_mut/passkorr/korrpass.php';
                        }
                ?>
            </div>
        </div>
    </div>
    
    <script>
    // Objekt von Sidenav erzeugen
    var mySidenav = document.getElementById("mySidenav");
    
    // Objekt von overlay erzeugen
    var overlayBg = document.getElementById("myOverlay");
    
    // Objekt von overlay erzeugen
    //var kundenSpalten = document.getElementById("kundenSpalten");
    
    // Wechselansicht von Sidenav
    function w3_open() {
            if (mySidenav.style.display === 'block') {
                    mySidenav.style.display = 'none';
                    overlayBg.style.display = "none";
                    //kundenSpalten.style.display = "none";
            } else {
                    mySidenav.style.display = 'block';
                    overlayBg.style.display = "block";
                    //kundenSpalten.style.display = "block";
            }
    
    }
    
    // Schliesse Sidenav
    function w3_close() {
            mySidenav.style.display = "none";
            overlayBg.style.display = "none";
    }
    </script>
    <?php
        include 'modal/modal_dialog.php'
    ?>
    
    </body>
    </html>
    Code:
    <?php
    session_start();
    require_once ($_SESSION['startverz'].'/inc/datei_start.inc');
    
    //Verzeichniss in welchem die ink Dateien liegen
    $InkVerz = ABSPATH.'/content/adressen/';
    
    //Anzahl Datensätze die Angezeigt werden liegt bei 2000 in der av_co...
    
    // übergabe des q parameters vom URL
    $q = $_REQUEST["q"];
    $strF=$_REQUEST["strF"];
    
    //echo $strF."<br>";
    //echo $q."<br>";
    
    $accordion      = NEW accordion();
    $filter         = NEW form_kunden_filter(NEW tadressen(), $q, $strF);
    
    $form_adressen  = NEW form_kunde(NEW tadressen(),
                                     NEW trechnung(),
                                     NEW dbinfos(),
                                     NEW tanschriften(),
                                     NEW tkommunikation(),
                                     NEW tbemerkungen());
    
    //Datenfilter-----------------------------------------------------------------------------
    $db_erg = $filter->get_kunde_rec();
    //echo $filter->get_kunde_sql();
    //----------------------------------------------------------------------------------------
    
    //Titel der Seite
    $hint = "<H3>".setSpracheText("Anzahl Datensätze: ",10000);
    //Anzahl der Datensätze überprüven
    $_anzahl = fktTestCountSQL($db_erg);
    $_progressAdd = 100 / $_anzahl;
    $_progress = 1 + $_progressAdd;
    
    //Arbeitsanzeige erstellen
    echo("
        <script type=\"text/javascript\">
            var zaehle = function()
                {
                    document.getElementById(\"info_Box\").innerHTML = \"Juhui\";
                }
        </script>
        ");
    
    $form_adressen->set_Kunde_update_count($_anzahl);       //anzahl Datensätze übergeben. Wenn 1 dann wird gewaelt um eins erhöht
    
    if ($_anzahl == 0)
    {
        //Wenn keine Adressen mit dem Filter gefunden werden einen Knopf zum erstellen einer
        //neuen Adresse zu verfühgung stellen.
        $form_adressen->set_button_NewAdr();
        echo $form_adressen->get_Neu_kunde();
        $mysqli->close();
        exit;
    }
    else
    {
        $hint .= $_anzahl;
        $hint .= "</H3>";
    }
    
    //Tabellenkopf------------------------------------------------------------------------------------
        $hint .= $form_adressen->get_kopf_text();
    //------------------------------------------------------------------------------------------------
    
    $count=1;
    $kopfdaten_kunde="";
    $koerper_kunde="";
    $accordion->set_mantel_name("kunden");
    //Ganze Whileschlaufe in eine Variable schreiben und zuletzt abfüllen
    while ($zeile = $db_erg->fetch_assoc() AND ($count <= anzahl_sho_Stop_Adr))
        {
            //--------------------------------------------------------------------------------
            //Wenn die Anzahl = 1 wird die Adresse um gewaehlt + 1 erhöht im Objekt tAdressen
            //--------------------------------------------------------------------------------
            $aktiv=false;
    
            if($_SESSION['acadrmut']!=0)
                {if($zeile['Ad_id']==$_SESSION['acadrmut']){$aktiv=true;}}
            else{if($count==1){$aktiv=true;}}
    
            $accordion->set_collaps_name("kunde".$count);
            $form_adressen->set_kunde_id($zeile['Ad_id'], $count);
    
            $accordion->set_collaps_kopfteil($form_adressen->get_form_kopfdaten());
            $koerper_kunde = $accordion->put_accordion_Teile($aktiv, $koerper_kunde, $form_adressen->get_form_koerper());
            $count++;
            $_progress += $_progressAdd;
            $_progress = intval($_progressAdd);
    
            echo("<script type=\"text/javascript\">zaehle();</script>");
            //echo("<script type=\"text/javascript\">zaehle(".$_progress.");</script>");
    
        } //end While
    
    $hint .= $accordion->put_accordion_Mantel_inkl($koerper_kunde);
    
    echo $hint;
    $mysqli->close();
    
    //echo("<script type=\"text/javascript\">zaehle(\"\");</script>");
    
    ?>

  • #2
    Wozu das denn?
    Habe das mal eben getestet, wie du gesagt hast mit "e" im Nachnamen
    Code:
    SELECT *
    FROM `mytable`
    WHERE `nachname` LIKE '%e%'
    Das Ergebnis
    Showing rows 0 - 29 ( 373,970 total, Query took 0.0000 sec)

    Da bleibt ja gar keine Zeit irgendetwas anderes als das Ergebnis einzublenden.
    BTW. das war nicht mal auf einem Linux Server von einem Hoster getestet, wo das noch mal um den Faktor ~10 schneller gehen sollte.

    Kommentar


    • #3
      Die Abfrage ist tatsächlich schnell. Der aufbau der Seite mit den zusätzlichen infos zur Adresse brauch da ein wehnig länger. Bei einem resultat von 10 Adressen ist eine Fortschritsanzeige unnötig. Bei 200 Adressen steht der Bildschirm ca 30sek.
      Da möchte ich gerne informieren, dass der Server am arbeiten ist.

      Kommentar


      • #4
        Hast du gesehen wie viele Adressen ich herausfiltert habe? Nicht 200 nicht 2000 auch nicht 20000 sondern 373970 aus ca 555000 Adressen.
        Also irgend etwas machst du falsch.

        Kommentar


        • #5
          Zitat von Marlon Beitrag anzeigen
          Guten Tag
          Ich versuche seit längerem eine info zum Ladezustand der Seite an zu zeigen.
          Bei der eingabe eines Buchstabens beginnt der Suchlauf. Wenn nun ein "e" welches in vielen Nachnamen vorkommt eingegeben wird Startet der Suchlauf.

          Die gefundenen Daten werden nun im id=content eingefügt.
          Wie kann ich eine Sanduhr, Progressbar einblenden lassen, bis die Daten vorhanden sind.
          Hab schon einiges probiert. Leider absolut ohne erfolg.

          Für eine Hilfestellung wäre ich dankbar.

          Der Aufbau mener Seite:
          Code:
          <?php
          //Wird benötigt, dass alle SESSION Variablen gelesen werden können.
          session_start();
          
          //Prüfung ob ein gültiger User angemeldet ist
          if (strlen($_SESSION["user"][0]["id_adr"])==0)
          {
          exit(header("location:main.php"));
          }
          include 'content_head.php';
          ?>
          
          <body>
          
          <!--Bootstrap original codes-->
          <nav class="navbar navbar-default navbar-fixed-top">
          <?php include './menue/top_menue.php'?>
          </nav>
          
          <!-- Sidenav -->
          <nav id="mySidenav" class="w3-sidenav w3-collapse w3-theme-l5 w3-animate-left" style="z-index:3;width:250px;margin-top:51px;">
          <a href="javascript:void(0)" onclick="w3_close()" class="w3-right w3-xlarge w3-padding-large w3-hover-blue w3-hide-large" title="close menu">
          <i class="fa fa-remove"></i>
          </a>
          <?php include 'menue/suchen_Accordion.php'?>
          </nav>
          
          <!-- Überlagerungs Effekt beim Öffnen sidenav auf kleinen Bildschirmen-->
          <div class="w3-overlay w3-hide-large" onclick="w3_close()" style="cursor:pointer" title="close side menu" id="myOverlay"></div>
          
          <!-- Den Content um 250px verschieben wenn Sidenav sichtbar ist -->
          <div class="w3-main" style="margin-left:250px">
          
          <div class="w3-row w3-padding-64 ">
          <div id="info_Box">Start</div>
          <div id="content" class="w3-container">
          <?php
          if (isset($_SESSION['user']['passw']))
          {
          include 'konfig_mut/passkorr/korrpass.php';
          }
          ?>
          </div>
          </div>
          </div>
          
          <script>
          // Objekt von Sidenav erzeugen
          var mySidenav = document.getElementById("mySidenav");
          
          // Objekt von overlay erzeugen
          var overlayBg = document.getElementById("myOverlay");
          
          // Objekt von overlay erzeugen
          //var kundenSpalten = document.getElementById("kundenSpalten");
          
          // Wechselansicht von Sidenav
          function w3_open() {
          if (mySidenav.style.display === 'block') {
          mySidenav.style.display = 'none';
          overlayBg.style.display = "none";
          //kundenSpalten.style.display = "none";
          } else {
          mySidenav.style.display = 'block';
          overlayBg.style.display = "block";
          //kundenSpalten.style.display = "block";
          }
          
          }
          
          // Schliesse Sidenav
          function w3_close() {
          mySidenav.style.display = "none";
          overlayBg.style.display = "none";
          }
          </script>
          <?php
          include 'modal/modal_dialog.php'
          ?>
          
          </body>
          </html>
          Code:
          <?php
          session_start();
          require_once ($_SESSION['startverz'].'/inc/datei_start.inc');
          
          //Verzeichniss in welchem die ink Dateien liegen
          $InkVerz = ABSPATH.'/content/adressen/';
          
          //Anzahl Datensätze die Angezeigt werden liegt bei 2000 in der av_co...
          
          // übergabe des q parameters vom URL
          $q = $_REQUEST["q"];
          $strF=$_REQUEST["strF"];
          
          //echo $strF."<br>";
          //echo $q."<br>";
          
          $accordion = NEW accordion();
          $filter = NEW form_kunden_filter(NEW tadressen(), $q, $strF);
          
          $form_adressen = NEW form_kunde(NEW tadressen(),
          NEW trechnung(),
          NEW dbinfos(),
          NEW tanschriften(),
          NEW tkommunikation(),
          NEW tbemerkungen());
          
          //Datenfilter-----------------------------------------------------------------------------
          $db_erg = $filter->get_kunde_rec();
          //echo $filter->get_kunde_sql();
          //----------------------------------------------------------------------------------------
          
          //Titel der Seite
          $hint = "<H3>".setSpracheText("Anzahl Datensätze: ",10000);
          //Anzahl der Datensätze überprüven
          $_anzahl = fktTestCountSQL($db_erg);
          $_progressAdd = 100 / $_anzahl;
          $_progress = 1 + $_progressAdd;
          
          //Arbeitsanzeige erstellen
          echo("
          <script type=\"text/javascript\">
          var zaehle = function()
          {
          document.getElementById(\"info_Box\").innerHTML = \"Juhui\";
          }
          </script>
          ");
          
          $form_adressen->set_Kunde_update_count($_anzahl); //anzahl Datensätze übergeben. Wenn 1 dann wird gewaelt um eins erhöht
          
          if ($_anzahl == 0)
          {
          //Wenn keine Adressen mit dem Filter gefunden werden einen Knopf zum erstellen einer
          //neuen Adresse zu verfühgung stellen.
          $form_adressen->set_button_NewAdr();
          echo $form_adressen->get_Neu_kunde();
          $mysqli->close();
          exit;
          }
          else
          {
          $hint .= $_anzahl;
          $hint .= "</H3>";
          }
          
          //Tabellenkopf------------------------------------------------------------------------------------
          $hint .= $form_adressen->get_kopf_text();
          //------------------------------------------------------------------------------------------------
          
          $count=1;
          $kopfdaten_kunde="";
          $koerper_kunde="";
          $accordion->set_mantel_name("kunden");
          //Ganze Whileschlaufe in eine Variable schreiben und zuletzt abfüllen
          while ($zeile = $db_erg->fetch_assoc() AND ($count <= anzahl_sho_Stop_Adr))
          {
          //--------------------------------------------------------------------------------
          //Wenn die Anzahl = 1 wird die Adresse um gewaehlt + 1 erhöht im Objekt tAdressen
          //--------------------------------------------------------------------------------
          $aktiv=false;
          
          if($_SESSION['acadrmut']!=0)
          {if($zeile['Ad_id']==$_SESSION['acadrmut']){$aktiv=true;}}
          else{if($count==1){$aktiv=true;}}
          
          $accordion->set_collaps_name("kunde".$count);
          $form_adressen->set_kunde_id($zeile['Ad_id'], $count);
          
          $accordion->set_collaps_kopfteil($form_adressen->get_form_kopfdaten());
          $koerper_kunde = $accordion->put_accordion_Teile($aktiv, $koerper_kunde, $form_adressen->get_form_koerper());
          $count++;
          $_progress += $_progressAdd;
          $_progress = intval($_progressAdd);
          
          echo("<script type=\"text/javascript\">zaehle();</script>");
          //echo("<script type=\"text/javascript\">zaehle(".$_progress.");</script>");
          
          } //end While
          
          $hint .= $accordion->put_accordion_Mantel_inkl($koerper_kunde);
          
          echo $hint;
          $mysqli->close();
          
          //echo("<script type=\"text/javascript\">zaehle(\"\");</script>");
          
          ?>
          Ziemlicher Murks. Fällt mir sogar schwer nachzuvollziehen was hier überhaupt passiert.

          Wenn ich jedoch sowas sehe...

          Code:
          echo("<script type=\"text/javascript\">zaehle();</script>");
          kann ich gleich sagen dass das komplett falsch ist und du so nicht auf einen grünen Zweig kommen wirst.
          PHP mischt man nicht mit JS.

          Verwendest du überhaupt Ajax?

          Kommentar


          • #6
            Die Seite wird mit Ajax in das Div id=content geladen.
            Das mischen mit dem js ist sicher nicht ok aber wie gesagt habe ich bereits einiges gelesen und probiert. Leider alles ohne erfolg.
            Einen typ wie ich das hinbekomme wäre sehr nett.

            Kommentar


            • #7
              Hallo protestix es ist nicht die anzahl!
              Pro adresse werden in jedem Block alle offenen Rechnungen, alle laufenden Rechnungen, alle Offerten, alle Bemerkungen, alle Kommunikationen aufbereitet. Das brauch diese Zeit. Ja ich konnte das alles bei bedarf nachladen.
              Trotzallem würde ich gerne eine Anzeige an den Bildschirm schicken, um bei wartezeiten den User zu informieren.

              Kommentar


              • #8
                Zitat von Marlon Beitrag anzeigen
                Die Seite wird mit Ajax in das Div id=content geladen.
                Ich habe wirklich gesucht, ich finde kein ajax request, und da müsste ja auch die progressbar stehen.
                Wenn Du also bitte nur das ajax gedöns mal postest.

                Code:
                 
                  class="w3-sidenav w3-collapse w3-theme-l5 w3-animate-left" style="z-index:3;width:250px;margin-top:51px;
                abgesehen davon, dass inline style auch nicht der stein der weisen ist, gehört sowas auch nicht in minimalisierenten (auf das problem bezogenen) code.

                Kommentar


                • #9
                  Du könntest das mit SSE umsetzen. Wie das geht habe ich mal ausführlich beschrieben unter https://www.php.de/forum/webentwickl...e3#post1530642 und ff.

                  Kommentar


                  • #10
                    Besten Dank protestix für deinen link. Werde mir das mal zu gemüte führen.
                    Besten Dank für deine Hilfe.

                    Kommentar


                    • #11
                      Hallo tomBuilder
                      Ich verwende Ajax nur um die Daten zu laden. So bestimme ich wohin "container" die Daten plaziert werden sollen.
                      Das Script liegt parat und kann verwendet werden um Daten zu speichern, löschen, aktualisieren und danach bei bedarf eine aktualisierte liste anzuzeigen oder eben nicht.

                      Code:
                                 
                                    <script>
                      
                                      //str_datwork PHP-Datei die eine Aufgbe erledigt;
                                      //str_acShowDat PHP-Datei die nach der Arbeit angezeigt wird;
                                      //strForm Frmularname aus der übergabe;
                                      //boSeite bei False wird str_acShowDat nicht geladen;
                                      //strZiel gibt an in welchem Bereich id=Content... die Datei angezeigt werden soll
                                      //param ist ein übergabeparameter der mit strField zusammen spielt
                      
                                      function mutDaten(str_datwork, str_acShowDat, strForm="adrMut", boSeite=true, strZiel="content", param="", strField="")
                                      {
                                          //alert(str_datwork +" ; "+ str_acShowDat +" ; "+ strForm +" ; "+ boSeite+" ; "+ strZiel);
                                          $.ajax({
                                              type: "POST",
                                              url: escape(str_datwork),
                                              data: jQuery("#"+strForm).serialize(),
                                              cache: false,
                                              success:  function(data){
                                                  if (boSeite)
                                                      {
                                                          showHint(param, strField, strZiel, str_acShowDat, false);
                                                          $("#modal").modal('hide');
                                                      }
                                              }
                                          });
                                      }
                      
                                  </script>
                      Code:
                                      function showHint(param, strField, place, what_dat, shal=false, anzBu=0)
                                          {
                                              //alert("Parameter : "+param +"\n Suchfeld : "+ strField +"\n Ziel : "+ place +"\n Daten : "+ what_dat +"\n Meldung : "+ shal);
                                              var such = true;
                                              var strParam = param;
                                              if (anzBu != 0)
                                                  {
                                                      //alert(strParam.length+"<>"+anzBu);
                                                      if (strParam.length < anzBu){such = false;}
                                                  }
                      
                                              if (such)
                                                  {
                                                      var xmlhttp = new XMLHttpRequest();
                                                      xmlhttp.onreadystatechange = function()
                                                          {
                                                              if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
                                                                  {
                                                                      document.getElementById(place).innerHTML = xmlhttp.responseText;
                                                                  }
                                                          }
                                                      if (shal){alert(param + ", " + strField + ", " + place + ", " + what_dat);}
                                                      xmlhttp.open("GET", what_dat + "?q=" + param + "&strF=" + strField, true);
                                                      xmlhttp.send();
                      
                                                  }
                                          }

                      Kommentar

                      Lädt...
                      X