Closed biclighter81 closed 6 months ago
Moin!
dienstplan-apotheke-0.10.0 ist schon recht alt. Das ist mein Stand von November 2017. Ich habe den aktuellen Stand von vor 11 Tagen mal in ein Release gepackt. Magst du die 11 einmal herunterladen, und schauen, ob das Problem weiter besteht? https://github.com/MaMaKow/dienstplan-apotheke/releases
Ich habe den Installer lange nicht angefasst. Den müsste ich in den nächsten Wochen noch mal auf die To-Test-Liste schieben.
Wenn es mit der 11 nicht klappt, würde ich es gerne einmal selbst mit deiner Software probieren. Welches Betriebssystem nutzt du? Welche Version von nginx und welche php-Version?
Liebe Grüße,
Martin
Erst mal vielen Dank für die Antwort. :) Mit der 11 bekomme ich einen 500 internal server error... Der webserver läuft über plesk auf debian 9 mit der 7.0.30 php version und der nginx version 1.13.8. Liebe grüße, Moritz
OK, nginx liest offensichtlich keine .htaccess Dateien. Daran kann es also nicht liegen. Ich werde heute Nacht Mal sehen, ob ich einen nginx 1.3 bauen kann und ob der Fehler reproduziert.
Vielen Dank... Kannst du mir denn ein besonderes php envoirment empfehlen?
Ich hab jetzt nginx nochmal mit der gleichen Version aufgesetzt und jetzt klappt es. Allerdings hab ich jetzt ein anderes Problem... Wenn ich meine Datenbank Daten eingebe und dann zur install_page_admin.php bekomme ich den Fehler Error while trying to create administrative user.
Hast du eine Idee was das Problem ist? Die Datenbank ist ganz normal so erreichbar. (10.1.26-MariaDB-0+deb9u1 - Debian 9.1)
Hmm, in nginx muss ich mich erst einmal einarbeiten. Ich werde nach einigem installieren und konfigurieren mit Error code: SSL_ERROR_RX_RECORD_TOO_LONG begrüßt.
Da fehlen wahrscheinlich einfach ein paar Zertifikate am rechten Platz.
Die Fehlermeldung entsteht beim Anlegen eines Nutzers, der sich in den Dienstplan einloggen kann:
$statement = $this->pdo->prepare("INSERT INTO"
. " users (user_name, employee_id, password, email, status)"
. " VALUES (:user_name, :employee_id, :password, :email, 'active')");
$result = $statement->execute(array(
'user_name' => $this->Config["admin"]["user_name"],
'employee_id' => $this->Config["admin"]["employee_id"],
'password' => $password_hash,
'email' => $this->Config["admin"]["email"],
'status' => 'active',
));
if (!$result) {
/*
* We were not able to create the administrative user.
*/
$this->Error_message[] = gettext("Error while trying to create administrative user.");
return FALSE;
}
Die Tabelle hat das folgende Muster:
CREATE` TABLE IF NOT EXISTS `users` (
`employee_id` tinyint(3) unsigned NOT NULL,
`user_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
`password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`status` set('deleted','blocked','inactive','active') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'inactive',
`failed_login_attempts` tinyint(3) unsigned NOT NULL DEFAULT '0',
`failed_login_attempt_time` timestamp NULL DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`employee_id`),
UNIQUE KEY `user_name` (`user_name`),
UNIQUE KEY `email` (`email`),
CONSTRAINT `users_ibfk_1` FOREIGN KEY (`employee_id`) REFERENCES `employees` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Wenn ich mir das so ansehe, könnte das Problem bei der Constraint liegen:
CONSTRAINT
users_ibfk_1FOREIGN KEY (
employee_id) REFERENCES
employees(
id) ON DELETE CASCADE ON UPDATE CASCADE
Auf einem frischen Plan existiert noch kein Mitarbeiter. Er verlangt aber, dass zu jedem Benutzer auch ein Mitarbeiter existiert. (Das ist später sinnvoll, hier aber schwierig.)
Hast du direkten Zugriff auf die SQL Datenbank? Als workaraound könntest du den folgenden Befehl anwenden:
INSERT INTO `Apotheke`.`employees` (`id`, `last_name`, `first_name`, `profession`, `working_hours`, `working_week_hours`, `holidays`, `lunch_break_minutes`, `goods_receipt`, `compounding`, `branch`, `start_of_employment`, `end_of_employment`)
VALUES ('23', 'Becker', 'Moritz', 'Apotheker', '40', '40', '28', '30', '0', '0', '1', NULL, NULL);
Wobei du die VALUES anpassen kannst.
Ich habe jetzt gerade mal die Tabelle manuell über mysql workbench versucht zu erstellen aber ich bekomme den Fehler (Error Code: 1005. Can't create table apotheke
.users
(errno: 150 "Foreign key constraint is incorrectly formed")
PS: Die Tabelle hat sich nicht automatisch erstellt.
Liebe Grüße
Was ergeben die beiden Befehle:
SHOW CREATE TABLE `apotheke`.`employees`
und
SHOW CREATE TABLE `apotheke`.`users`
Zu jeder Datei in /src/sql/ sollte eine Tabelle (oder ein Tigger) in der Datenbank existieren.
Wenn nicht, gibt es ein Problem mit setup_mysql_database_tables()
, aufgerufen von /src/php/pages/install_page_database.php
Bei beiden Abfragen kommt zurück, dass sie nicht existieren. Aber auch manuell kann ich sie wie ich bereits geschrieben habe nicht erstellen. Gibt es irgendeine Art von log? Über die Entwickler-Konsole sieht man leider nichts.
Liebe Grüße und danke...
Das Programm schreibt einige Fehler in die Datei /error.log
Dort finden sich schwerwiegende PHP-Fehler und MYSQL-Fehler, aber auch ein paar spezifische Fehler des Programms selbst.
Ich habe mit jetzt mal den log angesehen...
PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /var/www/vhosts/DOMAIN/httpdocs/src/php/classes/class.install.php on line 255
// Hierbei ist mir aufgefallen das am Ende des Arrays ein Komma steht. Ich weiß aber nicht ob das ein error auslöst (ich hab es weggenommen und es kam die gleiche Meldung, wenn ich versucht habe den Benutzer zu erstellen)
und
PHP Warning: Invalid argument supplied for foreach() in /var/www/vhosts/DOMAIN/httpdocs/src/php/classes/class.install.php on line 393 // Hier ist nur eine leere foreach schleife
Hast du noch andere Ideen? Oder kann das vielleicht auch mit der Mysql Version zusammenhängen? Denn ich konnte das Tabellen Schema auch manuell nicht ohne Fehler anwenden.
249: gibt folgende Parameter vor: :user_name, :employee_id, :password, :email, 'active' 'active' ist der Status. Der ist bereits fest vorgegeben.
Zeile 255 ('status' => 'active',) ist damit überflüssig. Das Komma am Ende wird von PHP ignoriert. Aber die Zeile 255 muss raus.
Der foreach-Loop auf Zeile 393 ist nicht sinnvoll, aber auch nicht schädlich. Seine Aufgabe wird durch $this->fancy_implode() in den darauf folgenden Zeilen erledigt. Ich habe mal beides (255, 393-395) gelöscht.
Existieren denn jetzt irgendwelche Tabellen in der Datenbank bei dir?
Jetzt bin ich einen Schritt weiter. Die gesamten Tabellen haben sich erstellt und ich habe auch die status line und die leere foreach Schleife gelöscht. In der error.log wird jetzt auch nichts mehr geschrieben. Aber es kommt immer noch der Fehler: Error while trying to create administrative user.
Darauf hin habe ich gerade mal versucht einen Benutzer manuell zu erstellen. Dabei kommt das:
15:41:16 INSERT INTO
apotheke.
users(
employee_id,
user_name,
email,
password) VALUES ('1', 'admin', 'EMAIL VON MIR', 'PASSWORT') 1452: Cannot add or update a child row: a foreign key constraint fails (
apotheke.
users, CONSTRAINT
users_ibfk_1FOREIGN KEY (
employee_id) REFERENCES
employees(
id) ON DELETE CASCADE ON UPDATE CASCADE)
Aber immerhin werden die Tabellen jetzt erstellt...
Ich arbeite mich gerade durch den gesamten Installations-Prozess durch. Das habe ich mir alles vor Monaten zuletzt angesehen. Die Installation ist an vielen Stellen total kaputt. Das ist mir beim Testen aber nie aufgefallen, weil ich meine neuen Updates immer auf dem bereits laufenden Test-Server ausprobiere.
Jetzt bin ich gerade so weit, dass die Installation so weit läuft, dass ich bis zur gefüllten config.php komme. Und jetzt habe ich offensichtlich eine redirect-Falle gebaut.
Fehler: Umleitungsfehler
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.
Mal sehen, ob ich das heute Nacht noch reparieren kann.
Ich musst manuell einen Mitarbeiter erstellen und dann dem eine Apotheke zuweisen. Danach konnte ich bei der Installation die ID des Mitarbeiters angeben und dann hat es geklappt. Dafür musste ich aber auch noch apache bei Plesk deaktivieren (normalerweise arbeiten die als proxy zusammen). Dann hat auch das gesamte System so funktioniert wie ich es mit vorgestellt habe. Ich muss erst mal vielen vielen Dank sagen. Dafür das du mir geholfen hast und generell ein derartig starkes Tool opensource bereitstellst. Jetzt kommt das große aber... Ich hab mir gerade aus versehen das gesamt System zerschossen. Ich glaube aber das ich das schon wieder hinbekommen werde. Auch wenn du mit Sicherheit genug zu tun hast, habe ich jetzt ein paar Ideen für dich. Viel einfacher wäre es für Leute die auf dein Projekt stoßen, wenn sie wenigstens einen kleinen Leitfaden haben. Wenn du dazu keine Zeit hast könnte ich dir so etwas auch mal in geraumer Zukunft anfertigen. Und bei der Installation müsste vor der User-Erstellung eine Mitarbeiter-Erstellung kommen. Sonst kann ich mich nur bedanken.
Liebe Grüße
Moritz
Hab jetzt soweit alles wieder hinbekommen. Aber nur bei der Wochenansicht kommt das:
Bei der Kommunikation mit der Datenbank trat ein Fehler auf. Bitte beachten Sie das Fehlerprotokoll für weitere Details!
Hattest du das schon mal? Und gibt es da noch eine anderen Log als den error.log?
Mein aktueller Stand der Korrekturen: https://github.com/MaMaKow/dienstplan-apotheke/commit/a25bc090acc7c1667aa194c06118e047228051b6
Der Fehler sollte auch in der error.log auftauchen. Tut er jedenfalls bei mir. Das Problem ist, dass niemand für die Rezeptur eingeteilt ist. Er sucht jetzt einen Mitarbeiter, der die Befähigung Rezeptur besitzt. Er findet niemanden. Statt das zu akzeptieren, versucht er NULL einzutragen. Darauf reagiert die Datenbank allergisch.
Vielleicht hilft es, wenn du bei deinem Mitarbeiter die beiden Fähigkeiten setzt: in der Ansicht src/php/pages/human-resource-management.php Beruf: Apotheker Fähigkeiten: Wareneingang: x Rezeptur: x
Danke das war's :) Bei mir läuft jetzt alles wie es soll. Wenn ich noch irgendwo bei helfen kann dann sag mir das einfach (z.B. Testen, etc.)
Guten Abend
Es gibt bestimmt noch ein paar weitere Fehler. Es vergeht kein Tag, an dem ich keinen finde...
Wichtig neben Fehlern wären für mich WTF-Momente, wenn also für dich unklar ist, was ich mir dabei wohl gedacht habe. Für mich selbst ist das immer klar.
Gute Nacht!
PS: https://github.com/MaMaKow/dienstplan-apotheke/blob/documentation/docs/documentation.pdf Dokumentation ist noch ein Stiefkind. Aber wenn ich direkt auf Arbeit Zeit habe, setze ich mich da ab und an daran.
Hallo Herr Mandelkow, es sind nun 6 Jahre vergangen seit dem ich den APO Dienstplan als Schüler aufgesetzt habe. Ich verwende ihn zwar nicht mehr aber bin begeistert, dass Sie ihn immer noch weiterentwickeln und veröffentlichen. Durch die Auseinandersetzung mit Ihrem Quellcode habe ich viel gelernt. Mittlerweile stehe ich kurz vor dem Abschluss meines Informatikstudiums. Danke und Grüße, Moritz
Hallo Moritz,
vielen Dank für deine Nachricht und die netten Worte! Es freut mich sehr zu hören, dass du durch die Arbeit mit meinem Programm so viel gelernt hast. Es ist immer schön zu wissen, dass Projekte, die man gestartet hat, anderen geholfen haben.
Herzlichen Glückwunsch zu deinem bevorstehenden Abschluss im Informatikstudium! Das ist eine großartige Leistung, und ich wünsche dir viel Erfolg auf deinem weiteren Weg.
Ich selbst habe in diesem Projekt meine ersten Schritte in PHP gemacht. Es ist mein zweiter Versuch eine Datenbank aufzusetzen. Ich habe gelernt wie man mit Selenium (in Java) Tests bauen kann. Und inzwischen habe ich auch ein Experiment mit einer Android App begonnen.
Es ist für mich ein Weg zur Entspannung am Abend "Recreational Programming". Das Gehirn schaltet den Alltag ab und ist in einer Welt, die nur aus Logik besteht.
Open Source ist für mich schon immer wichtig gewesen. Ich bin früh (etwa mit 14 Jahren) zu Linux gekommen und administriere bis heute mit Freude Linux Server.
Liebe Grüße
Martin
Moin zusammen, welche Schritte muss man gehen um die Applikation zu installieren? Ich habe die dienstplan-apotheke-0.10.0 in meinen nginx httpdocs ordner gepackt und dem www-data user die Rechte gegeben. Wenn ich jetzt die index.php aufrufe werde ich automatisch weiter auf die tag-out.php geleitet, die sagt das die Applikation installiert werden muss. Wenn ich dann über den Link auf die install.php Seite gehe, wird kein Inhalt angezeigt sondern nur eine leere Seite. Muss schon vorher etwas konfiguriert werden oder wie muss ich verfahren? Ich hoffe jemand kann mir helfen. Mit freundlichen Grüßen, Moritz