Re: Création de balise - vérification sur champ_sql - existence d'une valeur

Vincent Callies <[email protected]>
Newsgroups gmane.comp.web.spip.devel
Message-ID <CADbHwBDQ2nK396_tbhZo28Z2HBFn3HgVGB-0rizZ7fJwTbo9Fw@mail.gmail.com>
Merci pour cette très claire explication !

Le mar. 23 févr. 2021 à 20:44, Matthieu Marcillaud <[email protected]> a
écrit :

> Le 23/02/2021 à 18:02, Vincent Callies a écrit :
> > Bonjour les écureuils,
>
> [...]
>
> > Première rédaction dysfonctionnelle : Que le nom d'usage soit indiqué
> > dans la table ou non, le nom est considéré comme existant.
> >
> > function balise_LE_NOM ($p) {
> > $_nom = (champ_sql('nom_usage', $p)) ? champ_sql('nom_usage', $p) :
> > champ_sql('nom_famille', $p) ;
> > $p->code = "$_nom";
> > return $p;
> > }
>
> En fait tu pourrais regarder en mode debug par exemple le code PHP que
> te génère cette balise ; ça t'aiderait à comprendre.
>
> Ce qui ce passe c'est que $p->code génère un code valide PHP. La
> fonction "champ_sql()" retourne du code PHP (comment obtenir "nom_usage"
> dans la ligne de bdd). Pas la valeur elle-même dans la bdd, inconnue à
> ce stade.
>
> Du coup, tester "champ_sql('X', $p)) ? A : B" comme ici retournera
> toujours A. car pour peu que le champ X existe, ça retourne du code PHP.
> Donc du contenu (true) ? A : B.
>
> Ce que tu veux tester c'est le résultat de l'exécution de ce code PHP
> (dans $p->code), comme tu fais dans la seconde fonction.
>
> Tu aurais pu écrire aussi (je n'ai pas testé là) :
>
> $_nom_usage = champ_sql('nom_usage', $p);
> $_nom_famille = champ_sql('nom_famille', $p);
> $p->code = "(\$a = $_nom_usage) ? \$a : $_nom_famille";
>
> Tu affectes (affecteras) le résultat (de l'éxécution du code php
> $_nom_usage) dans $a (sa vrai valeur en bdd pour le coup) ; s'il a du
> contenu, tu l'affiches, sinon tu utilises le nom de famille (en
> exécutant son code pour l'obtenir).
>
> De la sorte l'instruction pour obtenir le nom d'usage n'est exécuté
> qu'une fois au lieu de deux.
>
>
> MM.
>
> >
> > Seconde rédaction opérationnelle :
> >
> > function balise_LE_NOM ($p) {
> > // chopper les valeurs des champ sql dans la boucle
> > $_nom_usage = champ_sql('nom_usage', $p) ;
> > $_nom_famille = champ_sql('nom_famille', $p) ;
> > $_nom = "(strlen($_nom_usage))
> > ? $_nom_usage
> > : $_nom_famille";
> > $p->code = "$_nom";
> > return $p;
> > }
> >
> > Merci par avance pour vos lumières. Et accessoirement dois-je protéger
> > l'écriture de sortie d'un nom qui serait avec une apostrophe ou un
> > caractère spécial ou bien SPIP fait cela tout seul ?
> >
> > Thrax
> >
>
> _______________________________________________
> liste: https://listes.rezo.net/mailman/listinfo/spip-dev
> doc: https://www.spip.net/
> dev: https://core.spip.net/
> irc://irc.freenode.net/spip
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.