Setup ALTER TABLE Auto_increment Fehler #1062

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Faar » Do 7. Mär 2019, 13:24

Hallo miteinander,
beim Setup für Upgrades von älteren 4.8.20 auf 4.10 kann im Setuplog ein Fehler auftauchen, dass es misslungen sei, in der Tabelle con_system_prop die Spalte idsystemprop in Autoincrement umzuwandeln. Dadurch ist das Upgrade "gescheitert".

Code: Alles auswählen

ALTER TABLE `con_system_prop` CHANGE `idsystemprop` `idsystemprop` INT(11) NOT NULL AUTO_INCREMENT
Mysql Error: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY' (1062)
Ursache ist, dass Autoincrement mit 1 anfängt zu zählen, in der alten Tabelle aber noch eine 0 als erster Eintrag stehen kann, da auch der Default-Wert auf 0 eingestellt war. Den Default-Wert einfach weg zu machen, löst das Problem nicht, weil der Eintrag mit der ID 0 bereits drin steht.
Abgesehen davon, bei Autoincrement kann es sowieso keinen Default Wert geben, weil automatisch von 1 hochgezählt wird..
Alter Table Autoincrement versucht nun, aus der 0 eine 1 zu machen, aber die 1 ist ja auch bereits belegt, woraus oben genannte Fehlermeldung entsteht.
Praktisch müsste man die Tabelle erst in eine Zwischentabelle umsortieren, die bei 1 anfängt zu zählen und dann zurück importieren.
Kann man machen, wenn man will und Zeit hat oder muss, und hier findet sich auch mehr Info zu dem Problem:
https://stackoverflow.com/questions/540 ... -increment

Kurz und schmerzlos geht es bei dieser Tabelle aber auch so, dass man den Tabelleneintrag mit 0 einfach mittels phpmyadmin auf die nächste Nummer umschreibt, die gerade frei ist. Bei mir war es 24, weil da scheints mal was gelöscht wurde.
Das ist bei dieser Tabelle so einfach, weil die ID keine Rolle spielt, sondern die Spalte 'type'.
Bei Tabellen, wo die Reihenfolge und ID eine Rolle spielen, muss man sorgfältig umsortieren, um die 0 weg zu bekommen.

Leider entstehen aus oben genanntem Fehler auch Folgefehler wie diese:

Code: Alles auswählen

INSERT INTO `con_system_prop` SET `type` = 'system', `name` = 'mail_transport', `value` = 'smtp'
Mysql Error: Duplicate entry '0' for key 'PRIMARY' (1062)
Dankbarerweise listet der setuplog hier gleich die SQL-Anweisung mit auf, die man nach der Reparatur auf Autoincrement einfach über phpmyadmin als SQL laufen lassen kann und dann sind diese Einträge auch in der Tabelle.

Bei wenigen SQLs geht das noch von Hand. Aber Achtung, hier wird nicht mehr nach duplicate entry geprüft, weil die Spalten type und name als normaler Index eingetragen sind, aber nicht als unique. Folglich kann es mehrere gleiche Einträge geben, da nur die ID unique ist und diese mit autoincrement einfach hochgezählt wird.
Und siehe da, wenn ich nach dem index sortiere, finde ich schon zwei identische Einträge.
system insite_editing_activated true
Das gibt es bei mir mit ID 21 und 29.

Für das Setup in Contenido wäre zu empfehlen, dass es an dieser Stelle zuerst prüft, ob es einen Eintrag mit ID=0 gibt.
Der Default Wert 0 muss weg und der Eintrag mit der nächst möglichen Nummer versehen werden oder aber die Tabelle umsortiert werden, bevor ALTER TABLE AUTOINCREMENT ausgeführt wird.
Warum?
Weil das Setup an dieser Stelle versagt und weniger Datenbank affine User dann vor einem unvollendeten Setup stehen.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von xmurrix » Do 7. Mär 2019, 21:19

Hallo Faar,

es sollte kein Problem sein, dies im Setup als Prüfung einzubauen.

Allerdings kann ich nicht sagen, ob CONTENIDO beim Setup die Prüfung auf IDs mit dem Wert 0 oder auf doppelte IDs machen sollte.

