probleme avec formulaire php, enregistrement en db

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme avec formulaire php, enregistrement en db

par Truc » 19 mars 2006, 23:59

en fait j'ai fait ça en xhtml et sa me convient parfaitement :wink:
En XHTML, c'est à dire ? Javascript peut être,non ?

par BeRoots » 19 mars 2006, 22:36

en fait j'ai fait ça en xhtml et sa me convient parfaitement :wink:

en plus je croit que c'était pas possible vue que j'étais obliger de traiter du html avant header :-k

en tout cas je tient à remercier tout ceux qui mon aider sur ce formulaire du début à la fin car j'ai emormement progresse malgré toutes ces galères :)

ENCORE MERCI A TOUS =D>

BeRoots, qui n'a pas fini de galèrer et qui se sent un brin masochiste car il aime ça :langue:

par BeRoots » 19 mars 2006, 21:54

j'ai essayer de mettre HEADER en fonction au tout debut du code et de l'appeler en fin de ma boucle mais ça passe pas :(

ensuite j'ai externaliser ma fonction dans un fichier.php et l'ai recuperer en include dans ma boucle juste avant de l'appeler, mais ça marche pas non plus :cry:

je me demande si c'est réelement faisable d'utilisé header dans mon cas :-k

si quelqu'un pense que c'est faisable, merci de m'expliquer :wink:

sinon je ferai en xhtml via un petit lien à afficher :roll:

par Truc » 19 mars 2006, 21:26

L'erreur vient du HEADER, il ne doit pas y avoir de code HTML (<HTML>,<BODY>,...)ou affichage (rien ne doit être envoyé) avant celui-ci.

Essaie de placer le code PHP avant tout affichage.

par BeRoots » 19 mars 2006, 21:17

me revoilou :)

voila ce que ça m'affiche:
pass 1 : mot2pass
pass 2 : mot2pass
pass 3 : mot2pass
pass 4 : INSERT INTO table_membre (pseudo, mpass, prenom, nom, phone, email, adresse, postal, ville, datenaiss) VALUES('pseudozzz', 'mot2pass', 'prenomzzz', 'nomzzz', '0000000000', '[email protected]', 'lieu dit nosaure', '00000', 'pekin', '1979-12-15')
j'ai trouver mon erreur grace à toi :wink:

mon champs de formulaire avait toujour l'ancien name="pass" :oops:

merci beacoup :pouce:

par contre je n'arrive pas à faire une redirection en fin de cette boucle :?

j'ai essayer ceci:
elseif(isset($_POST['save']))
{
    // on re_recupere toutes les variables contenus dans le second formulaire
    $pseudo    = isset($_POST['pseudo'])    ? trim($_POST['pseudo'])    : "";
    $mpass     = isset($_POST['mpass'])     ? trim($_POST['mpass'])     : "";
    $passverif = isset($_POST['passverif']) ? trim($_POST['passverif']) : "";
    $prenom    = isset($_POST['prenom'])    ? trim($_POST['prenom'])    : "";
    $nom       = isset($_POST['nom'])       ? trim($_POST['nom'])       : "";
    $phone     = isset($_POST['phone'])     ? trim($_POST['phone'])     : "";
    $email     = isset($_POST['email'])     ? trim($_POST['email'])     : "";
    $adresse   = isset($_POST['adresse'])   ? trim($_POST['adresse'])   : "";
    $postal    = isset($_POST['postal'])    ? trim($_POST['postal'])    : "";
    $ville     = isset($_POST['ville'])     ? trim($_POST['ville'])     : "";
    $annee     = isset($_POST['annee'])     ? trim($_POST['annee'])     : "";
    $mois      = isset($_POST['mois'])      ? trim($_POST['mois'])      : "";
    $jour      = isset($_POST['jour'])      ? trim($_POST['jour'])      : "";

    // mise au format ISO de la date de naissance
    $datenaiss_sql = "$annee-$mois-$jour";

    //connexion au serveur MySQL
    include ("sql_connection.php");
    $connexion = mysql_connect($host, $user, $pass) or die('Erreur SQL !<br />'.$connexion.'<br />'.mysql_error());

    //sélection de la BDD
    $db = mysql_select_db($usebdd,$connexion) or die('Erreur SQL !<br />'.$db.'<br />'.mysql_error());
    
    // insertion des données recuperer dans la table
    
    $sql = "INSERT INTO " . $table2 . " (pseudo, mpass, prenom, nom, phone, email, adresse, postal, ville, datenaiss) VALUES('$pseudo', '$mpass', '$prenom', '$nom', '$phone', '$email', '$adresse', '$postal', '$ville', '$datenaiss_sql')";
    $result = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    
    // déconnection avec MySQL
    mysql_close();
    
    // XXXXXXXXXXXXX redirection C'EST ICI XXXXXXXXXXXXXXXXXXX
    header("location: index.php");
    exit;
}
j'ai bien le fichier index.php dans le même dossier mais sa me met le message d'erreur suivant:
Warning: Cannot modify header information - headers already sent by (output started at c:\...\form_inscription23_final.php:12) in c:\...\form_inscription23_final.php on line 307
si vous pouvez m'expliquer :wink:

par Truc » 19 mars 2006, 20:17

Oh ben qui ne tente rien n'a rien :lol:

tu dis que la valeur (passe) est bien dans le champ associé du 2eme formulaire. Donc il doit forcément transiter avec les autres. Effectue un test d'affichage:
elseif(isset($_POST['save']))
{
    echo "pass 1 : ".$_POST['pass']."<br />" ;

    // on re_recupere toutes les variables contenus dans le second formulaire
    $pass      = isset($_POST['pass'])      ? trim($_POST['pass'])      : "";
    $prenom    = isset($_POST['prenom'])    ? trim($_POST['prenom'])    : "";
    $nom       = isset($_POST['nom'])       ? trim($_POST['nom'])       : ""; 

    echo "pass 2 : ".$pass."<br />" ;

    //connexion au serveur MySQL
    include ("sql_connection.php");
    $connexion = mysql_connect($host, $user, $pass) or die('Erreur SQL !<br />'.$connexion.'<br />'.mysql_error());
   
    echo "pass 3 : ".$pass."<br />" ;

     //sélection de la BDD
    $db = mysql_select_db($usebdd,$connexion) or die('Erreur SQL !<br />'.$db.'<br />'.mysql_error());
    
    // insertion des données recuperer dans la table    
    $sql = "INSERT INTO " . $table2 . " (pass, prenom, nom) VALUES('$pass', '$prenom', '$nom')";
    
    echo "pass 4 : ".$sql."<br />" ;

    $result = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    
    // déconnection avec MySQL
    mysql_close();
    
    // redirection
    header("location: index.php");
    exit; 
}
et reviens nous voir avec l'affichage

SS

par BeRoots » 19 mars 2006, 20:08

bien vue Mme IRMA :lol: mais ça ne suffira pas :(

j'ai remplacer toutes mes variables $pass des formulaires par $mpass et ça marche pas non plus :?

j'ai aussi vue que l'on pouvait definir un champs PASSWORD sur une table de db, donc j'ai essayer mais ça passe pas non plus avec un champ de type PASSWORD et ma requete mise à jour :cry:

je sait plus du tout quoi faire là :-k


si quelqu'un à une idée :pouce:

par Truc » 19 mars 2006, 16:53

j'ai sorti ma boule de cristal pour l'occasion et elle me dit:

Tu inclus un fichier de connexion qui est :
sql_connection.php

dans ce fichier tu as une varaible qui porte le doux nom de $pass qui est initialisé à "" (vide) et donc la variable $pass du formulaire et écrasée par celle ci :wink:

change l'un des noms 8)

par BeRoots » 19 mars 2006, 15:39

en echo la variable s'affiche bien :wink:

voila le bout de code:
        <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
        <!-- XXXXXXXXXX ici des champs cacher pour recuperer les valeurs du premier formulaire XXXXXXXXXX-->
        <input type="hidden" name="pass" value="<?php echo $pass ?>" />
        <input type="hidden" name="prenom" value="<?php echo $prenom ?>" />
        <input type="hidden" name="nom" value="<?php echo $nom ?>" />
        <!-- XXXXXXXXXX ici le imput submit XXXXXXXXXX-->
        <input type="submit" class="verif" name="save" tabindex="1" value="S'enregistrer" />
        </form>

<?php
    }
}
    // enregistement en base de donnée dans une table
