Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1098 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  controles des champ et correction du formulaire PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

controles des champ et correction du formulaire PHP

n°920682
korben2003
Posté le 11-12-2004 à 22:27:51  profilanswer
 

Bonsoir à tous
 
J'ai un petit formulaire avec des champs texte et liste deroulante je sais verifier si le champ est vide ou pas et une fois le questionnaire validé ce que j'aimerai faire c'est faire apparaitre le formulaire avec toutes les cases rempli correctement et en haut ecrit en rouge une ligne indiquant les champ a corriger et je ne connais pas la meillieur façon de le faire. Et si tous les champs sont bon alors j'afficherai un echo avec un recvap de tous les champs
 
Merci d'avance pour votre aide

mood
Publicité
Posté le 11-12-2004 à 22:27:51  profilanswer
 

n°920703
esox_ch
Posté le 11-12-2004 à 23:37:50  profilanswer
 

Bein tu recuperes toutes les variables et les valeurs postées (avec un balayage de $_POST[]) .. Je sais pas si c'est ca que tu demandais ...

n°920704
sielfried
Posté le 11-12-2004 à 23:39:35  profilanswer
 

Je dirais, à la réception du form :
- un flag du genre $erreur, false par défaut ;
- une suite de if vérifiant la validité de chaque champ, avec un echo en cas d'erreur et $erreur qui passe à true ;
- si $erreur vaut true (au moins une erreur), réaffichage du formulaire, sinon affichage du récap.


Message édité par sielfried le 11-12-2004 à 23:40:05

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°920781
Xav_
The only one...
Posté le 12-12-2004 à 04:39:26  profilanswer
 

+1 pour les autres
si une valeur à été rensignée, tu la met en "value" du formulaire au réaffichage de celui-ci, ce qui évite de la resaisir et un message correspondant au champ pas rempli (tu test dans un if et au 1er champ important pas rempli tu sort --> de maniere itérative le "posteur" va finir par tout remplir ;))


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°923650
sylva1n
Je suis le gluon de ton ...
Posté le 15-12-2004 à 11:21:34  profilanswer
 

Yo
 
Voilà un exemplaire de formulaire. Je n'ai reproduit que les parties interessantes.
Il y a quelques subtilités à cause de problème potentiels de codage :
- la BDD est en ISO-8859
- la page est en unicode (UTF-8)
- le formulaire doit être entré en ISO, mais il faut quand même prévoir le cas du navigateur qui envoi les données en unicode :o
 
En bref, l'algo c'est :
SI données envoyées
  ALORS vérifier la validité des données
SI pas de données OU données invalides
  ALORS afficher formulaire (pré-rempli avec données, si existantes)
SI données envoyées et valides
  ALORS enregister dans la BDD
 