Eigentlich sollen solche Fälle nicht vorkommen, die Frage ist hier, ist das CMS die Ursache für solche fehlerhaften Einträge oder ist es ein Modul, ein Plugin, gar ein User, der da an sich der Datenbank zu schaffen gemacht hat.

Falls es ein CONTENIDO Fehler ist, sollte man das auf jeden Fall fixen. Falls nicht, kann man überlegen, ob man dennoch dagegen was unternehmen möchte.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Faar » Fr 8. Mär 2019, 10:18

xmurrix hat geschrieben:
Do 7. Mär 2019, 21:19
es sollte kein Problem sein, dies im Setup als Prüfung einzubauen.
Ja, das muss sein.
Allerdings kann ich nicht sagen, ob CONTENIDO beim Setup die Prüfung auf IDs mit dem Wert 0 oder auf doppelte IDs machen sollte.
Es gab und gibt keine doppelten IDs, auch wenn die Fehlermeldung das suggerieren will. Es ist eher ein mathematisches Problem.
Eigentlich sollen solche Fälle nicht vorkommen, die Frage ist hier, ist das CMS die Ursache für solche fehlerhaften Einträge oder ist es ein Modul, ein Plugin, gar ein User, der da an sich der Datenbank zu schaffen gemacht hat.
Nein, das CMS macht diese 0, weil Contenido einmal eine Zeit hatte, da in der DB wenig mit Autoincrement gearbeitet wurde und hier auch noch fälschlicherweise ein Default Wert eingetragen wurde, der in einer ID-Spate nun gar nichts zu suchen hat.
Dass Default = 0 war, ist ein Fehler desjenigen, der diese Tabelle wohl vor langer Zeit aufgebaut hat (oder vielleicht noch nicht so langer Zeit).
Zum Problem wird es aber erst dann, wenn man aus dieser Spalte ein Autoincrement machen will, das standardweise mit 1 beginnt.
MYSQL versucht dann, die Spalte neu zu sortieren und mit 1 zu beginnen.
Die ID = 1 ist aber meistens schon belegt, weil es natürlicherweise mehr Zeilen-Einträge gibt als nur diese eine 0.
MYSQL hat keine eigene Logik eingebaut, dass diese Tabelle dann erst in eine Zwischentabelle exportiert wird, indem dort die IDs um jeweils eine Zahl höher gesetzt werden. Diese Automatik wäre auch fatal bei IDs, deren Nummern unbedingt gleich bleiben sollten, da sie irgendwo im Programm gebraucht werden. Folglich macht MYSQL was es kann, weil dem Programm die menschlische Logik und das Hintergrundwissen fehlen.
Derjenige, der diese Tabelle angelegt hatte, hat den Gedankenfehler produziert.
Falls es ein CONTENIDO Fehler ist, sollte man das auf jeden Fall fixen. Falls nicht, kann man überlegen, ob man dennoch dagegen was unternehmen möchte.
Es ist ein Fehler, eine ID mit Default zu belegen, wenn man sich überlegt, was denn eine ID sein soll. Gibt es da Default Werte?
Dass es eine 0 ist, ist aus mathematischer Sicht kein Fehler, denn in der Programmiererei fängt man ja oft bei 0 an zu zählen.
Aber in der Folge, diese Spalte später als Autoincrement umzubauen, macht es erst zu einem Fehler.

Es gibt verschiedene Lösungsansätze.
  1. Man kann vielleicht dem Autoincrement-SQL mitgeben, dass es bei 0 anfangen soll, dann gibt es überhaupt kein Problem beim Setup.
  • Man kann bei Prüfung auf 0 diesem eine hohe ID-Nummer geben und zum Schluss wieder auf 0 setzen. Das wird vom Autoincrement akzeptiert, nur bei der ersten Umwandlung nicht.
  • Man kann es umständlicher aber sauber machen, indem man dann die Tabelle in eine Neue schreibt mit CREATE TABLE SELECT und Dabei ID+1 in die Anweisung mit einbaut. Wobei hier vermutlich das Sortierungsproblem mit +1 umgangen wird, weil es in der neuen Tabelle in der Reihenfolge noch keine höhere ID gibt, da diese ja der Reihenfolge nach neu erzeugt werden. Zum Schluss wird die alte Tabelle mit DROP TABLE gelöscht und die neue Tabelle einfach in den Namen der alten Tabelle umbenannt und fertig.
Die letzte Lösung 3 gefällt mir daher, weil Autoincrement gewisse Eigenheiten hat. Woher weiß man, ob beim Exportieren und Importieren das Autoincrement mit einem Wert 0 zurecht käme?
Abgesehen davon, dass Autoincrement intern die inkriminierten Zahlen nicht löscht, wenn man mit DELETE eine Zeile löscht, sondern als benützt beibehält. Darum wäre bei Version 2 dieser Wert in MYSQL gespeichert.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von xmurrix » Fr 8. Mär 2019, 15:17

Hallo Faar,
...Es gab und gibt keine doppelten IDs, auch wenn die Fehlermeldung das suggerieren will. Es ist eher ein mathematisches Problem....
in deinem Fall gab es das nicht, aber ich habe das schon bei einem Update von 4.8 auf 4.9 erlebt. Daher habe ich auch die Fehlermeldung von dir falsch interpretiert und war der Meinung, es liege an doppelten Ids. Die Fehlermeldung von MySQL sagt, dass die Neusequenzierung zur Duplizierung des Schlüssels '1' führt.
...Nein, das CMS macht diese 0, weil Contenido einmal eine Zeit hatte, da in der DB wenig mit Autoincrement gearbeitet wurde und hier auch noch fälschlicherweise ein Default Wert eingetragen wurde, der in einer ID-Spate nun gar nichts zu suchen hat...
Früher gab es die Sequenztabelle, aus der die nächst höhere Id geholt wurde und da gab es aber auch Funktionen, die dafür gesorgt haben, dass die nächst höhere Id oder eine 1 geliefert wird. Ganz ausschließen lässt sich aber der Ursprung des Fehlers nicht.

Bisher ist mir so ein Fall nicht begegnet, hatte aber den Fall mit doppelten Ids. Es wäre interessant zu wissen, ob andere aus der Community auch bei einem Update von 4.8 auf 4.9 Probleme mit Ids hatten.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Faar » Fr 8. Mär 2019, 15:50

xmurrix hat geschrieben:
Fr 8. Mär 2019, 15:17
Hallo Faar,
Hallo Xmurrix :)
... aber ich habe das schon bei einem Update von 4.8 auf 4.9 erlebt.
Bei einer alten Einstellung, wo die Spalte nicht unique ist, ist das durchaus möglich.
Wenn man die Kardinalität mit Distinct der ID vergleicht, sollte das schnell heraus zu finden sein.

Code: Alles auswählen

SELECT count(`idsystemprop`), count(DISTINCT `idsystemprop`) FROM `con49_system_prop` WHERE 1 
Daher habe ich auch die Fehlermeldung von dir falsch interpretiert und war der Meinung, es liege an doppelten Ids. Die Fehlermeldung von MySQL sagt, dass die Neusequenzierung zur Duplizierung des Schlüssels '1' führt.
Ja, weil die Fehlermeldung auch doppelte ID erkennt, aber in dem Fall von woanders her führt. Am Ende ist die Meldung richtig, aber nicht die Ursache erkannt. Die Gleicht Meldung für zwei Paar Dinge.
Früher gab es die Sequenztabelle, aus der die nächst höhere Id geholt wurde und da gab es aber auch Funktionen, die dafür gesorgt haben, dass die nächst höhere Id oder eine 1 geliefert wird. Ganz ausschließen lässt sich aber der Ursprung des Fehlers nicht.
Der Ursprung des Fehlers dürfte dann aus dem default=0 her rühren, denn das trägt im Zweifel eine 0 ein.
Bisher ist mir so ein Fall nicht begegnet
Mir schon, aber bis jetzt hat auch nie ein Setup deswegen das Setup gestoppt, sondern lief halt durch und am Ende stand diese Meldung dann in der setup-Log Datei.
Es wäre interessant zu wissen, ob andere aus der Community auch bei einem Update von 4.8 auf 4.9 Probleme mit Ids hatten.
Auf jeden Fall.
Da kann man ja durchaus auch die alten Seutp-Log Dateien anschauen.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von xmurrix » Sa 16. Mär 2019, 00:27

Für dieses Problem wurde ein Ticket angelegt:
https://issues.contenido.org/browse/CON-2803
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Faar » Do 21. Mär 2019, 12:07

xmurrix hat geschrieben:
Sa 16. Mär 2019, 00:27
Für dieses Problem wurde ein Ticket angelegt:
https://issues.contenido.org/browse/CON-2803
Die Verarbeitung scheint in der functions.sql.php ab Zeile 213 zu beginnen:

Code: Alles auswählen

/** 
* Changes the primary key of the given table to an auto increment type 
* @param string $tableName 
*/
Dort darunter findet sich folgendes:

Code: Alles auswählen

$sqlAlter = $dbAlter->prepare('ALTER TABLE `%s` CHANGE `%s` `%s` INT(11) NOT NULL AUTO_INCREMENT', $tableName, $primaryKey, $primaryKey);
Autoincrement sortiert grundsätzlich die Tabellenzeilen neu und beginnt dann bei 1.
By default, the starting value for AUTO_INCREMENT is 1, and it will increment by 1 for each new record.
Also als DEFAULT ist AUTO_INCREMENT=1 eingestellt, wobei die Zahl aussagt, wo Autoincrement anfangen soll.
Folglich kann man auch AUTO_INCREMENT=0 schreiben, wenn die IDs bei 0 anfangen sollen.

Damit nicht alle betroffenen Tabellen bei 0 anfangen, müsste man zuvor wissen, ob es in der Spalte des PrimaryKey eine ID=0 gibt.
Dann könnte man schreiben, dass z.B. als Defaultwert $incStart=1 ist und nur wenn es eine ID=0 gibt, das $incStart=0 ist.
Durch die gezielte Abfrage nach einer 0 wird grundsätzlich der kleinste Wert gefunden, weil -1 nicht sein darf und somit <0 nicht geht.
Als Nebeneffekt sollte alles was mit 1 oder einer höheren Zahl beginnt, mit dem Defaultwert 1 beginnen.
Es kann durch DELETE oder SQL-Fehler sein, dass es weder 0 noch 1 gibt.
Darum wird nur nach 0 geprüft und ansonsten mit 1 begonnen.
Das führt zu folgender SQL:

Code: Alles auswählen

$sqlAlter = $dbAlter->prepare('ALTER TABLE `%s` CHANGE `%s` `%s` INT(11) NOT NULL AUTO_INCREMENT=`%s`', $tableName, $primaryKey, $primaryKey,$incStart);
Sind Probleme zu erwarten, wenn eine ID-Spalte mit 0 beginnt statt mit 1 ?
Zumindest bei der con_system_prop nicht, da diese ID gar nicht abgefragt wird, sondern die Werte über einen anderen Index ausgelesen werden.
Die Funktion betrifft aber grundsätzlich alle Tabellen, die ein Autoincrement bekommen sollten.
Weil Alter-Table-Autoincrement grundsätzlich neu sortiert und Lücken aufschließt, würde es zum Beispiel bei einer Tabelle die mit id=4 beginnt, weil vielleicht mal ein Fehler entstand oder mit DELETE gelöscht wurde, zu einem Aufrücken nach unten kommen, also aus der 4 würde eine 1 werden.
Insofern sollte es dann auch verträglich sein, wenn die Spalte mal mit 0 beginnt.
Problematisch würde es dann werden, wenn man immer bei ID=1 den ersten Eintrag erwarten würde.

Will man das ausgleichen und generell alle IDs immer bei 1 beginnen lassen, muss man doch die Tabelle neu sortieren in eine Zwischentabelle.
Ansonsten halte ich meinen Gedankengang oben für pragmatisch.
Vor allem, weil das Setup sonst angehalten wird.

Nebenbei: Wenn mit DELETE eine Zeile gelöscht wird, behält sich Mysql trotzdem die höchste Autoincrement Zahl bei und sortiert nicht mehr neu, wie bei Alter Table Autoincrement. Es entstehen dann "Lücken" in den fortlaufenden Nummern.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von xmurrix » Do 21. Mär 2019, 13:40

Hallo Faar,

danke für die Zusammenstellung.
...Sind Probleme zu erwarten, wenn eine ID-Spalte mit 0 beginnt statt mit 1 ?...
Wir müssen damit rechnen, dass der Core-Code und auch Module/Plugins Probleme bekommen werden, wenn wir Ids mit dem Wert 0 zulassen.