elseif(isset($_POST['save']))
{
    // on re_recupere toutes les variables contenus dans le second formulaire
    $pass      = isset($_POST['pass'])      ? trim($_POST['pass'])      : "";
    $prenom    = isset($_POST['prenom'])    ? trim($_POST['prenom'])    : "";
    $nom       = isset($_POST['nom'])       ? trim($_POST['nom'])       : "";

    //connexion au serveur MySQL
    include ("sql_connection.php");
    $connexion = mysql_connect($host, $user, $pass) or die('Erreur SQL !<br />'.$connexion.'<br />'.mysql_error());
    
    //sélection de la BDD
    $db = mysql_select_db($usebdd,$connexion) or die('Erreur SQL !<br />'.$db.'<br />'.mysql_error());
    
    // insertion des données recuperer dans la table
    
    $sql = "INSERT INTO " . $table2 . " (pass, prenom, nom) VALUES('$pass', '$prenom', '$nom')";
    $result = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    
    // déconnection avec MySQL
    mysql_close();
    
    // redirection
    header("location: index.php");
    exit;
}
c'est bizard car c'est le seul qui passe pas :-k

par Truc » 19 mars 2006, 15:25

sans voir le code du champ du formulaire et la récupération on ne peut pas deviner la provenance du problème :wink:

La reqête semble bonne... affiche le contenu de la varaible $pass pour voir

par BeRoots » 19 mars 2006, 15:02

ok j'ai reussi à tout faire \:D/

par contre il me reste un détail à regler :?

parmis tout mes champs de formulaire, j'ai un mot de pass.
Il est bien recuperer du 1er formulaire vers le second :wink:
Dans le second formulaire il est stocker dans un champs de type hidden (cacher) et le pass est bien present dedant :wink:

par contre pas moyen de l'enregistrer dans ma table alors que tout les autres sont bien enregistrer :cry:

