Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/05/2007, 08h50   #1
Membre expérimenté
 
Avatar de Strix
 
Inscription : novembre 2006
Messages : 632
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 632
Points : 516
Points : 516
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 :
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 :
1
2
3
4
if (empty($nom)) 
{ 
echo "Vous n'avez pas saisi votre nom"; 
}
ou pour une adresse mail
Code :
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
__________________
On appelle le Dr Freud aux urgences !!
------------
Quelques règles simples qui font la différence :
Rechercher - FAQ - Dire bonjour - Écrire en français - Balises [code] - Dire merci - Tag
Strix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2007, 10h17   #2
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
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 :
<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 :
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 :
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;
}
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2007, 10h45   #3
Membre expérimenté
 
Avatar de Strix
 
Inscription : novembre 2006
Messages : 632
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 632
Points : 516
Points : 516
ok merci, je vais voir tout ça
__________________
On appelle le Dr Freud aux urgences !!
------------
Quelques règles simples qui font la différence :
Rechercher - FAQ - Dire bonjour - Écrire en français - Balises [code] - Dire merci - Tag
Strix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2007, 11h06   #4
Membre expérimenté
 
Avatar de Strix
 
Inscription : novembre 2006
Messages : 632
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 632
Points : 516
Points : 516
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.
__________________
On appelle le Dr Freud aux urgences !!
------------
Quelques règles simples qui font la différence :
Rechercher - FAQ - Dire bonjour - Écrire en français - Balises [code] - Dire merci - Tag
Strix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2007, 19h56   #5
Membre habitué
 
Inscription : mai 2007
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 131
Points : 113
Points : 113
Eh bien au tout début du code.
Code :
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 :
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
}
?>
zvince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 08h44   #6
Membre expérimenté
 
Avatar de Strix
 
Inscription : novembre 2006
Messages : 632
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 632
Points : 516
Points : 516
Bonjour bonjour...

Bon j'arrive à ça :

Code :
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é
__________________
On appelle le Dr Freud aux urgences !!
------------
Quelques règles simples qui font la différence :
Rechercher - FAQ - Dire bonjour - Écrire en français - Balises [code] - Dire merci - Tag
Strix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 17h39   #7
Membre expérimenté
 
Avatar de Strix
 
Inscription : novembre 2006
Messages : 632
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 632
Points : 516
Points : 516
Voilà le code actuel
Code :
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...
__________________
On appelle le Dr Freud aux urgences !!
------------
Quelques règles simples qui font la différence :
Rechercher - FAQ - Dire bonjour - Écrire en français - Balises [code] - Dire merci - Tag
Strix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 17h24   #8
Membre expérimenté
 
Avatar de Strix
 
Inscription : novembre 2006
Messages : 632
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 632
Points : 516
Points : 516
Code définitif et fonctionnel :
Code :
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>
__________________
On appelle le Dr Freud aux urgences !!
------------
Quelques règles simples qui font la différence :
Rechercher - FAQ - Dire bonjour - Écrire en français - Balises [code] - Dire merci - Tag
Strix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h37.


 
 
 
 
Partenaires

Hébergement Web