Fast überall befinden sich Bedingungen wie:

Code: Alles auswählen

if ($id) {
    // mach etwas...
}
Bei einer Id mit dem Wert 0 würde die Bedingung false liefern, was dazu führt, dass der Inhalt des if-Blocks nicht ausgeführt wird.

Daher bin ich dafür, dass das auto-increment Attribut weiterhin bei 1 beginnt und nicht bei 0. Außerdem muss man da auch noch den Fall berücksichtigen, dass der MySQL-Server die Einstellung "NO_AUTO_VALUE_ON_ZERO" hat, was keine 0 als auto-increment erlaubt.

Es ist vermutlich besser, vor dem Start des Updates, also während der Systemprüfung, auf etwaige Probleme in den Tabellen hin zu prüfen und ggf. den User darauf hinweisen, diese Probleme vorher zu lösen.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Horst1234
Beiträge: 366
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Horst1234 » Do 10. Okt 2019, 11:58

Ich habe das gleiche Problem bei einem Upgrade von 4.9.12 auf 4.10.0
Im setuplog.txt steht:
Unable to execute SQL statement:
ALTER TABLE `fws_stat_archive` CHANGE `idstatarch` `idstatarch` INT(11) NOT NULL AUTO_INCREMENT
Mysql Error: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY' (1062)
Kann ich diese Tabelle (stat_archive) vorher einfach leeren oder ist sie unbedingt erforderlich?
Gruß,
Horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Oldperl » Do 10. Okt 2019, 16:43

Servus Horst,
Horst1234 hat geschrieben:
Do 10. Okt 2019, 11:58
Kann ich diese Tabelle (stat_archive) vorher einfach leeren oder ist sie unbedingt erforderlich?
Diese Tabelle ist zum Archivieren der stats-Tabelle und wird monatlich per Cron befüllt. Falls Du die alten Statistiken nicht mehr benötigst, kannst Du sie jederzeit problemlos leeren.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Horst1234
Beiträge: 366
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Horst1234 » Fr 11. Okt 2019, 11:45

Danke, Ortwin, das hat geklappt. Ins Backend komm ich rein, aber das Frontend läuft nicht. PHP-Version: 7.3
Folgende Meldungen (sind recht viele) finde ich im errorlog:

Code: Alles auswählen

[11-Oct-2019 12:33:18 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:18 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:18 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:20 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:21 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:21 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:21 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:21 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:21 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:21 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:21 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:21 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:21 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:22 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:22 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:22 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:22 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:22 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:33:22 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:34:27 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:34:27 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:34:27 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:34:27 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:34:27 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:34:27 Europe/Berlin] PHP Warning:  Invalid argument supplied for foreach() in /usr/www/users/freieq/website/contenido/classes/class.session.php on line 226
[11-Oct-2019 12:38:07 Europe/Berlin] PHP Fatal error:  Uncaught cInvalidArgumentException: Empty user id in /usr/www/users/freieq/website/contenido/classes/contenido/class.user.property.php:93
Stack trace:
#0 /usr/www/users/freieq/website/contenido/classes/contenido/class.user.property.php(71): cApiUserPropertyCollection->setUserId(NULL)
#1 /usr/www/users/freieq/website/contenido/classes/contenido/class.user.php(1146): cApiUserPropertyCollection->__construct(NULL)
#2 /usr/www/users/freieq/website/contenido/classes/class.effective.setting.php(120): cApiUser->getUserProperties()
#3 /usr/www/users/freieq/website/contenido/classes/class.effective.setting.php(169): cEffectiveSetting::_loadSettings()
#4 /usr/www/users/freieq/website/contenido/includes/functions.general.php(924): cEffectiveSetting::get('encoding', 'file_encoding', 'UTF-8')
#5 /usr/www/users/freieq/website/contenido/classes/class.layout.handler.php(446): getEffectiveSetting('encoding', 'file_encoding', 'UTF-8')
#6 /usr/www/users/freieq/website/contenido/classes/code_generator/class.code.generator.standar in /usr/www/users/freieq/website/contenido/classes/contenido/class.user.property.php on line 93
[11-Oct-2019 12:40:53 Europe/Berlin] PHP Deprecated:  Function create_function() is deprecated in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 110
[11-Oct-2019 12:41:35 Europe/Berlin] PHP Deprecated:  Function create_function() is deprecated in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 110
[11-Oct-2019 12:41:46 Europe/Berlin] PHP Deprecated:  Function create_function() is deprecated in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 110
[11-Oct-2019 12:41:47 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 12:41:47 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 12:41:48 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 12:41:48 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 12:43:50 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:33) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 55
[11-Oct-2019 12:44:28 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:33) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 55
[11-Oct-2019 12:50:59 Europe/Berlin] PHP Fatal error:  Uncaught cInvalidArgumentException: Empty user id in /usr/www/users/freieq/website/contenido/classes/contenido/class.user.property.php:93
Stack trace:
#0 /usr/www/users/freieq/website/contenido/classes/contenido/class.user.property.php(71): cApiUserPropertyCollection->setUserId(NULL)
#1 /usr/www/users/freieq/website/contenido/classes/contenido/class.user.php(1146): cApiUserPropertyCollection->__construct(NULL)
#2 /usr/www/users/freieq/website/contenido/classes/class.effective.setting.php(120): cApiUser->getUserProperties()
#3 /usr/www/users/freieq/website/contenido/classes/class.effective.setting.php(169): cEffectiveSetting::_loadSettings()
#4 /usr/www/users/freieq/website/contenido/includes/functions.general.php(924): cEffectiveSetting::get('generator', 'basehref', 'true')
#5 /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(697): getEffectiveSetting('generator', 'basehref', 'true')
#6 /usr/www/users/freieq/website/cms/front_content.php(43): include('/usr/www/users/...')
#7  in /usr/www/users/freieq/website/contenido/classes/contenido/class.user.property.php on line 93
[11-Oct-2019 12:59:21 Europe/Berlin] PHP Deprecated:  Function create_function() is deprecated in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 110
[11-Oct-2019 12:59:27 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 55
[11-Oct-2019 12:59:42 Europe/Berlin] PHP Deprecated:  Function create_function() is deprecated in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 110
[11-Oct-2019 12:59:45 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:33) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 55
[11-Oct-2019 13:00:17 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/include.con_editcontent.php(523) : eval()'d code:23) in /usr/www/users/freieq/website/contenido/includes/include.con_editcontent.php(523) : eval()'d code on line 150
[11-Oct-2019 13:00:32 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 90
[11-Oct-2019 13:01:42 Europe/Berlin] PHP Warning:  Use of undefined constant pagination - assumed 'pagination' (this will throw an Error in a future version of PHP) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 111
[11-Oct-2019 13:01:42 Europe/Berlin] PHP Warning:  Use of undefined constant pagination - assumed 'pagination' (this will throw an Error in a future version of PHP) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 128
[11-Oct-2019 13:01:42 Europe/Berlin] PHP Deprecated:  Function create_function() is deprecated in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 157
[11-Oct-2019 13:01:42 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:43 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:43 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:44 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:44 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:44 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:47 Europe/Berlin] PHP Warning:  Use of undefined constant pagination - assumed 'pagination' (this will throw an Error in a future version of PHP) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 111
[11-Oct-2019 13:01:47 Europe/Berlin] PHP Warning:  Use of undefined constant pagination - assumed 'pagination' (this will throw an Error in a future version of PHP) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 128
[11-Oct-2019 13:01:47 Europe/Berlin] PHP Deprecated:  Function create_function() is deprecated in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 157
[11-Oct-2019 13:01:48 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:48 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:49 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:49 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:49 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:50 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:51 Europe/Berlin] PHP Warning:  Use of undefined constant pagination - assumed 'pagination' (this will throw an Error in a future version of PHP) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 111
[11-Oct-2019 13:01:51 Europe/Berlin] PHP Warning:  Use of undefined constant pagination - assumed 'pagination' (this will throw an Error in a future version of PHP) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 128
[11-Oct-2019 13:01:51 Europe/Berlin] PHP Deprecated:  Function create_function() is deprecated in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 157
[11-Oct-2019 13:01:52 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:52 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:53 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54
[11-Oct-2019 13:01:53 Europe/Berlin] PHP Fatal error:  Cannot redeclare getMetaData() (previously declared in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code:27) in /usr/www/users/freieq/website/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 54

Gruß, Horst
Zuletzt geändert von Oldperl am Fr 11. Okt 2019, 13:53, insgesamt 1-mal geändert.
Grund: Moderation: quote-Tag in code-Tag geändert für errorlog (OP)
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Oldperl » Fr 11. Okt 2019, 14:00

Hallo Horst,

die 4.10 läuft noch nicht fehlerfrei unter PHP 7.3. Auch sind einige dieser Fehler offensichtlich durch verwendete Module bedingt. Du musst also entsprechend alle eingesetzten Module prüfen und entweder durch aktuellere, falls vorhanden, ersetzen oder die Module entsprechend unter PHP 7.x um- bzw neu programmieren.

Das ist der Grund warum ich bei meinen Kunden meine ConLite für Updates von Contenido 4.6 bzw. 4.8 verwende. So komme ich ohne allzu großen (finanziellen) Aufwand zu einer unter PHP 7.3 lauffähigen Version.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von rethus » Mi 1. Jan 2020, 15:59

Is n Bug im Core.
Du könntest die class.session.php aus dem aktuellen Deveop ziehen, und meinen PR patchen: https://github.com/CONTENIDO/CONTENIDO/pull/121

Oder du gehst in deiner class.session.php hin und packst die eval-Abfrage in Zeile 226 in eine If-Abfrage.
Hier der gesamte geänderte Code des Case-Statements :

Code: Alles auswählen

case 'array':
                // $$var is an array. Enumerate the elements and serialize them.
                $str .= "\$$var = array(); ";
                if (is_array($var) || isset($_SESSION['backendcsession'])) {
                    eval("\$l = array(); foreach(\$$var as \$k => \$v) {\$l[] = array(\$k,gettype(\$k),\$v);}");
                }
                if (is_array($l) || isset($_SESSION['backendcsession'])) {
                    foreach ($l as $item) {
                        // Structural recursion
                        $this->_rSerialize($var . "['" . preg_replace("/([\\'])/", "\\\\1", $item[0]) . "']", $str);
                    }
                }
                break;
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Faar » Do 2. Jan 2020, 14:21

Hier fehlen echt die "Daumen nach oben" Smilies.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Setup ALTER TABLE Auto_increment Fehler #1062

Beitrag von Oldperl » Do 2. Jan 2020, 14:37

Servus,
rethus hat geschrieben:
Mi 1. Jan 2020, 15:59

Code: Alles auswählen

case 'array':
                // $$var is an array. Enumerate the elements and serialize them.
                $str .= "\$$var = array(); ";
                if (is_array($var) || isset($_SESSION['backendcsession'])) {
                    eval("\$l = array(); foreach(\$$var as \$k => \$v) {\$l[] = array(\$k,gettype(\$k),\$v);}");
                }
                if (is_array($l) || isset($_SESSION['backendcsession'])) {
                    foreach ($l as $item) {
                        // Structural recursion
                        $this->_rSerialize($var . "['" . preg_replace("/([\\'])/", "\\\\1", $item[0]) . "']", $str);
                    }
                }
                break;
Sorry, aber das erscheint mir nicht korrekt zu sein. In $var steht wohl nur der Name der Variablen, die dann per eval ($$var) erst zugänglich gemacht wird. Daher bringt eine Prüfung von $var mit is_array relativ wenig, denn dort sollte in der Regel wohl ein String stehen. Daher auch die Zeile

Code: Alles auswählen

// Determine the type of $$var
        eval("\$t = gettype(\$$var);");
um auch wirklich den Variablentyp der eigentlichen Variable zu ermitteln.
Und auch das

Code: Alles auswählen

|| isset($_SESSION['backendcsession'])
macht wenig Sinn, da damit die Prüfung komplett ausgehebelt wird.

Grundsätzlich würde ich eine Prüfung mit im ersten eval-Befehl mit einbauen, womit man sich beide if-Schleifen sparen könnte, da nur die einzige wirklich zu prüfende Variable $$var geprüft würde. Die zweite Prüfung für $l könnte entfallen, da diese Variable sowieso immer ein Array ist

Code: Alles auswählen

eval("\$l = array(); ...
Quelle: Difference Between $var and $$var in PHP

Daher würde ich den Pull Request unter https://github.com/CONTENIDO/CONTENIDO/pull/121 auch so nicht in den Core übernehmen.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Antworten