8721 sujets

Développement web côté serveur, CMS

Bonjour, j'ai récemment vu sur internet un tutoriel pour faire un formulaire en PHP. En fait, vous avez le formulaire, et quand vous le remplissez et que vous cliquez sur envoyer, les informations vont sur une autre page PHP protégée par un MDP. Et c'est ce système là que je cherche à exploiter. De mon côté, j'ai repris un formulaire libre de droit et je l'ai modifié, voici le 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
<form class="form-contact contact_form" method="post" id="contactForm" novalidate="novalidate">
<div class="row">
<div class="col-12">
<div class="form-group">
<textarea class="form-control w-100" name="message" id="message" cols="30" rows="9" onfocus="this.placeholder = 'Inscrivez votre message'" onblur="this.placeholder = 'Inscrivez votre message'" placeholder="Inscrivez votre message"></textarea>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<input class="form-control valid" name="name" id="name" type="text" onfocus="this.placeholder = 'Entrez votre nom et prénom'" onblur="this.placeholder = 'Entrez votre nom et prénom'" placeholder="Entrez votre nom et prénom">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<input class="form-control valid" name="email" id="email" type="email" onfocus="this.placeholder = 'Entrez votre adresse mail'" onblur="this.placeholder = 'Entrez votre adresse mail'" placeholder="Entrez votre adresse mail">
</div>
</div>
<div class="col-12">
<div class="form-group">
<input class="form-control" name="subject" id="subject" type="text" onfocus="this.placeholder = 'Sujet de votre message'" onblur="this.placeholder = 'Sujet de votre message'" placeholder="Sujet de votre message">
</div>
</div>
</div>
<div class="form-group mt-3">
<button type="submit" class="button button-contactForm boxed-btn">Envoyer</button>
</div>
</form>
De plus, j'ai un fichier JS qui gère le formulaire (par exemple si un des champs n'est pas complété lorsque l'utilisateur clique sur le bouton "Envoyer", un texte apparaît en dessous du champs pour le prévenir), le voici:

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
$(document).ready(function(){

(function($) {
"use strict";


jQuery.validator.addMethod('answercheck', function (value, element) {
return this.optional(element) || /^\bcat\b$/.test(value)
}, "type the correct answer -_-");

// validate contactForm form
$(function() {
$('#contactForm').validate({
rules: {
name: {
required: true,
minlength: 2
},
subject: {
required: true,
minlength: 4
},
number: {
required: true,
minlength: 5
},
email: {
required: true,
email: true
},
message: {
required: true,
minlength: 20
}
},
messages: {
name: {
required: "Veuillez inscrire votre nom et prénom",
minlength: "Ce champ doit être complété avec 2 caractères au minimum"
},
subject: {
required: "Veuillez inscrire le sujet",
minlength: "Votre sujet doit contenir au moins 4 caractères"
},
number: {
required: "come on, you have a number, don't you?",
minlength: "your Number must consist of at least 5 characters"
},
email: {
required: "Veuillez inscrire votre e-mail"
},
message: {
required: "Veuillez inscrire votre message",
minlength: "Votre message doit être plus long"
}
},
submitHandler: function(form) {
$(form).ajaxSubmit({
type:"POST",
data: $(form).serialize(),
url:"contact_process.php",
success: function() {
$('#contactForm :input').attr('disabled', 'disabled');
$('#contactForm').fadeTo( "slow", 1, function() {
$(this).find(':input').attr('disabled', 'disabled');
$(this).find('label').css('cursor','default');
$('#success').fadeIn()
$('.modal').modal('hide');
$('#success').modal('show');
})
},
error: function() {
$('#contactForm').fadeTo( "slow", 1, function() {
$('#error').fadeIn()
$('.modal').modal('hide');
$('#error').modal('show');
})
}
})
}
})
})

})(jQuery)
})
Enfin, voici le code du formulaire que je veux exploiter sur le mien (en PHP):

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
<html>
<!--
Ce script est gratuit et peut être librement utilisé et modifié.
© Jean Claude Meier, Fleury, 3/04
Site PedagoJiC : http://jc.meier.free.fr
v 060304
1 ère partie :

on construit un formulaire formul.php qui s'appelle lui-même et qui va transmettre
au fichier texte fic.txt les renseignements :
- retour (champ caché pour savoir que l'envoi a bien été fait)
- etcivil (bouton radio pour l'état civil : mr, mme ou mle)
- nom (champ texte pour le nom du correspondant)
- prenom (idem pour son prénom)
- message (champ texte sur plusieurs lignes)
- email (son adresse de courrier électronique)
Ici, à titre d'exemple, seuls les champs email et message sont obligatoires.
Aucun contôle sur la validité de l'email n'est fait mais cela pourrait être
utile (d'après mon expérience, 1 à 2 personnes sur 10, en moyenne, se trompent en
remplissant ce champ !)
Les renseignements fournis sont traités ci-dessous et récupérés par le
2 ème script litformul.php
Ces 2 scripts devraient fonctionner avec toutes les versions de php4 (?)

I) Création et envoi du formulaire

06/03/12
Remplacement de $HTTP_POST_VARS par $_POST nécessaire pour les dernières versions de PHP
et obligatoire sur certains serveurs ex : SFR, ORANGE...
-->
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>Essai de formulaire presque automatique</title>
</head>
<body>
<form action="formul.php" method="post" name="formu">
<br><br>
<table bgcolor="#CCCCFF" align="center">
<tr>
<td>
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="radio" name="etcivil" value="monsieur">
Monsieur </font></div>
</td>
<td>
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="radio" name="etcivil" value="madame">
Madame </font></div>
</td>
<td valign="middle">
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="radio" name="etcivil" value="mademoiselle">
Mademoiselle </font></div>
</td>
<td rowspan="4" valign="top">
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<textarea name="message" cols="30" rows="5"></textarea>
</font></div>
</td>
</tr>
<tr>
<td>
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nom
:</font></div>
</td>
<td> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="nom">
</font></td>
<td valign="middle">
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">(*)
Message :</font></div>
</td>
</tr>
<tr>
<td>
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Prenom
:</font></div>
</td>
<td> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="prenom">
</font></td>
<td valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
</font><font size="2"></font></td>
</tr>
<tr>
<td>
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">(*)
e-mail :</font></div>
</td>
<td colspan="2">
<div align="center"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="email" size="40">
</font></div>
<div align="center"> </div>
</td>
</tr>
<tr>
<td> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="hidden" name="retour" value="1">
</font></td>
<td>
<div align="center"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="submit" value="Envoyer" name="submit2">
</font></div>
</td>
<td>
<div align="center"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="reset" name="submit" value="R&eacute;tablir">
</font></div>
</td>
<td valign="middle">
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">(*)
champs obligatoires</font></div>
</td>
</tr>
</table>
</form>
<?php
// II) Récupération des données et préparation de la réponse
// prêt pour les nouvelles versions de PHP et les
// variables globales à OFF
// $_POST[" "] ne mache pas chez tout le monde : Tiscali PHP v 4.0.5 (3/04)

// le formulaire a bien été envoyé
if(isset($_POST["retour"])) {

$etcivil = $_POST["etcivil"];
$nom = htmlspecialchars($_POST["nom"]);
$prenom = htmlspecialchars($_POST["prenom"]);
$message = htmlspecialchars($_POST["message"]);
$email = htmlspecialchars($_POST["email"]);

//htmlspecialchars pour contrer les éventuels injections pirates de code
// html, javascript... (XSS) en filtrant les entrées

// les champs message et email sont bien remplis
if(($message != "") && ($email != ""))
{
// Ecriture dans le fichier texte en ajout
$fp = fopen("fic.txt", "a+");
// heure et date d'envoi
fputs ($fp,"----------------------- ".date("d/m/Y - H:i:s").' ----------------------'."\n");

// Ecriture des renseignements : id, nom, prénom
fputs ($fp,"état civil = $etcivil\n");
fputs ($fp,"nom = $nom\n");
fputs ($fp,"prénom = $prenom\n");

// Préparation du message pour la réponse presque automatique
// c'est à dire que l'on va mettre automatiquement :
// - l'adresse du destinataire
// - le sujet du message
// - le corps du message sur plusieurs lignes


// On code en "dur" (valeur hexadécimale) la valeur du caractère espace
$_ = "%20";

// Et ici 2 versions pour mettre le corps du message sur plusieurs lignes
// d'après les 2 logiciels de messagerie que j'ai pu tester :

// $entree = "<br>" ; // pour Mozilla (Thunderbird pour moi)

$entree = "%0A"; // pour Outlook Express (5.5 ?)!!!!


$sujet = "Gestion".$_."presque".$_."automatique".$_."de".$_."formulaires";
$ligne1 = "Merci".$_."pour".$_."votre".$_."message";
$ligne2 = "qui".$_."m\'a".$_."fait".$_."bien".$_."plaisir.";
$ligne3 = "Cordialement.";
$ligne4 = "A".$_."bientôt.";
$ligne5 = "";
$body = $ligne1.$entree.$ligne2.$entree.$entree.$ligne3.$entree.$entree.$ligne4;

// Ecriture dans le fichier texte
fputs($fp,"email = <a href=\"mailto:$email?subject=$sujet&body=$body\">$email</a>\n");
// Ecriture du message
fputs ($fp,"message = $message\n");
fclose($fp);
// L'envoi est correct, on adresse un message de remerciement
echo "<center>Merci pour votre message $etcivil $prenom $nom.<br>";
echo "Une réponse vous sera envoyée dès que possible.<br>";
echo "Vous pouvez maintenant refermer cette fenêtre.</center>";
}
// 1 des 2 champs obligatoires n'a pas été rempli
else echo "Veuillez obligatoirement <b>remplir</b> les champs <b>e-mail</b> et <b>message</b>";
}
?>
</body>
</html>
Et la page protégée par un MDP:

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
<html>
<!--
Ce script est gratuit et peut être librement utilisé et modifié.
© Jean Claude Meier, Fleury, 3/04
Site PedagoJiC : http://jc.meier.free.fr
v 060304
2 ème partie :

à partir des renseignements envoyés dans le fichier texte (fic.txt), par le
formulaire formul.php, on va envoyer, au correspondant, en 2 clics, (1 sur son adresse et 1 sur
le bouton Envoyer de votre gestionnaire de courrier (Mozilla/ Outlook Express))
un message automatiquement préparé.

06/03/12
Remplacement de $HTTP_POST_VARS par $_POST nécessaire pour les dernières versions de PHP
et obligatoire sur certains serveurs ex : SFR, ORANGE...
-->
<head>
<title>Lecture des messages envoyés par formul</title>
</head>
<body>
<?php
// effacement du fichier texte
function vider($le_fic)
{
$fp=fopen($le_fic,"w");
if (flock($fp,2))
{
fputs($fp,"");
}
flock($fp,3);
fclose($fp);
}
// chargement et affichage du fichier texte
function lire($le_fic)
{
echo "<center>-------------------- [".date("d M Y H:i:s")."] ---------------------</center><br>";
$contenu=fread(fopen($le_fic,"r"),filesize($le_fic));
// On enlève les antislashes (ex : j\'ai) et on met les retours chariots (Entrée) HTML
echo stripslashes(nl2br($contenu));
// Pour éventuellement imprimer la page avec tous les formulaires
echo "<br><form><input type=\"button\" value=\"imprimer\" onclick=\"print();\"></form>";
}
?>
<!-- Il est préférable que le lecteur de formulaires soit protégé par un mot
de passe, afin que n'importe qui ne puisse pas lire/effacer vos messages
-->
<form method="post" action="litformul.php">
<table align=center>
<tr>
<td>Mot de passe : </td>
<td><input type="password" size="40" name="mot_de_passe"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="ouvrir"></td>
</tr>
</table>
</form>
<?php
$fic = "fic.txt";
if (isset($_POST["mot_de_passe"]))
{
if ($_POST["mot_de_passe"] =="azerty") // à changer évidemment !
{
// le formulaire s'appelle lui-même et selon votre choix
// lit, efface ou lit et efface la page qui contient les formulaires

// le nom du script, donc litformul.php, ici
$nom_fic = "litformul.php"; // ou basename($PHP_SELF);
echo "<form method=\"post\" action=\"$nom_fic\">";
echo "<center><table bgcolor=\"#D1F3DD\" align=\"center\" width=\"60%\" border=\"1\">";
echo "<tr>";
echo "<td width=\"33%\"><center>lire</center></td>";
echo "<td width=\"33%\" colspan=\"2\"><center>vider</center></td>";
echo "<td width=\"33%\"><center>lire&vider</center></td>";
echo "</tr>";
echo "<tr>";
echo "<td><center><input type=\"radio\" name=\"rbchoix\" value=\"lire\" checked></center></td>";
echo "<td colspan=\"2\"><center><input type=\"radio\" name=\"rbchoix\" value=\"vider\"></center></td>";
echo "<td><center><input type=\"radio\" name=\"rbchoix\" value=\"lire&vider\" ></center></td>";
echo "</tr>";
echo "<tr>";
echo "<td colspan=\"4\" align=\"center\"><input type=\"submit\" value=\"envoyer\"></td>";
echo "</tr></table></center>";
echo "</form>";
}
else
{
echo "Mot de passe incorrect !";
}
}
if (file_exists($fic) && isset($_POST["rbchoix"]))
{
if ($_POST["rbchoix"] == "lire")
{
lire($fic);
}
if ($_POST["rbchoix"] == "vider")
{
vider($fic);
}
if ($_POST["rbchoix"] == "lire&vider")
{
lire($fic);
vider($fic);
}
}
?>
</body>
</html>

Voilà merci d'avance!
Modérateur
Et l'eau,

Merci de rééditer le sujet afin qu'il soit conforme aux règles du forum.