par
Ryle » 20 nov. 2007, 12:49
Tout pareil que Calimero!

"cot' cot' pareil qué miguel" (pour ceux qui comprendront

)
par contre je ne comprends pas bien le probleme avec sprintf
j'ai suivi ce qu'il y a dans la doc anglaise pourtant.
En fait, le principe de sprintf est justement de sortir tes variables de la chaine. Tu construis une chaine dans laquelle les variables sont remplacées par des glyphes abscons du genre %s (string), %d (decimal), etc. qui seront remplacées par les valeurs que tu spécifies ensuite.
Donc si dans ta chaine tu colles directement la valeur comme tu le faisais au lieu d'utiliser des %s, les valeurs spécifiées ensuite ne sont pas utilisées (et du coup tes variables n'étaient pas échappées avec le real_escape

)
En complément de la réponse de Calimero, il faut savoir ceci : les variables dans une chaine entre guillemets sont interprétées (la chaine est parsée, les variables identifiées et remplacées). Entre apostrophes, elles ne le sont pas. En clair :
$var = 'monde';
echo "Bonjour le $var"; // affiche : Bonjour le monde
echo 'Bonjour le $var'; // affiche : Bonjour le $var
echo "Bonjour le ".$var; // affiche : Bonjour le monde
// Nota : la chaine "Bonjour le" est parsée pour vérifier si elle contient des variables
echo 'Bonjour le '.$var; // affiche : Bonjour le monde
// Nota : la chaine n'est pas parsée, donc plus rapide à exécuter
Bon, ça se compte en pouièmes de micro-secondes, donc pas vraiment significatif, mais inconsciement on se sent mieux

(non ? ah......

)
Ca rend effectivement le code plus lisible (on repère 'achement plus vite les variables avé les couleurs) et cela t'évitera effectivement des erreurs le jour (qui ne tardera pas à arriver) où tu auras des chaines contenant des guillemets et que tu préfèreras utiliser les apostrophes plutôt que de tout backslasher

:
echo '<input type="text" name="toto" value="'.$toto.'" />';
// est quand même plus lisible que :
echo "<input type="text" name="toto" value="$toto" />";
Tout pareil que Calimero! :) "cot' cot' pareil qué miguel" (pour ceux qui comprendront ;))
[quote="choubix"]par contre je ne comprends pas bien le probleme avec sprintf
j'ai suivi ce qu'il y a dans la doc anglaise pourtant.[/quote]
En fait, le principe de sprintf est justement de sortir tes variables de la chaine. Tu construis une chaine dans laquelle les variables sont remplacées par des glyphes abscons du genre %s (string), %d (decimal), etc. qui seront remplacées par les valeurs que tu spécifies ensuite.
Donc si dans ta chaine tu colles directement la valeur comme tu le faisais au lieu d'utiliser des %s, les valeurs spécifiées ensuite ne sont pas utilisées (et du coup tes variables n'étaient pas échappées avec le real_escape :))
En complément de la réponse de Calimero, il faut savoir ceci : les variables dans une chaine entre guillemets sont interprétées (la chaine est parsée, les variables identifiées et remplacées). Entre apostrophes, elles ne le sont pas. En clair :
[php]$var = 'monde';
echo "Bonjour le $var"; // affiche : Bonjour le monde
echo 'Bonjour le $var'; // affiche : Bonjour le $var
echo "Bonjour le ".$var; // affiche : Bonjour le monde
// Nota : la chaine "Bonjour le" est parsée pour vérifier si elle contient des variables
echo 'Bonjour le '.$var; // affiche : Bonjour le monde
// Nota : la chaine n'est pas parsée, donc plus rapide à exécuter[/php]
Bon, ça se compte en pouièmes de micro-secondes, donc pas vraiment significatif, mais inconsciement on se sent mieux :) (non ? ah...... ;))
Ca rend effectivement le code plus lisible (on repère 'achement plus vite les variables avé les couleurs) et cela t'évitera effectivement des erreurs le jour (qui ne tardera pas à arriver) où tu auras des chaines contenant des guillemets et que tu préfèreras utiliser les apostrophes plutôt que de tout backslasher :) :
[php]echo '<input type="text" name="toto" value="'.$toto.'" />';
// est quand même plus lisible que :
echo "<input type="text" name="toto" value="$toto" />";[/php]