Gastbestellungen zulassen-Haken verschwindet

Kein System ist vollkommen, findet Ihr Fehler im System, könnt ihr diese hier gerne Posten. Wir werden auch kurzfistige Lösungen und Fixes hier schreiben.

Moderatoren: Magnus, mmaass, ablass

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon olape » Mi 13. Mai 2015, 13:44

Hallo,

ich habe die Änderung in der db.inc.php jetzt mal gemacht.
Danke an Martens.

Heute war der Haken nämlich wieder weg.
-->
Artikel anlegen / ändern, Hersteller anlegen und Ausprägungen für die Facettensuche anlegen.

Gruss Olaf
olape
 
Beiträge: 87
Registriert: So 13. Mai 2007, 16:10

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon olape » Di 19. Mai 2015, 10:07

Hallo,

so, heute wieder weg.

leider taucht im log nur das erneute Setzen des Hakens auf.
Wann genau, und warum er verloren geht bleibt also weiterhin ein Rätsel.

Auch heute wieder:
Artikel anlegen / ändern, Hersteller anlegen und Ausprägungen für die Facettensuche anlegen.

Gruss Olaf
olape
 
Beiträge: 87
Registriert: So 13. Mai 2007, 16:10

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon Martens » Di 19. Mai 2015, 21:23

Hallo Olaf,

im Log müssten eigentlich Datum und Uhrzeit stehen (in der Hoffnung, dass man noch weiß, was man da gerade im Backend gemacht hat):
Code: Alles auswählen
24.04.2015 20:13:16
mysql_query() hat den Wert FALSE zurückgegeben
In Datei: /admin/admin_neu/themes/einstellungen/index.php
Fehlermeldung:
SQL: UPDATE randshop_einstellungen SET randshop_einstellungen.value = '' WHERE randshop_einstellungen.key = 'gastbestellung_check' AND randshop_einstellungen.group = 'artikel'


Man kann die conf/db.inc.php aber noch etwas erweitern, sodass dann auch die beteiligte Funktions-Kette als Array in das Log geschrieben wird. Und zwar unmittelbar nach der Zeile $error_msg .= "\nSQL: " . $SQLString . "\n";
Code: Alles auswählen
if(strpos($SQLString, "UPDATE") === 0 && strpos($SQLString, "gastbestellung_check")) {
   $error_msg .= "Trace: " . print_r(debug_backtrace(), true) . "\n";
}

Im Log sieht das dann beim gewollten abschalten der Gastbestellung so aus:
Code: Alles auswählen
19.05.2015 23:12:06
mysql_query() hat den Wert FALSE zurückgegeben
In Datei: /admin/admin_neu/themes/einstellungen/index.php
Fehlermeldung:
SQL: UPDATE randshop_einstellungen SET randshop_einstellungen.value = '' WHERE randshop_einstellungen.key = 'gastbestellung_check' AND randshop_einstellungen.group = 'artikel'
Trace: Array
(
    [0] => Array
        (
            [file] => /***/***/***/includes/functions.shopeinstellung.inc.php
            [line] => 610
            [function] => errorlogged_mysql_query
            [args] => Array
                (
                    [0] => UPDATE randshop_einstellungen SET randshop_einstellungen.value = '' WHERE randshop_einstellungen.key = 'gastbestellung_check' AND randshop_einstellungen.group = 'artikel'
                )

        )

    [1] => Array
        (
            [file] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_features_save.inc.php
            [line] => 12
            [function] => SaveKeyValueEinstellungen
            [args] => Array
                (
                    [0] => artikel
                    [1] => gastbestellung_check
                    [2] =>
                )

        )

    [2] => Array
        (
            [file] => /***/***/***/includes/classes/TabCtrl.cls.php
            [line] => 40
            [function] => TrySaveTab
            [args] => Array
                (
                    [0] => Array
                        (
                        )

                    [1] =>
                )

        )

    [3] => Array
        (
            [file] => /***/***/***/admin/admin_neu/themes/einstellungen/index.php
            [line] => 30
            [function] => HandleSaveAndTabChange
            [class] => TabCtrl
            [object] => TabCtrl Object
                (
                    [tabs:TabCtrl:private] => Array
                        (
                            [0] => Array
                                (
                                    [TabName] => Grunddaten
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_grunddaten_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_grunddaten_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [1] => Array
                                (
                                    [TabName] => Betreiberdaten
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_betreiber_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_betreiber_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [2] => Array
                                (
                                    [TabName] => Features
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_features_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_features_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [3] => Array
                                (
                                    [TabName] => Ajax Suche
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_ajax_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_ajax_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [4] => Array
                                (
                                    [TabName] => SEO
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_seo_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_seo_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [5] => Array
                                (
                                    [TabName] => AGB Hosting
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_agb_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_agb_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [6] => Array
                                (
                                    [TabName] => Fehlerseite
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_fehlerseite_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_fehlerseite_tab.inc.php
                                    [MultiLingual] => 1
                                )

                        )

                    [aktiverTab:TabCtrl:private] => 2
                    [neuerTab:TabCtrl:private] =>
                    [speichern:TabCtrl:private] => 1
                    [errorInfos:TabCtrl:private] => Array
                        (
                        )

                    [languageId] =>
                    [neueLanguageId] =>
                )

            [type] => ->
            [args] => Array
                (
                )

        )

)


Grüße
Martin
„Die Natur ergreift immer die Partei des versteckten Fehlers.“
Eines von Murphys Gesetzen
Martens
 
Beiträge: 343
Registriert: Mo 9. Feb 2009, 22:09

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon Martens » Di 19. Mai 2015, 21:57

Achja, noch was …

natürlich gibt es auch eine Quick&Dirty-Lösung, wenn man darauf verzichten kann, die Gastbestellung im Admin-Bereich ein- und ausschalten zu können. In templates/[DEIN-TEMPLATE]/website/user/login.tpl Zeile 48 muss dazu nur die Abfrage, ob die Gastbestellung aktiviert ist, auskommentiert werden.
Original:
Code: Alles auswählen
<?php if($tpl_sourceid == 8 && $tpl_gastbestellung_check == 1) { ?>

Auskommentiert:
Code: Alles auswählen
<?php if($tpl_sourceid == 8 /*&& $tpl_gastbestellung_check == 1*/) { ?>

Dann ist es egal, ob im Backend ein Häkchen gesetzt ist oder nicht. Es wäre aber gut, die Log-Erweiterung trotzdem weiter laufen zu lassen und hin und wieder mal ein Auge drauf zu werfen. So lässt sich der Übeltäter vielleicht doch noch entlarven.

Grüße
Martin
„Die Natur ergreift immer die Partei des versteckten Fehlers.“
Eines von Murphys Gesetzen
Martens
 
Beiträge: 343
Registriert: Mo 9. Feb 2009, 22:09

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon olape » Mi 20. Mai 2015, 09:55

Hallo,

@Martens
danke für deine Hinweise.
Ich habe den Zusatz in die db.inc.php eingefügt.
Bekomme die von dir beschreibenen Meldungen, Jedenfalls, wenn ich den Haken gewollt entferne und setzte.

Beim nicht gewollten Entfernen des Hakens war leider keine Entrag im Log, Erst, als ich den Haken wieder gesetzt habe.

Gruss Olaf
olape
 
Beiträge: 87
Registriert: So 13. Mai 2007, 16:10

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon Martens » Mi 20. Mai 2015, 20:57

Sooo, ich hab's! :D

Das Problem betrifft nicht nur die "Gastbestellung", sondern auch die Anzeige-Einstellungen für den "Facebook Likebutton", "PDF Download Katalog" und die "Durchschnittsbewertung aller Artikel". Reproduzieren lässt sich das, wenn man im Backend auf "Artikel" -> "Einstellungen" geht, wo die Tabs für Gebindepreise, Sortierung und Facettensuche sind. Sobald man hier auf Speichern klickt, die Checkbox ändert oder sogar nur einen anderen Tab wählt (das löst ebenfalls einen Speichervorgang aus), werden die Einstellungen der oben genannten Features mit einem leeren Wert überschrieben. Sprich: Sie werden im Frontend nicht mehr angezeigt. Diese 5 Einstellungen (inkl. Anzeige der Gebindepreise) gehören in der DB-Tabelle "randshop_einstellungen" zur group "artikel". Bevor nun eine Einstellung eines Werts dieser Gruppe geändert wird, löscht die Shop-Software pauschal alle values, die zur group "artikel" gehören mit dem Statement
Code: Alles auswählen
UPDATE randshop_einstellungen SET randshop_einstellungen.value = '' WHERE randshop_einstellungen.group = 'artikel'
und trägt alle Werte neu ein. Das klappt aber nur, wenn in dem Formular alle Einstellungen dieser Gruppe vorhanden sind. Doch das ist hier nicht der Fall.

Der Übeltäter ist admin/artikel/einstellungen_gebindepreise.php.
Um das Problem zu lösen, müssen alle Einstellungen der Gruppe "artikel" (bislang war das nur "gebindepreise_aktiv") an die Speicher-Funktion übergeben werden.

Und so wird's gemacht:
Die beiden Zeilen (73/74)
Code: Alles auswählen
$einstellungen = GetEinstellungen('', 'artikel');
$tpl_einstellungen = $einstellungen->artikel;
kopieren und löschen.

Die kopierten Zeilen dann weiter oben in der Datei, am Besten direkt nach $tabReiter->setActiveID('gebindepreise'); (Zeile 31) einfügen.

Dann den Funktionsaufruf
Code: Alles auswählen
    SaveGroupEinstellungen('artikel',
        array(
            'gebindepreise_aktiv' => $_POST['gebindepreise_aktiv'],
        )
    );
löschen und durch
Code: Alles auswählen
    $tpl_einstellungen->gebindepreise_aktiv = $_POST['gebindepreise_aktiv'];
    SaveGroupEinstellungen('artikel', $tpl_einstellungen);
ersetzen.

Das Objekt $tpl_einstellungen enthält alle gespeicherten Werte der Gruppe "artikel". Nachdem darin der Wert für "gebindepreise_aktiv" aktualisiert wurde, werden alle an SaveGroupEinstellungen() übergeben.

Der komplette PHP-Block oberhalb von <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> sollte dann so aussehen:
Code: Alles auswählen
<?php
/**
 *
 * Copyright (C) Die Randgruppe GmbH
 *
 * http://www.randshop.com
 * http://www.dierandgruppe.com
 *
 * Unter der Lizenz von Die Randgruppe GmbH:
 * http://www.randshop.com/Lizenz
 * 
 * $Author: $
 * $Date: $
 * $Revision: $
 *
 */

session_start();

// PHP-Includes
include_once("../../conf/config.inc.php");
include_once(DATEIPFAD . "conf/db.inc.php");
include_once("../global_off.inc.php");
include_once(DATEIPFAD . "includes/language/langu_" . LANGU_ADMIN . ".inc.php");
include_once(DATEIPFAD . "includes/language/langu_admin_" . LANGU_ADMIN . ".inc.php");
include_once(DATEIPFAD . "includes/functions.shopeinstellung.inc.php");
include_once(DATEIPFAD . "includes/functions.menue.inc.php");
include_once(DATEIPFAD . "includes/functions.language.inc.php");

include_once("einstellungen_reiter.inc.php");
$tabReiter->setActiveID('gebindepreise');

$einstellungen = GetEinstellungen('', 'artikel');
$tpl_einstellungen = $einstellungen->artikel;

if($_POST['formaction'] == 'delete')
{
   unset($_POST['gebinde'][$_POST['deleteIndex']]);
}

if($_POST['formaction'] == 'save' || $_POST['formaction'] == 'delete')
{
    $tpl_einstellungen->gebindepreise_aktiv = $_POST['gebindepreise_aktiv'];
    SaveGroupEinstellungen('artikel', $tpl_einstellungen);
   
   $gebindeEinstellungenString = "";
   if($_POST['gebinde'])
   {
       foreach($_POST['gebinde'] as $gebinde)
       {
          if($gebinde['einheit'])
          {
             if($trenner)
                   $gebindeEinstellungenString .= ";";
               else
                   $trenner = true;
               $gebindeEinstellungenString .= $gebinde['groesse'] . '_' . $gebinde['einheit'];
          }
       }
   }
    SaveGroupEinstellungen('artikel_gebinde',
        array(
            'gebinde' => $gebindeEinstellungenString
        )
    );
}

if($_POST['reiter'])
{
    $tabReiter->redirect($_POST['reiter']);
}

$einstellungen = GetEinstellungen('', 'artikel_gebinde');
$gebindeArray = explode(';', $einstellungen->artikel_gebinde->gebinde);
foreach($gebindeArray as $gebinde)
{
    $gebindeWerte = explode('_', $gebinde);
    if($gebindeWerte[0] && $gebindeWerte[1])
        $tpl_gebinde[$gebindeWerte[1]] = $gebindeWerte[0];
    if($gebindegroesse_vergleich) {
        if($gebindegroesse_vergleich != $gebindeWerte[0]) {
           $tpl_warnmeldung = $lang_warnung_gebindegroessen_unterschiedlich;
        }
    } else {
       $gebindegroesse_vergleich = $gebindeWerte[0];
    }
     
}

?>


Viele Grüße
Martin
„Die Natur ergreift immer die Partei des versteckten Fehlers.“
Eines von Murphys Gesetzen
Martens
 
Beiträge: 343
Registriert: Mo 9. Feb 2009, 22:09

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon Martens » Mi 20. Mai 2015, 21:00

olape hat geschrieben:Artikel anlegen / ändern, Hersteller anlegen und Ausprägungen für die Facettensuche anlegen.
Beim nicht gewollten Entfernen des Hakens war leider keine Entrag im Log, Erst, als ich den Haken wieder gesetzt habe.

Hallo Olaf,

das waren die entscheidenden Hinweise, Danke!
„Die Natur ergreift immer die Partei des versteckten Fehlers.“
Eines von Murphys Gesetzen
Martens
 
Beiträge: 343
Registriert: Mo 9. Feb 2009, 22:09

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon olape » Do 21. Mai 2015, 08:48

Hallo Martens

Reproduzieren lässt sich das, wenn man im Backend auf "Artikel" -> "Einstellungen" geht, wo die Tabs für Gebindepreise, Sortierung und Facettensuche sind.

Stimmt, so bekommt man es hin.

Habe deine Lösung umgesetzt, jetzt kann man es zumindest nicht mehr über Einstellungen --> Gebindepreise, Sortierung und Facettensuche auslösen.
Hoffentlich war das alles.
Die Zusätze in der db.inc.php habe ich wieder entfernt.

Vielen Dank an dich.

Gruss Olaf
olape
 
Beiträge: 87
Registriert: So 13. Mai 2007, 16:10

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon Magnus » Do 21. Mai 2015, 18:34

Hallo,

ist ja echt klasse, dass die Ursache jetzt entdeckt ist.

Ich glaube, ich habe noch eine einfachere Lösung gefunden:
in der o.g. Datei, ca. Zeile 40 diesen Code:
Code: Alles auswählen
    SaveGroupEinstellungen('artikel',
        array(
            'gebindepreise_aktiv' => $_POST['gebindepreise_aktiv']
        )
    );


durch diesen ersetzen
Code: Alles auswählen
SaveKeyValueEinstellungen('artikel','gebindepreise_aktiv',$_POST['gebindepreise_aktiv']);


das sollte das Problem schon beheben, zumindest tats das bei mir ;-)

vielen Dank für die Tipps und das Engagement!

Magnus
Magnus
 
Beiträge: 1602
Registriert: Mi 21. Feb 2007, 21:10

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon Martens » Di 26. Mai 2015, 15:09

Magnus hat geschrieben:
Code: Alles auswählen
SaveKeyValueEinstellungen('artikel','gebindepreise_aktiv',$_POST['gebindepreise_aktiv']);

Hallo Magnus,

ahrrrgggh … auf die Idee, dass eine Funktion vorhanden ist, mit der man einen einzelnen Wert ändern kann, hätte ich eigentlich auch kommen können ... :roll:

Danke für's Code-Review
Martin
„Die Natur ergreift immer die Partei des versteckten Fehlers.“
Eines von Murphys Gesetzen
Martens
 
Beiträge: 343
Registriert: Mo 9. Feb 2009, 22:09

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon Magnus » Di 26. Mai 2015, 19:26

Hey Martin, so ist das doch eine nette Zusammenarbeit. Zeigt wieder mal, dass man so auch schöne Lösungen finden kann. Mir hat die Idee mit deiner Datenbankabfrage auch sehr gut gefallen ;-)

viele Grüße

Magnus
Magnus
 
Beiträge: 1602
Registriert: Mi 21. Feb 2007, 21:10

Re: Gastbestellungen zulassen-Haken verschwindet

Beitragvon ablass » Do 11. Jun 2015, 12:16

Wow Leute.. super Detektivarbeit... und direkt so übernommen in die v2.4.. Danke an alle.
ablass
 
Beiträge: 126
Registriert: Mi 22. Jul 2009, 07:56

Vorherige

Zurück zu Bugmeldungen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
cron