Anomalie #1411
ferméBug dans PdfContribution::__construct
100%
Description
Bonjour,
Il y a un problème à la ligne 81 :
$member = new Adherent($zdb, $this->contrib->member);
$this->contrib->member contient bien l'id de l'adhérent, mais il est de type string et non int
du coup Adherent::__construct ne charge pas l'adhérent
if ($args == null || is_int($args)) {
if (is_int($args) && $args > 0) {
$this->load($args); <----- pas executé
} else {
Si je cast en int :
$member = new Adherent($zdb, (int) $this->contrib->member);
ça fonctionne, mais n'y a t-il pas un autre problème ?
Je suis en Php 7.2.24.
Manuel
Mis à jour par Johan Cwiklinski il y a plus de 4 ans
Ce devrait bien être un int (peut être même directement dans $this->contrib
à vrai dire), mais caster est généralement la bonne solution.
Je ne vois pas d'autre problème ici ; tu pensais à quelque chose de particulier ?
Mis à jour par Manuel Her il y a plus de 4 ans
Après analyse, le problème viendrait des variables $_POST récupérées lors de :
$post = $request->getParsedBody();
dans
$app->post(
'/contribution/{type:fee|donation}/{action:add|edit}[/{id:\d+}]',
lors de l'appel de check(), id_adh est de type string (comme toutes les variables $_POST me semble t-il)
$valid = $contrib->check($post, $required, $disabled);
le cast devrait être fait rapidement; ligne 397 de Contribution.php
case Adherent::PK:
if ($value != '') {
$this->_member = (int) $value;
}
break;
J'ai retiré le cast dans PdfContribution et ça fonctionne.
Le fonctionnement de is_int($args) (utilisé dans le constructeur de la classe Adherent) doit être différent suivant les versions de php?
Manuel
Mis à jour par Johan Cwiklinski il y a plus de 4 ans
- Catégorie mis à Core
- Statut changé de Nouveau à Résolu
- Assigné à mis à Manuel Her
- Version cible mis à 0.9.4
- % réalisé changé de 0 à 100
Manuel Her a écrit :
Après analyse, le problème viendrait des variables $_POST récupérées lors de :
$post = $request->getParsedBody();
dans
$app->post(
'/contribution/{type:fee|donation}/{action:add|edit}[/{id:\d+}]',lors de l'appel de check(), id_adh est de type string (comme toutes les variables $_POST me semble t-il)
Ouaip, il n'y a pas de type par défaut, tout est en string.
$valid = $contrib->check($post, $required, $disabled);
le cast devrait être fait rapidement; ligne 397 de Contribution.php
case Adherent::PK:
if ($value != '') {
$this->_member = (int) $value;
}
break;J'ai retiré le cast dans PdfContribution et ça fonctionne.
Nickel :)
Le fonctionnement de is_int($args) (utilisé dans le constructeur de la classe Adherent) doit être différent suivant les versions de php?
Non, is_int
a toujours eu un fonctionnement identique.
J'intègre ton correctif rapidement, merci.