Thread Verfasser: Variomatic
Thread ID: 1319
Thread Info
Es gibt 4 Beiträge zu diesem Thema, und es wurde 2146 Mal angesehen.  Ausserdem wurden Dateien angehängt.
 Thema drucken
Eigene Infusion > Fragen
Variomatic
Hallo Ihr Lieben,
wie an anderer Stelle bereits erwähnt, habe ich ich mich daran gemacht unsere V6.19 Seite auf die aktuelle V7 MySQLi Version umzustellen.

Alle ganz schön mühsam aber es funktioniert soweit ganz gut. Eine eigene Infusion "OCCD Membermanagement" ist soweit umgestellt und alle Seiten bis auf die "index.php" funktionieren . Dies ist die im Adminordner der Infusion befindliche Datei mit der OCCD-Mitglieder angelegt (insert), bearbeitet (edit), freigeschaltet und gesperrt (switch) und gelöscht (delete) werden können. Leider funzt z.Z. lediglich nur dir Aktion "Insert". Alle anderen werden - ohne jegliche Fehler- oder Statusmeldungen - nicht ausgeführt.

Die Datei hänge ich - mit der Bitte um Hilfe - mal an... Wichtig vielleicht noch der Inhalt der config.php

$anb_link = "content/occd_rules.php"; //OCCD-Regeln
//OCCD GROUP
define ( "USERGROUP", "1");
//START SORT
if (!defined("ORDERBY")) {
define ( "ORDERBY", isset ( $_GET ['orderby'] ) ? stripinput ( $_GET ['orderby'] ) : "name" );
}
if (!defined("SORTBY")) {
define ( "SORTBY", isset ( $_GET ['sortby'] ) ? stripinput ( $_GET ['sortby'] ) : "ASC" );
}
//LOCALES
$columns = 6;
$locale_data = dbarray(dbquery("SELECT * FROM " . DB_OCCD_MEMBERS_TEXTS . " WHERE id='1'" ) );
for($i = 1; $i <= $columns; $i ++) {
   $occd_locales [$i] = stripslashes($locale_data ['admin' . $i]);
}


Vorab lieben Dank
Gruß Ingo
Variomatic hat folgende Datei angehängt:
Du hast nicht die Berechtigung die Anhäge dieses Themas zu sehen.
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Der Fehler könnte mit einem Fehler im DB-Insert bzw. DB-UPDATE zusammenhängen.

Prüfe doch mal, ob die Tabellenspalte "birthday" in der definierten Tabelle für die DB_OCCD_MEMBERS vom Typ "date" ist. Falls ja ist dort möglicherweise der veraltete Defaultwert "0000-00-00" hinterlegt.
In neueren MySQL/MariaDB Versionen ist dieser Defaultwert ungültig und entsprechende DB-Queries werden abgewiesen. Der gültige Bereich beginnt erst ab 1000-01-01

Da aber in vielen Bereichen von Fusion das Geburtsdatum als nicht angegeben gilt, wenn es auf 0000-00-00 steht, ansonsten als angegebenes Geb.-Datum interpretiert wird, solltest du den Defaultwert so stehen lassen und besser stattdessen aus dem Typ "date" für diese Spalte ein "VARCHAR(10)" festlegen, den Defaultwert aber auf 0000-00-00 stehen lassen.

Diese Lösung habe ich bei der MySQLi Variante beim Setup (Erstinstallation) bereits so eingebaut, wer nur updated hat noch die alte Struktur in der DB.
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Variomatic
Ich habe deinen Tipp umgesetzt, leider ohne Erfolg. Es hätte mich auch gewundert, da der Insert bzw. Update der DB_OCCD_MEMBERS auf anderen Seiten funktioniert. Ich folgere daraus, dass es vermutlich nicht an der DB liegt.

Was mich sehr erstaunt ist die Tatsache, dass die vorhandenen Daten beim "edit" erst garnicht angezeigt werden. Der Klick bleibt total ergebnislos.

Gibt es weitere Lösungsansätze??

LG Ingo

Zusammengefügt am 27. Juli 2017 um 15:27:09:
Habe das Problem gefunden und - so denke ich - gelöst.
Es wurden die nirgends definierten Variablen

$action und $id
//zb in der Zeile
if (isset ( $action ) && $action == "edit") {

abgerufen. Nachdem ich diese in

if (isset ( $_GET['action'] ) && $_GET['action'] == "edit") {
geändert habe, funktioniert alles wie gewohnt.

Ist das so OK, oder gibt es Bedenken??
Bearbeitet von Variomatic am 27. Juli 2017 13:27:09
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Nein die Verbesserung ist so perfekt. Hab gedacht die Post Requests werden bereits an anderer Stelle bei dir abgefangen, da das wohl nicht so ist hätte der vorige Code sicher nur in älteren PHP Versionen mit register_globals = on funktioniert.
Fusion 6 hatte in der maincore.php noch eine Funktion, die Variablen aus Get und Post erzeugt und vorab "zensiert" um SQL Injections mit aktivierten register_globals zu vermeiden. Ab v7 gabs das nicht mehr. Post-Variablen mussten seitdem mit $POST[variable] verarbeitet werden,so wie du es korrekt verbessert hast.

So wie du es hast muss es in neueren Versionen also unbedingt genau in dieser Form sein.
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Springe ins Forum: