Je récupère des données dans un formulaire, que j'envoie dans la base MySQL,
puis ces données sont réaffichées dans une page html.
Je voudrais savoir quelles sont les fonctions à utiliser pour
éviter l'introduction de code ( sql et html ) dans les formulaires.
Alors coté sql (si tu utilises mysql)
Utilise systématiquement mysql_[real_]escape_string( $param ) si tu n'utilises pas PDO, sinon prépare les queries et utilises bindParam(...) pour inserer les valeurs.
Pour les autres bases cherche un équivalent de la fonction d'échappement
Coté production HTML:
htmlentities( $str, quote_style = ENT_COMPAT|ENT_QUOTES|ENT_NOQUOTES, charset )
Le quote_style dépend du context d'utilisation de la chaine produite, en général
- pour écrire du HTML brute, on utilise ENT_NOQUOTES
- pour écrire l'intérieur d'un attribut ex:value = "<?php echo htmlentities(...) ?>", on utilise ENT_COMPAT
ENT_COMPAT Convertit les guillemets doubles, et ignore les guillemets simples
ENT_QUOTES Convertit les guillemets doubles et les guillemets simples
ENT_NOQUOTES Ignore les guillemets doubles et les guillemets simples
Dernière chose, afin de stocker en base le contenu saisi par l'utilisateur sans déformation, il faut faire attention au paramétrage des magic_quotes (échappement automatique des quotes dans les tableaux $_GET, $_POST, $_COOKIE == GPC).
Tu peux donc utiliser ce type de code:
function getValue($arr, $key)
{
...
if(get_magic_quotes_gpc()) return stripslashes($arr[$key]);
else return $arr[$key];
}
...
$sql = "insert tablex values ('".mysql_escape_string(getValue($_POST, 'variable'))."')";
if(mysql_query($sql))
{
...
Au suivant

[quote="stakanof"]Je récupère des données dans un formulaire, que j'envoie dans la base MySQL,
puis ces données sont réaffichées dans une page html.
Je voudrais savoir quelles sont les fonctions à utiliser pour
éviter l'introduction de code ( sql et html ) dans les formulaires.[/quote]
Alors coté sql (si tu utilises mysql)
Utilise systématiquement mysql_[real_]escape_string( $param ) si tu n'utilises pas PDO, sinon prépare les queries et utilises bindParam(...) pour inserer les valeurs.
[i]Pour les autres bases cherche un équivalent de la fonction d'échappement[/i]
Coté production HTML:
htmlentities( $str, quote_style = ENT_COMPAT|ENT_QUOTES|ENT_NOQUOTES, charset )
Le quote_style dépend du context d'utilisation de la chaine produite, en général
- pour écrire du HTML brute, on utilise ENT_NOQUOTES
- pour écrire l'intérieur d'un attribut ex:value = "<?php echo htmlentities(...) ?>", on utilise ENT_COMPAT
[quote]
ENT_COMPAT Convertit les guillemets doubles, et ignore les guillemets simples
ENT_QUOTES Convertit les guillemets doubles et les guillemets simples
ENT_NOQUOTES Ignore les guillemets doubles et les guillemets simples
[/quote]
Dernière chose, afin de stocker en base le contenu saisi par l'utilisateur sans déformation, il faut faire attention au paramétrage des magic_quotes (échappement automatique des quotes dans les tableaux $_GET, $_POST, $_COOKIE == GPC).
Tu peux donc utiliser ce type de code:
[php]
function getValue($arr, $key)
{
...
if(get_magic_quotes_gpc()) return stripslashes($arr[$key]);
else return $arr[$key];
}
...
$sql = "insert tablex values ('".mysql_escape_string(getValue($_POST, 'variable'))."')";
if(mysql_query($sql))
{
...
[/php]
Au suivant :wink: