Problem bei Backend-Anmeldung

Fragen und Diskussionen zu laufenden ConPresso 4.x Projekten werden in diesem Forum diskutiert.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Hallo Stephan,

Die Zeilen

Code: Alles auswählen

define('CPO', true);
require_once('../_include/common.inc.php'); 
brauchst Du nur dann, wenn Du ConPresso-Funktionen benutzen willst.
Genau das tust Du aber NICHT.
Also entferne diese Zeilen wieder! (denn sie laden das komplette CPO-System und erzeugen Last, Variablen, Konstanten und zahlreiche Abfragen, die in Deinem Parallel-System ja gar nicht benötigt werden)

Ablauf einer CPO-Abfrage:
1. Connect mit der DB
2. Einstellen von Codierung und SQL-Mode
3. Ausführen der Abfrage

Dein Ablauf
1. Connect mit der DB
2. Ausführen der Abfrage

Was fehlt wohl?
Der Ort dafür ist in der Datei db_connect.php, die bei Deinem Parallel-System den Connect herstellt.
Wie Codierung und SQL-Mode eingestellt werden steht in der db_mysql.inc.php direkt nach dem connect-Befehl.
Dort wird nach dem Connect noch diese Abfrage ausgeführt:
SET sql_mode = '';
und mittels
mysql_set_charset('latin1'); (für Dein mySQL geändert)
die Codierung korrigiert.

Und wenn
"SELECT * FROM cpo41_usergroups WHERE id = '$usergroups_id'";
zu
SELECT * FROM cpo41_usergroups WHERE id = ;
führt, dann fehlt beim Aufruf
usergroup_feld($usergroups_id, $feld)
vermutlich was?

Ist man nicht eingeloggt, dann erzeugt
usergroup_feld($_SESSION['SID_user']['usergroups_id'],'usergroup');
ziemlich sicher diese Meldung.

Allerdings müsste
"SELECT * FROM cpo41_usergroups WHERE id = '$usergroups_id'";
eigentlich dies liefern
SELECT * FROM cpo41_usergroups WHERE id = '';
und somit keine Fehlermeldung erzeugen!

Irgendetwas entfernt ungefragt die zwei Apostrophe...

Ich bin auch leicht verwirrt, weil ich Dir schreibe
$query = "SELECT * FROM " . CPO_USERGROUPS . " WHERE id = " . $usergroups_id . ";";
Du mich aber scheinbar zitierst mit
$query = "SELECT * FROM " . CPO41_USERGROUPS . " WHERE id = " . $usergroups_id . ";";
was nicht funktionieren kann, weil es die Konstante CPO41_USERGROUPS nicht gibt... :gruebel:
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
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Du merkst vielleicht, dass die Kommunikation schwierig ist, wenn Du angibst, dass eine (von wem auch immer geschriebene) Funktion wohl falsche Ergebnisse liefert, Du aber die innerhalb dieser Funktion eingebundene Datei unter Verschluss hältst.

Daher nochmal kurz:
Die von Dir gepostete Funktion ist (soweit erkennbar) in Ordnung. Hat ja auch vorher funktioniert.

Ursache für Deine Probleme ist die im April erfolgte Umstellung der Verbindung zur Datenbank, weshalb ich Dir eine dafür geeignete Version der ConPresso-Datenbank-Funktionen gesendet habe, die aber nichts bringt, wenn man ConPresso gar nicht nutzt (sondern auf anderem Wege nur auf die Daten der Datenbank zugreift).

Eine einfache Lösung ist die Verbindung zur Datenbank mit den korrekten Parametern herzustellen (s.o.).
Das musst Du nur in der unter Verschluss gehaltenen Datei vornehmen. Fertig!

Oder die komplexe Version:
Einfach IMMER nach der Zeile
include('db_connect.php');
die Zeilen einfügen
mysql_query("SET sql_mode = '';"); oder mysql_db_query("datenbank", "SET sql_mode = '';");
mysql_set_charset('latin1');
statt einmal in db_connect.php.
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
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Hast Du noch Fragen oder hat es sich erledigt?
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: 64
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Hallo Marcus,
Was fehlt wohl?
Der Ort dafür ist in der Datei db_connect.php, die bei Deinem Parallel-System den Connect herstellt.
Wie Codierung und SQL-Mode eingestellt werden steht in der db_mysql.inc.php direkt nach dem connect-Befehl.
Dort wird nach dem Connect noch diese Abfrage ausgeführt:
SET sql_mode = '';
und mittels
mysql_set_charset('latin1'); (für Dein mySQL geändert)
die Codierung korrigiert.
Die beiden Abfragen stehen nicht in der von dir zugesendeten db_mysql.inc.php
// modded for mysqli support

