Besoin d'aide avec les fonctions

Nouveau WRInaute
Bonjour !

Tout d'abord merci pour ce forum très intéressant. J'espère pouvoir vous aider à l'occasion et en attendant, j'en profite pour vous poser une première question.

Voilà, je refais mon site internet et j'ai décidé d'utiliser pour la première fois les fonctions, histoire d'être "au goût du jour". J'ai lu un peu, de ci de là, mais je voudrais un exemple concret.

Voyez donc ce bout de code, si vous le voulez bien :
Code:
$titre=htmlspecialchars(mysql_real_escape_string($_POST['titre']));
$contenu=htmlspecialchars(mysql_real_escape_string($_POST['contenu']));

Vous l'avez deviné, ça me sert à filtrer les champs d'un formulaire. Mais j'ai ce même code sur 10 pages différentes et la seule chose qui change à chaque fois, c'est le nom des variables, en l'occurrence $titre et $contenu.
Pourriez-vous me dire comment transformer ça en fonctions que je n'écrirais qu'une fois dans un fichier entête.php, avant d'appeler lesdites fonctions dans chaque page, en changeant seulement le nom des variables (ex : $titre1, $titre2, etc...) :?:

Merci d'avance :!:
 
Nouveau WRInaute
Salut Spout,

Ok ok, je prends note. Mais admettons pour les besoins de la cause que ces très mauvaises pratiques soient idéales. Comment donc satisfaire à la problématique qui se trouve à l'origine du sujet ?
 
WRInaute accro
Ben tu ajoutes htmlspecialchars() dans les 2 fonctions, autour de mysql_real_escape_string(). Mais je me répète, c'est mal d'enregistrer des entités HTML dans la DB.
 
Nouveau WRInaute
Ok, je reverrai ça après. Mais là Spout, quand tu me dis "tu ajoutes htmlspecialchars() dans les deux fonctions", c'est comme ça si tu me disais que pour aller sur la lune, il suffit d'avoir du blé... Je suis pas plus avancé.

Sans vouloir abusé, pourrais-tu m'écrire à quoi le bout de code est censé ressembler au final, ce qui me permettrait de te bombarder de questions pour le comprendre, ce qui aura alors pour incidence de me faire comprendre comme les fonctions fonctionnent et donc de créer un site internet ultra-moderne qui fera progresser l'humanité et rétablira la terre sur terre.
 
WRInaute accro
PHP:
<span class="syntaxdefault"><br /></span><span class="syntaxkeyword">function&nbsp;</span><span class="syntaxdefault">mysql_insert_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$table</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$data</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$password_field&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">""</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(</span><span class="syntaxdefault">$data&nbsp;</span><span class="syntaxkeyword">as&nbsp;</span><span class="syntaxdefault">$field</span><span class="syntaxkeyword">=></span><span class="syntaxdefault">$value</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$fields</span><span class="syntaxkeyword">[]&nbsp;=&nbsp;</span><span class="syntaxstring">'`'&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxdefault">$field&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxstring">'`'</span><span class="syntaxkeyword">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span class="syntaxdefault">$field&nbsp;</span><span class="syntaxkeyword">==&nbsp;</span><span class="syntaxdefault">$password_field</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$values</span><span class="syntaxkeyword">[]&nbsp;=&nbsp;</span><span class="syntaxstring">"PASSWORD('"&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxdefault">mysql_real_escape_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$value</span><span class="syntaxkeyword">)&nbsp;.&nbsp;</span><span class="syntaxstring">"')"</span><span class="syntaxkeyword">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$values</span><span class="syntaxkeyword">[]&nbsp;=&nbsp;</span><span class="syntaxstring">"'"&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxdefault">htmlspecialchars</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">mysql_real_escape_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$value</span><span class="syntaxkeyword">))&nbsp;.&nbsp;</span><span class="syntaxstring">"'"</span><span class="syntaxkeyword">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$field_list&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">join</span><span class="syntaxkeyword">(</span><span class="syntaxstring">','</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$fields</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$value_list&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">join</span><span class="syntaxkeyword">(</span><span class="syntaxstring">',&nbsp;'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$values</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$query&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">"INSERT&nbsp;INTO&nbsp;`"&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxdefault">$table&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxstring">"`&nbsp;("&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxdefault">$field_list&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxstring">")&nbsp;VALUES&nbsp;("&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxdefault">$value_list&nbsp;</span><span class="syntaxkeyword">.&nbsp;</span><span class="syntaxstring">")"</span><span class="syntaxkeyword">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxdefault">$query</span><span class="syntaxkeyword">;<br />}<br />&nbsp;</span><span class="syntaxdefault"></span>

PHP:
<span class="syntaxdefault"><br /></span><span class="syntaxkeyword">function&nbsp;</span><span class="syntaxdefault">mysql_update_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$table</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$data</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$id_field</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$id_value</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(</span><span class="syntaxdefault">$data&nbsp;</span><span class="syntaxkeyword">as&nbsp;</span><span class="syntaxdefault">$field</span><span class="syntaxkeyword">=></span><span class="syntaxdefault">$value</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$fields</span><span class="syntaxkeyword">[]&nbsp;=&nbsp;</span><span class="syntaxdefault">sprintf</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"`%s`&nbsp;=&nbsp;'%s'"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$field</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">htmlspecialchars</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">mysql_real_escape_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$value</span><span class="syntaxkeyword">)));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$field_list&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">join</span><span class="syntaxkeyword">(</span><span class="syntaxstring">','</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$fields</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$query&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">sprintf</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"UPDATE&nbsp;`%s`&nbsp;SET&nbsp;%s&nbsp;WHERE&nbsp;`%s`&nbsp;=&nbsp;%s"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$table</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$field_list</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$id_field</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">intval</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$id_value</span><span class="syntaxkeyword">));<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxdefault">$query</span><span class="syntaxkeyword">;<br />}<br />&nbsp;</span><span class="syntaxdefault"></span>
 
Nouveau WRInaute
Houlà... Autant je te remercie pour ta diligence mon cher Spout, autant je n'ai rien compris du tout. C'est à dire que là tu me refourgues tout le code, y compris le script d'insertion dans la base. Je n'y vois plus rien du tout.

Ce que je voudrais, c'est juste la fonction qui filtre $titre et $contenu.
 
WRInaute accro
PHP:
<span class="syntaxdefault"><br /></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br /></span><span class="syntaxkeyword">function&nbsp;</span><span class="syntaxdefault">filtreFoireux</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$key</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxdefault">htmlspecialchars</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">mysql_real_escape_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$key</span><span class="syntaxkeyword">]));<br />}<br /><br /></span><span class="syntaxdefault">$titre&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">filtreFoireux</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'titre'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$contenu&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">filtreFoireux</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'contenu'</span><span class="syntaxkeyword">);<br />&nbsp;</span><span class="syntaxdefault"></span>

Mais si ton but c'est vraiment d'être au goût du jour :
http://fr.wikipedia.org/wiki/Liste_de_frameworks_PHP
http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#PHP_2
 
Nouveau WRInaute
Ah là c'est plus clair. Mais en effet, j'ai l'impression d'être quelque peu largué depuis que je n'ai pas codé, voici bien deux ans de cela maintenant.

Faut-il désormais utiliser ces fonctions pour filtrer un formulaire :
http://php.net/manual/en/filter.filters.sanitize.php

En fait, qu'est-ce qui a changé avec php en deux ans ?
 
WRInaute accro
On enregistre pas les entités HTML dans la DB.

Si tu veux éviter les failles d'injection SQL: mysql_real_escape_string() ou équivalent en PDO.
 
Nouveau WRInaute
Hein hein... Et que penses-tu de ça, mon cher Spout :
Code:
$titre= filter_input(INPUT_POST, 'titre', FILTER_SANITIZE_SPECIAL_CHARS);

Est-ce complètement nul ou es-tu béa d'admiration ?
Et pour remplacer mysql_real_escape_string, ceci est-il d'une haute efficience ?

Code:
$titre= filter_input(INPUT_POST, 'titre', FILTER_SANITIZE_STRING);
 
WRInaute passionné
*mini HS*

spout a dit:
htmlspecialchars() et htmlentities() pour échapper, c'est une très mauvaise pratique que l'on retrouve un peu partout sur Internet.

Quand on s'en sert pour échapper à l'affichage mais que l'on enregistre pas ça suffit comme méthode non ?

Merci

*fin du mini HS*
 
Nouveau WRInaute
Terminacod a dit:
Hein hein... Et que penses-tu de ça, mon cher Spout :
Code:
$titre= filter_input(INPUT_POST, 'titre', FILTER_SANITIZE_SPECIAL_CHARS);

