IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Validation d'un formulaire


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de Strix
    Inscrit en
    Novembre 2006
    Messages
    632
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 632
    Points : 607
    Points
    607
    Par défaut Validation d'un formulaire
    Bonjour.

    Alors je souhaiterais que PHP vérifie si des champs sont bien remplis. J'ai trouvé les formules pour cela mais mon soucis est en fait le placement de ces formules. Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    <?php
    if($_POST['action'] == 'submitted')
    {
    	$adress = "web@xxxx.fr";
    	$sujet = "$_POST[sujet]";
    	$from = "From: ".$_POST[email]."\n";
    	$from .= "MIME-version: 1.0\n";
    	$from .= "Content-type: text/html; charset= iso-8859-1\n"; 
     
    	$message='
    	<table border="0" cellspacing="0" cellpadding="0">
             <tr>
               <td>Nom</td>
               <td>'.$_POST[nom].'</td>
             </tr>
             <tr>
               <td>Prénom</td>
               <td>'.$_POST[prenom].'</td>
             </tr>
             <tr>
               <td>&nbsp;</td>
               <td>'.$_POST[societe].'</td>
             </tr>
             <tr>
               <td>E-mail</td>
               <td>'.$_POST[email].'</td>
             </tr>
             <tr>
               <td>Sujet</td>
               <td>'.$_POST[sujet].'</td>
             </tr>
             <tr>
               <td>Message</td>
               <td>'.$_POST[mess].'</td>
             </tr>
           </table>';
     
    	mail($adress, $sujet, $message, $from);
     
    	              //page de sortie
    	$insertGoTo = "http://www.strix.fr/messok.php?lang=$lang";
    //	if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    //    	$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    //		$insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
    //		}
    	header(sprintf("Location: %s", $insertGoTo));
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    ...
    <body>
    <div id="info"><span class="Categorie"><?php echo comgen; ?></span><br>
    	<form name="forml" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
           <table border="0" cellspacing="0" cellpadding="0">
             <tr>
               <td>Nom</td>
               <td><input name="nom" type="text" id="nom"></td>
             </tr>
             <tr>
               <td>Prénom</td>
               <td><input name="prenom" type="text" id="prenom"></td>
             </tr>
             <tr>
               <td>Société</td>
               <td><input name="societe" type="text" id="societe"></td>
             </tr>
             <tr>
               <td>E-mail</td>
               <td><input name="email" type="text" id="email"></td>
             </tr>
             <tr>
               <td>Sujet</td>
               <td><input name="sujet" type="text" id="sujet"></td>
             </tr>
             <tr>
               <td>Message</td>
               <td><textarea name="mess" cols="68" rows="10" id="mess"></textarea></td>
             </tr>
           </table>
          <table cellpadding="2" cellspacing="0">
              <tr>
                <td class="centre" colspan="3"><input name="Annuler" type="reset" id="Annuler2" value="<?php echo annule; ?>">
                  <input type="hidden" name="action" value="submitted">
                  <input name="Envoyer" type="submit" id="Envoyer2" value="<?php echo envoie; ?>">
                </td>
              </tr>
          </table>
          </form>
    </div>
    ...
    </html>
    ensuite je sais qu'on utilise des formules du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (empty($nom)) 
    { 
    echo "Vous n'avez pas saisi votre nom"; 
    }
    ou pour une adresse mail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$email)) 
    { 
    echo "l'adresse mail est invalide"; 
    }
    Et où apparaissent les messages d'erreurs ?

    Et autant poser la question tout de suite :
    Si jamais il y a une erreur par exemple avec le mail, quand l'utilisateur a de nouveau le formulaire, devra-til à nouveau les champs valides ? Y a-t-il une formule spéciale pour cela ?

    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Chacun sa méthode pour faire ce genre de choses, un bon compromis entre ergonomie et developpement est selon moi de diviser le travail en deux parties.
    Une partie CLIENT:
    La tu fais du javascript qui gere la verification des champs:
    par exemple tu as ton formulaire, le bouton de validation devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="button" onClick="javascript:testform()">
    Dans l'entete de ta page tu crees une fonctions js testform. Imaginons que ton formulaire form1 contienne un champ texte appellé text1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function testform(){						if(document.form1.text1.value!=''){
    						document.form1.submit();
    						}else
    						{
    							alert('champ txt1 vide');
    							document.form1.txt1.focus();
    						}
    }
    Ensuite, coté SERVEUR:

    Comme la partie client ne garantie rien en terme de verfication des données, tu dois revérifier ces données en PHP comme tu l'as fait. Là au choix, soit tu pars du principe que tu veux seulement des messages d'erreur javascript, dans ce cas, le code que tu as proposé dans ton message suffit.

    Soit tu veux remettre une couche de message d'erreur (au cas par exemple, ou ton visiteur n'ait pas javascript):
    dans ce cas tu peux imaginer le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(!empty(trim($_POST['txt1']))){
    //traitement
    }else
    {
      $message_erreur.="Champ txt1 non rempli";
      $erreur=true;
    }
     
    if($erreur){
      echo $message_erreur;
    }

  3. #3
    Membre confirmé Avatar de Strix
    Inscrit en
    Novembre 2006
    Messages
    632
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 632
    Points : 607
    Points
    607
    Par défaut
    ok merci, je vais voir tout ça

  4. #4
    Membre confirmé Avatar de Strix
    Inscrit en
    Novembre 2006
    Messages
    632
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 632
    Points : 607
    Points
    607
    Par défaut
    Bon je vais jouer les lourdeaux (milles excuses) mais...

    J'y arrive pas en ce qui concerne le php, je n'arrive pas à "placer" la vérification dand le php.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Points : 132
    Points
    132
    Par défaut
    Eh bien au tout début du code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    $deb_page = '<html><head> ... <body> ...';
    $fin_page = ' ... </body></html>';
    if(empty(trim($_POST['txt1'])))
    {
     echo $deb_page;
     echo 'Champ txt1 non rempli';
     echo $fin_page;
     exit;
    }
    // ...
    ?>
    Après, si le formulaire se soumet lui-même (form action="form1.php" et form1.php c'est le formulaire), il faut ajouter un test :
    si on a <input type="submit" name"submit1" value="valider">
    on fera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    if (isset($_POST['submit1']))
    {
    // contrôle + traitement du formulaire
    }
    else
    {
    // affichage du formulaire
    }
    ?>

  6. #6
    Membre confirmé Avatar de Strix
    Inscrit en
    Novembre 2006
    Messages
    632
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 632
    Points : 607
    Points
    607
    Par défaut
    Bonjour bonjour...

    Bon j'arrive à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php	
    if($_POST['action'] == 'submitted') {
    if (empty($nom ))  { echo "Vous n'avez pas saisi votre nom"; }
    elseif (empty($prenom ))  { echo "Vous n'avez pas saisi votre prenom"; }
    elseif (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$email))  { echo "Vous n'avez pas saisi votre email"; }
    elseif (empty($sujet ))  { echo "Vous n'avez pas saisi de sujet"; }
    elseif (empty($mess ))  { echo "Vous n'avez pas saisi de message"; }
    else
    {
    	$adress = "web@strix.fr";
    	$sujet = "$_POST[sujet]";
    	$from = "From: ".$_POST[email]."\n";
    	$from .= "MIME-version: 1.0\n";
    	$from .= "Content-type: text/html; charset= iso-8859-1\n"; 
     
    	$message='
    	'.$_POST[nom].' '.$_POST[prenom].'<br>
    	'.$_POST[societe].'<br>
    	'.$_POST[email].'<br><br>
    	'.$_POST[sujet].'<br>
    	'.$_POST[mess].'
    	';
     
    	mail($adress, $sujet, $message, $from);
     
    	//page de sortie
    	$insertGoTo = "http://www.strix.fr/sondmerci.php?lang=$lang";
    	if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
       	$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    		$insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
    		}
    	header(sprintf("Location: %s", $insertGoTo));
    }
    }
    Les soucis :

    - Comment faire pour que l'utilisateur n'est pas à retaper les informations qui sont valides ?

    - Comment faire apparaître les echo dans la div et non pas en dehors ?

    Re-merci

    Edit : le code compris dans la partie HTML n'a pas changé

  7. #7
    Membre confirmé Avatar de Strix
    Inscrit en
    Novembre 2006
    Messages
    632
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 632
    Points : 607
    Points
    607
    Par défaut
    Voilà le code actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    	<?php	
    		if($_POST['action'] == 'submitted') {
    		if ((empty($nom ))
    		||(empty($prenom ))
    		||(empty($objet ))
    		||(empty($mess ))
    		||(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$email)))
    		echo "ERREUR"; 
    		}
    		else
    		{
    			$adress = "web@strix.fr";
    			$sujet = ".$_POST[objet].";
    			$from = "From: .$_POST[email].\n";
    			$from .= "MIME-version: 1.0\n";
    			$from .= "Content-type: text/html; charset= iso-8859-1\n";
     
    			$message='
    			'.$_POST[nom].'<br>'.$_POST[prenom].'<br>
    			'.$_POST[societe].'<br>
    			'.$_POST[email].'<br><br>
    			'.$_POST[objet].'<br>
    			'.$_POST[mess].'';
     
    			mail($adress, $sujet, $message, $from);
     
    		 $insertGoTo = "http://www.strix.fr/sondmerci.php?lang=$lang";
    		//		if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    		// 		$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    		// 		$insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
    		// 		}
    		 		header(sprintf("Location: %s", $insertGoTo));
    		}
    		?>
    		<form name="forml" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    			<table border="0" cellspacing="0" cellpadding="0">
             <tr>
               <td>Nom</td>
               <td><input name="nom" type="text" id="nom" value="<?php echo $nom ; ?>"><span class="obl">*</span></td>
             </tr>
             <tr>
               <td>Prénom</td>
               <td><input name="prenom" type="text" id="prenom" value="<?php echo $prenom ; ?>"><span class="obl">*</span></td>
             </tr>
             <tr>
               <td>Société</td>
               <td><input name="societe" type="text" id="societe" value="<?php echo $societe ; ?>"></td>
             </tr>
             <tr>
               <td>E-mail</td>
               <td><input name="email" type="text" id="email" value="<?php echo $email ; ?>"><span class="obl">*</span></td>
             </tr>
             <tr>
               <td>Sujet</td>
               <td><input name="objet" type="text" id="objet" value="<?php echo $objet ; ?>"></td>
             </tr>
             <tr>
               <td>Message</td>
               <td><textarea name="mess" cols="68" rows="9" id="mess"><?php echo $mess ; ?></textarea></td>
             </tr>
             <tr>
               <td>&nbsp;</td>
               <td><span class="obl">* Champs obligatoires</span></td>
             </tr>
           </table>
          <table cellpadding="2" cellspacing="0">
              <tr>
                <td class="centre" colspan="3"><input name="Annuler" type="reset" id="Annuler2" value="<?php echo annule; ?>">
                  <input type="hidden" name="action" value="submitted">
                  <input name="Envoyer" type="submit" id="Envoyer2" value="<?php echo envoie; ?>">
                </td>
              </tr>
          </table>
          </form>
    Les problèmes rencontrés :
    "Warning: Cannot modify header information - headers already sent by (output started at /home.10.2/strixlab/www/contact2.php:9) in /home.10.2/strixlab/www/contact2.php on line 94" quand on arrive sur la page (ici)

    Si jamais le formulaire contient une erreur, la page rechargée est http://www.strix.fr/contact2.php et non plus http://www.strix.fr/contact2.php?lang=fr

    Les mails que je reçois non rien ! Plus d'expéditeur, de sujet, de message...

    Si quelqu'un pouvait me dire où ça cloche, par ce que là j'en peux plus...

  8. #8
    Membre confirmé Avatar de Strix
    Inscrit en
    Novembre 2006
    Messages
    632
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 632
    Points : 607
    Points
    607
    Par défaut
    Code définitif et fonctionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <form name="forml" method="post" action="<?php echo $_SERVER['PHP_SELF'].'?lang='.$lang; ?>">
     
    		<table border="0" cellspacing="0" cellpadding="0">
             <tr>
               <td>Nom</td>
               <td><input name="nom" type="text" id="nom" value="<?php echo $nom ; ?>"><span class="obl">*</span></td>
             </tr>
             <tr>
               <td>Prénom</td>
               <td><input name="prenom" type="text" id="prenom" value="<?php echo $prenom ; ?>"><span class="obl">*</span></td>
             </tr>
             <tr>
               <td>Société</td>
               <td><input name="societe" type="text" id="societe" value="<?php echo $societe ; ?>"></td>
             </tr>
             <tr>
               <td>E-mail</td>
               <td><input name="email" type="text" id="email" value="<?php echo $email ; ?>"><span class="obl">*</span></td>
             </tr>
             <tr>
               <td>Sujet</td>
               <td><input name="sujet2" type="text" id="sujet2" value="<?php echo $sujet2 ; ?>"><span class="obl">*</span></td>
             </tr>
             <tr>
               <td>Message</td>
               <td><textarea name="mess" cols="66" rows="7" id="mess"><?php echo $mess ; ?></textarea><span class="obl">*</span></td>
             </tr>
             <tr>
               <td>&nbsp;</td>
               <td><span class="obl">* Champs obligatoires</span></td>
             </tr>
           </table>
          <table cellpadding="2" cellspacing="0">
              <tr>
                <td class="centre" ><input name="Annuler" type="reset" id="Annuler2" value="<?php echo annule; ?>">
                  <input type="hidden" name="action" value="submitted">
                  <input name="Envoyer" type="submit" id="Envoyer2" value="<?php echo envoie; ?>">
                </td>
              </tr>
              <tr>
    			<td  class="centre"><?php	
    			if($_POST['action'] == 'submitted') {
    			if((empty($nom ))
    			||(empty($prenom ))
    			||(empty($sujet2 ))
    			||(empty($mess ))
    			||(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$email)))
    			echo "<br>Un ou plusieurs champs obligatoires non pas été renseignés";
    			else
    			{
    				$adress = "web@strix.fr";
    				$sujet = "$_POST[sujet2]";
    				$from = "From: ".$_POST[email]."\n";
    				$from .= "MIME-version: 1.0\n";
    				$from .= "Content-type: text/html; charset= iso-8859-1\n";
    				$message="
    				$_POST[nom] $_POST[prenom]<br>
    				$_POST[societe]<br>
    				$_POST[email]<br><br>
    				$_POST[sujet2]<br>
    				$_POST[mess]";
    				mail($adress, $sujet, $message, $from);
    				echo "<br>Votre message a bien été envoyé.<br>Vous allez être redirigé vers l'accueil automatiquement";
    				echo '<meta http-equiv="Refresh" content="3; URL=accueil.php?lang=' . $lang . '">';
    			}
    			}			
    			?>
              </td>
            </tr>
          </table>
          </form>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/04/2006, 09h42
  2. Javascript : Empecher la validation d'un formulaire
    Par otb82 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/01/2006, 09h46
  3. Ouvrir une popup lors de la validation d'un formulaire
    Par pod1978 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/11/2005, 15h47
  4. Vérification de validation d'un formulaire
    Par tom06440 dans le forum Langage
    Réponses: 8
    Dernier message: 21/09/2005, 14h29
  5. Réponses: 11
    Dernier message: 16/09/2004, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo