Problem bei Backend-Anmeldung

Fragen und Diskussionen zu laufenden ConPresso 4.x Projekten werden in diesem Forum diskutiert.
SK2010
ConPresso-User
Beiträge: 58
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Hallo,
ich habe folgendes Problem:
Admin-Anmeldung auf unserer Homepage (nur noch für Schulen-Suchfunktion und interne Dateneingabe verwendet) - ok
Die Verlinkung zum Backend mit: https://www.schulamt-suedthueringen.de/ ... /index.php verlangt dann aber eine erneute Anmeldung, welche nicht funktioniert. Die internen Menüpunkte sind aber auswählbar.
Auch scheint mit der Registrierung etwas nicht zu stimmen.
C-Version: 4.1.2

Stephan
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7186
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 919 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Hallo Stephan,

zahlreiche Webseitenbetreiber erleben in letzter Zeit Probleme, insbesondere wenn Umlaute im Spiel sind.
Das könnte bei einer auf "Südthüringen" registrierten Version im Rahmen des Möglichen liegen, wenn nicht vorrausschauend auf Umlaute verzichtet wurde.

Ursache ist, dass Provider Updates einspielen ohne diese korrekt zu konfigurieren. Dadurch wird die Anbindung an die Datenbank unnötigerweise auf UTF8 umgestellt und dadurch Umlaute falsch wiedergegeben.
(das führt zum falschen Auslesen der Einstellungen)

Abhilfe: Westeuropäisch statt Asiatisch erzwingen!

Dazu einfach die Datei _include/db_mysql.inc.php durch die aus dem beiliegenden Archiv entpackte Version ersetzen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
SK2010
ConPresso-User
Beiträge: 58
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Hallo Markus,
vielen Dank für die Info und die Datei. Das Problem der dt. Umlaute ist damit gelöst. Außerdem war die Registrierung weg, die habe ich wieder eingegeben.
Wir lassen unsere (Rest-)Seite über IONOS pflegen (PHP 5.6). MySql liegt in der Version 5.7 vor (wie lange schon?). Hier gibt es scheinbar Unstimmigkeiten. Die Anmeldung der User wird nicht richtig weitergegeben:
Für die berechtigte Aus-/und Eingabe von Datenbankinhalten ist unter anderem folgende Befehlszeile seit einigen Jahren im Einsatz:
$_SESSION['SID_user']['usergroup_name']=usergroup_feld($_SESSION['SID_user']['usergroups_id'],'usergroup');

