01.
02.
03.
04.
05.
06.
07.
08.
09.
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.
|
|
<?php
/******************************************************************************/
/* */
/* __ ____ */
/* ___ / / ___ / __/__ __ _____________ ___ */
/* / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-< */
/* / .__/_//_/ .__/___/\___/\_,_/_/ \__/\__/___/ */
/* /_/ /_/ */
/* */
/* */
/******************************************************************************/
/* */
/* Titre : [PHP 4.0.7] Gérer les erreurs PHP et les notifier... */
/* */
/* URL : http://www.phpsources.org/scripts490-PHP.htm */
/* Auteur : poujolrost-mathias */
/* Date édition : 23 Jan 2009 */
/* Website auteur : http://site.mathiaspoujolrost.net/competences/ */
/* */
/******************************************************************************/
/* fonction pour afficher les erreurs, avertissement et informations (qui
contiennent du balisage) */
/* renvoit true si au moins une remarque */
function afficherRemarques($tableau, $type = "information")
{
if ("s" == substr($type, -1)) // si il a un "s" à la fin...
{ $type = substr($type, 0, -1); } // ... on le coupe
if ($type != "erreur" && $type != "avertissement" && $type != "information")
{ $type = "information"; }
$nbr = count($tableau);
if ($nbr != 0) {$retour = true;} // il y a au moins une remarque à afficher
else {$retour = false;}
if ($nbr == 1)
{
echo "\n<dl class=\"$type\">\n\t<dt><strong>" .ucfirst($type).
"</strong> :</dt>\n\t<dd>$tableau[0]</dd>\n</dl> <!-- FIN de la <dl" .
" class=\"$type\"> -->\n";
}
elseif ($nbr > 1)
{
echo "\n<dl class=\"$type\">\n\t<dt><strong>" .ucfirst($type).
"s ($nbr)</strong> :</dt>\n";
foreach($tableau as $val)
{
echo "\t<dd>$val</dd>\n";
}
echo "</dl> <!-- FIN de la <dl class=\"$type\"> -->\n";
}
return $retour;
} // FIN function afficherRemarques($tableau, $type)
/* fonction pour supprimer des éléments vides d'un tableau */
/* trouvée ici : http://www.jonasjohn.de/snippets/php/array-remove-empty.htm */
function suppVidesDansTableau($tab)
{
$tabOK = array();
// le bon tableau (= sans élément vide), qui va être retourné
while(list($cle, $val) = each($tab))
// permet de passer en revue le tableau
{
if (is_array($val))
{
$val = suppVidesDansTableau($val); // récursivement
if (count($val) != 0) // si tableau non vide
{
$tabOK[$cle] = $val; // on le copie dans le bon tableau
}
}
else
{
if (trim($val) != "") // si valeur non vide
{
$tabOK[$cle] = $val;
}
}
} // FIN du while
unset($tab);
return $tabOK;
} // FIN function suppVidesDansTableau
/* fonction pour collecter toutes les remarques et les agréger dans leurs
tableaux respectifs */
/* elle doit être utilisée sur chaque variable retournée par une autre fonction
qui pourrait renvoyer des remarques (voir plus loin comment créer ces remarques)
*/
function rassemblerRemarques($tab, &$erreurs, &$avertissements, &$informations)
{
if ( !is_array($tab) ) {echo
"<p class\"erreur\">La variable <var>\$tab</var>,dans laquelle vous cherchez" .
" des remarques, n'est pas un tableau.</p>";}
if ( array_key_exists("erreurs", $tab) )
{
$err = $tab['erreurs'];
if ( is_array($err) )
{
foreach ($err as $val)
{
$erreurs[] = $val;
}
}
else {$erreurs[] = $err;}
array_unique(suppVidesDansTableau($erreurs));
}
if ( array_key_exists("avertissements", $tab) )
{
$avert = $tab['avertissements'];
if ( is_array($avert) )
{
foreach ($avert as $val)
{
$avertissements[] = $val;
}
}
else {$avertissements[] = $avert;}
array_unique(suppVidesDansTableau($avertissements));
}
if ( array_key_exists("informations", $tab) )
{
$info = $tab['informations'];
if ( is_array($info) )
{
foreach ($info as $val)
{
$informations[] = $val;
}
}
else {$informations[] = $info;}
array_unique(suppVidesDansTableau($informations));
}
if ( !empty($tab['remarques']) )// récursivement
{
$remarques = $tab['remarques'];
rassemblerRemarques($remarques, $erreurs, $avertissements, $informations
);
}
}
// FIN function rassemblerRemarques($tab, &$erreurs, &$avertissements,
// &$informations)
// à utiliser toute seule (ne retourne rien) mais avec ses 4 arguments
/* une fonction bidon, juste pour montrer que si on veut retourner plusieurs
valeurs, il faut un tableau */
/* le but est par après de récupérer ces valeurs de remarque (erreur,
avertissement ou information) */
/* les erreurs sont en anglais pour bien les différencier de celles ajoutées
hors fonctions */
/* les numéros associés indique la profondeur de laquelle elles ont été
"extraites" */
function fonctionBidon()
{
$retour = array(
0 => 0,
"erreurs" =>
"<p>[en-1] This is an error extracted from a function.</p>",
"bla bla" => 'un discours inutile',
"informations" => array(
"<p>[en-2] A piece of information got from an array.</p>",
'<p>[en-2] Another piece of information extracted from an array.</p>'),
9 => "un chiffre tout neuf",
"remarques" => array(
"avertissements" => array(
"<p>[en-3] An alarming warning.</p>",
"<p>[en-3] A second warning, deeply hidden.</p>"),
"informations" =>
"<p>[en-3] A deep piece of information.</p>",
"erreurs" =>
"<p>[en-3] One more error, this one was deeply hidden.</p>"
),
'truc' => 'Non, non, rien en fait !'
);
return $retour;
}
// attention ci-avant dans [remarques] : ne pas avoir plusieurs fois la même
// clé, sinon la valeur finale écrase les autres
// plusieurs possibilités pour la création des remarques dans la valeur
// retournée d'une fonction :
// soit vous créez une clé "erreurs|avertissments|informations" qui contient un
// élément ou tableau d'éléments
// (condition : n'avoir que ce type de remarques à renvoyer)
// soit vous créer une clé "remarques" qui contient un tableau de tableaus de
// remarques
// (un array par type de remarques, initialisé à vide)
/* une autre fonction bidon, juste pour exemple d'implantation */
/* les remarques de cet exemple sont en Allemand, pour les différencier */
function fonctionBidon2()
{
/* multi-initialisation de la variable de retour */
$retour = array(
"retour" => "",
"remarques" => array(
"erreurs" => array(""),
"avertissement" => array(""),
"informations" => array("")
)
);
/* ici les instruction de la fonctions... */
/* dès qu'il y a une remarque à créer, on l'"enregistre" comme suit : */
$retour['avertissements'][] = "<p>[de] Achtung ! ! XD</p>";
// si que des avertissements à renvoyer
$retour['remarques']['informations'][] =
"<p>[de] Ich bin ein Berliner !</p>"; // méthode générale
return $retour;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Afficher les erreurs, avertissements et informations dans un <dl>
(remarques balisées)</title>
<style type="text/css">
.erreur { border-color: red; }
.avertissement { border-color: orange; }
.information { border-color: green; }
.erreur, .avertissement, .information { /* chaque dl */
margin: 10px 0; /* top+bottom et right+left */
border-width: 2px;
border-style: solid;
border-left-width: 15px;
padding: 0 10px 0; /* top, right+left, bottom */
background: white;
}
.erreur dt,
.erreur dd, .avertissement dt, .avertissement dd, .information dt, .information
dd {
margin: 1ex 0; /* marges verticales fusionnent */
padding: 0;
}
.erreur dd { border-left-color: red; }
.avertissement dd{ border-left-color: orange; }
.information dd { border-left-color: green; }
.erreur dd, .avertissement dd, .information dd {
border-left-width: 5px;
border-left-style: solid;
padding-left: 5px;
}
</style>
</head>
<body id="body">
<h1>Afficher des remarques à l'utilisateur : erreurs, avertissements et
informations</h1>
<p>Les remarques sont balisées avec les balises <a
href="http://giminik.developpez.com/xhtml/dl"><dl> (liste de définitions)
</a>, <a href="http://giminik.developpez.com/xhtml/dt"><dt> (terme
défini)</a> et <a href="http://giminik.developpez.com/xh
tml/dd"><dd> (le corps de la définition)</a>. Le code est ainsi
sémantique et valide.</p>
<p>Modèle : </p>
<blockquote style="background: #BBB; padding: 1ex;" title="fond gris uniquement
pour faire ressortir cet exemple">
<dl>
<dt><strong>Nature de la remarque (nombre de remarques)</strong> :</dt>
<dd><p>Une première remarque.</p></dd>
<dd><p>Une autre remarque de même nature, on peut en avoir autant qu'on
veut.</p></dd>
</dl>
</blockquote>
<p><a href="http://www.phpsources.org/scripts490-PHP.htm">Page d'explication sur
ce bout de code PHP</a>.</p>
<p>Voici des exemples d'affichage de remarques : </p>
<?php
/* DEBUT exemples, les passer en commentaires pour voir comment s'affichent les
remarques */
$erreurs[] = "<p>Vous n'avez rien tapé dans le champ de saisie.</p>";
//$erreurs[] = "<p>Vous devez valider la création de votre compte en cliquant
// sur le lien dans le courriel qui vient de vous être envoyé.</p>";
$avertissements[] =
"<p>Vous devez valider la création de votre compte en cliquant sur le lien" .
" dans le courriel qui vient de vous être envoyé. Sinon, votre compte sera" .
" supprimé d'ici 5 jours.</p>";
//$avertissements[] = "<p>Votre texte semble très court.</p>";
$informations[] = "<p>Votre compte a bien été validé.</p>";
//$informations[] = "<p>Votre message a bien été envoyé.</p>";
/* FIN exemples ----- ----- ----- ----- ----- */
afficherRemarques($erreurs, "erreur");
afficherRemarques($avertissements, "avertissement");
afficherRemarques($informations, "information");
/* on considère maintenant la situation dans laquelle les remarques<br />
se produisent au sein d'une fonction
(donc a priori innacessible en dehors) */
echo "<hr />
<p>On fait tourner une fonction bidon qui ne fait qu'ajouter des remarques" .
" (en anglais), et on ré-affiche ces dernières.</p>";
$truc = fonctionBidon();
rassemblerRemarques($truc, $erreurs, $avertissements, $informations);
afficherRemarques($erreurs, "erreur");
afficherRemarques($avertissements, "avertissement");
afficherRemarques($informations, "information");
echo "<hr />
<p>On fait tourner une autre fonction bidon (qui retourne des remarques en" .
" Allemand) puis on ré-affiche les remarques.</p>";
rassemblerRemarques(fonctionBidon2(), $erreurs, $avertissements, $informations);
afficherRemarques($erreurs, "erreur");
afficherRemarques($avertissements, "avertissement");
afficherRemarques($informations, "information");
/* en situation réelle, utiliser plutôt les appels suivants (contrairement aux
précédents) :
* on n'affiche des avertissements et informations que si il n'y a pas d'erreur
* (enfin, ça c'est à vous de voir)
$existentErreurs = afficherRemarques($erreurs, "erreur");
if (!$existentErreurs)
{
afficherRemarques($avertissements, "avertissement");
afficherRemarques($informations, "information");
}
*/
?>
<p><a href="?source">Afficher le code source PHP de cette page</a>.</p>
<p><a href="http://jigsaw.w3.org/css-validator/check/referer"
hreflang="mis">Vérifier la validité du code CSS</a>. <a href="http://val
idator.w3.org/check?uri=referer" hreflang="en">Vérifier la validité du code
HTML</a>.</p>
<p><a href="#body">Retour en haut</a>.</p>
</body>
</html>
|