if (!defined('CPO')) exit;

class DB_mysql
{
var $Host = ""; // mysql-server
var $Database = ""; // database-name
var $User = ""; // user and password to log into the DB
var $Password = "";
Ja muss ich denn da auch konkrete Daten in die Anführungszeichen setzen?
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

SK2010 hat geschrieben: 24.08.2022 07:28 Die beiden Abfragen stehen nicht in der von dir zugesendeten db_mysql.inc.php
In Zeile 84 und 87.
SK2010 hat geschrieben: 24.08.2022 07:28 Ja muss ich denn da auch konkrete Daten in die Anführungszeichen setzen?
Nein!
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: 64
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

ich hatte folgendes gesucht :mysql_set_charset('latin1');
statt: mysqli_set_charset($this->Link_ID, 'latin1');
und daher nicht gefunden :-(


Vielleicht liegt in unserer db_connect.php ja noch ein Fehler vor:

<?php
$dbserver="server";
$dbuser="user";
$dbpasswd=".passwort";
$datenbank="datenbank";
$dbh=mysql_connect($dbserver,$dbuser,$dbpasswd);
mysql_select_db($datenbank,$dbh) or die ("<p><b>Konnte auf die Datenbank 1&1 $datenbank nicht zugreifen!</b>");

?>
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

SK2010 hat geschrieben: 24.08.2022 09:49 ich hatte folgendes gesucht :mysql_set_charset('latin1');
statt: mysqli_set_charset($this->Link_ID, 'latin1');
und daher nicht gefunden :-(
Zitat: "für Dein mySQL geändert"
somit konntest Du es nicht finden, mea culpa!
SK2010 hat geschrieben: 24.08.2022 09:49 Vielleicht liegt in unserer db_connect.php ja noch ein Fehler vor:

<?php
$dbserver="server";
$dbuser="user";
$dbpasswd=".passwort";
$datenbank="datenbank";
$dbh=mysql_connect($dbserver,$dbuser,$dbpasswd);
mysql_select_db($datenbank,$dbh) or die ("<p><b>Konnte auf die Datenbank 1&1 $datenbank nicht zugreifen!</b>");

?>
Ja, da fehlen die Zeilen
mysql_query("SET sql_mode = '';");
und
mysql_set_charset('latin1');
vor dem ?>

Wobei die zweite der beiden Zeilen die entscheidende ist, die andere ist propylaktisch, falls Dein Provider weitere Einstellungen ändert, wie man hier im Forum lesen konnte.

Da die db_connect.php jetzt vorliegt, kann man es präzisieren zu
mysql_query("SET sql_mode = '';", $dbh);
und
mysql_set_charset('latin1', $dbh);
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: 64
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Tja, mit mysql_set_charset('latin1');

bekomme ich wieder alle Umlaute kryptisch.
Unsere Datenbank/Tabellen sind in ihrer Struktur voll auf utf8_unicode_ci

... das beißt sich dann sicher.

Außerdem eine Fehlermeldung bzgl. der Datenbankanbindung ... :-(

Ich lasse jetzt die Finger davon, weil es funktioniert wie vorher (aber nur mit
define('CPO', true);
require_once('../_include/common.inc.php');


und deiner db_mysql.inc.php


Wahrscheinlich würde es nur (besser) funktionieren, wenn ich dich hier mal austoben lasse :-)

Marcus, ich bedanke mich wirklich sehr herzlich für deine uneigennützigen Bemühungen helfend bei unserem Projekt (und stets äußerst schnell) einzugreifen, meist einfach zu integrierende Scriptzeilen anzubieten und das nun schon seit mittlerweile 12 Jahren.
Das findet man selten - also vielen Dank!!

Stephan
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Der Vollständigkeit halber: Auch bei mir sind bei neueren Auftritten die Tabellen mit utf8-Kollation erstellt. Trotzdem gibt es keine Probleme mit Umlauten, wenn die Verbindung klar definiert ist.
Möglicherweise wurde ja auch die in der phpinfo ablesbare Codierung von PHP verstellt, was ja erst mit CPO 4.1.6 durchgängig gelöst wurde[1] und durch eine zusätzlich Header-Angabe[2] auch für die Seitenausgabe des Webservers (Apache) vorgegeben werden kann.
Außerdem eine Fehlermeldung bzgl. der Datenbankanbindung
???

_______________________________________________
1) alle Vorkommen von htmlspecialchars($wasauchimmer)
geändert zu htmlspecialchars($wasauchimmer, ENT_COMPAT, 'ISO-8859-15')
2) am Ende von _include/common.inc.php:

Code: Alles auswählen

// force ISO
if (strtolower(ini_get('default_charset')) != 'iso-8859-1')
    header('Content-type: text/html; charset=ISO-8859-1'); 
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: 64
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Hallo Marcus,
mit deiner Funktion Fehlermeldung wie am 18.08. gepostet.
(die DatenbankTabellen beginnen alle mit cpo41)

Database error:
Invalid SQL: SELECT * FROM cpo41_usergroups WHERE id = ;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 (1064)


Ich lasse es jetzt wirklich sein.
Vielen Dank
Stephan
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

Ich versuche mal Dir die Fehlermeldung zu erklären:

Invalid SQL: SELECT * FROM cpo41_usergroups WHERE id = ;
sagt, dass hinter dem = noch etwas kommen muss.

Hat man nun eine Funktion

Code: Alles auswählen

function usergroup_feld($usergroups_id, $feld) {
    $query = "SELECT * FROM " . CPO_USERGROUPS . " WHERE id = " . $usergroups_id . ";";
...
dann sollte beim Aufruf von
usergroup_feld(123, 'feldname')
die erzeugte Abfrage ja lauten
SELECT * FROM cpo41_usergroups WHERE id = 123;
und eben nicht
SELECT * FROM cpo41_usergroups WHERE id = ;

Die Variable $usergroups_id kommt also gar nicht bis in die Funktion oder ist eben leer (wie für alle nicht angemeldeten bzw. keiner Benutzergruppe zugehörigen User)

Vielleicht sollte man die Apostrophe hinzufügen, so dass die Funktion auch ohne Input keinen Fehler erzeugt. Also

Code: Alles auswählen

$query = "SELECT * FROM " . CPO_USERGROUPS . " WHERE id = " . $usergroups_id . ";";
ändern zu

Code: Alles auswählen

$query = "SELECT * FROM " . CPO_USERGROUPS . " WHERE id = '" . $usergroups_id . "';";
was dann bei leerer Variable $usergroups_id das erzeugt: SELECT * FROM cpo41_usergroups WHERE id = '';

Oder vor der Abfrage prüfen

Code: Alles auswählen

if (!isset($usergroups_id) || $usergroups_id == '') return;
Außerdem: CPO_USERGROUPS ist eine Konstante und beinhaltet den Namen der jeweiligen Tabelle, dabei ist egal welcher Präfix bei der Installation gewählt wurde. Bei der Wahl von "cpo41" enthält diese also den Tabellennamen "cpo41_usergroups"...
... aber eben nur dann, wenn

Code: Alles auswählen

define('CPO', true);
require_once('../_include/common.inc.php');
am Anfang des Codes steht, weil in dieser Datei die Tabellennamen als Konstanten definiert werden.
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: 64
Registriert: 06.06.2010 20:08
Hat sich bedankt: 3 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von SK2010 »

Ja, das war's:
$query = "SELECT * FROM " . CPO_USERGROUPS . " WHERE id = '" . $usergroups_id . "';";

Bleibt noch das Umlauteproblem:
2) habe ich ereldigt.
1) wo überall gibt es denn die htmlspecialchars($wasauchimmer) ?
1) alle Vorkommen von htmlspecialchars($wasauchimmer)
geändert zu htmlspecialchars($wasauchimmer, ENT_COMPAT, 'ISO-8859-15')
2) am Ende von _include/common.inc.php:

Code: Alles auswählen

// force ISO
if (strtolower(ini_get('default_charset')) != 'iso-8859-1')
header('Content-type: text/html; charset=ISO-8859-1');
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Re: Problem bei Backend-Anmeldung

Beitrag von MarkusR »

SK2010 hat geschrieben: 25.08.2022 15:48 wo überall gibt es denn die htmlspecialchars($wasauchimmer) ?
*lach*
In fast jeder Datei (ca. 80+) und das z.T. jeweils mehrere Dutzend (insgesamt fast 1.000 in allen Dateien, je nach Webauftritt)!
Deshalb war ja der Umbau von CPO für PHP 5.4 vor 10 Jahren so aufwändig.
Aber man musste ja nur ein Update auf CPO 4.1.6 machen statt alles selbst umzuschreiben...

In der Suchfunktion des Betriebssystems kann man einfach mal "htmlspecialchars" eingeben...
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