usergroup_feld ist eine selbstdefinierte Funktion.
usergroup_name sollte anschließend die korrekte Gruppenzugehörigkeit liefern, ist aber im Ergebnis "Null" :-(

Gruß Stephan
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7186
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 919 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Ursache für "verlorengegangene" Daten bei falscher Datenbankanbindung ist meist, dass versucht wurde während der Störung in CPO Änderungen vorzunehmen. Die Daten waren noch korrekt vorhanden, wurden nur nicht korrekt ausgegeben und beim Versuch diese zu "reparieren" mit Müll überschrieben.
Das kann natürlich auch mit anderen Dingen passieren, die während der Störung "angefasst" wurden, z.B. Gruppen.

Was die mir unbekannte Funktion, die wohl die eigentlich ausreichende Gruppen-ID in den Gruppennamen wandelt, hier verbockt, ist ohne die Funktion zu sehen kaum zu beurteilen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
SK2010
ConPresso-User
Beiträge: 58
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

hier noch die Funktion:

Code: Alles auswählen

function usergroup_feld($usergroups_id, $feld){
        include('db_connect.php');
        $SQL = "SELECT * FROM cpo41_usergroups WHERE id = '$usergroups_id'";
        $result = mysql_db_query("datenbank", $SQL);
        extract(mysql_fetch_assoc($result));
        return $$feld;
}
SK2010
ConPresso-User
Beiträge: 58
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Ich habe die Variableninhalte mal abgefragt, es ist nach dem login alles wie es sein muss.
Nur werden diese nicht mehr an die nächstaufgerufenen PHP.Seiten übergeben. Dann steht alles auf NULL.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7186
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 919 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Liegt vielleicht an der Nutzung von MySQL Statt MySQLi (mit i) und fehlende Vorgaben für die zu nutzende Codierung sowie den SQL-Mode.
Am besten die CPO Datenbankfunktionen nutzen, die durch die jetzt eingespielte Datei auch die korrekten Parameter vorgeben.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
SK2010
ConPresso-User
Beiträge: 58
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Hallo Markus,

habe gestern lange gekämpft. Es ist so, dass das neue Modul db_mysql_inc.php mit MySqli arbeitet und deswegen die Login-Daten nicht weitergereicht werden. Ich habe es wieder ausgetauscht und die Probleme waren nach ein paar Änderungen in den vorhandenen PHP-Dateien behoben. (bis auf die dt. Umlaute im Backend) Die Registrierung war dann aber wieder raus. Die habe ich heute im Büro wieder eingegeben :-(
Aber: Alles funktioniert nur, wenn ich die Registrierung herauslasse. (Eingabedaten siehe deine Email vom 5.1.2010) Wir hatten uns 2012 umbenannt in Südthüringen statt Schmal-Meining. Evt. kann das angepasst werden.

Stephan
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7186
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 919 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Nein, es ist so, dass die selbstgestrickte Funktion die CPO-Datenbankfunktionen NICHT benutzt und so mit falscher Codierung und falschem SQL-Modus arbeitet. Ob mit oder ohne "i" ist dabei egal und ebenfalls, welche db_mysql_inc.php eingespielt ist, da sie ja gar nicht benutzt wird!

Es geht um diesen Teil:

Code: Alles auswählen

        $result = mysql_db_query("datenbank", $SQL);
        extract(mysql_fetch_assoc($result));
 
Das sind reine PHP-Funktionen und keine CPO-Funktionen. Sicher klug gedacht aber bei Updates vom Provider ein Damoklesschwert...

Ich kann gerne am WE aus den zahlreichen im CPO-Code ablesbaren Abfragen eine funktionierende Version von usergroup_feld() erstellen, nur bin ich bis dahin unterwegs und arbeite für meinen Lebensunterhalt.

P.S. ich würde bis dahin die Finger von JEDEM Speichern-Button in CPO lassen, weil dann jeweils die zerstörten Inhalte gespeichert werden statt der eigentlich funktionierenden aber falsch übertragenen Inhalte. Man macht es also nur schlimmer... :wink:
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
SK2010
ConPresso-User
Beiträge: 58
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Hallo Markus,

da wäre ich dir sehr dankbar. Klingt alles sehr dramatisch, die letzten 10 Jahre hat's halt funktioniert, wahrscheinlich war da vor kurzem ein ProviderUpdate, nach deren Auskunft zwar nicht, aber das kann durchaus schon länger zurückliegen.

Gruß Stephan
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7186
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 919 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Ich würde in der phpinfo.php mal nach dem Build-Date schauen...
Bei einem anderen Kunden wurde von IONOS im April ein Update durchgeführt, obwohl es seit 7 Jahren keine Updates mehr gibt. der hatte dann genau die gleichen Probleme... :wink: :wall: :mrgreen:

Habe mal schnell eine typische Abfrage, wie sie in CPO an allen Ecken und Enden benutzt werden, in Deine Funktion eingebaut.

Code: Alles auswählen

function usergroup_feld($usergroups_id, $feld)  {
        $query = "SELECT * FROM " . CPO_USERGROUPS . " WHERE id = " . $usergroups_id . ";";
        $db_ugf = new DB;
        $db_ugf->query($query);
        if ($db_ugf->next_record()) {
            $$feld = $db_ugf->v($feld);
        }
        return $$feld;
}
Dabei wird, da nicht klar ist an welcher Stelle Deine Funktion genau benutzt wird, eine eigene Instanz der Klasse DB erstellt, was meist nicht nötig ist, aber das Überschreiben von Ergebnissen anderer Abfragen verhindert, bevor diese verarbeitet wurden.

Zur Fehlersuche kann man noch die DEBUG-Kontrollausgaben einbauen:

Code: Alles auswählen

function usergroup_feld($usergroups_id, $feld)  {
        $query = "SELECT * FROM " . CPO_USERGROUPS . " WHERE id = " . $usergroups_id . ";";
        DEBUG(4, $query, __FILE__, __LINE__);   
        $db_ugf = new DB;
        $db_ugf->query($query);
        if ($db_ugf->next_record()) {
            $$feld = $db_ugf->v($feld);
        }
        return $$feld;
}
was aber nur Sinn macht, wenn man auch die DEBUG-Kontrollausgaben nutzt.

Das ist jetzt "blind" zusammencodiert und ungetestet, sollte aber funktionieren.
Und bei Nutzung der obenstehenden _include/db_mysql.inc.php sollten die Probleme beseitigt sein, wenn es nicht noch mehr dieser "selbstgestrickten" Funktionen gibt.

Nur der Vollständigkeit halber: Das Ganze funktioniert natürlich nur, wenn auch die ConPresso-Funktionen existieren, also in der Regel nach der Zeile
require_once('../_include/common.inc.php'); im Frontend bzw.
require_once('../_include/checkaccess.inc.php'); im Backend, die in jeder nicht includierten ConPresso-Datei zu Anfang stehen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
SK2010
ConPresso-User
Beiträge: 58
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Hallo Markus,
danke für die Infos. Hab die Woche Urlaub, mal sehen wann ich Zeit finde.

>>>>>Ich würde in der phpinfo.php mal nach dem Build-Date schauen...
Das Build-Datum ist tatsächlich vom 25. April :-(

>>>>Nur der Vollständigkeit halber: Das Ganze funktioniert natürlich nur, wenn auch die ConPresso-Funktionen existieren, also >>>>in der Regel nach der Zeile
>>>>require_once('../_include/common.inc.php'); im Frontend bzw.
>>>>require_once('../_include/checkaccess.inc.php'); im Backend, die in jeder nicht includierten ConPresso-Datei zu Anfang >>>>stehen.

--> verstehe ich nicht ganz; ich hatte die Funktion (ist nur eine) wie nachfolgend eingebunden(per funktionen.php aus einem anderen Programm meines Vorgängers kopiert):

<?php
session_start();
extract($_REQUEST);
$ziel="../../'ordner'/";
include($ziel.'datenbank');
include($ziel.'funktionen.php');
$_SESSION['SID_user']['usergroup_name']=usergroup_feld($_SESSION['SID_user']['usergroups_id'],'usergroup');

Gruß Stephan
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7186
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 919 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

SK2010 hat geschrieben: 22.07.2022 11:35 >>>>Nur der Vollständigkeit halber: Das Ganze funktioniert natürlich nur, wenn auch die ConPresso-Funktionen existieren, also >>>>in der Regel nach der Zeile
>>>>require_once('../_include/common.inc.php'); im Frontend bzw.
>>>>require_once('../_include/checkaccess.inc.php'); im Backend, die in jeder nicht includierten ConPresso-Datei zu Anfang >>>>stehen.

--> verstehe ich nicht ganz; ich hatte die Funktion (ist nur eine) wie nachfolgend eingebunden(per funktionen.php aus einem anderen Programm meines Vorgängers kopiert):

<?php
session_start();
extract($_REQUEST);
$ziel="../../'ordner'/";
include($ziel.'datenbank');
include($ziel.'funktionen.php');
$_SESSION['SID_user']['usergroup_name']=usergroup_feld($_SESSION['SID_user']['usergroups_id'],'usergroup');

Gruß Stephan
Da "funktionen.php" keine ConPresso-Datei ist, lässt sich über deren Eigenschaften wenig sagen.
Aber offensichtlich nutzt sie an keiner Stelle die vorhandenen ConPresso-Funktionen (DB-Klasse, CPOsession_start(), etc.) und ist somit ein eigenständiges System, das dann eben auch an die von IONOS erneuerte Umgebung angepasst werden muss.
Es muss eben der Zeichensatz auf "latin1" statt "utf8" gesetzt werden und der sql_mode zurückgesetzt werden, falls er auf sowas wie "STRICT" oder "ONLY_FULL_GROUP_BY" steht, daher macht das die von mir bereitgestellte db_mysql.inc.php prophylaktisch. Außerdem sollte die ID der Verbindung zwingend weitergegeben und wiederverwendet werden, weil sonst parallel mehrere Verbindungen aufgebaut werden, was IONOS aber auf IMHO max. 11 begrenzt und dann vereinzelt oder massenweise "Database conection failed" im Log auftaucht...

Wenn das, was da wo auch immer und wie verwendet wird, also nicht innerhalb von Conpresso-Dateien verwendet wird sondern ein Parallel-Universum aufmacht, dann muss man es anpassen. Dies sollte direkt beim Datenbank-Connect passieren (was vermutlich in db_connect.php zu finden ist).

Zu ConPresso-Dateien mit den entsprechenden Funktionen wird es, indem zu Beginn
define('CPO', true); und dann
require_once('../_include/common.inc.php'); im Frontend bzw.
require_once('../_include/checkaccess.inc.php'); im Backend stehen.

Eine in ConPresso includierte Datei beginnt dagegen mit
if (!defined('CPO')) exit;

ConPresso selbst lässt sich mit der oben bereitgestellten db_mysql.inc.php wieder voll funktionstüchtig machen, die die notwendigen Anpassungen ja enthält.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle