8791 sujets
Salut,
Pour tout te dire je pense que tout le monde reste un peu silencieux car personne ne doit utiliser cette fonction
regarde sur le site de php si tu ne l'as pas deja fait.
Pour tout te dire je pense que tout le monde reste un peu silencieux car personne ne doit utiliser cette fonction

regarde sur le site de php si tu ne l'as pas deja fait.
pour moi printf ou sprintf servent a la même chose que echo ou print
simplement ce sont des fonctions qui demontre l'origine du php. aprés tout le php comme beaucoup d'autre languages est un descendant(plus ou moins) du C. et en C on utilise bcp les fonctions printf et scanf pour les entrées sorties.
en ce moment j'utilise pas mal sprintf ca permet d'ecrire d'abord ta requete en entier
et puis de prendre ton temps pour trouver les variables qui conviennent.
c'est aussi plus "propre" que d'écrire
maintenant ca fait la même chose c'est qu'une question d'habitude
la diff entre printf et sprintf est que l'une affiche et l'autre rend une chaine de caractere.
Modifié par CPascal (13 Jul 2007 - 00:04)
simplement ce sont des fonctions qui demontre l'origine du php. aprés tout le php comme beaucoup d'autre languages est un descendant(plus ou moins) du C. et en C on utilise bcp les fonctions printf et scanf pour les entrées sorties.
en ce moment j'utilise pas mal sprintf ca permet d'ecrire d'abord ta requete en entier
$query =sprinf ("insert into bidule
(id,titre,chose,id_truc,chouette,date_detruc)
values (%d,'%s','%s',%d,'%s',%d)", $id,$titre,$chose...........
et puis de prendre ton temps pour trouver les variables qui conviennent.
c'est aussi plus "propre" que d'écrire
$query = "insert into bidule
(id,titre,chose,id_truc,chouette,date_detruc)
values (".$id.",'".$titre."','".$chose."...........etc.
maintenant ca fait la même chose c'est qu'une question d'habitude
la diff entre printf et sprintf est que l'une affiche et l'autre rend une chaine de caractere.
Modifié par CPascal (13 Jul 2007 - 00:04)
a écrit :
c'est aussi plus "propre" que d'écrire
$query = ""("insert into bidule
(id,titre,chose,id_truc,chouette,date_detruc)
values (".$id.",'".$titre."','".$chose."...........etc.
Disons qu'on peut faire plus simple... pourquoi couper ta chaîne pour y insérer les variables ? Ce n'est pas nécessaire avec des chaînes délimitées par des double-quotes.
Personnellement je me sers beaucoup de la syntaxe herdoc quand j'ai des longues chaînes réparties sur 4-5 lignes ou plus et que j'ai à y placer quelques variables.
pour la fonction qui nous intéresse ici, printf, elle a le même fonctionnement qu'en C je présume.
Par contre celui qui me trouve une fonction scanf en php, il faudra qu'il m'en explique l'utilité.
QuentinC a écrit :
Disons qu'on peut faire plus simple... pourquoi couper ta chaîne pour y insérer les variables ? Ce n'est pas nécessaire avec des chaînes délimitées par des double-quotes.
Personnellement je me sers beaucoup de la syntaxe herdoc quand j'ai des longues chaînes réparties sur 4-5 lignes ou plus et que j'ai à y placer quelques variables.
Si t'es du style à vouloir optimiser à la nano-seconde, les syntaxes double-quotes et heredoc génèrent tout plein d'opcodes en plus par rapport à une simple concaténation


Salut,
J'ai enfin compris comment fonctionne printf(). Ce que je ne comprends pas trop, c'est pourquoi une telle fonction alors qu'il y a déjà des fonctions similaires.
Ce qui revient à dire :
Des fois php est un peu tordu et farceur
.
++
Modifié par Nolem (15 Jul 2007 - 11:56)
J'ai enfin compris comment fonctionne printf(). Ce que je ne comprends pas trop, c'est pourquoi une telle fonction alors qu'il y a déjà des fonctions similaires.
$numb_monchiffre=3;
$txt_monmot="coupe";
$txt_maphrase="J'ai %d dans ma %s de fruits";
printf($txt_maphrase,$numb_monchiffre,$txt_monmot);
Ce qui revient à dire :
$numb_monchiffre=3;
$txt_monmot="coupe";
echo "J'ai ".$numb_monchiffre." dans ma ".$txt_monmot." de fruits";
Des fois php est un peu tordu et farceur

++
Modifié par Nolem (15 Jul 2007 - 11:56)
Je pense que l'existance de cette fonction printf provient des origines de php, et qu'elle y demeure pour éviter des erreurs avec des très anciens scripts, des scripts peu-être bien même antérieurs à php3.
FlorentG > Oui mais alors à ce moment-là on utilise des chaînes à simple quote si on veut faire des concaténations.
Et non je ne suis pas un fanatique de la nanoseconde. Dans un cas comme celui-là, ça ne change pour ainsi dire rien. On ferait du multimédia audio/vidéo en real-time d'accord, mais là... alors autant privilégier la lisibilité.
FlorentG > Oui mais alors à ce moment-là on utilise des chaînes à simple quote si on veut faire des concaténations.
Et non je ne suis pas un fanatique de la nanoseconde. Dans un cas comme celui-là, ça ne change pour ainsi dire rien. On ferait du multimédia audio/vidéo en real-time d'accord, mais là... alors autant privilégier la lisibilité.
Personnellement j'utilise les fonctions de formatage qui sont bien pratiques pour plusieurs choses:
-la traduction.
Imaginons la chaine suivante: J'ai 5 dents et 3 yeux dans laquelle les quantités sont amenées à varier.
Nous aimerions traduire cette chaine.
Si on l'écrit 'J\'ai '.$dents.' dents et '.$yeux.' yeux' cela fait 3 chaines à mémoriser et si l'on imagine une traduction dans une langue allant de droite à gauche ça ne marche plus.
En utilisant les fonctions de formatages il est possible de stocker une seule chaine: J'ai %d dents et %d yeux. De plus il est possible d'inverser les arguments xuey %2$d te stned %1$d ia'J pour les langues se lisant dans l'autre sens.
-la sécurité
Il est intéressant de formuler les requêtes mysql à travers sprintf() car cela limite pas mal de failles d'injection.
Example:
Dans ce code $a est protégé et $b n'a pas besoins de l'être car il sera traité comme un nombre.
Voilà j'espère que ça aura été utile
Modifié par Necromantik (25 Jul 2007 - 14:56)
-la traduction.
Imaginons la chaine suivante: J'ai 5 dents et 3 yeux dans laquelle les quantités sont amenées à varier.
Nous aimerions traduire cette chaine.
Si on l'écrit 'J\'ai '.$dents.' dents et '.$yeux.' yeux' cela fait 3 chaines à mémoriser et si l'on imagine une traduction dans une langue allant de droite à gauche ça ne marche plus.
En utilisant les fonctions de formatages il est possible de stocker une seule chaine: J'ai %d dents et %d yeux. De plus il est possible d'inverser les arguments xuey %2$d te stned %1$d ia'J pour les langues se lisant dans l'autre sens.
-la sécurité
Il est intéressant de formuler les requêtes mysql à travers sprintf() car cela limite pas mal de failles d'injection.
Example:
mysqli_query(sprintf(
'SELECT * FROM `table` WHERE champ_text="%s" AND champ_num="%d"',
mysqli_real_escape_string($a),
$b
));
Dans ce code $a est protégé et $b n'a pas besoins de l'être car il sera traité comme un nombre.
Voilà j'espère que ça aura été utile

Modifié par Necromantik (25 Jul 2007 - 14:56)
salut,
désolé je n'ai pas pris la peine de lire tout le sujet, peut etre que la réponse à déjà été donnée.
Un printf permet d'afficher une chaine de caractere mise en forme.
De ce que j'ai pu voir, le printf est souvent utilisé pour afficher la structure d'un array par exemple.
Tu peux trouver plus de renseignement sur la documentation officielle de php :
http://fr.php.net/printf
pour sprintf() :
http://fr.php.net/sprintf
désolé je n'ai pas pris la peine de lire tout le sujet, peut etre que la réponse à déjà été donnée.
Un printf permet d'afficher une chaine de caractere mise en forme.
De ce que j'ai pu voir, le printf est souvent utilisé pour afficher la structure d'un array par exemple.
Tu peux trouver plus de renseignement sur la documentation officielle de php :
http://fr.php.net/printf
pour sprintf() :
http://fr.php.net/sprintf