Code :
  1. <?php
  2. //'gestion' des erreurs
  3. error_reporting(0);
  4. $bug_mes = '<p>Une erreur majeure s\'est produite, l\'administrateur va recevoir un rapport d\'incident.<br />Le processus d\'inscription n\'a pas pu s\'achever, merci de réessayer ultérieurement.<br />Nous nous excusons de ce désagrément indépendant de notre volonté.</p>';
  5. //definitions utiles pour la suite
  6. define('UC_CHARS','ÄÇÈÉËÏÑÖÜ');
  7. define('LC_CHARS','äçèéëïñöü');
  8. //fonction de formatage de texte accentué
  9. function FormatPnom($param) {
  10. if (!strlen($param)) return '';
  11.   $param = strtolower(strtr($param,UC_CHARS,LC_CHARS));
  12.   $param_1 = explode(' ',$param);
  13.   for ($i = 0; $i < count($param_1); $i++){
  14.    $param_2 = explode('-', $param_1[$i] );
  15.    for ($j = 0; $j < count($param_2); $j++) $param_2[$j]{0} = strtoupper(strtr($param_2[$j]{0},LC_CHARS,UC_CHARS));
  16.  $param_1[$i] = implode('-',$param_2);}
  17.   return implode(' ',$param_1);}
  18. function FormatUp($param) {
  19.   return strtoupper(strtr($param,LC_CHARS,UC_CHARS));}
  20. function FormatLow($param) {
  21.   return strtolower(strtr($param,UC_CHARS,LC_CHARS));}
  22. ?>
  23. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  24.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  25. <html xmlns="http://www.w3.org/1999/xhtml">
  26.   <head>
  27.     <title>Inscription ^_^</title>
  28.     <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  29.     <link type="text/css" rel="stylesheet" href="../style.css" />
  30.   </head>
  31.   <body>
  32.  <p><a href="../../.">Menu principal</a> > <a href="./.">^_^</a> > Inscription en ligne</p>
  33.     <div id="corps">
  34.       <p class="intro">Bienvenue sur le formulaire d'inscription en ligne</p>
  35.   <hr />
  36. <?php
  37. // debut de la partie interactive du formulaire
  38. ( $_POST['vali'] == 'Valider') ? ($vali = TRUE) : ($vali = FALSE);
  39. //verification des erreurs du formulaires
  40. if ($vali) {
  41. $err = FALSE; //on part du principe qu'il n'y a pas d'erreur  
  42. if ( !strlen($_POST['civi']) ) $err = $civi_err = TRUE;
  43. if ( !strlen($_POST['pnom']) ) $err = $pnom_err = TRUE;
  44. if ( !strlen($_POST['fnom']) ) $err = $fnom_err = TRUE;
  45. if ( strlen($_POST['ntel']) < 9 ) $err = $ntel_err = TRUE;
  46. }
  47. //conservation des valeurs dans les champs en cas d'erreur
  48. if ($err) {
  49. $civi_aff = $_POST['civi'];
  50. $pnom_aff = stripslashes (utf8_encode(FormatPnom(mb_convert_encoding(trim($_POST['pnom']),'ISO-8859-1', 'UTF-8,ISO-8859-1'))));
  51. $fnom_aff = stripslashes (utf8_encode(FormatUp(mb_convert_encoding(trim($_POST['fnom']),'ISO-8859-1', 'UTF-8,ISO-8859-1'))));
  52. $ntel_aff = $_POST['ntel'];
  53. }
  54. //affichage initial, ou s'il y a des erreur  
  55. if ( !$vali or $err ) {
  56. ?>
  57.       <h1>Formulaire :</h1>
  58. <?php
  59. if($err) echo '      <p class="red">Les champs en rouge ont été omis ou comportent des erreurs, merci d\'apporter les corrections nécessaires.</p>'."\n";
  60. else echo '      <p>Veuillez saisir les renseignements suivants (les champs en gras doivent impérativemet être renseignés) :</p>'."\n";
  61. ?>
  62.       <form method="post" accept-charset="ISO-8859-1">
  63.         <table border="0" cellpadding="3" cellspacing="3">
  64.           <tr>
  65.             <td<?php if($civi_err) echo ' class="red"'; ?>><strong>Civilité</strong>&nbsp;:&nbsp;</td>
  66.             <td><input type="radio" name="civi" value="m" <?php if($civi_aff=='m') echo 'checked="checked" '; ?>/>M.&nbsp;&nbsp;
  67.      <input type="radio" name="civi" value="e" <?php if($civi_aff=='e') echo 'checked="checked" '; ?>/>Mme.&nbsp;&nbsp;
  68.      <input type="radio" name="civi" value="l" <?php if($civi_aff=='l') echo 'checked="checked" '; ?>/>Mlle.</td>
  69.           </tr>
  70.           <tr>
  71.             <td<?php if($pnom_err) echo ' class="red"'; ?>><strong>Prénom</strong>&nbsp;:&nbsp;</td>
  72.             <td><input name="pnom" type="text" size="60" maxlength="60" value="<?php echo $pnom_aff; ?>"/></td>
  73.           </tr>
  74.           <tr>
  75.             <td<?php if($fnom_err) echo ' class="red"'; ?>><strong>Nom</strong>&nbsp;:&nbsp;</td>
  76.             <td><input name="fnom" type="text" size="60" maxlength="60" value="<?php echo $fnom_aff; ?>"/></td>
  77.           </tr>
  78.           <tr>
  79.             <td<?php if($ntel_err) echo ' class="red"'; ?>><strong>Nº de téléphone</strong>&nbsp;:&nbsp;</td>
  80.             <td><input name="ntel" type="text" size="30" maxlength="30" value="<?php echo $ntel_aff; ?>"/></td>
  81.           </tr>
  82.         </table>
  83.       </form>
  84. <?php
  85. }
  86. if ( $vali and !$err ) {
  87. // formatage des données
  88. $civi_c = substr($_POST['civi'],0,1);
  89. $pnom_c = substr(FormatPnom(mb_convert_encoding(trim($_POST['pnom']),'ISO-8859-1', 'UTF-8,ISO-8859-1')),0,60);
  90. $fnom_c = substr(FormatUp(mb_convert_encoding(trim($_POST['fnom']),'ISO-8859-1', 'UTF-8,ISO-8859-1')),0,60);
  91. $ntel_c = substr(trim($_POST['ntel']),0,30);
  92. //connexion à la base de donnée
  93. $db = pg_connect("host=^_^ user=^_^ password=^_^" );
  94. if(!$db) {
  95. echo $bug_mes;
  96. $bug_str = gmdate('Y-m-d H:i:s').';formulaire.php;connection impossible à la BDD'."\n";
  97. error_log($bug_str, 3, "erreurs.log" );
  98. exit;
  99. }
  100. if(pg_set_client_encoding($db,'LATIN2')){
  101. $bug_str = gmdate('Y-m-d H:i:s').';formulaire.php;changement encodage client impossible'."\n";
  102. error_log($bug_str, 3, 'erreurs.log');
  103. }
  104. //donnees supplementaires
  105. $date = gmdate('Y-m-d H:i:s');
  106. //recuperation d'un n° de sequence unique qui sera envoyé par mail comme n° d'enregistrement
  107. $req = pg_exec($db,"SELECT nextval('[...]_seq');" );
  108. if(!$req) {
  109. echo $bug_mes;
  110. $bug_str = gmdate('Y-m-d H:i:s').';formulaire.php;impossible de recuperer un n° de sequence'."\n";
  111. error_log($bug_str, 3, "erreurs.log" );
  112. exit;
  113. }
  114. $tmp = pg_fetch_row($req);
  115. $nume = $tmp[0];
  116. //on enregiste tout ca dans la base
  117. $req = pg_exec($db,"INSERT INTO [...];" );
  118. if(!$req) {
  119. echo $bug_mes;
  120. $bug_str = gmdate('Y-m-d H:i:s').';formulaire.php;impossible d\'enregister une inscription'."\n";
  121. error_log($bug_str, 3, "erreurs.log" );
  122. exit;
  123. }
  124. else echo '<p>Enregistrement réussi.</p>';
  125. //on ferme la bdd
  126. pg_close($db);
  127. //ensuite on envoi le mail de confirmation de l'inscription
  128. }
  129. ?>
  130.       <hr />
  131.     </div>
  132.   </body>
  133. </html>


