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: Verständnisproblem beim Datenbank-Auslesen

    Konfusion

    • Neu im Forum
    • Beiträge: 26
    Verständnisproblem beim Datenbank-Auslesen
    am: 16. April 2012, 11:04:34
    Hallöchen,

    da schraube ich jetzt schon eine Weile rum, aber irgendetwas Grundsätzliches will mir da wohl nicht einleuchten.
    Ich habe neue Datenfelder für die Artikeleingabe angelegt, um die Artikel zeitzusteuern. In Wirklichkeit werden hier Eintrittskarten für Veranstaltungen verkauft. Was ich gelöst habe, ist, dass Karten z.B. für heute ab 17 Uhr nicht mehr verfügbar sind, wenn die Veranstaltung um 20 Uhr stattfindet. Die Veranstaltung (= Artikel) ist noch zu sehen, aber man kann sie nicht mehr in den Warenkorb legen. Gut.

    Jetzt möchte ich, dass die Veranstaltung heute noch zu sehen ist, morgen aber automatisch den Status Inaktiv erhält. Dazu dachte ich mir, nehme ich die application_top.php, lese da das Veranstaltungsdatum und das tatsächliche Datum aus, und morgen soll die Veranstaltung von heute also nicht mehr zu sehen sein.

    Das habe ich so versucht (und noch weitere Varianten):

    Code: PHP  [Auswählen]
    $status_query = xtc_db_query("SELECT p.products_id, p.products_date_event, p.products_status,
    pc.categories_id
    FROM "
    .TABLE_PRODUCTS." p,
    "
    .TABLE_PRODUCTS_TO_CATEGORIES." pc
    WHERE pc.categories_id = '1'
    AND p.products_id = pc.products_id"
    );
    $states = xtc_db_fetch_array($status_query);

    for ($i = 0, $n = sizeof($states); $i < $n; $i ++) {
            if ($states->data[$i]['products_date_event'] < date('Y-m-d')) {
                    xtc_db_query("UPDATE ".TABLE_PRODUCTS." SET products_status = '0' WHERE products_id = '".$states->data[$i]['products_id']."'");
            }
    }

    Die Dinger
    Code: PHP  [Auswählen]
    $states->data[$i]['products_blabla']
    scheinen nicht zu passen.

    Es wird nichts deaktiviert.
    Wenn ich
    Code: PHP  [Auswählen]
    xtc_db_query("UPDATE ".TABLE_PRODUCTS." SET products_status = '0' WHERE products_id = '8'");
    schreibe, wird die Veranstaltung mit der ID 8 deaktiviert.

    Kann da jemand sofort den Fehler sehen, sich an den Kopfl langen - Mei, der Depp! :-) - und mir verraten, wo sich meine Hirnwindungen verlaufen?

    Danke, Konfusion

    Linkback: https://www.modified-shop.org/forum/index.php?topic=19509.0
    rechtstexte für onlineshop

    hendrik

    • Experte
    • Beiträge: 2.038
    Re: Verständnisproblem beim Datenbank-Auslesen
    Antwort #1 am: 16. April 2012, 12:26:25
    Kann da jemand sofort den Fehler sehen, sich an den Kopfl langen - Mei, der Depp! :-) - und mir verraten, wo sich meine Hirnwindungen verlaufen?

    Mehrere Fehler.

    1. Auslesen der DB-Tabelle. SQL ist korrekt. Aber die Datensätze werden in einer Schleife mittels xtc_db_fetch_array() eingelesen. Grundschema:

    Code: PHP  [Auswählen]
    $sql = "select ....irgendwas";
    $res = xtc_db_query($sql);
    while( $data = xtc_db_fetch_array($res) ) {
      Auswertung $data
    }

    2. Rechnen und Vergleiche von Datum und Zeit
    Du vergleichst Zeichenketten miteinander. Das kann in Ausnahmen funktionieren. Aber eleganter ist es passende Funktionen einzusetzen. Wenn ich sowas mache arbeite ich mit dem Unix-Zeitstempel. Das ist die Zeit in Sekunden seit dem 1.1.1970. Wenn man die Vergleichswerte (Datum+Zeit) darauf umrechnet kann man präzise vergleichen. 24 Sunden sind 86400 Sekunden.

    Code: PHP  [Auswählen]
    if( ($zeit_veranstaltung + 86400) > $zeit_jetzt ) {
      deaktiviere Artikel  
    }

    Hier findest du die Zeitfunktionen: http://www.php.net/manual/de/book.datetime.php

    Man kann Umrechnung(Unix Zeitstempel) und Vergleich auch mit sql-Funktionen gleich in die sql-Abfrage integrieren. D.h. ohne alles in php auslesen und vergleichen. Aber dafür hab ich die sql-Funktionen jetzt nicht im Kopf. ungefähr so: select pi,pa,po from products where funktion_unixzeit(products_date_event)+86400 > unixzeit_jetzt

    Gruß
    Hen

    Konfusion

    • Neu im Forum
    • Beiträge: 26
    Re: Verständnisproblem beim Datenbank-Auslesen
    Antwort #2 am: 16. April 2012, 12:32:34
    Hi hendrik,

    danke so weit. Ich bin gerade auf dem ähnlichen Trichter, habe das Ganze in product_listing verschoben, damit ich mir in der Artikelliste die Werte ausgeben lassen kann. Ich bin da auch gerade mit der while-Schleife am Hantieren ... kann nie schaden, mal zur Abwechslung mal wieder in ein Buch reinzuschauen *g*.

    Ich zieh das jetzt mal noch durch mit dem Werte-Testen, damit ich ein Gefühl dafür bekomme. Gerade mache ich das mit mysql_num_rows, mysql_fetch_assoc etc. Wenn ich das ausgespuckt bekomme, was ich möchte, leg ich wieder die Sachen wie xtc_db_fetch_array & Co. drüber und dann schau mer mal ...

    Grüße, Konfusion

    Konfusion

    • Neu im Forum
    • Beiträge: 26
    Re: Verständnisproblem beim Datenbank-Auslesen
    Antwort #3 am: 16. April 2012, 13:58:47
    Sodala,

    es ist gelöst und läuft.
    Ich muss jetzt weg, morgen gibt's die komplette Auflösung.
    Testen, echo, testen, echo, testen, echo hilft doch immer  :hobbyhorse:

    Danke und Grüße,

    Konfusion

    Konfusion

    • Neu im Forum
    • Beiträge: 26
    Re: Verständnisproblem beim Datenbank-Auslesen
    Antwort #4 am: 16. April 2012, 19:17:16
    Da haben wir's.
    Die Veranstaltung wird bei abgelaufenem Datum sowohl deaktiviert als auch in eine Archivkategorie verschoben:

    Code: PHP  [Auswählen]
    $status_query = xtc_db_query("SELECT p.products_id, p.products_date_event, p.products_status, pc.categories_id
    FROM "
    .TABLE_PRODUCTS." p, ".TABLE_PRODUCTS_TO_CATEGORIES." pc
    WHERE pc.categories_id = '1'
    AND p.products_id = pc.products_id"
    );
    $states = mysql_num_rows($status_query);

    for ($i = 0, $n = $states; $i < $n; $i ++) {
            while ($data = xtc_db_fetch_array($status_query)) {
                    $pID[$i] = $data['products_id'];
                    $pDE[$i] = $data['products_date_event'];
                    $pSt[$i] = $data['products_status'];
                    $cID[$i] = $data['categories_id'];
                    if ($pDE[$i] < date('Y-m-d')) {
                            $pSt[$i] = '0';
                            $cID[$i] = '2'; // ID der Archiv-Kategorie
                            xtc_db_query("UPDATE ".TABLE_PRODUCTS." SET products_status = '".$pSt[$i]."' WHERE products_id = '".$pID[$i]."'");
                            xtc_db_query("UPDATE ".TABLE_PRODUCTS_TO_CATEGORIES." SET categories_id = '".$cID[$i]."' WHERE products_id = '".$pID[$i]."'");
                    }
            }
    }
    1 Antworten
    1012 Aufrufe
    13. Mai 2019, 10:17:20 von hpzeller
    4 Antworten
    4002 Aufrufe
    23. Januar 2014, 11:07:55 von ShopNix
    0 Antworten
    2293 Aufrufe
    29. Mai 2010, 12:51:12 von TimSchacht
    7 Antworten
    12327 Aufrufe
    24. Oktober 2012, 15:47:58 von vwkaefi
               
    anything