Bonjour,
Tout d'abord je dois avouer que je suis néophyte en la matière mais vous le verrez bien vite...
Sur Internet (je ne sais plus où d'ailleurs...) j'ai récupéré un script de formulaire et un script de captcha.
Mon formulaire de base fonctionne (excepté un manque sur le bouton radio) mais pas le captcha.
Pourriez-vous m'indiquer ce que je dois faire pour que le captcha apparaisse et fonctionne ? Merci
1. Ci-après le code du formulaire :
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
<?php
 
// On vérifie si la fonction ini_set() a été désactivée...
$desactive = ini_get('disable_functions');
if (preg_match("/ini_set/i", "$desactive") == 0) {
// Si elle n'est pas désactivée, on définit ini_set de manière à n'afficher que les erreurs...
ini_set("error_reporting" , "E_ALL & ~E_NOTICE");
}
 
// Vérifier que le formulaire a été envoyé...
if (isset($_POST['envoi'])) {
 
 
//On commence une session pour enregistrer les variables du formulaire...
 
session_start();
 
$_SESSION['champ1'] = $_POST['champ1'];
$_SESSION['champ2'] = $_POST['champ2'];
$_SESSION['champ3'] = $_POST['champ3'];
$_SESSION['champ4'] = $_POST['champ4'];
$_SESSION['champ5'] = $_POST['champ5'];
$_SESSION['champ6'] = $_POST['champ6'];
$_SESSION['zone_email1'] = $_POST['zone_email1'];
 
//Evaluation du bouton 1 ...
switch($_POST['bouton1']) {
case "oui":
$_SESSION['bouton1'] = "oui";
break;
default:
$_SESSION['bouton1'] = "";
} // Fin du switch...
 
//Enregistrement des zones de texte...
$_SESSION['zone_texte1'] = $_POST['zone_texte1'];
$_SESSION['zone_texte2'] = $_POST['zone_texte2'];
 
// Définir l\'icone apparaissant en cas d\'erreur...
 
 
// Définir sur 0 pour afficher un petit x de couleur rouge.
// Définir sur 1 pour afficher l\'image d\'une croix rouge telle que celle utilisée dans l\'assistant
// Si vous utilisez l\'option 1, l\'image de la croix rouge \'icone.gif\' doit se trouver dans le répertoire \'images\',
// ce dernier devant se trouver au même niveau que votre formulaire...
$flag_icone = 0;
 
// On vérifie si $flag_icone est défini sur 0 ou 1...
if ($flag_icone == 0) {
$icone = "<b><font size=\"3\" face=\"Arial, Verdana, Helvetica, sans-serif\" color=\"#CC0000\">x</font></b>";
} else {
$icone = "<img src=\"images/icone.gif\"";
}
 
// Définir l'indicateur d'erreur sur zéro...
$flag_erreur = 0;
// N'envoyer le formulaire que s'il n'y a pas d'erreurs...
if ($flag_erreur == 0) {					
 
// Addresse de réception du formulaire
$email_dest = "trucmuche@labas.com";
$sujet = "Demande d'information via altenaconseils.com";
$entetes ="MIME-Version: 1.0 \n";
	$entetes .="From: Altena Conseils<trucmuche@labas.com>\n";
	$entetes .="Return-Path: Altena Conseils<trucmuche@labas.com>\n";
	$entetes .="Reply-To: Altena Conseils<trucmuche@labas.com>\n";
	$entetes .="Content-Type: text/html; charset=iso-8859-1 \n";
	$partie_entete = "<html>\n<head>\n<title>Formulaire</title>\n<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>\n</head>\n<body bgcolor=#FFFFFF>\n";
 
 
//Partie HTML de l'e-mail...
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Société = " . $_SESSION['champ1'] . "</font><br>\n";
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Nom = " . $_SESSION['champ2'] . "</font><br>\n";
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Prénom = " . $_SESSION['champ3'] . "</font><br>\n";
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Ville = " . $_SESSION['champ4'] . "</font><br>\n";
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Tél fixe = " . $_SESSION['champ5'] . "</font><br>\n";
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Tél portable = " . $_SESSION['champ6'] . "</font><br>\n";
$partie_zone_email .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Email = " . $_SESSION['zone_email1'] . "</font><br>\n";
$partie_boutons .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">J'accepte d'être contacté(e) par email = " . $_SESSION['bouton1'] . "</font><br>\n";
$partie_zone_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Activité = " . $_SESSION['zone_texte1'] . "</font><br>\n";
$partie_zone_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Ma demande / Mon message = " . $_SESSION['zone_texte2'] . "</font><br>\n";
 
 
					// Fin du message HTML
					$fin = "</body></html>\n\n";
 
					$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_listes . $partie_boutons . $partie_cases . $partie_zone_texte . $fin;
 
 
					// Send the e-mail
					if (@!mail($email_dest,$sujet,$sortie,$entetes)) {
					echo("Envoi du formulaire impossible");
					exit();
					} else {
 
                    // Rediriger vers la page de remerciement
                    header("Location:http://www.altenaconseils.com/merci.html");
                    exit();
                  } // Fin else
			    } // Fin du if ($flag_erreur == 0) {
			} // Fin de if POST
?>
<html>
<head>  
 
<script language="JavaScript">
 
 
function verifSelection() {
 
 
if (document.mail_form.champ2.value == "") {
alert("Merci de saisir votre nom")
return false
} 
 
if (document.mail_form.champ3.value == "") {
alert("Merci de saisir votre prénom")
return false
} 
 
if (document.mail_form.champ4.value == "") {
alert("Merci de saisir votre ville")
return false
} 
 
if (document.mail_form.zone_email1.value == "") {
alert("Merci de saisir votre adresse courriel")
return false
}
 
invalidChars = " /:,;'"
 
for (i=0; i < invalidChars.length; i++) {	// does it contain any invalid characters?
badChar = invalidChars.charAt(i)
 
if (document.mail_form.zone_email1.value.indexOf(badChar,0) > -1) {
alert("Votre adresse e-mail contient des caractères invalides. Veuillez vérifier.")
document.mail_form.zone_email1.focus()
return false
}
}
 
atPos = document.mail_form.zone_email1.value.indexOf("@",1)			// there must be one "@" symbol
if (atPos == -1) {
alert('Votre adresse e-mail ne contient pas le signe "@". Veuillez vérifier.')
document.mail_form.zone_email1.focus()
return false
}
 
if (document.mail_form.zone_email1.value.indexOf("@",atPos+1) != -1) {	// and only one "@" symbol
alert('Il ne doit y avoir qu\'un signe "@". Veuillez vérifier.')
document.mail_form.zone_email1.focus()
return false
}
 
periodPos = document.mail_form.zone_email1.value.indexOf(".",atPos)
 
if (periodPos == -1) {					// and at least one "." after the "@"
alert('Vous avez oublié le point "." après le signe "@". Veuillez vérifier.')
document.mail_form.zone_email1.focus()
return false
}
 
if (periodPos+3 > document.mail_form.zone_email1.value.length)	{		// must be at least 2 characters after the 
alert('Il doit y avoir au moins deux caractères après le signe ".". Veuillez vérifier.')
document.mail_form.zone_email1.focus()
return false
}
 
nbreboutons1 = document.mail_form.bouton1.length
 
	flag = 0
 
		for (i = 0; i < nbreboutons1 ; i++) {
 
			if (document.mail_form.bouton1[i].checked) {
 
			flag = 1
 
			}
 
		}
 
 
 
if (document.mail_form.zone_texte1.value == "") {
alert("Merci de préciser votre domaine d'activité")
return false
} 
 
if (document.mail_form.zone_texte2.value == "") {
alert("Merci de préciser votre demande (devis, informations...)")
return false
} 
 
} // Fin de la fonction
</script>
</head>
<body>  
<form name="mail_form" method="post" action="<?=$_SERVER['PHP_SELF']?>" onSubmit="return verifSelection()">
  <div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><strong>Formulaire
    de contact</strong></font></div><br><table align="center" width="566" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td height="16"><div align="center">
  <font color="#CC0000" size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><strong><?php
if ($erreur_champ1) {
	  echo(stripslashes($erreur_champ1));
	  } else {
if ($erreur_champ2) {
	  echo(stripslashes($erreur_champ2));
	  } else {
if ($erreur_champ3) {
	  echo(stripslashes($erreur_champ3));
	  } else {
if ($erreur_champ4) {
	  echo(stripslashes($erreur_champ4));
	  } else {
if ($erreur_champ5) {
	  echo(stripslashes($erreur_champ5));
	  } else {
if ($erreur_champ6) {
	  echo(stripslashes($erreur_champ6));
	  } else {
if ($erreur_email1) {
	  echo(stripslashes($erreur_email1));
	  } else {
if ($erreur_bouton1) {
	  echo(stripslashes($erreur_bouton1));
	  } else {
if ($erreur_texte1) {
	  echo(stripslashes($erreur_texte1));
	  } else {
if ($erreur_texte2) {
	  echo(stripslashes($erreur_texte2));
	  } else {
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
} // Fin du else...
?>
    </strong></font>
    </div></td>
      </tr>
    </table>
<p align="center"></p><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Société</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ1) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ1" type="text" value="<?=stripslashes($_SESSION['champ1']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Nom</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ2) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ2" type="text" value="<?=stripslashes($_SESSION['champ2']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Prénom</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ3) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ3" type="text" value="<?=stripslashes($_SESSION['champ3']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Ville</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ4) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ4" type="text" value="<?=stripslashes($_SESSION['champ4']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Tél fixe</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ5) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ5" type="text" value="<?=stripslashes($_SESSION['champ5']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Tél portable</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ6) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ6" type="text" value="<?=stripslashes($_SESSION['champ6']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Email</font></div></td>
      <td width="30" align="center" valign="middle">
	  <?php
	  if ($erreur_email1) {
	  echo($icone);
	  }
	  ?>
	  </td>
      <td><input name="zone_email1" type="text" value="<?=stripslashes($_SESSION['zone_email1']);?>"></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="170"><div align="right"><font face="Verdana" size="2">J'accepte d'être contacté(e) par email</font></div></td>
      <td width="30" align="center" valign="middle">
	  <?php
	  if ($erreur_bouton1) {
	  echo($icone);
	  }
	  ?>
	  </td>
      <td><input type="radio" name="bouton1" value="oui"
 
      <font face="Verdana" size="2">oui</font></td></tr></table><table width="566" border="0" align="center"><tr>
      <td width="140" valign="top"><div align="right"><font face="Verdana" size="2">Activité</font></div></td>
      <td width="30" align="center" valign="top">
	  <?php
	  if ($erreur_texte1) {
	  echo($icone);
	  }
	  ?>
	  </td>
      <td><textarea name="zone_texte1" cols="45" rows="5"><?=stripslashes($_SESSION['zone_texte1']);?></textarea></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="170" valign="top"><div align="right"><font face="Verdana" size="2">Ma demande / Mon message</font></div></td>
      <td width="30" align="center" valign="top">
	  <?php
	  if ($erreur_texte2) {
	  echo($icone);
	  }
	  ?>
	  </td>
      <td><textarea name="zone_texte2" cols="45" rows="10"><?=stripslashes($_SESSION['zone_texte2']);?></textarea></td>
    </tr></table><table width="566" border="0" align="center"><tr>
<td valign="top"><div align="center"> 
          <input type="reset" name="Reset" value=" Effacer ">
 
          <input type="submit" name="envoi" value="Envoyer">
        </div></td></tr></table><div align="center"><input name="nbre_fichiers" type="hidden" id="nbre_fichiers" value=""></div></form>
</body> 
</html>
2. Ci-après le code du captcha :
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
<?php
class capcha{
 
	var $min;
	var $max;
	var $alphabet;
	var $word;
	var $num;
	var $numletter;
 
	function capcha(){
		$this->min = 4;
		$this->max = 6;
		$this->alphabet = 'abcdefghijklmnopqrstuvwxyz';
		$this->grain_de_sel = '6tIb90ZAS11';
		$this->word = $this->createWord();
		$this->num = $this->chooseNum();
		$this->numletter = $this->num2letter();
	}
 
	function q(){
		return 'Quelle est la '.$this->numletter.' lettre du mot '.$this->word.' ?';
	}
 
	function createWord(){
 
		$len = rand($this->min,$this->max);
		for($i=0;$i<$len;$i++){
			$word[$i] = $this->alphabet[rand(0,strlen($this->alphabet)-1)];
		}
		return implode('',$word);
	}
 
	function chooseNum(){
		return rand(1,strlen($this->word));
	}
 
	function num2letter(){
		if($this->num == strlen($this->word)){
			return 'dernière';
		}
		$array = array('1' => 'première','2' => 'deuxième','3' => 'troisième','4' => 'quatrième','5' => 'cinquième','6' => 'sizième','7' => 'septième','8' => 'huitième','9' => 'neuvième','10' => 'dixième');
		if(isset($array[$this->num])){
			return $array[$this->num];
		}else{
			return $this->num.'.ème';
		}	
	}
 
	function r(){
		return md5($this->grain_de_sel.$this->word[$this->num-1]);
	}
}
?>
Voici l'adresse où mon formulaire est visible : www.altenaconseils.com/formulaire3.php
Je suis arrivée à modifier le code pour que la zone "activité" soit plus petite.
Par contre, il me reste encore un pb avec le bouton radio "oui" : je souhaiterais que la personne qui oublie de cocher la case ait un message d'erreur lui disant de cocher l'option oui et que le formulaire ne puisse être envoyé si la case n'est pas cochée. (alors que là le formulaire part même si la case n'est pas cochée...).

Par ailleurs, pourriez-vous me dire si mon formulaire est suffisamment sécurisé ?

Merci d'avance pour votre aide