Skip to content

Fatale Unsupported operand types: string * float #15

Description

@tcharlss

Config

  • PHP 8.4.21
  • SPIP 4.4.13
  • Abos 4.3.2

Erreur

Lors de l'ajout d'un abonnement à un auteur dans le backoffice via le bouton "abonner", erreur fatale :

[Mon May 18 15:28:26.967684 2026] [proxy_fcgi:error] [pid 2283912:tid 2283955] [client 86.68.127.82:0] AH01071:
Got error 'PHP message: PHP Fatal error:  Uncaught TypeError: Unsupported operand types: string * float
in plugins/abos/prix/abooffre.php:13
Stack trace:
#0 plugins/abos/abos/abonner.php(85): prix_abooffre_dist()
#1 plugins/abos/formulaires/distribuer_abonnement.php(203): abos_abonner_dist()
#2 ecrire/public/aiguiller.php(296): formulaires_distribuer_abonnement_traiter()
#3 ecrire/index.php(72): traiter_formulaires_dynamiques()
#4 {main}
  thrown in plugins/abos/prix/abooffre.php on line 13', referer: https://xxx.com/ecrire/?exec=auteur&id_auteur=199749

Pour reproduire

  1. Créer une offre d'abonnement :
    • Prix HT 1ère écheance : vide
    • Prix HT renouvellement (si différent) : vide
    • taxe : 0
  2. Sur la fiche d'un auteur, cliquer sur Abonner, et choisir cette offre d'abonnement : patatra

Diagnostic

Dans la fonction de prix TTC d'une offre, on se retrouve avec ces valeurs :

  • $prix : (string) ''
  • $taxe : (double) 0.0

Et donc la ligne $prix += $prix * $taxe; provoque l'erreur

Normalement l'API de prix est censée éviter ce genre de mélange, mais là elle est pas implémentée et utilisée de façon kosher.

  • Il faudrait une fonction pour le prix ht, et y déplacer la logique de abos_abonner_dist()
  • Il faudrait une fonction pour la taxe
  • Et pour les appels, toujours faire appel à l'API et non pas aux fonctions personnalisées pour tel objet

En patch rapide je propose de simplement caster la valeur de $prix_ht dans prix_abooffre_dist() (sans typer l'argument car ça obligerait à vérifier tous les appelants)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions