Templateshop - Eine große Auswahl an neuen und modernen Templates für die modified eCommerce Shopsoftware
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: includes/modules/shipping/dp.php

    webald

    • modified Team
    • Beiträge: 2.791
    includes/modules/shipping/dp.php
    am: 21. November 2017, 17:02:04
    Kann mir einer sagen warum man hier einen Wert abfragt, den aber nicht verwendet?
    Code: PHP  [Auswählen]
        function check() {
          if (!isset($this->_check)) {
            $check_query = xtc_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_DP_STATUS'");
            $this->_check = xtc_db_num_rows($check_query);
          }
          return $this->_check;
        }
     

    Weiterhin fiel mir bisher nie auf, dass in der Tabelle configuration "True" steht und nicht "true". Benutzt wid das auch in obiger Datei etwa bei
    Code: PHP  [Auswählen]
          $this->enabled = ((MODULE_SHIPPING_DP_STATUS == 'True') ? true : false);
     

    Es wird als Text verglichen, statt auf einen Boolean-Wert zu prüfen? Ist das nicht fehleranfällig?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=38275.0

    web28

    • modified Team
    • Beiträge: 9.404
    Re: includes/modules/shipping/dp.php
    Antwort #1 am: 21. November 2017, 17:27:51
    Das db Feld configuration_value ist ein Textfeld, da kann man kein boolean speichern.

    Und die Konstante MODULE_SHIPPING_DP_STATUS sollte vorhanden sein:

    Code: PHP  [Auswählen]
    function install() {
          xtc_db_query("insert into " . TABLE_CONFIGURATION . " ( configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added) VALUES ('MODULE_SHIPPING_DP_STATUS', 'True', '6', '0', 'xtc_cfg_select_option(array(\'True\', \'False\'), ', now())");
         

    Gruss Web28

    webald

    • modified Team
    • Beiträge: 2.791
    Re: includes/modules/shipping/dp.php
    Antwort #2 am: 21. November 2017, 17:47:05
    Das db Feld configuration_value ist ein Textfeld, da kann man kein boolean speichern.

    Stimmt, aber man könnte einheitlich wie bei einem Boolean-Feld "true" speichern statt "True". Damit könnte man im Code auch wie mit einem Boolean-Feld arbeiten.

    Und was den ersten Teil meines ursprünglichen Posts betrifft: Wenn man nur die Anzahl der Zeilen einer Abfrage will, dann doch eigentlich "select count(*) from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_DP_STATUS'".

    Hier aber wird lieber irgendein Wert abgefragt, ohne den überhaupt zu gebrauchen.

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: includes/modules/shipping/dp.php
    Antwort #3 am: 21. November 2017, 17:54:05
    Ein
    Code: PHP  [Auswählen]
    SELECT COUNT(*) FROM ...
    ist meiner Meinung nach übertrieben, da ein COUNT über alle Spalten weniger performant ist, als eine einzelne Abfrage. Und ein COUNT ist mit Kanonen auf Spatzen zu schießen, weil der configuration_key sowieso nur einmal vorkommen kann/sollte. Wäre vielleicht noch sinnvoll diese Spalte auf UNIQUE zu setzen.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: includes/modules/shipping/dp.php
    Antwort #4 am: 21. November 2017, 18:55:30
    Bin da anderer Meinung.

    count(*) zahlt keine Spalten, sondern Zeilen.

    Auch meine ich gelesen zu haben, dass count(*) den Index nutzt und daher in der Where-Clause eine indizierte Spalte wesentlich für die Performance ist. configuration_key ist indiziert. In der Regel sollte man dem SQL-Server überlassen welche Spalte er zur Zählung heranzieht, daher count(*) statt count(irgendeine_Spalte).

    Hier spielt es eh keine Rolle. Finde es nur komisch einen Wert abzufragen und den dann nicht zu nutzen.

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: includes/modules/shipping/dp.php
    Antwort #5 am: 21. November 2017, 19:17:44
    Ok, da war ich wirklich auf dem Holzweg.

    Schnellste Variante (die aber komisch aussieht) wäre folgende.
    Code: SQL  [Auswählen]
    SELECT 1 FROM " . TABLE_CONFIGURATION . " WHERE configuration_key = 'MODULE_SHIPPING_DP_STATUS' LIMIT 1
     

    web28

    • modified Team
    • Beiträge: 9.404
    Re: includes/modules/shipping/dp.php
    Antwort #6 am: 21. November 2017, 19:31:17
    Damit wird geprüft ob das Modul installiert ist, kein Eintrag = nicht installiert

    Zitat
    Stimmt, aber man könnte einheitlich wie bei einem Boolean-Feld "true" speichern statt "True". Damit könnte man im Code auch wie mit einem Boolean-Feld arbeiten.

    Nein denn 'true' als String ist nicht true boolean, wobei das bei 'true' fast egal ist, 'false' wäre aber ebenfalls immer wahr.

    In der select Abfrage configuration_key anstatt configuration_value könnte ein winzig schneller sein.
    Oder Ronnys Vorschlag.

    Wir sprechen hier aber über eine Tabelle die vielleicht mal 1000-2000 Einträge enthält. Und wirklich Last ist nur im Backend bei den Modulen, und die sind ja auch überschaubar.

    Gruss Web28

    webald

    • modified Team
    • Beiträge: 2.791
    Re: includes/modules/shipping/dp.php
    Antwort #7 am: 22. November 2017, 10:13:48
    Damit wird geprüft ob das Modul installiert ist, kein Eintrag = nicht installiert

    Es ist unlogisch auf die Existenz eines Feldes zu prüfen und daraus zu schließen, dass das Modul installiert ist, wenn es ein Feld gibt, das alle installierten Module enthält (MODULE_SHIPPING_INSTALLED) und auch noch so heißt. Die SQL-Abfrage ist unter dem Gesichtspunkt unnötig, es reicht ein Prüfung ob der Wert im Array bereits vorhanden ist.

    Nein denn 'true' als String ist nicht true boolean, wobei das bei 'true' fast egal ist, 'false' wäre aber ebenfalls immer wahr.

    Ok, deshalb arbeite ich selber immer lieber mit 0 und 1.

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: includes/modules/shipping/dp.php
    Antwort #8 am: 22. November 2017, 10:52:04
    Zitat
    Es ist unlogisch auf die Existenz eines Feldes zu prüfen und daraus zu schließen, dass das Modul installiert ist, wenn es ein Feld gibt, das alle installierten Module enthält (MODULE_SHIPPING_INSTALLED) und auch noch so heißt. Die SQL-Abfrage ist unter dem Gesichtspunkt unnötig, es reicht ein Prüfung ob der Wert im Array bereits vorhanden ist.
    :good:

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: includes/modules/shipping/dp.php
    Antwort #9 am: 22. November 2017, 11:01:55
    Nein denn 'true' als String ist nicht true boolean, wobei das bei 'true' fast egal ist, 'false' wäre aber ebenfalls immer wahr.

    Ok, deshalb arbeite ich selber immer lieber mit 0 und 1.

    Das finde ich gut so, denn sowohl 0 (integer) als auch "0" (string) repräsentieren in if Anweisungen den booleschen Wert FALSE und 1 (integer) bzw. "1" (string) repräsentiere in if Anweisungen den booleschen Wert TRUE.

    http://php.net/manual/de/types.comparisons.php

    Gruss
    Hanspeter

    web28

    • modified Team
    • Beiträge: 9.404
    Re: includes/modules/shipping/dp.php
    Antwort #10 am: 22. November 2017, 13:30:58
    Zitat
    Es ist unlogisch auf die Existenz eines Feldes zu prüfen und daraus zu schließen, dass das Modul installiert ist, wenn es ein Feld gibt, das alle installierten Module enthält (MODULE_SHIPPING_INSTALLED) und auch noch so heißt. Die SQL-Abfrage ist unter dem Gesichtspunkt unnötig, es reicht ein Prüfung ob der Wert im Array bereits vorhanden ist.

    Alles berechtigte Einwände. Man könnte sogar nur nach der definierten Konstante MODULE_SHIPPING_DP_STATUS abfragen.

    Nur: Es gibt immer Fehler in Datenbanken, deshalb ist die derzeitige Lösung gar nicht so schlecht.

    Bsp: In MODULE_SHIPPING_INSTALLED ist der Eintrag vorhanden das Modul ist aber trotzdem nicht installiert.

    Gruss Web28
    rechtstexte für onlineshop
    10 Antworten
    1360 Aufrufe
    20. April 2022, 12:18:35 von GTB
    2 Antworten
    1833 Aufrufe
    01. April 2016, 12:44:59 von Bonsai
               
    anything