Message édité par sylva1n le 15-12-2004 à 11:30:51

---------------
Sylvain ®_©
n°923694
sylva1n
Je suis le gluon de ton ...
Posté le 15-12-2004 à 11:43:41  profilanswer
 

Pour être prevenu par mail en cas de pépin, je fais aussi un  

Code :
  1. error_log($bug_str, 1, 'debug@w00t.org', 'From: debug@w00t.org');


en même temps que le

Code :
  1. error_log($bug_str, 3, "erreurs.log" );


mais je l'ai enlevé pour que le bloc de code soit plus digeste :) ... le vrai formulaire fait 308 lignes, avec plus de champs, et les fonctions de mise en forme du nom (tout en majuscule) et du prénom (majuscule initiales).


---------------
Sylvain ®_©
n°923853
Fred999
Rabat-joie
Posté le 15-12-2004 à 14:51:50  profilanswer
 

Sielfried a écrit :

Je dirais, à la réception du form :
- un flag du genre $erreur, false par défaut ;
- une suite de if vérifiant la validité de chaque champ, avec un echo en cas d'erreur et $erreur qui passe à true ;
- si $erreur vaut true (au moins une erreur), réaffichage du formulaire, sinon affichage du récap.


 
Je fais ça, avec éventuellement un code erreur particulier.