(notons qu'il n'est pas encore soumit à un script de cryptage pour l'instant mais je verai ça plus tard)

voici ma requete sql:
    $sql = "INSERT INTO " . $table2 . " (pseudo, pass, prenom, nom, phone, email, adresse, postal, ville, datenaiss) VALUES('$pseudo', '$pass', '$prenom', '$nom', '$phone', '$email', '$adresse', '$postal', '$ville', '$datenaiss_sql')";
voici ma requete de création de la table:

Code : Tout sélectionner

CREATE TABLE table_membre( id int(11) AUTO_INCREMENT , pseudo VARCHAR(20) NOT NULL , pass VARCHAR(20) NOT NULL , prenom VARCHAR(40) NOT NULL , nom VARCHAR(40) NOT NULL , phone CHAR(10) NOT NULL , email VARCHAR(40) NOT NULL , adresse VARCHAR(40) NOT NULL , postal CHAR(5) NOT NULL , ville VARCHAR(40) NOT NULL , datenaiss date NOT NULL , PRIMARY KEY (id) )
si quelqu'un peut m'expliquer :pouce:

par BeRoots » 19 mars 2006, 14:10

ok merci :wink:

je vait voir si j'arrive à faire les champs hidden et je vous tient au jus :pouce:

par Truc » 19 mars 2006, 13:54

Il y a coufouillage avec les validation des formulaires,

Tu englobes tout le traitement dans un test qui verifie si le 1er tormulaires est validé:
if(isset($_POST['envoi']))
ça c'est ok MAIS ensuite le test du 2eme formulaire y est également mais cette variable n'existe plus après validation du 2eme formulaire donc tu n'entres jamais dans le traitement BD.

Proposition:
<?
if(isset($_POST['envoi']))
{
    /* Récupération des données du formulaire */
    $prenom    = isset($_POST['prenom'])    ? trim($_POST['prenom'])    : "";
    $nom       = isset($_POST['nom'])       ? trim($_POST['nom'])       : "";
    $datenaiss = isset($_POST['datenaiss']) ? trim($_POST['datenaiss']) : "";


    /**
     * Définition de la variable servant pour definir le format de la date de naissance
     * on utilise ici des expressions régulières.
     */
    $valid_format_datenaiss = "#(\d{2})/(\d{2})/(\d{4})$#";

    /* Définition des variables de verification de la validité de la date */
    $jour = substr($datenaiss, 0, 2);
    $mois = substr($datenaiss, 3, 2);
    $annee = substr($datenaiss, 6, 4);

    /**
     * Traitement de vérification des champs vides ou invalides (phone, date, postal et/ou email)
     * Conditions de mauvaises réponses (champ vide par exemple)
     */
    if ($prenom == '' || $nom == '' || $datenaiss == '' ||!(preg_match($valid_format_datenaiss,$datenaiss)) || (($datenaiss) && (preg_match($valid_format_datenaiss,$datenaiss)) && (checkdate($mois, $jour, $annee) == false)))
    {
        /* Action à adopter */
?>
                <p class="titre">Informations incomplètes</p>
                <p>Un (ou plusieurs) champ(s) obligatoire(s) n'a(ont) pas été correctement rempli(s).</p>

<?php
        if ($prenom == '')
        {
            /* Si le champ prenom est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre prénom</p>\n";
        }
        if ($nom == '')
        {
            /* Si le champ nom est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre nom</p>\n";
        }
        if(!$datenaiss)
        {
            /* Si le champ datenaiss est vide, */
            print "<p class='error'>Vous avez omis de mentionner votre date de naissance</p>\n";
        }
        if(($datenaiss) && !(preg_match($valid_format_datenaiss, $datenaiss)))
        {
            /* Si il y a une date inscrite mais invalide */
            print "<p class='error'>Le format de la date de naissance saisie est invalide !</p>\n";
        }
        /* Si il y a une date inscrite, au bon format, mais invalide */
         if (($datenaiss) && (preg_match($valid_format_datenaiss,$datenaiss)) && (checkdate($mois, $jour, $annee) == false))
         {
            print "<p class='error'>La date de naissance saisie est invalide !</p>\n";
         }

        /**
         * Si les vérifications ont généré des erreurs, affichage du formulaire
         * contenant les données déjà saisies.
         */
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
  <p class="legend"><b>&nbsp;Donn&eacute;es personnelles&nbsp;</b></p>
  <fieldset>
  <label for="label_prenom">Votre pr&eacute;nom :</label><span class="etoile">*</span><input type="text" id="label_prenom" name="prenom" maxlength="40" class="cases" value="<?php echo $prenom ?>" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_nom">Votre Nom de famille :</label><span class="etoile">*</span><input type="text" id="label_nom" name="nom" maxlength="40" class="cases" value="<?php echo $nom ?>" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_datenaiss">Votre date de naissance :</label><input type="text" id="label_datenaiss" name="datenaiss" maxlength="10" class="cases" value="<?php echo $datenaiss ?>" /><a href="#" class="info" title="Format JJ/MM/AAAA !">?</a><br />
  <div class="c3">
  <input type="submit" class="verif" name="envoi" value="Envoyer" />&nbsp;<input type="reset" class="verif" value="Recommencer" />
  </div>
  </fieldset>
</form>
<?php
    }
    else
    {
        /**
         * Si aucun des champs obligatoire n'est vide et les données sont valides:
         * Traitement des données
         */

        // Affichage du message final des informations reçues
?>
        <p class='titre'>Merci ! Voici les informations fournies</p>
        <h3>Informations sur le membre:</h3>
        <h3>Informations sur le contact:</h3>
        <p class='info_recup'><?php echo ($nom)?> <?php echo ($prenom) ?></p>
        <p><span class='info_style'>Né(e) le:</span> <span class='info_recup'><?php echo ($datenaiss)?></span></p>
        <p class='info_style2'>Si vous souhaitez modifier ces informations, cliquez <a href="javascript:history.back();" title="Retour vers le formulaire">ICI</a></p>
        <hr>
        <h3>Validation des informations</h3>
        <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post"><input type="submit" class="verif" name="save" value="S'enregistrer" /></form>

<?php
        // enregistement en base de donnée dans une table
	}
}
//************************
//*** ICI modification test ***
//************************
elseif(isset($_POST['save'])) 
{
	// mise au format ISO de la date de naissance
	$datenaiss_sql = "$annee-$mois-$jour";
	
	// cryptage du pass
	
	//connexion au serveur MySQL
	include ("sql_connection.php");
	$connexion = mysql_connect($host, $user, $pass) or die('Erreur SQL !<br />'.$connexion.'<br />'.mysql_error());
	
	//sélection de la BDD
	$db = mysql_select_db($usebdd,$connexion) or die('Erreur SQL !<br />'.$db.'<br />'.mysql_error());
	
	// insertion des données recuperer dans la table
	
	$sql = "INSERT INTO " . $table2 . " (prenom, nom, datenaiss) VALUES('$prenom', '$nom', '$datenaiss_sql')";
	$result = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
	
	// déconnection avec MySQL
	mysql_close();
	
	// redirection
	header("location: index.php");
	exit;
}  
/**
* Si cette page s'ouvre pour la première fois sans que le bouton soumettant le formulaire n'ait
* été cliqué, alors on affiche le formulaire normalement
*/
else
{
?>
<p class="titre">Complétez les informations pour ajouter votre nom à la liste des membres</p>
<p>Notez que les champs précédés d'une <span class="etoile">*</span>doivent obligatoirement être remplis.</p>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
  <p class="legend"><b>&nbsp;Donn&eacute;es personnelles&nbsp;</b></p>
  <fieldset>
  <label for="label_prenom">Votre pr&eacute;nom :</label><span class="etoile">*</span><input type="text" id="label_prenom" name="prenom" maxlength="40" class="cases" tabindex="4" value="" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_nom">Votre Nom de famille :</label><span class="etoile">*</span><input type="text" id="label_nom" name="nom" maxlength="40" class="cases" tabindex="5" value="" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_datenaiss">Votre date de naissance :</label><input type="text" id="label_datenaiss" name="datenaiss" maxlength="10" class="cases" tabindex="11" value="" /><a href="#" class="info" title="Format JJ/MM/AAAA !">?</a><br />
  <div class="c3">
  <input type="submit" class="verif" name="envoi" tabindex="12" value="Envoyer" />&nbsp;<input type="reset" class="verif" tabindex="13" value="Recommencer" />
  </div>
  </fieldset>
</form>
<?php
}
?>
</div>
</body>
</html>
Mais attention tu dois passer le contenu des champs du 1er formulaire au 2eme (dans des champs cachés par exemple) sinon tu ne retrouves pas les variables => $annee-$mois-$jour et $prenom', '$nom', '$datenaiss_sql

par BeRoots » 19 mars 2006, 13:40

si la solution est plus compliquer, et tout cas ma reponse est simple:
c'est pour permettre au visiteur de modifier ces info si elle sont erronées :wink:


j'ai pas vraiment envie d'avoir un bouton soumettre et un enregistrer l'un à coté de l'autre car sa serai moins claire et je veut être certain que:
1) les données sont correct
2) quel ont passer mes filtres (regex pour la validiter et la securité)

