C'est avec le plugin favoris,
un peu personnalisé mais ça ne doit pas impacter le sujet.
Globalement ça se passe comme ça en 3 lignes successives (et donc dans un même hit) :
1) on teste et il n'y a pas de favoris pour un couple (id_auteur, id_objet)
2) on enregistre ce favori
3) Après enregistrement, il y a *plusieurs* favoris avec ce couple
J'imagine que ça se passe quand l'utilisateur doubleclique "Mettre en favori" :
il y a alors 2 process qui voient simultanément que ce favori n'existe pas,
et qui l'ajoutent identiquement à la table.
Y a t il une autre explication ?
Et comment éviter cela ?
Dans spip_favoris il y a un index
auteur_objet BTREE (id_auteur, id_objet, objet)
Serait ce possible de le rendre UNIQUE ?
Dans le cas de "favoris" là il n'y a pas de conséquences graves
mais c'est inquiétant de pas maîtriser les enregistrements dans la table
... surtout pour des cas similaires sur d'autres tables plus critiques.
Le cas "favoris" manifeste ça de manière assez simple
mais dans les autres cas, il n'y a pas forcément une clé multiple ;
et indépendamment du symptôme visible = "création d'un double enregistrement" dans la table MYSQL,
il y a tout le code qui se déroule en double sans détecter cette situation !
-- ce qui peut avoir des effets pas désirables du tout --
Le cas "favoris" manifeste ça de manière assez simple
Dans le cas "favoris", le code du plugin ne pourrait pas déclarer UNIQUE la clé triple
(id_favori objet id_objet) car il y a aussi un qualificateur `categorie`.
Éventuellement ce pourrait être (id_favori objet id_objet categorie)...
mais dans les autres cas, il n'y a pas forcément une clé multiple ;
et indépendamment du symptôme visible = "création d'un double enregistrement" dans la table MYSQL,
il y a tout le code qui se déroule en double sans détecter cette situation !
-- ce qui peut avoir des effets pas désirables du tout --
Si l'enregistrement double est du à un doubleclic on peut aussi désactiver le lien par javascript après clic.
C'est préventif, mais inopérant dans certains cas.
Il serait mieux de blinder le code php.