abouchereau / easyamap

Logiciel de commandes pour les AMAP
Other
4 stars 5 forks source link

Erreur 500 à la création des comptes #6

Closed z3bra closed 4 years ago

z3bra commented 4 years ago

J'héberge moi-même easyamap (OpenBSD 6.7, php 7.3, nginx 1.16.1), et j'obtiens une erreur 500 à la création/modification des comptes utilisateurs.

J'ai cherché à obtenir des logs, mais le répertoire var/log reste vide. Comment puis-je activer les logs de l'application pour comprendre d'où provient cette erreur ?

abouchereau commented 4 years ago

Bonjour,

Tu peux copier le fichier monolog.yaml prséent dans config/packages/dev/ ou config/packages/prod/ dans config/packages/[MON_ENVIRONNEMENT]/

Cordialement,

z3bra commented 4 years ago

Génial, j'ai des logs ! Merci !

Concernant le problème de base, il provient de la contrainte d'unicité des utilisateurs sur le nom de famille:

[2020-09-11 08:23:33] request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\UniqueConstraintViolationException: "An exception occurred while executing 'UPDATE user SET firstname = ?, lastname = ?, tel1 = ? WHERE id_user = ?' with params ["[Prénom]", "[Nom]", "[REDACTED]", 75]:  SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[Nom]' for key 'lastname'" at /htdocs/easyamap/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php line 55 {"exception":"[object] (Doctrine\\DBAL\\Exception\\UniqueConstraintViolationException(code: 0): An exception occurred while executing 'UPDATE user SET firstname = ?, lastname = ?, tel1 = ? WHERE id_user = ?' with params [\"[Prénom]\", \"[Nom]\", \"[REDACTED]\", 75]:\n\nSQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[Nom]' for key 'lastname' at /htdocs/easyamap/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:55, Doctrine\\DBAL\\Driver\\PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '
[Nom]' for key 'lastname' at /htdocs/easyamap/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:123, PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[Nom]' for key 'lastname' at /htdocs/easyamap/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:121)"} []

Je pensais que la contrainte d'unicité se faisait sur le champs "username", mais apparement non. Nous avons en effet deux adhérents avec le même nom de famille. Pour l'instant nous avons pu contourner le problème en jouant avec les majuscules.

Je pense que les champs username ou email seraient plus appropriés pour cette contrainte.

abouchereau commented 4 years ago

La contrainte d'unicité se fait effectivement sur username. Il faut effectivement enlever celle de lastname en base de données (reliquat d'une ancienne version) Il faudra que je le modifie dans le script SQL.

z3bra commented 4 years ago

Ah, étrange. J'ai pourtant utilisé la dernière version du script SQL, et ça m'a mis la contrainte sur "lastname":

MariaDB [easyamap]> desc user;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id_user         | int(11)      | NO   | PRI | NULL    | auto_increment |
| email           | varchar(255) | YES  |     | NULL    |                |
| username        | varchar(255) | YES  |     | NULL    |                |
| firstname       | varchar(255) | YES  |     | NULL    |                |
| lastname        | varchar(255) | NO   | UNI | NULL    |                |
| password        | varchar(255) | YES  |     | NULL    |                |
| roles           | varchar(255) | YES  |     | NULL    |                |
| is_adherent     | int(1)       | NO   |     | 1       |                |
| is_admin        | tinyint(1)   | YES  |     | 0       |                |
| is_active       | tinyint(1)   | YES  |     | 1       |                |
| created_at      | date         | YES  |     | NULL    |                |
| last_connection | date         | YES  |     | NULL    |                |
| tel1            | varchar(255) | YES  |     | NULL    |                |
| tel2            | varchar(255) | YES  |     | NULL    |                |
| address         | varchar(255) | YES  |     | NULL    |                |
| zipcode         | varchar(5)   | YES  |     | NULL    |                |
| town            | varchar(255) | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+
17 rows in set (0.011 sec)

Je modifie ça du coup. Pour référence:

ALTER TABLE user DROP INDEX lastname;
ALTER TABLE user MODIFY username varchar(255) NOT NULL;
ALTER TABLE user ADD UNIQUE INDEX username (username);