Est-ce complètement nul ou es-tu béa d'admiration ?
Et pour remplacer mysql_real_escape_string, ceci est-il d'une haute efficience ?

Code:
$titre= filter_input(INPUT_POST, 'titre', FILTER_SANITIZE_STRING);

Sans vouloir abuser sauvagement de votre bonté, une réponse à ces quelques questions m'eut été d'une grande utilité... :idea:
 
WRInaute accro
FILTER_SANITIZE_SPECIAL_CHARS: Transforme en entité HTML les caractères '"<>& et les caractères ASCII de valeur inférieur à 32, et supprime ou encode les autres caractères spéciaux.
FILTER_SANITIZE_STRING: Supprime les balises, et supprime ou encode les caractères spéciaux.

Donc pas vraiment de l'échappemment ALA mysql_real_escape_string().
 
Nouveau WRInaute
spout a dit:
FILTER_SANITIZE_SPECIAL_CHARS: Transforme en entité HTML les caractères '"<>& et les caractères ASCII de valeur inférieur à 32, et supprime ou encode les autres caractères spéciaux.
FILTER_SANITIZE_STRING: Supprime les balises, et supprime ou encode les caractères spéciaux.

Donc pas vraiment de l'échappemment ALA mysql_real_escape_string().


Salut Spout,

Donc on utilise toujours mysql_real_escape_string, mais en lui ajoutant un i pour signifier la nouvelle interface mysql, c'est ça ? Ce qui donne : mysqli_real_escape_string.

Sinon pour tout le reste, les nouvelles fonctions FILTER_SANITIZE doivent être utilisées, j'ai bon ?
Ainsi que les requêtes préparées ?

Il y a d'autres évolutions de PHP que j'ai ratées, depuis 2 ans que je n'ai point codé ?
 
Nouveau WRInaute
Marre de ces anglicismes...
Je ne sais pas ce qu'est un frameworks. J'ai codé un site très complet (tout un forum avec accès membre et tout) il y a quelques années et me voilà largué en moins de deux ans.

Ce que je sais, c'est que je ne veux plus d'usines à gaz, de sites tout fait (wordpress, dotclear, IPB) qui en fait balancent 300 requêtes quand on en a besoin de 10 et ne permettent jamais de faire exactement ce qu'on veut.

Bon pour être au goût du jour, je dois apprendre quoi ?
- Ce qu'est MYSQLI
- Les requêtes préparées
- Les nouvelles fonctions FILTER_SANITIZE

C'est ça ?
 
Nouveau WRInaute
Créer un simple blog personnel avec une structure un peu spéciale tout de même et que je puisse faire évoluer à ma guise. Ah ! Ah ! Pas la peine de me renvoyer vers wordclearpbpal, j'ai déjà donné.
 
Nouveau WRInaute
Hello !
Juste pour dire à propos des requêtes, il faut utiliser PDO ,s c'est pour ainsi dire la nouvelle norme,de plus et les requêtes préparées offrent un meilleur niveau de sécurité .

La programmation orientée objet n'est pas forcement indispensable mais c'est très pratique une fois qu'on a compris (personnellement j'aime bien cette manière de programmer ) ,et on peut réutiliser plus facilement ses morceaux de codes
et de mieux architecturer son code.

Par contre elle n'est pas indispensable dans le sens où l'on peut avoir exactement le même résultat avec une programmation en procédurale .

Voili voilou j’espère avoir pu t'aider.
 
Nouveau WRInaute
Salut,

Eh bien justement, à propos de la manière de programmer, j'ai une question à vous poser. Faut-il étudier le modèle MVC pour faire des sites internet dont le code soit bien organisé, c'est-à-dire d'une manière compréhensible intuitivement pour tout programmeur qui reprendrait le projet ou s'y joindrait ?
En résumé, comment bien construire un script de site internet ? Selon quel plan ?
 
Nouveau WRInaute
Hello,

Si tu veux utiliser le model MVC je te conseille CakePhp c'est un framework , la doc est plutôt bien faite , et la tu auras vraiment des conventions pour organiser ton code , mais il faut savoir que pour manipuler un framework ,il faut y passer un peu de temps .
J'ai regardé ce tutoriel de Grafikart ,il est pas mal mais quitte à utiliser un MVC autant choisir un framework PHP.

Sinon je trouve que la Programmation orientée objet ( même sans model MVC ) est très bien ,
en fait ça permet de ranger les variables et les fonctions dans une classe .
 
Discussions similaires
Haut