[Spip] Balise #INFO_X si clé primaire multiple

Merci à tous pour vos messages et suggestions. Comme toujours, il y a plusieurs façons de résoudre un problème et l’aide de plusieurs personnes est appréciable.
Voici à l’heure actuelle:

  • concernant la balise #VAL : après quelques tentatives d’écritures variées j’obtiens toujours un message d’erreur dans le debug de SPIP, qui pourtant semble bien reporter la requête souhaitée :

__**Erreur SQL 1064**__
**You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‹  › at line 3 SELECT motif FROM spip_illegal_articles WHERE id_article=#ID_ARTICLE**
``avec la syntaxe suivante (qui donc, est encore erronée):

[(#VAL{‹ motif ›}|sql_getfetsel{‹ spip_illegal_articles ›,#LISTE{‹ id_article=#ID_ARTICLE ›}})]

  • concernant le filtre php : c’est exact, mais mes compétences actuelles sont en en-deçà du langage PHP pour le moment… d’où ma tentative d’utiliser au maximum les balises SPIP.

  • en effet, il s’agit d’une table déclarée comme table de liens, d’où le fait d’avoir une clé primaire multiple

  • j’ai fini par obtenir le résultat voulu en utilisant une autre technique, celle d’une boucle DATA avec requête SQL (après recherche complémentaire dans les diverses documentations) et ceci fonctionne :

<BOUCLE_ma_requete(DATA){source sql, SELECT * FROM spip_illegal_articles WHERE id_article=#ID_ARTICLE}>

#MOTIF

J’aurais bien aimé pouvoir corriger la syntaxe pour utiliser #VAL et le filtre sql_getfetsel comme suggéré, juste pour apprendre, donc si jamais vous identifiez le problème, je suis preneuse.

Merci encore en tous cas.

Le 05/05/2019 à 14:07, Naema a écrit :

Merci à tous pour vos messages et suggestions. Comme toujours, il y a plusieurs façons de résoudre un problème et l'aide de plusieurs personnes est appréciable.
Voici à l'heure actuelle:
- concernant la balise #VAL : après quelques tentatives d'écritures variées j'obtiens toujours un message d'erreur dans le debug de SPIP, qui pourtant semble bien reporter la requête souhaitée :
**Erreur SQL 1064*
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 SELECT motif FROM spip_illegal_articles WHERE id_article=#ID_ARTICLE*
avec la syntaxe suivante (qui donc, est encore erronée):
[(#VAL{'motif'}|sql_getfetsel{'spip_illegal_articles',#LISTE{'id_article=#ID_ARTICLE'}})]
- concernant le filtre php : c'est exact, mais mes compétences actuelles sont en en-deçà du langage PHP pour le moment... d'où ma tentative d'utiliser au maximum les balises SPIP.
- en effet, il s'agit d'une table déclarée comme table de liens, d'où le fait d'avoir une clé primaire multiple

- j'ai fini par obtenir le résultat voulu en utilisant une autre technique, celle d'une boucle DATA avec requête SQL (après recherche complémentaire dans les diverses documentations) et ceci fonctionne :
<BOUCLE_ma_requete(DATA){source sql, SELECT * FROM spip_illegal_articles WHERE id_article=#ID_ARTICLE}>
<p>#MOTIF</p>
</BOUCLE_ma_requete>

J'aurais bien aimé pouvoir corriger la syntaxe pour utiliser #VAL et le filtre sql_getfetsel comme suggéré, juste pour apprendre, donc si jamais vous identifiez le problème, je suis preneuse.

les messages d'erreur servent à comprendre les erreurs.
là c'est **Erreur SQL 1064* You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 SELECT motif FROM spip_illegal_articles WHERE id_article=#ID_ARTICLE*
Elle donne in extenso la requête mysql foireuse :
« SELECT motif FROM spip_illegal_articles WHERE id_article=#ID_ARTICLE ».
Dans cette requête, tu peux voir qu'il reste un #ID_ARTICLE,
et qui est incompréhensible pour MYSQL.
Si SPIP ne l'a pas compilé, c'est probablement que l'expression est trop complexe.
Donc simplifie.
Là, pas la peine d'utiliser #LISTE puisqu'il n'y a qu'un seul critère.
Inutile, par ailleurs, de mettre des quotes si yen a pas besoin.
Donc pour mettre les chances de ton côté :
#SET{where,id_article=#ID_ARTICLE}
[(#VAL{motif}|sql_getfetsel{spip_illegal_articles,#GET{where}})]

Ceci dit ça précisément n'a rien d'une sélection par clés primaires multiples.
Et autant faire une boucle simple :
<BOUCLE_motif(ILLEGAL_ARTICLES){id_article}>#MOTIF</BOUCLE_motif>
Ou y accéder par #INFO_MOTIF.

bonne chance
JL