désolé pour la tartine mais je vais remettre le code complet car ça sera plus facile à comprendre, et possible de tester en local. J'ai retirer une dixaine de champs pour l'alegé un peu :wink:

le voilà:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<html>

<head>

<title>:: Formulaire d'inscription ::</title>
<style type="text/css">
/* <![CDATA[ */
body {text-align: center; background-color: white; }
#page {width : 525px; margin-left: auto; margin-right: auto; color: black; background-color: gray; border: 1px solid black; text-align: center; padding: 10px;}
.titre {font-family: verdana, helvetica, sans-serif; font-size: 1.4em; font-weight: bold; text-decoration: underline; text-align: center; margin: 0; padding: 0; color: red;}
p {font-family: verdana, helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-align: left; color: black;}
label {float: left; font-family: verdana, helvetica, sans-serif; font-size: 10pt; font-weight: bold; }
fieldset {width: 500px; padding: 10px; text-align: right; border: 3px double #FF8C00; margin: 0; clear: left; background-color: navy;}
input {border: 1px solid #066; background-color: #ff9; color: black; }
input.cases {width: 200px; margin-top: 3px; }
input.verif  {width: 150px; height: 30px; background-color: blue; font-weight : bold; padding: 0; margin: 0; border: 0; cursor: pointer;}
input.verif:hover {background-color: cyan;}
div.c3 {text-align:center; margin-top: 1em;}
.etoile {color: red; font-size: 1.3em; font-weight: normal; vertical-align: middle; margin-right: 5px;}
.legend {background-color: red; border: 3px double #FF8C00; margin-top: 10px; margin-bottom: 5px; float: left;}
.error {text-align: left; color: red !important;}
.info {font-family: verdana, helvetica, sans-serif; font-size: 14pt; font-style: italic; font-weight: normal; text-decoration: none; cursor: help; color: black ;}
.info:hover {color: gray;}
/* ]]> */
</style>

</head>
<body>
<div id="page">
<?php
/**
* On commence par vérifier si le bouton soumettant le formulaire a été
* cliqué, "envoi" étant l'attribut "name" du bouton "submit"
* Sinon, on saute à la ligne 166 de ce code.
*/
if(isset($_POST['envoi']))
{
    /* Récupération des données du formulaire */
    $prenom    = isset($_POST['prenom'])    ? trim($_POST['prenom'])    : "";
    $nom       = isset($_POST['nom'])       ? trim($_POST['nom'])       : "";
    $datenaiss = isset($_POST['datenaiss']) ? trim($_POST['datenaiss']) : "";


    /**
     * Définition de la variable servant pour definir le format de la date de naissance
     * on utilise ici des expressions régulières.
     */
    $valid_format_datenaiss = "#(\d{2})/(\d{2})/(\d{4})$#";

    /* Définition des variables de verification de la validité de la date */
    $jour = substr($datenaiss, 0, 2);
    $mois = substr($datenaiss, 3, 2);
    $annee = substr($datenaiss, 6, 4);

    /**
     * Traitement de vérification des champs vides ou invalides (phone, date, postal et/ou email)
     * Conditions de mauvaises réponses (champ vide par exemple)
     */
    if ($prenom == '' || $nom == '' || $datenaiss == '' ||!(preg_match($valid_format_datenaiss,$datenaiss)) || (($datenaiss) && (preg_match($valid_format_datenaiss,$datenaiss)) && (checkdate($mois, $jour, $annee) == false)))
    {
        /* Action à adopter */
?>
                <p class="titre">Informations incomplètes</p>
                <p>Un (ou plusieurs) champ(s) obligatoire(s) n'a(ont) pas été correctement rempli(s).</p>

<?php
        if ($prenom == '')
        {
            /* Si le champ prenom est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre prénom</p>\n";
        }
        if ($nom == '')
        {
            /* Si le champ nom est vide, */
            print "<p class='error'>Vous n'avez pas précisé votre nom</p>\n";
        }
        if(!$datenaiss)
        {
            /* Si le champ datenaiss est vide, */
            print "<p class='error'>Vous avez omis de mentionner votre date de naissance</p>\n";
        }
        if(($datenaiss) && !(preg_match($valid_format_datenaiss, $datenaiss)))
        {
            /* Si il y a une date inscrite mais invalide */
            print "<p class='error'>Le format de la date de naissance saisie est invalide !</p>\n";
        }
        /* Si il y a une date inscrite, au bon format, mais invalide */
         if (($datenaiss) && (preg_match($valid_format_datenaiss,$datenaiss)) && (checkdate($mois, $jour, $annee) == false))
         {
            print "<p class='error'>La date de naissance saisie est invalide !</p>\n";
         }

        /**
         * Si les vérifications ont généré des erreurs, affichage du formulaire
         * contenant les données déjà saisies.
         */
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
  <p class="legend"><b>&nbsp;Donn&eacute;es personnelles&nbsp;</b></p>
  <fieldset>
  <label for="label_prenom">Votre pr&eacute;nom :</label><span class="etoile">*</span><input type="text" id="label_prenom" name="prenom" maxlength="40" class="cases" value="<?php echo $prenom ?>" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_nom">Votre Nom de famille :</label><span class="etoile">*</span><input type="text" id="label_nom" name="nom" maxlength="40" class="cases" value="<?php echo $nom ?>" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_datenaiss">Votre date de naissance :</label><input type="text" id="label_datenaiss" name="datenaiss" maxlength="10" class="cases" value="<?php echo $datenaiss ?>" /><a href="#" class="info" title="Format JJ/MM/AAAA !">?</a><br />
  <div class="c3">
  <input type="submit" class="verif" name="envoi" value="Envoyer" />&nbsp;<input type="reset" class="verif" value="Recommencer" />
  </div>
  </fieldset>
</form>
<?php
    }
    else
    {
        /**
         * Si aucun des champs obligatoire n'est vide et les données sont valides:
         * Traitement des données
         */

        // Affichage du message final des informations reçues
?>
        <p class='titre'>Merci ! Voici les informations fournies</p>
        <h3>Informations sur le membre:</h3>
        <h3>Informations sur le contact:</h3>
        <p class='info_recup'><?php echo ($nom)?> <?php echo ($prenom) ?></p>
        <p><span class='info_style'>Né(e) le:</span> <span class='info_recup'><?php echo ($datenaiss)?></span></p>
        <p class='info_style2'>Si vous souhaitez modifier ces informations, cliquez <a href="javascript:history.back();" title="Retour vers le formulaire">ICI</a></p>
        <hr>
        <h3>Validation des informations</h3>
        <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post"><input type="submit" class="verif" name="save" value="S'enregistrer" /></form>

<?php
        // enregistement en base de donnée dans une table

           if(isset($_POST['save']))
           {
           // mise au format ISO de la date de naissance
           $datenaiss_sql = "$annee-$mois-$jour";

           // cryptage du pass

           //connexion au serveur MySQL
           include ("sql_connection.php");
           $connexion = mysql_connect($host, $user, $pass) or die('Erreur SQL !<br />'.$connexion.'<br />'.mysql_error());

           //sélection de la BDD
           $db = mysql_select_db($usebdd,$connexion) or die('Erreur SQL !<br />'.$db.'<br />'.mysql_error());

           // insertion des données recuperer dans la table

           $sql = "INSERT INTO " . $table2 . " (prenom, nom, datenaiss) VALUES('$prenom', '$nom', '$datenaiss_sql')";
           $result = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

           // déconnection avec MySQL
           mysql_close();

           // redirection
           header("location: index.php");
           exit;
           }

    }
}
/**
* Si cette page s'ouvre pour la première fois sans que le bouton soumettant le formulaire n'ait
* été cliqué, alors on affiche le formulaire normalement
*/
else
{
?>
<p class="titre">Complétez les informations pour ajouter votre nom à la liste des membres</p>
<p>Notez que les champs précédés d'une <span class="etoile">*</span>doivent obligatoirement être remplis.</p>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
  <p class="legend"><b>&nbsp;Donn&eacute;es personnelles&nbsp;</b></p>
  <fieldset>
  <label for="label_prenom">Votre pr&eacute;nom :</label><span class="etoile">*</span><input type="text" id="label_prenom" name="prenom" maxlength="40" class="cases" tabindex="4" value="" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_nom">Votre Nom de famille :</label><span class="etoile">*</span><input type="text" id="label_nom" name="nom" maxlength="40" class="cases" tabindex="5" value="" /><a href="#" class="info" title="Lettres uniquement !">?</a><br />
  <label for="label_datenaiss">Votre date de naissance :</label><input type="text" id="label_datenaiss" name="datenaiss" maxlength="10" class="cases" tabindex="11" value="" /><a href="#" class="info" title="Format JJ/MM/AAAA !">?</a><br />
  <div class="c3">
  <input type="submit" class="verif" name="envoi" tabindex="12" value="Envoyer" />&nbsp;<input type="reset" class="verif" tabindex="13" value="Recommencer" />
  </div>
  </fieldset>
</form>
<?php
}
?>
</div>
</body>
</html>
si quelqu'un à une solution à me proposer :pouce:

par Truc » 19 mars 2006, 13:16

en fait j'ai deux formulaires different dans le même fichier php
l'un est destiné à recuperer et soumettre des informations et l'autre à les enregistrer en db :wink:
Et pourquoi ne pas faire les deux dans le même formulaire ?

Traitement des champs et s'ils sont tous ok enregistrement en BD.