n°961404
nothing
Posté le 24-01-2005 à 23:02:34  profilanswer
 

Dans le cas du réaffichage du formulaire comment y ajouter les valeurs déja entrées. Et comment aussi changer les intitulés à corriger en rouge ?

n°961412
nothing
Posté le 24-01-2005 à 23:10:01  profilanswer
 

Sylva1n,
 
pourrai-tu développer ces problèmes de compatibilité de standard de texte ?
 
Aussi apparement lors d'erreurs tu réaffiche le formulaire avec les champs pré-rempli en recodant tout le formulaire. Ne pourrai-t-on pas envisager placer ce foumulaire dans un .php et ensuite l'appeler avec un include mais dans ce cas est-il toujours possible de modifier certaine propriété du texte dans le formulaire. Le but étant de coder une seule et unique fois le formulaire (pratique en cas de modification).
 
Et pur finir, ton code de formatage des noms en majuscules et des prénoms m'intersse. t'est il possible de le diffuser ?
 
Merci d'avance.

n°961420
sylva1n
Je suis le gluon de ton ...
Posté le 24-01-2005 à 23:20:00  profilanswer
 

Citation :

1. <tr>
2. <td<?php if($pnom_err) echo ' class="red"'; ?>><strong>Prénom</strong>&nbsp;:&nbsp;</td>
3. <td><input name="pnom" type="text" size="60" maxlength="60" value="<?php echo $pnom_aff; ?>"/></td>
4. </tr>


Nothing a écrit :

Dans le cas du réaffichage du formulaire comment y ajouter les valeurs déja entrées.


Ligne 3 : la variable $pnom_aff contient $POST[pnom] une fois nettoyée (codage ISO/UTF, supression du code HTML, ...etc).

Nothing a écrit :

Et comment aussi changer les intitulés à corriger en rouge ?


