Bernd: Wert an einer anderen Stelle zusammenrechnen

0 46

Wert an einer anderen Stelle zusammenrechnen

Bernd
  • php
  1. 0
    Rolf B
    1. 0
      Bernd
      1. 0
        MudGuard
        1. 0
          Bernd
          1. 0
            Gunnar Bittersmann
            • menschelei
        2. 0
          Rolf B
          1. 0
            Gunnar Bittersmann
            • menschelei
      2. 0
        Rolf B
        1. 0
          Tabellenkalk
        2. -2
          klawischnigg
          1. 1
            beatovich
            1. 0
              klawischnigg
            2. 0
              Felix Riesterer
          2. 3
            Orlok
            • javascript
            • ux
            • web
            1. -1
              beatovich
            2. 0
              Gunnar Bittersmann
            3. 0
              klawischnigg
              1. 2
                Gunnar Bittersmann
                1. 0
                  klawischnigg
                  1. 0
                    Gunnar Bittersmann
                    1. 0
                      klawischnigg
                      1. 0
                        Rolf B
                        1. 0
                          klawischnigg
                          1. 0
                            Rolf B
                            1. 0
                              klawischnigg
                              1. 0
                                Rolf B
                      2. 0
                        Gunnar Bittersmann
                        1. 0
                          klawischnigg
                          1. 1
                            Gunnar Bittersmann
          3. 0
            Auge
    2. 0
      beatovich
      1. 0
        Tabellenkalk
        1. 0
          Rolf B
    3. 0
      Bernd
      1. 0
        Matthias Apsel
        • programmiertechnik
        1. 0
          Bernd
        2. 0
          Gunnar Bittersmann
          • menschelei
      2. 0
        Rolf B
        1. 0
          Bernd
          1. 0
            Bernd
            1. 0
              Rolf B
              1. 0
                Bernd
                1. 0
                  Rolf B
      3. 0
        pl
  2. 0
    pl
    • javascript
    • php

Hallo,

ich habe eine Übersichtsseite

Oben in Reihe 1 habe ich Zahlen, diese kommen aus

foreach($kategorieuebersicht as $array_kategorieuebersicht){
  $a1 = Claudia($mysqli, $array_kategorieuebersicht['id']);
}

