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 >