8791 sujets

Développement web côté serveur, CMS

Modérateur
Salut,

En ce moment, j'étudie de plus près le php. Je n'ai pas bien saisi la fonction précité : printf(). Si vous pouvez m'éclaircir une neuronne svp, ce serait sympa Smiley smile .

++
Modifié par Nolem (12 Jul 2007 - 12:04)
Salut,

Pour tout te dire je pense que tout le monde reste un peu silencieux car personne ne doit utiliser cette fonction Smiley lol

regarde sur le site de php si tu ne l'as pas deja fait.
Modérateur
Salut,

En effet, j'ai regardé php.net et autres sites. Je crois avoir compris mais c'est pas gagné. Apparement, on peut changer le format de certains caractères dans une string. Je vais quand même faire de plus amples recherches.

++
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

$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 Smiley confus cf. How long is a piece of string ? (en) Smiley smile
Modérateur
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.


$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 Smiley ravi .

++
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é.
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:
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 Smiley smile
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