Je traite des gros formulaires de gestion de feuilles de calculs de machine de laboratoires (environ 20 - 30 input anonymes à la volée).
Mon conseil : vérifies le type de données qui est envoyées via des preg_match (ce sont les fameux REGEX) et ou en écrasant le type comme cet exemple où la valeur ne peut être égale à zéro.
$variable = (integer) $_POST["input"];
//ou
$variable = intval ($_POST["input"]);
$retour = (empty($variable)) ? false : true;
L'avantage de cela est que si tu connais le type que tu attends, tu peux "boucler" sur les sorties formulaires et même créer une fonction ou une classe qui vérifie le formulaire avant de le traiter.
$tabTypesInteger = array ("input_456478", "input_8796545");
foreach ($_POST as $cle => $valeur) {
//si integer
if (in_array($cle,$tabTypesInteger) {
if (is_numeric($valeur))
...
}
}
//ou via une fonction
fonction estInteger ($valeur = false) {
//si pas définie => return false
if (empty($valeur))
return false;
return (preg_match('#[0-9]#',$valeur) ? true : false;
}
Pour compléter les protections, utilises que mysqli_real_escape_string (la version mysql devient obsolète) ou (XOR) celle de pdo si tu utilises la classe PDO (perso j'utilise mysqli).
Enfin tu peux aussi utiliser (en plus) javascript (j'utilise jQuery pour cela) pour vérifier le type avant l'envoi du formulaire. C'est une vérification complémentaire, tu dois obligatoirement vérifier côté serveur :
dans l'HTML
<input typeAttendu="[0-9]" type="text" value="Entrer un Entier" class="integer" n="Entrer un Entier"/>
Dans le javascript avec jQuery lancé :
[javascript]$(document).on ({
keyup : function () {
var regex = nex RegExp($(this).attr('typeAttendu'),"gi");
var valeur = $(this).val();
var retour = regex.test(valeur);
if (!retour) {
$(this).val(valeur.substring(0,valeur.length-1));
}
},
focus: function () {
//si c'est "Entrer un Entier" => on efface
if ($(this).val() == $(this).attr("n"))
$(this).val('');
}
},'input');[/javascript]
Je traite des gros formulaires de gestion de feuilles de calculs de machine de laboratoires (environ 20 - 30 input anonymes à la volée).
Mon conseil : vérifies le type de données qui est envoyées via des preg_match (ce sont les fameux REGEX) et ou en écrasant le type comme cet exemple où la valeur ne peut être égale à zéro.
[php]$variable = (integer) $_POST["input"];
//ou
$variable = intval ($_POST["input"]);
$retour = (empty($variable)) ? false : true;[/php]
L'avantage de cela est que si tu connais le type que tu attends, tu peux "boucler" sur les sorties formulaires et même créer une fonction ou une classe qui vérifie le formulaire avant de le traiter.
[php]$tabTypesInteger = array ("input_456478", "input_8796545");
foreach ($_POST as $cle => $valeur) {
//si integer
if (in_array($cle,$tabTypesInteger) {
if (is_numeric($valeur))
...
}
}
//ou via une fonction
fonction estInteger ($valeur = false) {
//si pas définie => return false
if (empty($valeur))
return false;
return (preg_match('#[0-9]#',$valeur) ? true : false;
}
[/php]
Pour compléter les protections, utilises que mysqli_real_escape_string (la version mysql devient obsolète) ou (XOR) celle de pdo si tu utilises la classe PDO (perso j'utilise mysqli).
Enfin tu peux aussi utiliser (en plus) javascript (j'utilise jQuery pour cela) pour vérifier le type avant l'envoi du formulaire. C'est une vérification complémentaire, tu dois obligatoirement vérifier côté serveur :
dans l'HTML
[html]<input typeAttendu="[0-9]" type="text" value="Entrer un Entier" class="integer" n="Entrer un Entier"/>[/html]
Dans le javascript avec jQuery lancé :
[javascript]$(document).on ({
keyup : function () {
var regex = nex RegExp($(this).attr('typeAttendu'),"gi");
var valeur = $(this).val();
var retour = regex.test(valeur);
if (!retour) {
$(this).val(valeur.substring(0,valeur.length-1));
}
},
focus: function () {
//si c'est "Entrer un Entier" => on efface
if ($(this).val() == $(this).attr("n"))
$(this).val('');
}
},'input');[/javascript]