Jetzt gibt es noch gelbe Kategorien, die werden ebenfalls mit einer foreach ausgelesen. Habe ich die Möglichkeit die Werte, die unten im schwarzen stehen im Nachhinein dem $a1 hinzuzuaddieren?

  1. Hallo Bernd,

    wenn ich vorstellen darf: EVA. Die große alte Dame der elektronischen Datenverarbeitung. Mit einer tiefen Abneigung gegen italienische Kost - insbesondere Spaghetti.

    • E wie Eingabe (_GET und _POST Daten, DB auslesen)
    • V wie Verarbeitung (plus, minus, if, foreach, etc)
    • A wie Ausgabe (echo echo echo-ho-ho-ho)

    Oft genug lässt sich eine große Eva in viele kleine Evis strukturieren, d.h. man liest nur einen Satz, verarbeitet den und gibt Ergebnisse aus. Gleichzeitig bildet man aus den Teilergebnissen ein Gesamtergebnis. Aber eben nicht immer. Wenn das Gesamtergebnis in der Überschrift zu berücksichtigen ist, muss man es haben bevor die Überschrift ausgegeben wird. Das heißt: Alles zwischenspeichern, und erst zum Abschluss alles ausgeben.

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo,

      danke für deine Erklärung. Sonst gibt es keine Alternative? Heißt für mich sonst, dass Script welches jetzt bestimmt schon 4 Jahre alt ist und über 5.000 Zeilen Code hat komplett umzubauen was mit einem enormen Aufwand verbunden wäre.

      Lässt sich da vielleicht etwas mit Ajax machen?

      1. Hi,

        Sonst gibt es keine Alternative?

        Hast Du einen Flux-Compensator zur Verfügung und einen DeLorean?

        cu,
        Andreas a/k/a MudGuard

        1. Ich finde es nicht Lustig.

          1. @@Bernd

            Ich finde es nicht Lustig.

            Es ging hier auch nicht um Löwenzahn.

            LLAP 🖖

            --
            „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
        2. Hallo MudGuard,

          ich hab ihm grad einen hingestellt. Nur das Plutonium muss er sich noch selbst klauen.

          Rolf

          --
          sumpsi - posui - clusi
          1. @@Rolf B

            ich hab ihm grad einen hingestellt. Nur das Plutonium muss er sich noch selbst klauen.

            Und an die Weste denken. Die Libyer sind da nicht zimperlich.

            LLAP 🖖

            --
            „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      2. Hallo Bernd,

        wenn dein Code so aussieht wie andere Fragmente von Dir, die wir hier schon gesehen haben, dann verstehe ich deine Sorge.

        Aber ich kann mir nicht vorstellen, wie Du eine in PHP verknäuelte Verarbeitung mit Ajax retten können solltest. Und was genau willst Du mit Ajax erreichen? Ajax ist JavaScript, das Daten vom Server nachlädt und irgendwie ins DOM praktiziert. Was machst Du bei Usern die kein JavaScript einschalten? Sehen die dann bestimmte Daten nicht oder falsch?

        Aber wenn Du Ajax erwägst, dann ist dieses Risiko für Dich wohl irrelevant. Und dann KÖNNTEST du die oben befindlichen Datenfeldern, die ihre Werte erst nach Berechnung der schwarzen Felder bekommen können, erstmal leer lassen. Und Du generierst hinter die Tabelle einen Script-Block, der die richtigen Werte nachträglich dort hinschreibt. Das ist nicht ganz trivial, aber durchaus machbar.

        Ich mach mal ein Beispiel - bei Dir wird das sicher anders aussehen.

        <table>
        <tr id="k4711" class="kategorie">
                           <td>Reihe 1</td> <td class="x1"></td><td class="x2"></td>
        </tr>
        <tr class="detail"><td>- Test 1</td><td>123</td>        <td>456</td></tr>
        <tr class="detail"><td>- Test 2</td><td>234</td>        <td>111</td></tr>
        <tr class="summe"> <td></td>        <td>357</td>        <td>567</td></tr>
        </table>
        

        Wie gesagt, es geht nur um's Prinzip. Ich nehme mal an, dass Du aus den Werten in der Summenzeile irgendwas berechnen musst, was in die Überschrift gehört, also in die td, die mit den Klassen x1 und x2 markiert sind. Ob das so der beste Weg ist, hängt vom Einzelfall ab.

        Mal angenommen, du hast deine Kategorie mit ihren Details ausgegeben. In einer Variablen $rowid steht die ID, die Du der Kategorie-Row gegeben hast. Die ist wichtig, damit ein Script die richtige Row finden kann - es könnte ja z.B. sein, dass Du auf der Seite mehr als eine Kategorie hast. Und dann baust Du in PHP einen String auf, der ein JavaScript-Objektliteral darstellt, mit den Werten die Du nachträglich einbauen willst. Dein Script erzeugst Du so, dass das im JavaScript verwendet wird.

           $data = "{ x1: '$wert_für_x1', x2: '$wert_für_x2' }";
        ?>
             <script>
                fillFields("<?= $rowid ?>", <?= $data ?>);
             </script>
        <?php
        

        fillFields ist eine JavaScript-Funktion, die Du anderswo hinschreibst (z.B. in einen Scriptblock im head-Bereich). Sie sieht so aus:

        function fillFields(rowid, data) {
           let row = document.getElementById(rowid);
           let cellNames = Object.getOwnPropertyNames(data);
           for (let i=0; i<cellNames.length; i++) {
              let cell = row.querySelector("."+cellNames[i]);
              if (cell)
                 cell.textContent = data[cellNames[i]];
           }
        }
        

        Die Funktion erwartet als zweiten Parameter ein Objekt, dessen Keys Klassennamen der Elemente sind, deren Text zu ersetzen ist. Das kann man sicherlich auch anders und universeller bauen, aber ich möchte es hier kompakt halten.

        getOwnPropertyNames ermittelt die Schlüssel, die im data-Objekt vorhanden sind. Die Schleife geht diese Schlüssel durch, sucht in der row das Element mit dem Klassennamen, der dem Schlüssel entspricht (beachte, dass ich einen Punkt vor das cellNames[i] setze).

        Statt getOwnPropertyNames könnte man auch eine for (... of ...) Schleife nehmen, ich weiß aber nicht welche Browser Du unterstützen musst. Ein IE würde das nicht können, ein IE würde auch var statt let brauchen.

        Komplett ungetestet, keine Ahnung ob's funktioniert, aber das wäre ein Weg wie Du mit wenig Aufwand dein 5000er Trumm retten könntest. Viel Fehlertoleranz ist auch nicht drin, d.h. wenn es nicht funktioniert guck in die Console der Browserentwicklerwerkzeuge, ob da ein Error steht.

        Disclaimer: Wenn's nicht funktioniert, bist Du auf Dich gestellt. Ich kann das nicht remote debuggen. Es korrekt auf deine Anwendung zu übertragen, das ist jetzt deine Sache.

        Rolf

        --
        sumpsi - posui - clusi
        1. Hallo,

          Disclaimer: Wenn's nicht funktioniert, bist Du auf Dich gestellt. Ich kann das nicht remote debuggen. Es korrekt auf deine Anwendung zu übertragen, das ist jetzt deine Sache.

          Ach komm, das ist nicht dein Ernst. Wozu gibs Teamview und Konsorten…
          scnr

          Gruß
          Kalk

        2. Hi there,

          abgesehen davon, daß alles korrekt ist, was Du von Dir gegeben hast, aber

          Was machst Du bei Usern die kein JavaScript einschalten? Sehen die dann bestimmte Daten nicht oder falsch?

          das kannst Du endgültig vergessen. Auf diese Gruppe von Anwendern muß man als Entwickler keine Rücksicht mehr nehmen, das ist einfach unwirtschaftlich, das geht in die Richtung, was man mit Usern macht, die IE6 oder den Netscapebrowser Nummer 4 verwenden, die gibts zwar auch noch, aber die sind ungefähr genauso häufig anzutreffen wie jene, die Javascript abdrehen. Am Handy, resp. allgemeiner am mobilen Device, das angeblich mittlerweile mehr als 50% aller User zum Surfen verwenden, ist das noch weniger ein Thema. Dein "User, die kein Javascript einschalten" kannst Du vergessen, die paar, die das wirklich machen, die sind Kummer ohnehin gewohnt, denen wird vermutlich auch die Website des OP vollkommen wurscht sein (was trotzdem richtigerweise absolut nichts daran ändert, daß seine Probleme weder mit Javascript noch mit sonst irgendeiner clientseitigen Technologie zu ändern oder gar zu lösen sind...)

          1. Was machst Du bei Usern die kein JavaScript einschalten? Sehen die dann bestimmte Daten nicht oder falsch?

            das kannst Du endgültig vergessen. Auf diese Gruppe von Anwendern muß man als Entwickler keine Rücksicht mehr nehmen, das ist einfach unwirtschaftlich,

            Eigentlich ist es eine Frechheit von privaten Homepage-Betreibern zu verlangen, sie müssten jeden Spassti bedienen aber...

            das geht in die Richtung, was man mit Usern macht, die IE6 oder den Netscapebrowser Nummer 4 verwenden,

            Aber es geht nicht in die Richtung, was man mit Usern macht, die noScript (oder besser uMatrix) verwenden. Es gibt eine sehr bewusste und von mir sehr geschätzte Gruppe und mit diesen muss man kommunizieren, denn sie wird nicht aussterben.

            die gibts zwar auch noch, aber die sind ungefähr genauso häufig anzutreffen wie jene, die Javascript abdrehen. Am Handy, resp. allgemeiner am mobilen Device, das angeblich mittlerweile mehr als 50% aller User zum Surfen verwenden, ist das noch weniger ein Thema.

            Meine Prognose ist, dass noscript auch auf Handis zunehmen wird.

            Dein "User, die kein Javascript einschalten" kannst Du vergessen, die paar, die das wirklich machen, die sind Kummer ohnehin gewohnt, denen wird vermutlich auch die Website des OP vollkommen wurscht sein (was trotzdem richtigerweise absolut nichts daran ändert, daß seine Probleme weder mit Javascript noch mit sonst irgendeiner clientseitigen Technologie zu ändern oder gar zu lösen sind...)

            Kummer bin ich wahrlich gewohnt. Gerade darum gehe ich den Extra Schritt das Wesentliche verfügbar zu machen, und so den Schritt zu dem einen Klick zu erleichtern (mehr solls wirklich nicht sein).

            Das bedingt dann, dass ich alles auf der originalen Domain hoste.

            Aber das hindert mich nicht, Javascript einzusetzen, ohne da einen noscript Fallback zu schreiben. Auch meine Prämisse ist: wer will kann JS einschalten. Ich muss es ihm einfach so leicht wie möglich machen.

            Und gleichzeitig werbe ich für den Betrieb von uMatrix und dergleichen.

            1. Hi there,

              Was machst Du bei Usern die kein JavaScript einschalten? Sehen die dann bestimmte Daten nicht oder falsch?

              das kannst Du endgültig vergessen. Auf diese Gruppe von Anwendern muß man als Entwickler keine Rücksicht mehr nehmen, das ist einfach unwirtschaftlich,

              Eigentlich ist es eine Frechheit von privaten Homepage-Betreibern zu verlangen, sie müssten jeden Spassti bedienen aber...

              Private Homepagebetreiber können machen, was sie wollen. Ich habe von unwirtschaftlich gesprochen. Wenn ich für jemanden eine Seite mache und ihm erzähle, daß für die 2%, die Javascript abschalten (was Dein umatrix ist, hab ich erst von Google erfahren) ein zusätzlicher Aufwand von Euro soundsoviel dazukommt, dann wird mich der Auftraggeber fragen, ob ich nicht ganz dicht bin. (Das hängt natürlich von der Seite ab, ob ein Shop dabei ist und und und...).

              Natürlich sollte eine "normale" Seite auch ohne JS funktionieren (irgendjemand, der auf mein Posting geantwortet hat hat sinnigerweise auch auf den Unterschied zwischen Seite und Webapplikation hingewiesen) aber wenn ich mir schon einmal irgendetwas mit Ajax überlege, dann geht das schon etwas in Richtung "Applikation". Daß die HTML-Taliban und Vertreter der reinen Lehre hier in diesem Forum das anders sehen war mir schon klar. Aber es gibt halt jenseits davon eine reale Welt mir wirtschaftlichen Sachzwängen und die aufzuzeigen war mir ein Bedürfnis…

            2. Lieber beatovich,

              Eigentlich ist es eine Frechheit von privaten Homepage-Betreibern zu verlangen, sie müssten jeden Spassti bedienen aber...

              muss ich Dich jetzt noch für einen netten Menschen halten? Ich nehme an, dass diese Deine Wortwahl etwas unglücklich ausgefallen ist... Das kannst Du sonst auch besser.

              Liebe Grüße,

              Felix Riesterer.

          2. Hallo klawischnigg

            Was machst Du bei Usern die kein JavaScript einschalten? Sehen die dann bestimmte Daten nicht oder falsch?

            das kannst Du endgültig vergessen. Auf diese Gruppe von Anwendern muß man als Entwickler keine Rücksicht mehr nehmen, das ist einfach unwirtschaftlich, das geht in die Richtung, was man mit Usern macht, die IE6 oder den Netscapebrowser Nummer 4 verwenden, die gibts zwar auch noch, aber die sind ungefähr genauso häufig anzutreffen wie jene, die Javascript abdrehen.

            Das ist Unsinn. Wenn eine Seite ohne JavaScript nicht bedienbar ist, dann ist sie potentiell für weit mehr Benutzer nicht bedienbar, als nur diejenigen, die JavaScript bewusst ausgeschaltet haben. Nämlich für alle Benutzer, die über das Mobilnetz unterwegs sind. Jeder von denen kann sich während die Seite geladen wird in ein Funkloch bewegen, sodass zwar das Dokument mit den eigentlichen Inhalten geladen wird, die Skripte aber nicht. Das ist kein konstruierter Fall, sondern Realität.

            Außerdem gibt es gute Gründe dafür, JavaScript auszuschalten, gegebenenfalls auch situationsabhängig. Klassisches Beispiel ist natürlich der Firmencomputer, wo JavaScript aus Sicherheitsgründen abgeschaltet ist. Aber es kann auch sinnvoll sein, JavaScript zu deaktivieren um Akkulaufzeit des verwendeten Mobilgeräts zu sparen, oder eingebundene Skripte nicht zu laden um das Datenvolumen zu reduzieren, wenn man danach bezahlt. Ganz abgesehen davon, dass sich viele Menschen auch nicht ausspionieren lassen wollen und deshalb die Ausführung von Skripten blockieren.

            Darüber hinaus sollte man sich auch vergegenwärtigen, dass JavaScript verglichen mit anderen Kerntechnologien wie HTML und CSS ziemlich fragil ist. Dokumente und Stylesheets können auch dann noch verarbeitet werden, wenn Fehler darin vorkommen. Wenn Tags falsch geschachtelt sind oder ein Selektor nicht erkannt wird, dann wird der Fehler korrigiert oder an anderer Stelle mit der Verarbeitung weitergemacht. Wenn in JavaScript auch nur an irgendeiner Stelle ein Fehler passiert, der nicht vom Programm selbst aufgefangen wird oder werden kann, dann ist es hingegen aus. Rien ne va plus.

            Eine Webseite oder Webanwendung sollte so robust wie möglich sein, um nicht mehr oder weniger willkürlich Benutzer von der Bedienung auszuschließen. Die Basisfunktionalität sollte grundsätzlich auch ohne JavaScript gewährleistet sein, was in den meisten Fällen auch ohne unverhältnismäßigen Mehraufwand möglich ist. Wenn bei einer Webseite oder Webanwendung ohne Not JavaScript vorausgesetzt wird, dann ist das meiner Meinung nach einfach nur schlechte Arbeit.

            Viele Grüße,

            Orlok

            1. hallo

              Solange ich auf dem Server keine Daten schreiben muss, werde ich ein Clientscript IMMER einem Serverscript vorziehen.

              Robustheit hat viele Faktoren. Wer da Datenbanken, Serververbindung etc ausschliesst, ist einfach nur einseitig.

              Gerade wenn du verlangst, bei jedem Schritt auch eine Serververbindung zu haben, hast du dir mit deiner Argumentation in den Fuss geschossen.

            2. @@Orlok

              Was machst Du bei Usern die kein JavaScript einschalten? Sehen die dann bestimmte Daten nicht oder falsch? das kannst Du endgültig vergessen. Das ist Unsinn.

              hoch 3.

              Wenn eine Seite ohne JavaScript nicht bedienbar ist, dann ist sie potentiell für weit mehr Benutzer nicht bedienbar, als nur diejenigen, die JavaScript bewusst ausgeschaltet haben. Nämlich für alle Benutzer, die über das Mobilnetz unterwegs sind. Jeder von denen kann sich während die Seite geladen wird in ein Funkloch bewegen, sodass zwar das Dokument mit den eigentlichen Inhalten geladen wird, die Skripte aber nicht. Das ist kein konstruierter Fall, sondern Realität.

              Ergänzend sei noch gesagt, dass geladenes JavaScript noch längst kein Garant dafür ist, dass das auch ausgeführt wird.

              Wenn in JavaScript auch nur an irgendeiner Stelle ein Fehler passiert, der nicht vom Programm selbst aufgefangen wird oder werden kann, dann ist es hingegen aus. Rien ne va plus.

              Du sagst es. Auch Fehler in eingebundenem fremden JavaScript können dazu führen, dass das eigene JavaScript nicht ausgeführt wird. Auch das ist kein konstruierter Fall, sondern Realität.

              LLAP 🖖

              --
              „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
            3. Hi there,

              das kannst Du endgültig vergessen. Auf diese Gruppe von Anwendern muß man als Entwickler keine Rücksicht mehr nehmen, das ist einfach unwirtschaftlich, das geht in die Richtung, was man mit Usern macht, die IE6 oder den Netscapebrowser Nummer 4 verwenden, die gibts zwar auch noch, aber die sind ungefähr genauso häufig anzutreffen wie jene, die Javascript abdrehen.

              Das ist Unsinn. Wenn eine Seite ohne JavaScript nicht bedienbar ist, dann ist sie potentiell für weit mehr Benutzer nicht bedienbar, als nur diejenigen, die JavaScript bewusst ausgeschaltet haben. Nämlich für alle Benutzer, die über das Mobilnetz unterwegs sind.

              Sorry, das versteh' ich nicht. Viele Leute, wenn nicht die Mehrheit, sind über ein Mobilnetz unterwegs. Was hat das mit Javascript zu tun?

              Jeder von denen kann sich während die Seite geladen wird in ein Funkloch bewegen, sodass zwar das Dokument mit den eigentlichen Inhalten geladen wird, die Skripte aber nicht. Das ist kein konstruierter Fall, sondern Realität.

              Funkloch? Wo lebst Du? Ich (AT) hab schon jahrelang kein Funkloch mehr erlebt.

              Außerdem gibt es gute Gründe dafür, JavaScript auszuschalten, gegebenenfalls auch situationsabhängig. Klassisches Beispiel ist natürlich der Firmencomputer, wo JavaScript aus Sicherheitsgründen abgeschaltet ist.

              Das sind die, die Kummer gewöhnt sind.

              Aber es kann auch sinnvoll sein, JavaScript zu deaktivieren um Akkulaufzeit des verwendeten Mobilgeräts zu sparen, oder eingebundene Skripte nicht zu laden um das Datenvolumen zu reduzieren, wenn man danach bezahlt.

              Wieder läßt mich Deine Aussage rätselnd zurück?

              Ganz abgesehen davon, dass sich viele Menschen auch nicht ausspionieren lassen wollen und deshalb die Ausführung von Skripten blockieren.

              Das ist jetzt die von mir monierte vernachlässigbare Größe.

              Darüber hinaus sollte man sich auch vergegenwärtigen, dass JavaScript verglichen mit anderen Kerntechnologien wie HTML und CSS ziemlich fragil ist.

              Naja, das würd' ich so nicht verallgemeinern, da sind zu viele Faktoren beteiligt...

              Wie ich beatovich schon geantwortet habe - natürlich sollte ein "normale" Webseite auch ohne JS funktionieren, aber da wo Funktionalitäten erforderlich sind, die ihrerseits Ajax oder ähnliches erfordern, dann zahlt mir das keiner, daß ich das serverseitig oder irgendwie anders für eine marginale Größe an Anwendern javascriptfrei nachbaue...

              1. @@klawischnigg

                Funkloch? Wo lebst Du? Ich (AT) hab schon jahrelang kein Funkloch mehr erlebt.

                Sobald du aus Berlin rauskommst, biste im großen Funkloch namens BrandEDGEburg.

                Wie ich beatovich schon geantwortet habe - natürlich sollte ein "normale" Webseite auch ohne JS funktionieren, aber da wo Funktionalitäten erforderlich sind, die ihrerseits Ajax oder ähnliches erfordern, dann zahlt mir das keiner, daß ich das serverseitig oder irgendwie anders für eine marginale Größe an Anwendern javascriptfrei nachbaue...

                Da isser wieder, der Unterschied zwischen progressive enhancement und graceful degradation.

                Wenn du zuerst die Grundfunktionalität bauen würdest (serverseitiges Rendern der Seiten), dann würde jeder deiner Kunden dafür zahlen, dass es bei allen Nutzern funktioniert. Einige Kunden würden auch noch on top dafür zahlen, dass es bei vielen Nutzern noch besser (AJAX o.ä.) funktioniert.

                „Zahlt mir keiner“ ist eine Ausrede dafür, Kunden nicht erklären zu wollen, wie das Web funktioniert. Wenn nicht gar ein Zeichen, dass der Entwickler das auch nicht verstanden hat.

                LLAP 🖖

                --
                „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
                1. Hi there,

                  ich würd' Dich echt ersuchen, mir nicht zu erzählen, wofür mich mein Kunden bezahlen oder nicht. Ich bin seit 1985 in der Branche tätig. Trotzdem danke für Deinen Beitrag…

                  1. @@klawischnigg

                    Ich bin seit 1985 in der Branche tätig.

                    Psalm 2317

                    Trotzdem danke für Deinen Beitrag…

                    Gerngeschehn. Ich werde auch zukünftig hier den Nutzern eine Stimme geben. Auch wenn manche Entwickler das nicht hören wollen.

                    LLAP 🖖

                    --
                    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
                    1. Hi there,

                      Trotzdem danke für Deinen Beitrag…

                      Gerngeschehn. Ich werde auch zukünftig hier den Nutzern eine Stimme geben. Auch wenn manche Entwickler das nicht hören wollen.

                      Dann bist Du irgendwie im falschen Forum…

                      1. # !!!

                        Rolf

                        --
                        sumpsi - posui - clusi
                        1. Hi there,

                          #☮ !!!

                          Was wollen wir mir damit sagen?

                          1. Hallo klawischnigg,

                            (augenroll) - ich hab mal einen Link draus gemacht

                            Rolf

                            --
                            sumpsi - posui - clusi
                            1. Hi there,

                              (augenroll) - ich hab mal einen Link draus gemacht

                              Das Zeichen kenn' ich, ich bin fast 60 Jahre alt. Gleichwohl will sich mir seine Bedeutung in diesem Zusammenhang nicht wirklich erschliessen. Ein zarter Hinweis, daß sich ein Forum, daß sich "selfhtml" nennt, in erster Linie eher an Entwickler und nicht an Nutzer wendet, bedeutet für mich keinen Akt der Aggression oder kriegerischen Auseinandersetzung…

                              1. Hallo klawischnigg,

                                der Akt war aber dennoch in seinen Anfängen, dank beiderseitiger Bemühungen, und deshalb bat ich in meiner Rolle als Hilfsmoderator um Frieden. Weiter nichts.

                                Rolf

                                --
                                sumpsi - posui - clusi
                      2. @@klawischnigg

                        Gerngeschehn. Ich werde auch zukünftig hier den Nutzern eine Stimme geben. Auch wenn manche Entwickler das nicht hören wollen.

                        Dann bist Du irgendwie im falschen Forum…

                        Wenn man Entwickler immer wieder daran erinnern muss, dass sie ihr Zeugs für Menschen machen, die auch das benutzen sollen, dann bin ich hier genau richtig.

                        LLAP 🖖

                        --
                        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
                        1. Hi there,

                          Gerngeschehn. Ich werde auch zukünftig hier den Nutzern eine Stimme geben. Auch wenn manche Entwickler das nicht hören wollen.

                          Dann bist Du irgendwie im falschen Forum…

                          Wenn man Entwickler immer wieder daran erinnern muss, dass sie ihr Zeugs für Menschen machen, die auch das benutzen sollen, dann bin ich hier genau richtig.

                          Ich mach mein Zeug für Menschen, die mich bezahlen. Anyway, ich geb Frieden. Hat der Rolf gesagt.

                          --
                          > „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann Ich geb trotzdem nach —Kurt Klawischnigg ;)

                          Ich geb trotzdem nach —Kurt Klawischnigg

                          ;)

                          1. @@klawischnigg

                            Ich mach mein Zeug für Menschen, die mich bezahlen.

                            An der Stelle waren wir schon.

                            Die Menschen, die das Zeugs dann nutzen (oder auch nicht), scheinen dir egal zu sein. Ich finde das bedauerlich.

                            LLAP 🖖

                            --
                            „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
          3. Hallo

            abgesehen davon, daß alles korrekt ist, was Du von Dir gegeben hast, aber

            Was machst Du bei Usern die kein JavaScript einschalten? Sehen die dann bestimmte Daten nicht oder falsch?

            das kannst Du endgültig vergessen. Auf diese Gruppe von Anwendern muß man als Entwickler keine Rücksicht mehr nehmen, das ist einfach unwirtschaftlich, das geht in die Richtung, was man mit Usern macht, die IE6 oder den Netscapebrowser Nummer 4 verwenden, die gibts zwar auch noch, aber die sind ungefähr genauso häufig anzutreffen wie jene, die Javascript abdrehen.

            Können wir bitte mal die Allgemeinplätze weglassen?

            Dass es mitnichten nur um Benutzer geht, die JavaScript bewusst ausschalten, wurde in anderen Antworten ja schon erwähnt. Es gibt aber abseits von „JS ist an oder aus“ noch mindestens einen anderen Betrachtungswinkel, den zumindest ich für wichtig erachte. Nämlich: Handelt es sich um eine Website oder um eine webbasierte Anwendung?

            Während ich bei einer Anwendung bereit bin, bei vorwiegend oder rein lokal basierten Prozessen (mindestens teilweise) auf JS-lose Fallbacks zu verzichten, ist eine Website, die ohne JS nicht funktioniert, einfach nur kaputt.

            Es ist mir klar, dass es Funktionen gibt, die ohne JS nicht funktionieren. Da ist dann natürlich Schluss. Aber selbst dann muss auf der Website selbst mehr als nur eine weiße Fläche oder die Aufforderung „Schalten Sie JavaScript an!“ (o.Ä.) zu sehen sein. Ich habe nichts dagegen, dass mir mit abgeschaltetem JS [1] das eine oder andere Feature nicht zur Verfügung steht, aber ohne Not [2] vollständig ausgeschlossen zu werden, verärgert mich als Benutzer einer Website.

            Dein "User, die kein Javascript einschalten" kannst Du vergessen, die paar, die das wirklich machen, die sind Kummer ohnehin gewohnt, denen wird vermutlich auch die Website des OP vollkommen wurscht sein (was trotzdem richtigerweise absolut nichts daran ändert, daß seine Probleme weder mit Javascript noch mit sonst irgendeiner clientseitigen Technologie zu ändern oder gar zu lösen sind...)

            Soweit ich das verstanden habe, geht es auch um das nachladen von neuen Ergebniszeilen per JS/Ajax. Wenn eine neue Zeile hinzukommt, müssen die Summen über alle Zeilen im Browser neu berechnet werden. Also geht es eben doch (zumindest auch) um clientseitige Technologie(n).

            Dies ist zudem ein Fall, wo ein JS-loser Fallback ohne weiteres möglich ist. Um an die Daten zu kommen, muss sowieso der Webserver mit angschlossenem Datenbankserver befragt werden. Die der Seite zugrundeliegende Abfragelogik ist auch da, womit einem neuladen der Seite mit weiteren Ergebnissen ohne JS nichts (in Worten: „nichts“) im Wege steht.

            Tschö, Auge

            --
            Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
            Kleine freie Männer von Terry Pratchett

            1. JavaScript abgeschaltet zu haben ist heutzutage nicht mal ein binärer Zustand, wie es das vor 15 oder 20 Jahren war. Ich benutze NoScript und habe je nach aufgerufener Site JS aus allen, einigen oder aus keinen Quellen abgeschaltet. ↩︎

            2. Ja, oftmals tatsächlich „ohne Not“. Eine Website vollständig zu laden, wie es ein Blick in den Quellcode zeigt, dann aber zu verbergen und nur bei geladenem JS anzuzeigen ist sowohl „ohne Not“ als auch kaputt. ↩︎

    2. hallo

      Hallo Bernd,

      wenn ich vorstellen darf: EVA. Die große alte Dame der elektronischen Datenverarbeitung.

      Du meinst die Mutter aller Verarbeitungsfehler.

      1. Hallo,

        Du meinst die Mutter aller Verarbeitungsfehler.

        Ne, Großmutter. Weitere Enkel sind Eingabefehler und Ausgabefehler…

        Gruß
        Kalk

        1. Hallo Tabellenkalk,

          aber nein. Das hier sind Großmutter, Mutter und Vater:

          Ada Lovelace Grace Hopper John von Neumann

          Obwohl - der echte Vater des Verarbeitungsfehlers ist ja

          Howard Aiken

          Rolf

          --
          sumpsi - posui - clusi
    3. Hallo,

      danke für deine Erklärung. Von der EVA habe ich schon gehört. Sowohl gutes als auch schlechtes. Gehen wir mal von meinen Beisiel aus, ich habe dieses jetzt mal auf eine Spalte gekürzt.

      <?php 
      
      foreach($kategorieuebersicht as $array_kategorieuebersicht){
      
      	$a1 = Claudia($mysqli, $array_kategorieuebersicht['ma_id']);
      
      	$Wert1 = 100/$WertZusammenm3*Claudia($mysqli, $array_kategorieuebersicht['ma_id']);
      
      	$Wert1Ausgabe = round($Wert1,2);
      
      	$innererWert = 1300/100*$Wert1;
      	$Wert2a = round($innererWert,2);
      
      	$frontend_kategorieuebersichtVolumenHauptKat = frontend_kategorieuebersichtVolumenHauptKat($mysqli, $array_kategorieuebersicht['ma_bereich']);
      
      	?>
      
      <div>
      	<div>
      		
      		<?php echo htmlspecialchars($array_kategorieuebersicht['ma_titel']); ?>
      		<?php if($frontend_kategorieuebersichtVolumenHauptKat > 0) { ?>
      				
      		<div>
      			<?php foreach($frontend_kategorieuebersichtVolumenHauptKat as $array_VolumenHauptKat){ ?>
      				<div>
      					- <?php echo $array_VolumenHauptKat['ma_titel'] ?>
      				</div>
      			<?php } ?>
      		</div>
      			<?php } ?>
      	</div>
      
      	<div> <?php echo $a1; ?> m<sup>3</sup>
      		
      		<?php if($frontend_kategorieuebersichtVolumenHauptKat > 0) { ?>
      			
      		<div>
      			<?php foreach($frontend_kategorieuebersichtVolumenHauptKat as $array_VolumenHauptKat){ 
      				
      				$SubKat1_a1 = Claudia($mysqli, $array_VolumenHauptKat['ma_id']);
      				$Berechnung_Sub_1 += $SubKat1_a1;
      			
      			?>
      			<div>
      				<?php echo $SubKat1_a1; ?> m<sup>3</sup>
      			</div>
      			<?php } ?>
      		</div>
      		
      		<div>Gesamt: <?php echo $Berechnung_Sub_1; ?> m<sup>3</sup></div>
      			
      		<?php } ?>
      	</div>
      	
      </div>
      <?php } ?>
      

      In meinem Beisiel gibt es

      <?php echo $SubKat1_a1; ?> m<sup>3</sup>
      

      Hier werden die m3 aus den jeweiligen Bereichen zusammengezählt. Jetzt haben aber manche Bereiche auch Unterbereiche, diese erhalte ich durch

      $frontend_kategorieuebersichtVolumenHauptKat = frontend_kategorieuebersichtVolumenHauptKat($mysqli, $array_kategorieuebersicht['ma_bereich']);
      

      In der Ausgabe steht das Ergebnis hier

      <div>Gesamt: <?php echo $Berechnung_Sub_1; ?> m<sup>3</sup></div>
      

      Also einige Zeilen weiter unten. Du hast ja gesagt ich kann die Werte nicht mehr nach oben holen, richtig? Ich müsste die Berechnung also bereits weiter oben durchführen und unten damm dem Ergebnis hinzu addieren. Die Frage ist nur, wie kann ich dieses machen? Mus ich das HTML irgendwo mit echo ausgeben leben? Ich verstehe leider null und kann mir das auch nicht vorstellen wie es weiter oben bereits gerechnet werden soll?

      Ich komme einfach nicht weiter.

      An dem ersten Teil, der für die Hauptbereiche zuständig ist möchte ich ungern etwas ändern, wenn möglich nur für die Unterbereiche.

      1. Hallo Bernd,

        danke für deine Erklärung. Von der EVA habe ich schon gehört. Sowohl gutes als auch schlechtes.

        Was hast du denn Schlechtes von der EVA gehört?

        Bis demnächst
        Matthias

        --
        Pantoffeltierchen haben keine Hobbys.
        1. Hallo,

          Was hast du denn Schlechtes von der EVA gehört?

          Eva war die Mutter von meiner Stiefschwester, nur schlechtes darüber gehört.

        2. @@Matthias Apsel

          Was hast du denn Schlechtes von der EVA gehört?

          Sie hat verbotene Früchte genascht, hab ich gehört.

          Warum das verboten war, weiß ich allerdings auch nicht. Vielleicht hatte Gott dann keine Äpfel mehr und sein Cider war alle?

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      2. Hallo Bernd,

        ich versuche mal, das mit deinem Bild aus dem Eingangsposting zusammenzubringen. Da ist eine weiße Zeile ("Reihe 1"), bunte Zeilen ("- Test 1" etc) und eine schwarze Zeile (Gesamt...). Dein Code ist gekürzt, darum erkenne ich nicht genau, was wozu da ist. In allen drei Zeilenarten stehen Spalten mit Werten. Die schwarze Zeile enthält eine undefinierte Summe (weil ich keine Initialisierung von $Berechnung_Sub_1 sehe - aber wahrscheinlich ist das der Kürzung zum Opfer gefallen) der bunten Spalten.

        Nun soll der schwarze Wert auf den weißen Wert aufaddiert werden - und meine JavaScript-Idee gefällt Dir nicht (bzw. sie ist Dir unverständlich).

        Dein Code sieht merkwürdig aus. Ist das ein Grid, dessen Elemente Du spaltenweise ausgibst? Manchmal ist eine table tatsächlich eine table... Aber das ist jetzt wie es ist, und das Markup ist nicht das Problem über das wir hier reden. Ich wollte nur sicher sein dass ich die Logik verstehe.

        Pro Wertespalte läuft dann dieser Code:

        	<div> <?php echo $a1; ?> m<sup>3</sup>
        		
        		<?php if($frontend_kategorieuebersichtVolumenHauptKat > 0) { ?>
        			
        		<div>
        			<?php foreach($frontend_kategorieuebersichtVolumenHauptKat as $array_VolumenHauptKat){ 
        				
        				$SubKat1_a1 = Claudia($mysqli, $array_VolumenHauptKat['ma_id']);
        				$Berechnung_Sub_1 += $SubKat1_a1;
        			
        			?>
        			<div>
        				<?php echo $SubKat1_a1; ?> m<sup>3</sup>
        			</div>
        			<?php } ?>
        		</div>
        		
        		<div>Gesamt: <?php echo $Berechnung_Sub_1; ?> m<sup>3</sup></div>
        			
        		<?php } ?>
        	</div>
        

        Den würde ich so abändern. Bitte genau lesen und kontrollieren - keine Gewähr für Richtigkeit. Ich habe zwar eine Claudia hier, aber wenn ich der eine ID zuwerfe, bekomme ich keine Zahl zurück, sondern nur einen befremdeten Blick 😂

        	<div>
            <?php
              $Berechnung_Sub_1 = 0;
              // Subkat-Werte vorab aufsummieren und zwischenspeichern
              if($frontend_kategorieuebersichtVolumenHauptKat > 0) {
                $SubKat1_a1 = ARRAY();  
                foreach($frontend_kategorieuebersichtVolumenHauptKat as $array_VolumenHauptKat) {
                  $SubKat1_a1[] = Claudia($mysqli, $array_VolumenHauptKat['ma_id']);
                }
              }
              echo $a1 + array_sum($SubKat1_a1); ?> m<sup>3</sup>
        		
        		<?php if($frontend_kategorieuebersichtVolumenHauptKat > 0): ?>
        			
        		<div>
             <?php foreach($SubKat1_a1 as $tempVal) : ?>
              <div><?= $tempVal ?> m<sup>3</sup></div>
        		 <?php endforeach; ?>
        		</div>
        		<div>Gesamt: <?= $Berechnung_Sub_1; ?> m<sup>3</sup></div>
        		<?php endif; ?>
        	</div>
        

        D.h. die Aufsummierung geschieht, bevor $a1 ausgegeben wird.

        Für die Kontrollstrukturen, die PHP-Blockübergreifend sind, habe ich die alternative Syntax gewählt (foreach/endforeach und if/endif

        Ein Hinweis noch zum Runden; das ging aus dem anderen Thread nicht hervor. Wenn es dir NUR um die Ausgabe eines gerundeten Wertes geht, und Du mit dem gerundeten Wert nicht weiterrechnen musst, kannst Du das auch mit der number_format Funktion von PHP tun, die rundet auch.

        $x = 4711.45778;
        echo number_format($x, 2, ",", "");
        
        1. Parameter: 2 Nachkommastellen
        2. Parameter: Verwende Dezimalkomma
        3. Parameter: Kein Tausendertrenner.

        Rolf

        --
        sumpsi - posui - clusi
        1. Hallo,

          vielen lieben Dank. Ja, ich wollte auch erst eine Tabelle nehmen aber ich benötige zwischen einzelnen Bereiche ein wenig Abstand wegen der Übersicht. Dieses wollte mir mit einer Tabelle leider nicht gelingen, deshalb bin ich auf DIVs umgestiegen.

          Wenn ich deinen Code verwende scheint das Addieren zu funktionieren, also die Werte von er Unterkategorie in die zur Hauptkategorie. Allerdings bekomme ich noch zwei Meldungen angezeigt, die ich nicht verstehe

          Notice: Undefined variable: SubKat1_a1
          Warning: array_sum() expects parameter 1 to be array, null given
          

          SubKat1_a1 existiert aber $SubKat1_a1 = ARRAY(); warum wird hier gemeckert?

          1. Hallo,

            wenn ich aus

            if($frontend_kategorieuebersichtVolumenHauptKat > 0) {
            $SubKat1_a1 = ARRAY();  
            

            folgendes mache

            $SubKat1_a1 = ARRAY();
            if($frontend_kategorieuebersichtVolumenHauptKat > 0) { 
            

            sind die Fehlermeldungen weg.

            1. Hallo Bernd,

              ja, sorry. Ich hatte zuerst eine Summenvariable drin und habe später erst auf array_sum umgestellt. Da hätte ich die Initialisierung natürlich vor den if ziehen müssen. Gut gesehen.

              Wie gesagt - ist schwierig, das ohne Test korrekt ins Forum zu hauen.

              Rolf

              --
              sumpsi - posui - clusi
              1. Hallo,

                ich habe nochmals eine Frage, so kann ich die Berechnung nicht durchführen?

                // Subkat-Werte vorab aufsummieren und zwischenspeichern
                 $SubKat1_a3 = ARRAY();
                 if($frontend_kategorieuebersichtVolumenHauptKat > 0) {
                          
                 foreach($frontend_kategorieuebersichtVolumenHauptKat as $array_VolumenHauptKat) {
                         $SubKat1_a3[] = 100/$WertZusammenm3*Claudia($mysqli, $array_VolumenHauptKat['ma_id']);
                		     $SubKat1_a3[] = 1300/100*$SubKat1_a3[];
                 }
                

                Ich bekomme diesen Fehler

                Fatal error: Cannot use [] for reading

                Sorry, kann ja nicht gehen, so sollt es funktionnieren

                $SubKat1_a3 = ARRAY();
                  if($frontend_kategorieuebersichtVolumenHauptKat > 0) {
                          
                   foreach($frontend_kategorieuebersichtVolumenHauptKat as $array_VolumenHauptKat) {
                           $SubKat1_a31 = 100/$WertZusammenm3*Claudia($mysqli, 
                           $array_VolumenHauptKat['ma_id']);
                		       $SubKat1_a3[] = 1300/100*$SubKat1_a31;
                   }
                
                1. Hallo Bernd,

                  diese Berechnung war in deinem geposteten Code nicht drin. Wenn Du sie brauchst - klar geht das. Ich sehe aber jetzt, dass das umständlich ist, was Du machst. Der Wert, den Du anhängst, berechnest Du so (mit C(id) meine ich den Claudia-Aufruf und W ist dein WertZusammenm3):

                  $$wert = \frac{1300}{100} \cdot \frac{100}{W} \cdot C(id)$$

                  Das lässt sich offensichtlich kürzen, und man kann auch umsortieren:

                  $$wert = \frac{1300\cdot C(id)}{W}$$

                  Optimierter Code:

                    $SubKat1_a3 = ARRAY();
                    if ($frontend_kategorieuebersichtVolumenHauptKat > 0) {
                      foreach($frontend_kategorieuebersichtVolumenHauptKat as $array_VolumenHauptKat) {
                  		  $SubKat1_a3[] = 1300 * Claudia($mysqli, $array_VolumenHauptKat['ma_id']) 
                                       / $WertZusammenm3;
                      }
                    }
                  

                  Das hat noch den netten Nebeneffekt, dass Code so wie der Bruchs aussieht, aus dem er entstanden ist. Diese Kürzung kannst Du auch bei der Hauptkategorie vornehmen.

                  Rolf

                  --
                  sumpsi - posui - clusi
      3. Hi Bernd,

        das EVA Prinzip heißt ja, den Datenfluß eben nicht umzudrehen. So würde eine Nachbesserung mit JS auch diesem Prinzip widersprechen.

        Guck daß Du die Daten vorher zusammenkriegst. Ggf. setze Platzhalter für bestimmte Werte die am Ende ebenda eingesetzt werden. Womit wir wieder beim Template wären.

        MfG

  2. Ein klarer Fall für den Einsatz einer Templating Engine (TE). Damit kommt Du auch bei etwaigen Veränderungen am Besten zurecht. D.h. auch, daß alle Berechnungs fix und fertig sind bevor das Ergebnis ins DOM gerendert wird.

    Deine Idee, mit JS im Nachhinein das Ergebnis kaschieren zu wollen ist grundverkehrt, damit wirst Du niemals glücklich werden. Guck Dir an, welche TEs es gibt, wie sie arbeiten und welche Datenstrukturen dafür erforderlich sind. I.d.R. ist es ein Array von JS OBjects für die Loops im Template.

    Und ja, mit Hilfe einer TE könnten es auch mal eben 1000 Zeilen Code weniger werden.

    MfG