sylva1n Je suis le gluon de ton ... | 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
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 :
- <?php
- //'gestion' des erreurs
- error_reporting(0);
- $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>';
- //definitions utiles pour la suite
- define('UC_CHARS','ÄÇÈÉËÏÑÖÜ');
- define('LC_CHARS','äçèéëïñöü');
- //fonction de formatage de texte accentué
- function FormatPnom($param) {
- if (!strlen($param)) return '';
- $param = strtolower(strtr($param,UC_CHARS,LC_CHARS));
- $param_1 = explode(' ',$param);
- for ($i = 0; $i < count($param_1); $i++){
- $param_2 = explode('-', $param_1[$i] );
- for ($j = 0; $j < count($param_2); $j++) $param_2[$j]{0} = strtoupper(strtr($param_2[$j]{0},LC_CHARS,UC_CHARS));
- $param_1[$i] = implode('-',$param_2);}
- return implode(' ',$param_1);}
- function FormatUp($param) {
- return strtoupper(strtr($param,LC_CHARS,UC_CHARS));}
- function FormatLow($param) {
- return strtolower(strtr($param,UC_CHARS,LC_CHARS));}
- ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Inscription ^_^</title>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <link type="text/css" rel="stylesheet" href="../style.css" />
- </head>
- <body>
- <p><a href="../../.">Menu principal</a> > <a href="./.">^_^</a> > Inscription en ligne</p>
- <div id="corps">
- <p class="intro">Bienvenue sur le formulaire d'inscription en ligne</p>
- <hr />
- <?php
- // debut de la partie interactive du formulaire
- ( $_POST['vali'] == 'Valider') ? ($vali = TRUE) : ($vali = FALSE);
- //verification des erreurs du formulaires
- if ($vali) {
- $err = FALSE; //on part du principe qu'il n'y a pas d'erreur
- if ( !strlen($_POST['civi']) ) $err = $civi_err = TRUE;
- if ( !strlen($_POST['pnom']) ) $err = $pnom_err = TRUE;
- if ( !strlen($_POST['fnom']) ) $err = $fnom_err = TRUE;
- if ( strlen($_POST['ntel']) < 9 ) $err = $ntel_err = TRUE;
- }
- //conservation des valeurs dans les champs en cas d'erreur
- if ($err) {
- $civi_aff = $_POST['civi'];
- $pnom_aff = stripslashes (utf8_encode(FormatPnom(mb_convert_encoding(trim($_POST['pnom']),'ISO-8859-1', 'UTF-8,ISO-8859-1'))));
- $fnom_aff = stripslashes (utf8_encode(FormatUp(mb_convert_encoding(trim($_POST['fnom']),'ISO-8859-1', 'UTF-8,ISO-8859-1'))));
- $ntel_aff = $_POST['ntel'];
- }
- //affichage initial, ou s'il y a des erreur
- if ( !$vali or $err ) {
- ?>
- <h1>Formulaire :</h1>
- <?php
- 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";
- else echo ' <p>Veuillez saisir les renseignements suivants (les champs en gras doivent impérativemet être renseignés) :</p>'."\n";
- ?>
- <form method="post" accept-charset="ISO-8859-1">
- <table border="0" cellpadding="3" cellspacing="3">
- <tr>
- <td<?php if($civi_err) echo ' class="red"'; ?>><strong>Civilité</strong> : </td>
- <td><input type="radio" name="civi" value="m" <?php if($civi_aff=='m') echo 'checked="checked" '; ?>/>M.
- <input type="radio" name="civi" value="e" <?php if($civi_aff=='e') echo 'checked="checked" '; ?>/>Mme.
- <input type="radio" name="civi" value="l" <?php if($civi_aff=='l') echo 'checked="checked" '; ?>/>Mlle.</td>
- </tr>
- <tr>
- <td<?php if($pnom_err) echo ' class="red"'; ?>><strong>Prénom</strong> : </td>
- <td><input name="pnom" type="text" size="60" maxlength="60" value="<?php echo $pnom_aff; ?>"/></td>
- </tr>
- <tr>
- <td<?php if($fnom_err) echo ' class="red"'; ?>><strong>Nom</strong> : </td>
- <td><input name="fnom" type="text" size="60" maxlength="60" value="<?php echo $fnom_aff; ?>"/></td>
- </tr>
- <tr>
- <td<?php if($ntel_err) echo ' class="red"'; ?>><strong>Nº de téléphone</strong> : </td>
- <td><input name="ntel" type="text" size="30" maxlength="30" value="<?php echo $ntel_aff; ?>"/></td>
- </tr>
- </table>
- </form>
- <?php
- }
- if ( $vali and !$err ) {
- // formatage des données
- $civi_c = substr($_POST['civi'],0,1);
- $pnom_c = substr(FormatPnom(mb_convert_encoding(trim($_POST['pnom']),'ISO-8859-1', 'UTF-8,ISO-8859-1')),0,60);
- $fnom_c = substr(FormatUp(mb_convert_encoding(trim($_POST['fnom']),'ISO-8859-1', 'UTF-8,ISO-8859-1')),0,60);
- $ntel_c = substr(trim($_POST['ntel']),0,30);
- //connexion à la base de donnée
- $db = pg_connect("host=^_^ user=^_^ password=^_^" );
- if(!$db) {
- echo $bug_mes;
- $bug_str = gmdate('Y-m-d H:i:s').';formulaire.php;connection impossible à la BDD'."\n";
- error_log($bug_str, 3, "erreurs.log" );
- exit;
- }
- if(pg_set_client_encoding($db,'LATIN2')){
- $bug_str = gmdate('Y-m-d H:i:s').';formulaire.php;changement encodage client impossible'."\n";
- error_log($bug_str, 3, 'erreurs.log');
- }
- //donnees supplementaires
- $date = gmdate('Y-m-d H:i:s');
- //recuperation d'un n° de sequence unique qui sera envoyé par mail comme n° d'enregistrement
- $req = pg_exec($db,"SELECT nextval('[...]_seq');" );
- if(!$req) {
- echo $bug_mes;
- $bug_str = gmdate('Y-m-d H:i:s').';formulaire.php;impossible de recuperer un n° de sequence'."\n";
- error_log($bug_str, 3, "erreurs.log" );
- exit;
- }
- $tmp = pg_fetch_row($req);
- $nume = $tmp[0];
- //on enregiste tout ca dans la base
- $req = pg_exec($db,"INSERT INTO [...];" );
- if(!$req) {
- echo $bug_mes;
- $bug_str = gmdate('Y-m-d H:i:s').';formulaire.php;impossible d\'enregister une inscription'."\n";
- error_log($bug_str, 3, "erreurs.log" );
- exit;
- }
- else echo '<p>Enregistrement réussi.</p>';
- //on ferme la bdd
- pg_close($db);
- //ensuite on envoi le mail de confirmation de l'inscription
- }
- ?>
- <hr />
- </div>
- </body>
- </html>
|
Message édité par sylva1n le 15-12-2004 à 11:30:51 ---------------
Sylvain ®_©
|