Ligne 2 : la variable $pnom_err passe à vrai si $POST[pnom] ne passe pas les vérification (les expressions régulières, c'est le pied pour ça)


---------------
Sylvain ®_©
mood
Publicité
Posté le 24-01-2005 à 23:20:00  profilanswer
 

n°961520
nothing
Posté le 25-01-2005 à 02:15:01  profilanswer
 

merci Sylv1n.
Il faut donc utiliser les feuilles de style ou je me plante complétement ? (cd 'class="red"'

n°961589
FlorentG
Posté le 25-01-2005 à 09:36:18  profilanswer
 

Moi j'avais fait ça différement. C'était pour un formulaire d'envoi d'email (facilement modifiable pour l'insertion dans une base de données). En gros on tapotte la page en HTML normal, et on rajoute juste quelques fonctions dans les input, ça donnait quelque chose du genre :

Code :
  1. <?php
  2. require_once('MailForm.php');
  3. $mf = new MailForm(array('lecastor2001@yahoo.fr', 'dotnet@hotmail.fr'), 'Demande de renseignements', 'email', array('nom', 'comment'));
  4. $mf->send_mail();
  5. if($mf->action == NULL || $mf->field_error) {
  6. ?>
  7. <form id="mailform" action="?action=send" method="post">
  8. <div id="mailfields">
  9.  <label for="nom">Nom * :</label> <input id="nom" type="text" name="nom" <?php $mf->text('nom') ?> /><br />
  10.  <label for="email">E-Mail * : </label><input id="email" type="text" name="email" <?php $mf->text('email') ?> /><br />
  11.  <label for="comment">Commentaire * :</label><textarea id="comment" name="comment"><?php $mf->textarea('comment') ?></textarea><br />
  12.  <input type="checkbox" id="list" name="list" <?php $mf->checkbox('list', true) ?> /><label for="list"> S'inscrire à la mailing list</label>
  13. </div>
  14. <p id="mailerror">
  15.  <?php $mf->display_error(); ?>
  16. </p>
  17. <div id="mailbuttons">
  18.  <input id="send" type="submit" value="Envoyer" /><input id="reset" type="reset" value="RAZ" />
  19. </div>
  20. </form>
  21. <?php $mf->generate_verif('mailform'); ?>
  22. <?php  } elseif(!$mf->sent) { ?>
  23. <p>Une erreur est survenue lors de l'envoi de l'e-mail.</p>
  24. <?php } else { ?>
  25. <p>L'e-mail a été envoyé.</p>
  26. <?php } ?>


 
Ca permet de tapotter son formulaire en HTML, et sans trop rajouter de PHP. L'idée en fait, c'est les petites fonctions (genre $mf->text('nom')) qui réaffiche les valeurs si besoin est, et qui permettent aussi de définir des valeurs par défaut. Si ça t'intéresse, j'peut te filer le truc :) Aussi, je gère la validation de l'email s'il y en a un, et un p'tit javascript est généré pour la validation côté client (tout en gardant une validation côté serveur pour ceux qui ont javascript désactivé).

n°961640
sylva1n
Je suis le gluon de ton ...
Posté le 25-01-2005 à 10:30:50  profilanswer
 

Nothing a écrit :

merci Sylv1n.
Il faut donc utiliser les feuilles de style ou je me plante complétement ? (cd 'class="red"'


On peut faire sans ... mais c'est quand même quasiment indispensable d'utiliser les CSS aujourd'hui ! :D


---------------
Sylvain ®_©
n°961705
nothing
Posté le 25-01-2005 à 11:38:48  profilanswer
 

Bon faut que je bosse les feuilles de style...
 
merci encore.

n°962336
nothing
Posté le 25-01-2005 à 21:11:51  profilanswer
 

Ok je me suis donc renseigné sur le CSS.
 
Il faut donc que je réaffiche le formulaire avec les champs déja rempli et appliquer une CSS différente c'est ça ?
 
Mais dans ce cas je suis donc obligé de coder une seconde fois le formulaire ou puis-je faire un include ("formulaire.php" ) et dans ce cas comment remplir les champs avec les données précédentes ?


Message édité par nothing le 25-01-2005 à 21:12:26
n°962343
naceroth
Posté le 25-01-2005 à 21:38:21  profilanswer
 

Nothing a écrit :

Ok je me suis donc renseigné sur le CSS.
 
Il faut donc que je réaffiche le formulaire avec les champs déja rempli et appliquer une CSS différente c'est ça ?
 
Mais dans ce cas je suis donc obligé de coder une seconde fois le formulaire ou puis-je faire un include ("formulaire.php" ) et dans ce cas comment remplir les champs avec les données précédentes ?


 
Non pas appliquer une CSS différente, utiliser une class CSS différente suivant que le champs est correct ou pas, oui


Message édité par naceroth le 25-01-2005 à 21:40:49
n°962380
nothing
Posté le 25-01-2005 à 22:27:49  profilanswer
 

Ok merci naceroth.
 
Et pour passer les valeurs déja écrites suis-je donc obliger de ré-écrire le formulaire ? ou include ?

n°962451
naceroth
Posté le 26-01-2005 à 01:21:16  profilanswer
 

Non, un include du formulaire c'est bon, du moment que ton fichier peut récupérer les données envoyées précédement (et gérer le cas où il en a pas, pour éviter les messages d'erreur idiots :D)

n°964167
nothing
Posté le 27-01-2005 à 23:29:09  profilanswer
 

Ok merci naceroth,
c'est un dans la même optique que je compte m'y prendre.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  controles des champ et correction du formulaire PHP

 

Sujets relatifs
Formulaire et images[PHP]Récupèrer une ressource d'un autre site et l'exploiter
[VB.NEt ]groupe de contrôles et IndexPhp et Html
[HTML/PHP] Réaliser une message boxjpgraph et php
Code source d'un fichier PHPPervasive SQL et php
[PROB] PHP debutant - Retour a la lignepage précédente en php
Plus de sujets relatifs à : controles des champ et correction du formulaire PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR