Bonjour,

Je commence le PHP, et j'ai réalisé mon premier mini projet (un livre d'or tout simple).

Je soumet mon code pour commentaires, car j'aime bien que les choses soient bien faites...

(j'en ai bavé pour gérer l'alerte en cas de saisie erronée, car le fonctionnement est récursif : il n'y a qu'une page de PHP (index.php) qui se déclenche elle-même...)
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
   <form  method="post" action="index.php">
Le code en entier (je ne crois pas utile de fournir la css).
Code php : 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
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- index.php 
 
Livre d'or simple
 
(c) Emmanuel Delahaye 2009
 
0.7 27/05/2009 22:12:35 Protection des entrées (sorties transparentes).
0.6 27/05/2009 20:18:34 traitement des lignes trop longues.
0.5 27/05/2009 18:59:46 mise au point gestion du flag 'first'.
0.4 27/05/2009 18:46:33 protection des sorties
0.3 27/05/2009 18:27:06 lecture triée
0.2 27/05/2009 18:26:35 amelioration de la transmission du flag 'first'
0.1 27/05/2009 18:14:41 version initiale
 
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
 
 <head>
 
  <title>Livre d'or</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <link rel="stylesheet" media="screen" type="text/css" title="Defaut" href="main.css" />
 
 </head>
 
 <body>
 
<!-- fonctions publiques -->
 
<?php
include ("../util/util.php");
?>
 
<!-- fonctions privees -->
 
<?php
 
function update($pseudo, $email, $texte)
{
   $dbg = false;
   $date = date("Y-m-d H:i:s");
 
 
   include("server_data.php");
 
   mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
   mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
 
 
   $safe_pseudo = mysql_real_escape_string(htmlspecialchars($pseudo));
   $safe_email = mysql_real_escape_string(htmlspecialchars($email));
   $safe_texte = mysql_real_escape_string(htmlspecialchars($texte));
 
   debug("safe_pseudo", $safe_pseudo, $dbg);
   debug("safe_email", $safe_email, $dbg);
   debug("date", $date, $dbg);
   debug("safe_texte", $safe_texte, $dbg);
 
   $command = "INSERT INTO livre_dor VALUES('', '$safe_pseudo', '$safe_email', '$date', '$safe_texte')";
   debug("command", $command, $dbg);
   mysql_query($command) or die("erreur d'ecriture dans la base");
 
   mysql_close() or die("erreur de deconnexion du serveur");
 
}
 
function input($first, $erreur)
{
   $dbg = false;
?>
  <div id="formulaire">
   <form  method="post" action="index.php">
     <table>
      <tr>
       <td>
        <label for="lbl_pseudo"><span class="mandatory">Pseudo</span> : </label>
       </td>
       <td>
        <input type="text" name="pseudo" id="lbl_pseudo"/>
       </td>
      </tr>
 
      <tr>
       <td>
        <label for="lbl_email">E-mail : </label>
       </td>
       <td>
        <input type="text" name="email" id="lbl_email"/>
       </td>
      </tr>
     </table>
 
     <p>
         <label for="lbl_texte"><span class="mandatory">Commentaires</span> :</label><br />
         <textarea name="texte" id="lbl_texte" cols="76" rows="5">Votre commentaire (HTML non interprété) ...</textarea>
         <br />
         <input type="submit" value="OK"/>
 
<?php
   debug("erreur", $erreur, $dbg);  
 
   if ($erreur == 1)
   {
      echo "<input type=\"hidden\" name=\"first\" value=\"0\"/>\n";
 
      debug("first", $first, $dbg);  
      if ($first == 0)
      {
         echo "<span class=\"alert\">(Champs obligatoires)</span>\n";
      }
   }
   else
   {
      echo "<input type=\"hidden\" name=\"first\" value=\"1\"/>\n";
   }
?> 
     </p>
 
   </form>   
  </div>
<?php
}
 
function display()
{
   /* definition des constantes 'serveur MySQL (confidentiel)' */
   include("server_data.php");
 
   mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
   mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
 
   /* affichage */
 
   $dbg = false;
 
   $reponse = mysql_query("SELECT * FROM livre_dor ORDER BY date DESC") or die("erreur de requete a la table 'livre_dor'");
 
   while ($donnees = mysql_fetch_array($reponse))
   {
      $pseudo = $donnees['pseudo']; 
      $date = $donnees['date']; 
      $texte = $donnees['texte'];
 
      debug("pseudo", $pseudo, $dbg);
      debug("date", $date, $dbg);
      debug("texte", $texte, $dbg);
 
      echo "   <div class=\"livre_dor_separateur\">\n";
      echo "   <br />\n";
      echo "   </div>\n";
      echo "   <div class=\"livre_dor_entete\">\n";
      echo "      Posté le $date par ", htmlentities($pseudo), "\n";
      echo "   </div>\n";
      echo "   <div class=\"livre_dor_corps\">\n";
//      echo wordwrap(htmlentities($texte), 80, "\n"), "\n\n";
      echo wordwrap($texte, 80, "\n"), "\n\n";
      echo "</div>\n";
 
   }
 
   mysql_close() or die("erreur de deconnexion du serveur");
}
 
?>
<!-- main -->
 
  <div id="main">
 
<?php
 
   $dbg = false;
 
   $first = 1;
 
   if (isset ($_POST['first']))
   {
      $first = $_POST['first'];
      if ($first != "")
      {
         $first = 0;
      }
   }
 
   debug("_POST['pseudo']", $_POST['pseudo'], $dbg);  
   debug("_POST['texte']", $_POST['texte'], $dbg);  
 
   if (isset($_POST['pseudo'])
   AND isset($_POST['texte']))
   {
      /* ajoute securisation */
      $pseudo = $_POST['pseudo'];
      $texte = $_POST['texte'];
 
      if ($pseudo != "" 
      AND $texte != "")
      {
         /* facultatif */
         if (isset ($_POST['email']))
         {
            $email = $_POST['email'];
         }
         else
         {
            $email = "";
         }
         update($pseudo, $email, $texte);
         $erreur = false;
      }
      else
      {
         $erreur = true;
      }
   }
   else
   {
      $erreur = true;
   }
 
   echo "   <h1>Livre d'or</h1>\n";
 
   debug("first", $first, $dbg);  
   debug("erreur", $erreur, $dbg);  
   input($first, $erreur);
   display();
?>
 
<!-- Verifications XHTML et CSS -->
 
<?php
include "../util/check.html";
?>
 
  </div>
 
 </body>
 
</html>
Code php : 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
 
<!-- util.php -->
 
<?php
function erreur($err)
{
   echo ("<p class = \"erreur\">$err</p>\n");
}
?>
 
<?php
function debug ($name, $value, $ok)
{
   if ($ok)
   {
      echo "<p class=\"debug\">$name = '$value'</p>\n";
   }
}
?>
Code xhtml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<!-- check.html -->
 
  <hr />
  <p>
   <a href="http://validator.w3.org/check/referer">
      Test XHTML
   </a>
   &nbsp;
   <a href="http://jigsaw.w3.org/css-validator/check/referer">
      Test CSS
   </a>
  </p>
D'avance, merci pour vos remarques (présentation, codage, organisation, solutions ...).