Categories > TinyButStrong general (FR) >

[fr] Clone block et apostrophe

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: TwoD
Date: 2003-07-16
Time: 11:16

[fr] Clone block et apostrophe

Bonjour\r\n\r\nJ\'ai le template html suivant:\r\n
\r\n<table>\r\n<tr>\r\n<td>\r\nserie: [mb.serie;block=row]\r\n</td>\r\n<table>\r\n<tr>\r\n<td>\r\ntitre: [cb.titre;block=row;p1=\'[mb.serie]\']\r\n</td>\r\n</tr>\r\n</table>\r\n</tr>\r\n</table>
\r\n\r\nlie au code php\r\n\r\n
\r\n$req = \"SELECT DISTINCT(serie) FROM bd order by serie Asc;\r\n$TBS->MergeBlock(\"mb\",$cnx_id,$req) ;\r\n$req = \"SELECT titre FROM bd WHERE Serie = \'%p1%\' ;\r\n$TBS->MergeBlock(\"cb\",$cnx_id,$req) ;\r\n
\r\n\r\nMon probleme c\'est que lorsque ma serie contient une apostrophe,\r\nle mergeBlock du block clone ne se fait pas.\r\nEt pour le reste des series non plus.\r\nEt j\'ai malheuresement besoin des apostrophes...\r\n\r\nMerci d\'avance
By: TwoD
Date: 2003-07-16
Time: 11:21

Clone block et apostrophe en lisible

Bonjour
J'ai le template html suivant:
<table>
<tr>
<td>
serie: [mb.serie;block=row]
</td>
<table>
<tr>
<td>
titre: [cb.titre;block=row;p1='[mb.serie]']
</td>
</tr>
</table>
</tr>
</table>

lie au code php

$req = "SELECT DISTINCT(serie) FROM bd order by serie Asc";
$TBS->MergeBlock("mb",$cnx_id,$req) ;
$req = "SELECT titre FROM bd WHERE Serie = '%p1%'" ;
$TBS->MergeBlock("cb",$cnx_id,$req) ;

Mon probleme c'est que lorsque ma serie contient une apostrophe,
le mergeBlock du block clone ne se fait pas.
Et pour le reste des series non plus.
Et j'ai malheuresement besoin des apostrophes...

Merci d'avance
By: Skrol29
Date: 2003-07-16
Time: 12:54

Re: Clone block et apostrophe en lisible

Bonjour,

Y'a un truc qui peut aider c'est htmlconv=esc.
[cb.titre;block=row;p1='[mb.serie;htmlconv=esc]']

Mais je crain que ce ne soit inssuffisant car le nom de la série sera bien passée au paramètre p1, mais il ne sera pas protégé lors de son passage à la requête SQL.

Mais en utilisant une fonction OnFormat, ça devrait aller.

HTML :
[cb.titre;block=row;p1='[mb.serie;htmlconv=no;onformat=m_sql]']

PHP :
function m_sql($FieldName,&$CurrVal) {
  $CurrVal = mysql_escape_string($CurrVal) ; //protection pour MySQL
  $CurrVal = str_replace('\'','\'\'',$tbs_CurrVal) ; //protection pour TBS
}


By: TwoD
Date: 2003-07-16
Time: 14:03

Re: Clone block et apostrophe en lisible

Bonjour,

En utilisant

[cb.titre;block=row;p1='[mb.serie;htmlconv=esc]']

et en modifiant la ligne 989 de tbs_class.php
En rajoutant un addSlashes lors du remplacement de parametres

function tbs_Merge_Block

//replace parameter
$Query = str_replace('%p'.$i.'%',addSlashes($BlockLoc->PrmLst[$x]),$Query) ;


Et la miracle ca fonctionne à merveille.
Par contre ne voyant pas d'autres utilisation des parametres (a part comme critere de requete) je mesure pas bien l'impact de ma modif dans la classe.
By: Skrol29
Date: 2003-07-16
Time: 14:14

Re: Clone block et apostrophe en lisible

Ben l'impacte de la modif c'est que ce n'est pas valable pour toutes les bases de données. Malheureusement.

MySQL accepte l'échapement des caractères spéciaux avec le caractère '\', mais d'autres bases comme Oracle ou SQL-Serveur fonctionnement autrement.

Faudra que je trouve un soluce...
By: (translation)
Date: 2003-07-17
Time: 19:11

Re: [fr] Clone block et apostrophe

This is a small translation of the current thread.

TwoD has a problem with clone blocks because the value to pass to the SQL query is a string which can contain simple quotes (see given code).

So, I've answered that the parameter htmlconv=esc could help sometimes but probably not for this time.
I've suggested that he uses a OnFormat function in order to escape the string twice : one for TBS and one more for MySQL.

TwoD answered that he changed the TBS code a bit (line 989) so that all goes right but wonder what is the impact.

I answered that the impact is that the fix is correct for MySQL database but not for all database because escaping string can change from one database to another.
I gonna work on that point.