Traitement de formulaires : vos pratiques

WRInaute accro
Bonjour à tous !

J'aimerais savoir comment les membres de WRI qui développent en php (ou en asp d'ailleurs) gèrent les traitements de formulaires, c'est à dire comment gérez-vous la validation des données rentrées par l'utilisateur et leur insertion dans la base :

- Utilisation de classes spécifiques et si oui lesquelles (si ce sont des classes open-source)
- Traitement de formulaire "à la main" en php (c'est à dire sans passer par l'utilisation d'une classe où d'un script spécifique)
- Validation côté client ou serveur
- etc.

Perso je suis beaucoup plus enclin à une validation côté serveur (en PHP donc) qu'une validation en javascript. Mais ma problèmatique repose dans le fait de savoir s'il existe des classes pour faire ce genre de traitement, dans le cas contraire je me mettrais els mains dans le cambouis).
 
WRInaute impliqué
Salut,

J'utilise deux vérifications, la première JavaScript relativement simple et efficace (un script de 30 lignes en JS me permet de vérifier tous mes champs obligatoire).

J'ajoute également un noscript avec un champ caché pour savoir si je dois faire une vérification serveur ou pas (pour php) sinon ASP.NET me gère cela tout seul ce qui est super pratique :)

Sinon, pour la vérification serveur j'utilise un système de combinaisons entre les tableaux et le POST pour vérifier les champs dans une boucle assez simplement, comme ça pas besoin de faire des dizaines de if et else pour contrôler champ après champ !

a+
 
WRInaute passionné
Sir Dipp a dit:
Salut,

J'utilise deux vérifications, la première JavaScript relativement simple et efficace (un script de 30 lignes en JS me permet de vérifier tous mes champs obligatoire).

J'ajoute également un noscript avec un champ caché pour savoir si je dois faire une vérification serveur ou pas (pour php) sinon ASP.NET me gère cela tout seul ce qui est super pratique :)

Sinon, pour la vérification serveur j'utilise un système de combinaisons entre les tableaux et le POST pour vérifier les champs dans une boucle assez simplement, comme ça pas besoin de faire des dizaines de if et else pour contrôler champ après champ !

a+

Je te conseille de toujours faire la vérification PHP !!
 
WRInaute passionné
je plus gros problème est d'empêcher la resoumission par refresh une fois le formulaire validé.

perso je fais

Code:
<?php
vérif de la validité des champs
si ok {
traitement du formuaire
redirection page ok
}
?>

formulaire html qui pointe sur la même page

l'avantage de la méthode, c'est
- pas de revalidation lors d'un refresh
- formuaire pré-rempli si lors de la première validation les champs ne sont pas validés
 
WRInaute accro
jeroen a dit:
je plus gros problème est d'empêcher la resoumission par refresh une fois le formulaire validé.

perso je fais

Code:
<?php
vérif de la validité des champs
si ok {
traitement du formuaire
redirection page ok
}
?>

[b]formulaire html qui pointe sur la même page[/b]

jamais essayé en auto-invocant?

Pour le refresh: die('<meta http-equiv="refresh" content="3; URL=page d'accueil">');

plus aucon problèmes
 
WRInaute accro
l'autoinvocant t'évite 2 pages (le formulaire en HTML)

Code:
if (isset($HTTP_POST_VARS['B1']))
{
 // teste les valeurs.
 $nom=trim(addslashes($HTTP_POST_VARS['nom']));
 $mail=trim(addslashes($HTTP_POST_VARS['mail']));
 $tableau=array();
 $tableau=Explode("@",$mail,2);
 echo $tableau[0];
 if ($nom=="" || $nom=="Nom")
 {
   echo "Veuillez rentrer un nom";
 }elseif ($mail==""){
   echo "Rentrez une adresse mail";
 }elseif (!isset($tableau[1])) {
   echo"Rentrez une adresse valide";
 }else{
  // envoi dans la base de donnée ou vial la fonction mail()
  //die ();
}

// formulaire
$form="<form method=\"POST\">
  <p>Nom: <input type=\"text\" name=\"nom\" size=\"20\" value=\"Nom\"></p>
  <p>Votre adresse mail: <input type=\"text\" name=\"mail\" size=\"30\" value=\"Votre adresse mail\"></p>
  <p><input type=\"submit\" value=\"Envoyer\" name=\"B1\"></p>
</form>";
echo $form;
 
WRInaute passionné
parce que le redirect php ne marche pas toujours. (mystère et boule de gomme)
Au sujet du formulaire, je passe toujours un coup de mysql_real_escape_string() ou de intval() avant de mettre quelque chose dans ma base.
Mon problème après, c\'est de virer les caractères d\'échappement qui s\'invitent tous seuls dans le texte inséré en base. \"Il faut ce qu'il faut\", comme dirait l\'autre.
 
WRInaute passionné
Après expérimentation une cause possible du mystère est que si l'on envoie des données après le header, les navigateurs ne font pas forcément la redirection. Pour la boule de gomme, je n'ai pas encore trouvé :)
 
WRInaute passionné
c'est pas le navigateur qui redirige par header mais apache

et quand tu redirige un header, il ne faut pas envoyer de flux vers le navigateur car apache ne peut plus rediriger

soit c'est 200 soit c'est 301 mais ça ne peut pas être les deux en même temps

rog
 
WRInaute accro
dorian53 a dit:
Onthisplanet a dit:
ybet a dit:
directement en php (avec des if ....)

Même chose
Ce me suffit largement !


Le Javascript permet de gagner un traitement machine coté serveur !
Ca évite de recharger la page aussi...

Sauf qu'une validation de formulaire en javascript, niveau sécurité c'est 0.

En fait, en créant ce topic, je pensais à des classes qui permettent de vérifier que le contenu des champs d'un formulaire validé correspond à ce qu'on attente comme donnée, génère le code SQL adéquat et fait l'INSERT, l'UPDATE ou l'envoi de mail selon les cas.
 
WRInaute passionné
UsagiYojimbo a dit:
Sauf qu'une validation de formulaire en javascript, niveau sécurité c'est 0.

En fait, en créant ce topic, je pensais à des classes qui permettent de vérifier que le contenu des champs d'un formulaire validé correspond à ce qu'on attente comme donnée, génère le code SQL adéquat et fait l'INSERT, l'UPDATE ou l'envoi de mail selon les cas.

Tu as ça dans la plupart des framework (je pense à Prado, Symfony, ... même si pas testé).
Il y a des classes toutes faites aussi, genre celle la : http://pear.php.net/package/HTML_QuickForm
Mais encore une fois pas essayé mais je pense le faire bientôt. Si tu test donnes tes impressions sur ce forum ;)

Sinon pour la redirection en PHP il faut penser à faire un exit(); après la redirection car le code est interpreté le temps que la redirection est jouée.
Donc avoir qqchose comme ça :
Code:
header("Location: http://$host$uri/$extra");
exit;
 
Nouveau WRInaute
Ce morceau de code est bien pratique pour les ajouter les \ avant les "

function my_magic_quotes($var) {
foreach($var AS $key => $value) {
if (is_array($value)) $var[$key] = my_magic_quotes($value);
else $var[$key] = addslashes(trim($value));
}
return $var;
}



et ceci pour l'utiliser


$_GET = (!get_magic_quotes_gpc()) ? my_magic_quotes($_GET) : $_GET;
$_POST = (!get_magic_quotes_gpc()) ? my_magic_quotes($_POST) : $_POST;


Pratique, non?
 
WRInaute passionné
lefou a dit:
dorian53 a dit:
Onthisplanet a dit:
ybet a dit:
directement en php (avec des if ....)

Même chose
Ce me suffit largement !


Le Javascript permet de gagner un traitement machine coté serveur !
Ca évite de recharger la page aussi...

Si le navigateur de l'internaute est configuré pour ne pas faire tourner les scripts javascript alors aucune vérification n'est effectué.


UsagiYojimbo a dit:
dorian53 a dit:
Onthisplanet a dit:
ybet a dit:
directement en php (avec des if ....)

Même chose
Ce me suffit largement !


Le Javascript permet de gagner un traitement machine coté serveur !
Ca évite de recharger la page aussi...

Sauf qu'une validation de formulaire en javascript, niveau sécurité c'est 0.

En fait, en créant ce topic, je pensais à des classes qui permettent de vérifier que le contenu des champs d'un formulaire validé correspond à ce qu'on attente comme donnée, génère le code SQL adéquat et fait l'INSERT, l'UPDATE ou l'envoi de mail selon les cas.



Prenez le temps de lire les gars...




dorian53 a dit:
Sir Dipp a dit:
Salut,

J'utilise deux vérifications, la première JavaScript relativement simple et efficace (un script de 30 lignes en JS me permet de vérifier tous mes champs obligatoire).

J'ajoute également un noscript avec un champ caché pour savoir si je dois faire une vérification serveur ou pas (pour php) sinon ASP.NET me gère cela tout seul ce qui est super pratique :)

Sinon, pour la vérification serveur j'utilise un système de combinaisons entre les tableaux et le POST pour vérifier les champs dans une boucle assez simplement, comme ça pas besoin de faire des dizaines de if et else pour contrôler champ après champ !

a+

Je te conseille de toujours faire la vérification PHP !!
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut