Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/01/2013, 18h37   #1
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 316
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 316
Points : 114
Points : 114
Par défaut MVC comment ça marche?

j'ai lu plusieurs tuto sur le MVC et je ne comprends pas tout.
Mon post contient plusieurs questions mais elles sont liées les unes par rapport aux autres.

d'avance, un IMMENSE merci à vous. Parlez moi avec des mots hyper simples je suis novice et autodidacte.

PRIMO: est-ce que tous les fichiers doivent avoir l'extention .php? ou peut-on avoir l'extention .html? si oui quelle différence? (html=vue php=contrôle?)

pour l'instant j'ai un fichier où tout est mélangé le visuel est celui-ci

form.JPG

le code de la page

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
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
<?php
session_start();
?><?php
 
$nbresult=-1;
 
if (isset($_POST['identifiant'])) 
{
	if ( ($_POST['identifiant']=="") || (!is_numeric($_POST['identifiant']))) {$identifiant=0;} else {
    	$identifiant=$_POST['identifiant'];}
} else {
		$identifiant=0;
};
 
if (isset($_POST['mdp']))
{
        $mdp=$_POST['mdp'];
} else {
		$mdp="";
};
 
 
if (isset($_POST['form_ok']))
{
        $form_ok=$_POST['form_ok'];
} else {
		$form_ok=false;
};
 
 
 
if ($form_ok) {
 
  	//connection au serveur:
    $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
 
    //requête SQL:
    $sql = "SELECT count(*) as compteur FROM mdp where matricule=".$identifiant." and mdp='".$mdp."'";
 
	//exécution de la requête:
    $requete = odbc_do($cnx, $sql) ;
 
    //affichage des données:
	$result = odbc_fetch_object($requete);
	$nbresult=$result->compteur;
//echo $nbresult;
 
}
?>
 
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>formulaire d'identification</title>
<style type="text/css">
body,td,th {
	font-size: 18px;
}
.couleurtext {
	color: #00C;
}
.couleurtext {
	color: #00C;
}
.tailletext {
	font-size: 10px;
}
.taillemdp {
	font-size: 12px;
}
</style>
</head>
 
<body>
<p align="center"><img src="csp.jpg" width="434" height="71" alt="image" /></p>
<p align="center">&nbsp;</p>
<p align="center"><strong>Centre de Gestion de déclaration de disponibilité.</strong></p>
<p align="center"><strong>   </strong></p>
<form id="form1" name="form1" method="post" action="index.php">
<p>&nbsp;</p>
 
<div align="center">
  <?php 
if (!$nbresult) {
	echo'<b><font color="#FF0000">Mot de passe ou Identifiant incorrect !<br><br></font></b>';}
else if ($nbresult==1) {
	$_SESSION["cookie_matricule"] = $identifiant;
	$_SESSION["cookie_mdp"]= $mdp;
//	echo'<script>location.href="declaration_dispo.php";</script>';
header('Location: declaration_dispo.php'); 
 
}?></div>
<p align="center"> <span class="couleurtext">Identifiant</span> :      
  <input name="identifiant" type="text" id="identifiant"  accesskey="1" tabindex="1" value="" size="20" maxlength="19" />
 </p>
<p align="center"><span class="couleurtext">Mot de passe:</span>
  <input name="mdp" type="password" id="mdp" accesskey="2" tabindex="2" value="" size="20" maxlength="19" />
</p>
<p>&nbsp;</p>
 
  <div align="center">
    <p>
      <input type="submit" name="ok" id="ok" value="Valider" accesskey="3" tabindex="3" />
      <input type="submit" name="Annuler" id="Annuler" value="Annuler" accesskey="4" tabindex="4" />
      <input name="form_ok" type="hidden" id="form_ok" value="1">
    </p>
  </div>
</form>
<p align="left"><a href="mailto:hdupont@sdis28.fr" class="tailletext">webmaster</a></p>
<p align="left"><a href="centre_liste.php" class="tailletext">*</a></p>
<form id="form2" name="form2" method="post" action="centre_sdis.php">
  <p align="center"><input type="submit" name="codis" id="codis" value="Accès CODIS" accesskey="5" tabindex="5" /></p>
</form>
</body>
</html>
A l'heure actuelle j'ai un fichier config.php où il y a les critères de connection et une session suite à la validation d'un formulaire d'identification.

Pour insérer de la donnée, il me faudra donc envoyer vers un fichier "insertion.php" avec contrôle des données, préparation de la requête et execution de la reqête. Je le ferai en PDO, il parait que c'est mieux contre les failles?

Comment avoir accusé de récéption sur le même formulaire. (l'insertion a été effectuée.)



Si je change la date,
soit dans la case date soit par la liste des dates à droite du formulaire,
il va falloir envoyer la valeur (Plutôt GET ou POST?) vers un fichier
"selection date.php"
-> requête pour savoir si l'agent a déclaré de la donnée et si oui,

C'EST LA LE COEUR DE MON SOUCI

comment je fais pour renvoyer sur mon formulaire de départ les valeurs des cases à cocher ($tranche1...) , pour effectuer l'affichage.
Je ne vois dans aucun tuto décrit le chemin retour. C'est peut-être simple mais je suis autodidacte et je ne sais vraiment pas comment ça se passe.

Enfin

Concernant le script du calendrier qui prend beaucoup de lignes.
Me conseillez-vous de faire un module "calendar.php"
et de remplacer toute les lignes de code dans le formulaire principale par:

Code :
include("calendar.php")
hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 21h10   #2
crozet.magenta
Membre régulier
 
Avatar de crozet.magenta
 
Homme Cassian
Étudiant
Inscription : juin 2012
Messages : 86
Détails du profil
Informations personnelles :
Nom : Homme Cassian
Âge : 18
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juin 2012
Messages : 86
Points : 94
Points : 94
bonjour,

Citation:
PRIMO: est-ce que tous les fichiers doivent avoir l'extention .php? ou peut-on avoir l'extention .html? si oui quelle différence? (html=vue php=contrôle?)
si tu as du contenu php dans ta page,ton extension doit être .php sinon, si c'est que du HTML, tu peux mettre l'un ou l'autre sans problème.

Citation:
il va falloir envoyer la valeur (Plutôt GET ou POST?)
si c'est des données longues ou sensibles ou s'il y en a beaucoup, utilise POST sinon, tu peux utiliser GET

Citation:
Concernant le script du calendrier qui prend beaucoup de lignes.
Me conseillez-vous de faire un module "calendar.php"
Pour les pages, la meilleure solution me sembl être de faire ta page principale contenant le squelette et de faire des include pour les divers modules. ça permet de séparer le code et de le rendre plus clair.
de plus, si tu as besoin de cette même partie de code dans une autre page, tu n'auras pas à le réécrire, il te suffira de faire un include.


après, pour les autres questions, je ne suis pas sur d'avoir tout compris...
si j'ai bien compris, ce que tu veux faire c'est que l'utilisateur rentre la date, coche les cases souhaitées et valide le formulaire. ensuite, les valeurs envoyées doivent être enregistrées sur ta bdd, affichées sur la droite de la page de base et confirmer l'action en écrivant "l'insertion a été effectuée."
crozet.magenta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 10h29   #3
bob633
Membre Expert
 
Homme Aurélien VDC
Développeur .NET / Biztalk
Inscription : octobre 2008
Messages : 971
Détails du profil
Informations personnelles :
Nom : Homme Aurélien VDC
Âge : 25
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur .NET / Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 971
Points : 1 463
Points : 1 463
J'étais comme toi au début, je lisais beaucoup de tuto sur du MVC maison, je comprenais à peu près, puis finalement pas tant que ça.

Surtout que sur beaucoup de tuto c'est pas vraiment du MVC. Du moins ce sont des versions très très simplifiées.

Comme tu le sais le principe est de séparer les couches. On pourrait donc voir ça comme 3 dossiers :
- Le premier contient tes vues : on parle donc là que du HTML, ce qui s'affichera à l'écran. A partir d'ici, tous ces fichiers pourrait avoir l'extension .html
- Le deuxième contient tes modèles : ces fichiers contiennent les traitements, on aura donc l'extension .php ici.
- Le troisième contient les contrôleurs : c'est la logique de ton application, tout passe par lui, tout se décide ici.

Sur ta page actuel, tu aurais ton modele.php :
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
<?php
session_start();
?><?php
 
$nbresult=-1;
 
if (isset($_POST['identifiant'])) 
{
	if ( ($_POST['identifiant']=="") || (!is_numeric($_POST['identifiant']))) {$identifiant=0;} else {
    	$identifiant=$_POST['identifiant'];}
} else {
		$identifiant=0;
};
 
if (isset($_POST['mdp']))
{
        $mdp=$_POST['mdp'];
} else {
		$mdp="";
};
 
 
if (isset($_POST['form_ok']))
{
        $form_ok=$_POST['form_ok'];
} else {
		$form_ok=false;
};
 
 
 
if ($form_ok) {
 
  	//connection au serveur:
    $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
 
    //requête SQL:
    $sql = "SELECT count(*) as compteur FROM mdp where matricule=".$identifiant." and mdp='".$mdp."'";
 
	//exécution de la requête:
    $requete = odbc_do($cnx, $sql) ;
 
    //affichage des données:
	$result = odbc_fetch_object($requete);
	$nbresult=$result->compteur;
//echo $nbresult;
 
}
?>
ta vue.html :
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
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>formulaire d'identification</title>
<style type="text/css">
body,td,th {
	font-size: 18px;
}
.couleurtext {
	color: #00C;
}
.couleurtext {
	color: #00C;
}
.tailletext {
	font-size: 10px;
}
.taillemdp {
	font-size: 12px;
}
</style>
</head>
 
<body>
<p align="center"><img src="csp.jpg" width="434" height="71" alt="image" /></p>
<p align="center">&nbsp;</p>
<p align="center"><strong>Centre de Gestion de déclaration de disponibilité.</strong></p>
<p align="center"><strong>   </strong></p>
<form id="form1" name="form1" method="post" action="index.php">
<p>&nbsp;</p>
 
<div align="center">
  <?php 
if (!$nbresult) {
	echo'<b><font color="#FF0000">Mot de passe ou Identifiant incorrect !<br><br></font></b>';}
else if ($nbresult==1) {
	$_SESSION["cookie_matricule"] = $identifiant;
	$_SESSION["cookie_mdp"]= $mdp;
//	echo'<script>location.href="declaration_dispo.php";</script>';
header('Location: declaration_dispo.php'); 
 
}?></div>
<p align="center"> <span class="couleurtext">Identifiant</span> :      
  <input name="identifiant" type="text" id="identifiant"  accesskey="1" tabindex="1" value="" size="20" maxlength="19" />
 </p>
<p align="center"><span class="couleurtext">Mot de passe:</span>
  <input name="mdp" type="password" id="mdp" accesskey="2" tabindex="2" value="" size="20" maxlength="19" />
</p>
<p>&nbsp;</p>
 
  <div align="center">
    <p>
      <input type="submit" name="ok" id="ok" value="Valider" accesskey="3" tabindex="3" />
      <input type="submit" name="Annuler" id="Annuler" value="Annuler" accesskey="4" tabindex="4" />
      <input name="form_ok" type="hidden" id="form_ok" value="1">
    </p>
  </div>
</form>
<p align="left"><a href="mailto:hdupont@sdis28.fr" class="tailletext">webmaster</a></p>
<p align="left"><a href="centre_liste.php" class="tailletext">*</a></p>
<form id="form2" name="form2" method="post" action="centre_sdis.php">
  <p align="center"><input type="submit" name="codis" id="codis" value="Accès CODIS" accesskey="5" tabindex="5" /></p>
</form>
</body>
</html>
et ton controleur.php :
Code :
1
2
3
4
5
6
7
8
9
10
class Controleur
{
     public function __construct() { }
 
     public function action1controleur() { }
 
     public function action2controleur() { }
 
     ...
}
Dans ton fichier index.php à la racine de ton FTP, tu déclares ton controleurs et l'initialise :
Code :
1
2
3
<?php
Controleur = new Controleur(); // Oubli pas l'include du controleur.php pour pouvoir te servir du controleur
?>
Ensuite pour appeler tes actions, il te faut des paramètres, pourquoi pas utiliser la méthode GET. Tu pourrais avoir une URL du genre :
http://www.google.fr/?action=action1controleur

A la suite de la déclaration de ton controleur, tu testes la valeur du GET (si jamais le paramètre n'est pas bon, s'il n'existe pas, ou même s'il y en a pas, tu définit une page par défaut :
Code :
1
2
3
4
5
6
7
8
if(!empty($_GET['action']))
{
    // Ici tu peux faire un petit traitement voir si ton action existe, avant d'utiliser la valeur
 
    // Ici tu appelles la bonne méthode de ton controleur
    // En PHP 5, ca se fait comme ceci :
    Controleur->$_GET['action'](); // On utilise l'objet Controleur, et on appelle la méthode adéquat (ici $_GET['action'] vaut action1controleur donc on appelle la méthode action1controleur()
}
Maintenant il te faut redéfinir ton controleur, qui lui contient la logique de ce qu'il faudra afficher :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Controleur
{
    ...
 
    public function action1controleur() 
    { 
          // Appel du modele
          include('modele.php');
 
          // Puis appel de la vue
          include('vue.html'); // En réalité, il faut mettre .php vu que tu affiches des données PHP dedans
 
     }
}
Biensûr cet exemple n'est pas sécurisé, mais c'était pour l'idée générale. Après il faut avoir un minimum de connaissance PHP 5 pour comprendre, mais dit moi si tu t'es perdu.

Sinon, en MVC, il faut penser réutilisation. Cela veut dire que tu sépares au maximum tes informations, de façon que si tu as besoins de réutiliser, rien qu'un infime bout de code, tu puisses le faire, sans devoir recoder rien que 2 - 3 lignes.

Si tu as un calendrier, tu fais un calendrier.php
Si ce calendrier utilise des propriétés diverses, tu fais un fichier par propriété.

N'est pas peur de créer plusieurs fichiers, même si ceux-ci ne contiennent que 4 - 5 lignes, c'est plus lisible par la suite.

ps : Oublie pas non plus de séparer le CSS de la partie HTML

ps 2 : Tu devrais regarder du côté de Twig, qui permet de faire de l'héritage de template (créer un design général, et l'utiliser sur n'importe quelle page), ainsi que d'autres propriétés utiles, que tu verras en t'y intéressant.
__________________
Règle N° 1 : Si tout va bien, ne touchez à rien.

Je ne réponds pas au MP technique, inutile donc de poser vos questions. Le forum est là pour ça
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 12h45   #4
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 316
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 316
Points : 114
Points : 114
bonjour et merci à vous deux pour vos réponces

je viens d'essayer de suivre le tuto sur ZEND F mais je n'arrive pas à configurer donc je laisse tombber et je vais (essayer) sur la solution de bob 633.

déjà ce n'était pas le code lié à l'affichage.
je le mettrai à la fin du post car il est très long du fait qu'il y ai le code du calendrier.

je mets les formulaires que j'ai déjà et ceux que je vais créer pour voir si j'ai bien compris.

déjà fait:

-formulaire d'authentification "login.html" avec fonction de hashe via fichier"login.php" et création d'un token.
-formulaire "configuration.php" connection à la base de donnée et fonction cryptage du mot de passe.
-formulaire "check.php" pour vérifier l'existance du token (dans le livre que j'ai apparement, il faut que tous les fichiers aient l'extention .php pour que ça fonctionne).
-formulaire "logout.php" pour destruction de la session.

A faire:
- formulaire "calendar.php" pour la fonction calendrier
- formulaire "liste_date.php" pour créer la liste des dates où l'agent a déclaré de la disponibilité > date jour.
- formulaire "controle_dispo.php" pour vérifier si l'agent à la date du calendrier sélectionné à déclaré de la disponibilité.
-formulaire "donnees_utilisateur" pour déterminer les centres d'affectations et si droit administrateurs.
-formulaire "gestion_double_engagement.php" prise en charge du numéro du centre de secours.
-formulaire "datetime.php" permet de déterminer le créneau actuel.
-formulaire "insert_dispo.php" pour déclarer de la disponibilité
-formulaire"update_dispo.php"pour modifier de la disponibilité
-formulaire"erase_dispo.php" pour supprimer de la disponibilité

Pour les trois derniers formulaires, pour vérifier la donnée avant de faire la requête, peut-on utiliser un formulaire "controle_donnee.php" commun?

faut-il créer un formulaire "CSS.php"??? où je peux le laisser dans la vue?

j'ai pas trop compris le fichier controleur et ce qui suit bob633.

Est-ce qu'il faut mettre tous ces fichiers directement dans www, ou faut-il les classer dans différents répertoires comme un MVC?
Je vous demande celà car chez nous le responsable informatique est très exigeant sur la sécurisation.

ATTENTION, voici le code du formulaire
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
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
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
 
<?php
// a inserer vérification du token via "config.php"
session_start();
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Déclaration dispo jour automatique</title>
</head>
<style type="text/css">
a{ text-decoration:none;} 
a:link{color: #006;}
a:visited{color: #006;}
a:active{color: red;}
a:hover{color: red;}
 
.ds_box {
	background-color: #FFF;
	border: 1px solid #000;
	position: absolute;
	z-index: 32767;
}
 
.ds_tbl {
	background-color: #FFF;
}
 
.ds_head {
	background-color: #333;
	color: #FFF;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 13px;
	font-weight: bold;
	text-align: center;
	letter-spacing: 2px;
}
 
.ds_subhead {
	background-color: #CCC;
	color: #000;
	font-size: 12px;
	font-weight: bold;
	text-align: center;
	font-family: Arial, Helvetica, sans-serif;
	width: 32px;
}
 
.ds_cell {
	background-color: #EEE;
	color: #000;
	font-size: 13px;
	text-align: center;
	font-family: Arial, Helvetica, sans-serif;
	padding: 5px;
	cursor: pointer;
}
 
.ds_cell:hover {
	background-color: #F3F3F3;
} /* This hover code won't work for IE */
 
.Style1 {
	color: #F60300;
	font-weight: bold;
}
</style>
 
<?php
// "config.php"
if (isset($_SESSION["cookie_matricule"])) 
 
{ 
 $cookie_matricule=$_SESSION["cookie_matricule"];
 $centre=0;
//connection à la base de données:
    $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
 
//Recuperation des valeurs des centres
 $sql = "SELECT * FROM Rcentre where matricule=".$cookie_matricule."";
    $requete = odbc_do($cnx, $sql) ;
	$result = odbc_fetch_object($requete);
 
	$centre1=$result->centre1;
	$centre2=$result->centre2;
	$ncentre1=$result->ncentre1;
	$ncentre2=$result->ncentre2;
	$centre=$centre1;
$_SESSION['centre4']=$centre1;
if (($centre1<>$centre2)AND($centre2<>"")){$_SESSION["centre2"]=$centre1;}else{$centre=$centre1;$_POST['radio']=$centre1 ;$_SESSION["centre2"]=$centre1;}
if (  (isset($_POST['ok'])) || (isset($_POST['creer']))  || (isset($_POST['modifier'])) ||(isset($_POST['dateform'])) )  {$centre=$_POST['radio'];$_SESSION["centre"]=$_POST['radio'];$_SESSION["centre2"]=$_POST['radio'];} else {$centre=$centre1;}
if (isset($_GET['dateurl'])){$centre=$_SESSION["centre"];;}
 
//connection à la base de données:
    $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
 
 
//Initiatisation des variables:
$cookie_matricule=$_SESSION["cookie_matricule"];
$tranche1=0;
$tranche2=0;
$tranche3=0;
$tranche4=0;
$tranche5=0;
$tranche6=0;
$tranche7=0;
$tranche8=0;
$tranche9=0;
$tranche10=0;
$requeteinsert=0;
$requeteupdate=0;
$requetesupp=0;
 
// Création de la date du jour en fonction du passage par le lien, le calendrier, ou par rien du tout	
if (isset($_POST['dateform'])) 	{
	$jour = $_POST['dateform'];
} else if (isset($_GET['dateurl'])) {
	$jour=$_GET['dateurl'];
} else 
	$jour=date('d-m-Y');
$jour2=date('d-m-Y');
//Transformation de la date en date Access
$dateEN = substr($jour,6,4)."-".substr($jour,3,2)."-".substr($jour,0,2);	
$dateEN2 = substr($jour2,6,4)."-".substr($jour2,3,2)."-".substr($jour2,0,2);	
 
 	//Traitement de l'insertion des données (passage par bouton "Valider" ou "Modifier"
	if ( (isset($_POST['creer'])) || (isset($_POST['modifier']))  ){
 
		 for ($i = 1 ; $i<=10; $i++) {
			if (isset($_POST['tranche'.$i])) { 
				${'tranche'.$i}=$_POST['tranche'.$i]; 
			} else {
				${'tranche'.$i}="off";
			}
		} 
 
		//recherche si agent double de doublon de déclaration de dispo
 
	if (($centre1<>$centre2)AND($centre2<>"")){ 
	//Si agent centre1->centre2
	if ($centre==$centre1){ 
		$centreX=$centre2;}
	//Si agent centre2->centre1
	if ($centre==$centre2){ 
		$centreX=$centre1;}
 
		//Recherche si déclaration pour $centreX
	//Affichage des disponibilités pour le jour déterminé
	$sqlX = "SELECT count(*) as compteur FROM dispo_journaliere where matricule=".$cookie_matricule." and jour=#".$dateEN."# AND centre=".$centreX."";
	//echo $sqlX;
  	$requeteX = odbc_do($cnx, $sqlX) ;
	$resultX = odbc_fetch_object($requeteX);
	$nbresultX=$resultX->compteur;	
	//echo $nbresultX;
	     // si 2 centres et pas de double déclaration
	if ($nbresultX==0){
		//echo ('pas de déclaration de disponibilité sur le double engagement');
		//Execution requete insert ou update
 
		if (isset($_POST['creer'])) { $centre=$_POST['radio'];
		//echo ('agent double - sans déclaration 2eme centre -insertion');
		  $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
		$sqlinsert ="INSERT  INTO dispo_journaliere ( matricule, jour, tranche1, tranche2, tranche3,tranche4 , tranche5, tranche6, tranche7, tranche8, tranche9, tranche10, centre) VALUES ( $cookie_matricule, #$dateEN#, $tranche1, $tranche2,  $tranche3 , $tranche4 , $tranche5 , $tranche6, $tranche7, $tranche8, $tranche9, $tranche10, $centre)";
// echo $sqlinsert;
		$requeteinsert = odbc_do($cnx, $sqlinsert)  ; }
		if (isset($_POST['modifier'])) { $centre=$_POST['radio'];
		//echo ('agent double - sans déclaration 2eme centre -modification');
		$sqlupdate = "UPDATE dispo_journaliere SET matricule= $cookie_matricule, jour= #$dateEN#, tranche1   = $tranche1, tranche2= $tranche2, tranche3 = $tranche3, tranche4 = $tranche4, tranche5 = $tranche5, tranche6 = $tranche6, tranche7 = $tranche7, tranche8 = $tranche8, tranche9 = $tranche9, tranche10 = $tranche10 WHERE matricule = ".$cookie_matricule." and jour= #".$dateEN."# and centre=".$centre."" ;
		//echo $sqlupdate;
		$requeteupdate = odbc_do($cnx, $sqlupdate)  ;}}
		if ($nbresultX==1){
		//Comparaison
		//Recupération des valeurs pour les tranches sur $centreX
	$sqlTX = "SELECT matricule, jour, tranche1, tranche2, tranche3 ,tranche4 ,tranche5 ,tranche6, tranche7, tranche8, tranche9 ,tranche10 FROM dispo_journaliere where matricule=".$cookie_matricule." and jour=#".$dateEN."# AND centre=".$centreX."" ;
	  	$requeteTX = odbc_do($cnx, $sqlTX) ;
		$resultTX = odbc_fetch_object($requeteTX);
		$tranche1X=$resultTX->tranche1;
		$tranche2X=$resultTX->tranche2;
		$tranche3X=$resultTX->tranche3;
		$tranche4X=$resultTX->tranche4;
		$tranche5X=$resultTX->tranche5;
		$tranche6X=$resultTX->tranche6;
		$tranche7X=$resultTX->tranche7;
		$tranche8X=$resultTX->tranche8;
		$tranche9X=$resultTX->tranche9;
		$tranche10X=$resultTX->tranche10;	
 
		//comparaison des tranches
		if (($tranche1X==1)AND($tranche1=='on')) {$T1=1;} else {$T1=0;}
		if (($tranche2X==1)AND($tranche2=='on')) {$T2=1;} else {$T2=0;}
		if (($tranche3X==1)AND($tranche3=='on')) {$T3=1;} else {$T3=0;}
		if (($tranche4X==1)AND($tranche4=='on')) {$T4=1;} else {$T4=0;}
		if (($tranche5X==1)AND($tranche5=='on')) {$T5=1;} else {$T5=0;}
		if (($tranche6X==1)AND($tranche6=='on')) {$T6=1;} else {$T6=0;}
		if (($tranche7X==1)AND($tranche7=='on')) {$T7=1;} else {$T7=0;}
		if (($tranche8X==1)AND($tranche8=='on')) {$T8=1;} else {$T8=0;}
		if (($tranche9X==1)AND($tranche9=='on')) {$T9=1;} else {$T9=0;}
		if (($tranche10X==1)AND($tranche10=='on')) {$T10=1;} else {$T10=0;}
		//si déclaration sur tranche commune
		if (($T1==1)OR($T2==1)OR($T3==1)OR($T4==1)OR($T5==1)OR($T6==1)OR($T7==1)OR($T8==1)OR($T9==1)OR($T10==1)){$centre=$_POST['radio'];?>
<script language="javascript">
alert("Attention, vous avez déjà déclaré de la disponibilité pour le(s) créneau(x)!<?php if($T1==1){?> 00h00-05h30 <?php }?><?php if($T2==1){?> 05h30-07h30 <?php }?><?php if($T3==1){?> 07h30-09h30 <?php }?><?php if($T4==1){?> 09h30-11h30 <?php }?><?php if($T5==1){?> 11h30-13h30 <?php }?><?php if($T6==1){?> 13h30-15h30 <?php }?><?php if($T7==1){?> 15h30-17h30 <?php }?><?php if($T8==1){?> 17h30-19h30 <?php }?><?php if($T9==1){?> 19h30-21h30 <?php }?><?php if($T10==1){?> 21h30-00h00 <?php }?>");
</script>
<meta http-equiv="refresh" content="0"; url="centre.php"/>
 
<?php   //fin si déclaration sur tranche commune
	//echo 'erreur';
		} 	
		//si aucune déclaration sur tranche commune
		if (($T1==0)AND($T2==0)AND($T3==0)AND($T4==0)AND($T5==0)AND($T6==0)AND($T7==0)AND($T8==0)AND($T9==0)AND($T10==0))
		{
		if (isset($_POST['creer'])) { $centre=$_POST['radio'];
		//echo ('agent double - avec déclaration 2eme centre -insertion');
		 $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
		$sqlinsert ="INSERT  INTO dispo_journaliere ( matricule, jour, tranche1, tranche2, tranche3,tranche4 , tranche5, tranche6, tranche7, tranche8, tranche9, tranche10, centre) VALUES ( $cookie_matricule, #$dateEN#, $tranche1, $tranche2,  $tranche3 , $tranche4 , $tranche5 , $tranche6, $tranche7, $tranche8, $tranche9, $tranche10, $centre)";
 //echo $sqlinsert;
		$requeteinsert = odbc_do($cnx, $sqlinsert)  ; }
		if (isset($_POST['modifier'])) { $centre=$_POST['radio'];
		//echo ('agent double - avec déclaration 2eme centre -modification');
		$sqlupdate = "UPDATE dispo_journaliere SET matricule= $cookie_matricule, jour= #$dateEN#, tranche1   = $tranche1, tranche2= $tranche2, tranche3 = $tranche3, tranche4 = $tranche4, tranche5 = $tranche5, tranche6 = $tranche6, tranche7 = $tranche7, tranche8 = $tranche8, tranche9 = $tranche9, tranche10 = $tranche10 WHERE matricule = ".$cookie_matricule." and jour= #".$dateEN."# and centre=".$centre."" ;
		//echo $sqlupdate;
		$requeteupdate = odbc_do($cnx, $sqlupdate)  ;}
		}
	}
	}
	if (($centre1==$centre2)or($centre2=="")){
		 //echo('ici');
	if (isset($_POST['creer'])) { $centre=$_POST['radio'];
	//echo ('agent simple - insertion');
		 $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
		$sqlinsert ="INSERT  INTO dispo_journaliere ( matricule, jour, tranche1, tranche2, tranche3,tranche4 , tranche5, tranche6, tranche7, tranche8, tranche9, tranche10, centre) VALUES ( $cookie_matricule, #$dateEN#, $tranche1, $tranche2,  $tranche3 , $tranche4 , $tranche5 , $tranche6, $tranche7, $tranche8, $tranche9, $tranche10, $centre)";
// echo $sqlinsert;
		$requeteinsert = odbc_do($cnx, $sqlinsert)  ; }
		if (isset($_POST['modifier'])) { $centre=$_POST['radio'];
		//echo ('agent simple - modification');
		$sqlupdate = "UPDATE dispo_journaliere SET matricule= $cookie_matricule, jour= #$dateEN#, tranche1   = $tranche1, tranche2= $tranche2, tranche3 = $tranche3, tranche4 = $tranche4, tranche5 = $tranche5, tranche6 = $tranche6, tranche7 = $tranche7, tranche8 = $tranche8, tranche9 = $tranche9, tranche10 = $tranche10 WHERE matricule = ".$cookie_matricule." and jour= #".$dateEN."# and centre=".$centre."" ;
		//echo $sqlupdate;
		$requeteupdate = odbc_do($cnx, $sqlupdate)  ;}
		}
	}
 
	// Traitement de la suppression des disponibilités par le bouton "Supprimer"
	if (isset($_POST['supprimer'])) {
		if (  (isset($_POST['ok'])) || (isset($_POST['creer']))  || (isset($_POST['modifier'])) || (isset($_POST['supprimer'])) )  {$centre=$_POST['radio'];} else {$centre=$centre1;}
		$sqlsupp = "DELETE * FROM dispo_journaliere WHERE matricule=".$cookie_matricule." and jour=#".$dateEN."# and centre=".$centre."";
		$requetesupp = odbc_do($cnx, $sqlsupp)  ;
		//echo $sqlsupp;
	}
 
 
    // Affichage du nom/prénom de l'utilisateur (cookie)
    $sql = "SELECT nom, prenom FROM RH_personnel where matricule=".$cookie_matricule;
    $requete = odbc_do($cnx, $sql) ;
	$result = odbc_fetch_object($requete);
	$nom=$result->nom;
	$prenom=$result->prenom;
 
 
	//Affichage des disponibilités pour le jour déterminé
	$sqltmp = "SELECT count(*) as compteur FROM dispo_journaliere where matricule=".$cookie_matricule." and jour=#".$dateEN."# AND centre=".$centre."";
  	$requetetmp = odbc_do($cnx, $sqltmp) ;
	$resulttmp = odbc_fetch_object($requetetmp);
	$nbresult=$resulttmp->compteur;
 
	if ($nbresult) {
 		$sql2 = "SELECT matricule, jour, tranche1, tranche2, tranche3 ,tranche4 ,tranche5 ,tranche6, tranche7, tranche8, tranche9 ,tranche10 FROM dispo_journaliere where matricule=".$cookie_matricule." and jour=#".$dateEN."# AND centre=".$centre."" ;
	  	$requete2 = odbc_do($cnx, $sql2) ;
		$result2 = odbc_fetch_object($requete2);
		$tranche1=$result2->tranche1;
		$tranche2=$result2->tranche2;
		$tranche3=$result2->tranche3;
		$tranche4=$result2->tranche4;
		$tranche5=$result2->tranche5;
		$tranche6=$result2->tranche6;
		$tranche7=$result2->tranche7;
		$tranche8=$result2->tranche8;
		$tranche9=$result2->tranche9;
		$tranche10=$result2->tranche10;
	} ?>
 
<body> 
 
<table class="ds_box" cellpadding="0" cellspacing="0" id="ds_conclass" style="display: none;">
<tr><td id="ds_calclass">
</td></tr>
</table>
 
<script type="text/javascript">
//script du calendrier que j'ai retiré pour enlevé une centaine de lignes
 </script>
 
 
 <table border="2">
 <tr><td><div align="center"><img src="csp.jpg" width="640" height="72" /></div></td>
 <td><p align="center">Bonjour <?php echo $prenom;?> <?php echo $nom;?> / <a href="deconnexion.php">Déconnexion</a></p>
  <?php 
 
$admi="SELECT * FROM mdp WHERE matricule=".$cookie_matricule."";
$requeteadm = odbc_do($cnx, $admi)  ; 
$resultadm = odbc_fetch_object($requeteadm);
$cocheA=$resultadm->A;
$cocheB=$resultadm->B;
if (($centre1<>$centre2)AND($centre2<>"")){ 
	//Si agent centre1->centre2
	if ($centre==$centre1){$coche=$cocheA;
		 }
	//Si agent centre2->centre1
	if ($centre==$centre2){$coche=$cocheB;
		 }
}else {$coche=$cocheA;}
 
?>
<form  id="form2" name="form2" method="post" action="dispo_semaine.php">
 <?php
 if ($coche==1)
 {echo ("<a href=dispo_semaine.php> Semaine </a>");
  }
  ?>
 </form>
<form  id="form3" name="form3" method="post" action="dispo_tranche.php">
<?php
 if ($coche==1)
 {echo ("<a href=dispo_tranche.php> Jour </a>");
 }
 ?></form>
<form  id="form4" name="form4" method="post" action="dispo_tranche.php">
<?php
 if ($coche==1)
 {echo ("<a href=competance.php> Competence </a>");
 }
 ?>
 </form>
 
 
 
 
</td></tr>
 <tr><td>
 
<form id="form12" name="form12" method="post" action="declaration_dispo.php">
 
   <p>Veuillez entrez une date :
 
<input onclick="ds_sh(this);" name="dateform" readonly="readonly" style="cursor: text" value="<?php echo $jour;?>" />
 
 
 <?php 	if (isset($_POST['creer'])) {
 			if ($requeteinsert) 
			  echo(" (L'insertion a été correctement effectuée)") ;
		 	else
	          echo(" (L'insertion a échouée)");
		}
 
 		if (isset($_POST['modifier'])) {
 				if ($requeteupdate)
			  		echo(" (La mise à jour a correctement été effectuée)");
				else 
			  		echo(" (La mise à jour a échouée)");
		}
 
		if (isset($_POST['supprimer'])) {
 				if ($requetesupp)
			  		echo(" (La suppression a correctement été effectuée)");	  
				else 
			  		echo(" (La suppressiona échouée)");
		}
  ?>
 
 
 <?php if (!$nbresult) {?><p class="Style1">Aucune disponibilité renseignée à ce jour !!!</p><?php } ?>  <?php
	if (($centre1<>$centre2)AND($centre2<>"")){ ?>
 
 
 
 
<p>
<?php
 if ($centre==$centre1){
	 ?>
 
    <input type="radio" name="radio" id="centre" value="<?php echo $centre1; ?>"  checked="checked"   />
    <label for="centre"><?php echo $ncentre1; ?></label>
    <?php ;}
	else {
		 ?>
		  <input type="radio" name="radio" id="centre" value="<?php echo $centre1; ?>"  />
    <label for="centre"><?php echo $ncentre1; ?></label>
	<?php ;} ?>
 <br/>
<?php
 if ($centre==$centre2){
	 ?>
 
    <input type="radio" name="radio" id="centre2" value="<?php echo $centre2; ?>" checked="checked"  />
    <label for="centre2"><?php echo $ncentre2; ?></label>
     <?php ;}
	else {
		 ?>
         <input type="radio" name="radio" id="centre2" value="<?php echo $centre2; ?>"  />
    <label for="centre2"><?php echo $ncentre2; ?></label>
    <?php ;} ?>
  </p>
    <input type="submit" name="ok" id="ok" value="Selection centre" /> 
 
 <?php ;} else {  $_POST['radio']=$centre1; //echo $_POST['radio']
 ;}
 ?>
  <p>00h00 - 05h30
    <input type="checkbox" name="tranche1" accesskey="3" tabindex="3" <?php if ($tranche1) {?>checked="checked"?>
    <?php }?>
  </p>
  <p>05h30 - 07h30
    <input type="checkbox" name="tranche2" accesskey="4" tabindex="4" <?php if ($tranche2) {?>checked="checked"?>
    <?php }?>
  </p>
  <p>    07h30 - 09h30
    <input type="checkbox" name="tranche3" accesskey="5" tabindex="5" <?php if ($tranche3) {?>checked="checked"?>
    <?php }?>
  </p>
  <p>09h30 - 11h30
    <input type="checkbox" name="tranche4" accesskey="6" tabindex="6" <?php if ($tranche4){?>checked="checked"?>
    <?php }?>
  </p>
  <p>11h30 - 13h30
    <input type="checkbox" name="tranche5" accesskey="7" tabindex="7" <?php if ($tranche5){?>checked="checked"?>
    <?php }?>
  </p>
  <p>13h30 - 15h30
    <input type="checkbox" name="tranche6" accesskey="8" tabindex="8" <?php if ($tranche6){?>checked="checked"?>
    <?php }?>
  </p>
  <p>15h30 - 17h30
    <input type="checkbox" name="tranche7" accesskey="9" tabindex="9" <?php if ($tranche7){?>checked="checked"?>
    <?php }?>
  </p>
  <p>17h30 - 19h30
    <input type="checkbox" name="tranche8" accesskey="10" tabindex="10" <?php if ($tranche8){?>checked="checked"?>
    <?php }?>
  </p>
  <p>19h30 - 21h30
    <input type="checkbox" name="tranche9" accesskey="11" tabindex="11" <?php if ($tranche9){?>checked="checked"?>
    <?php }?>
  </p>
  <p>21h30 - 24h00
    <input type="checkbox" name="tranche10" accesskey="12" tabindex="12" <?php if ($tranche10){?>checked="checked"?>
    <?php }?>   
  </p>
  <p align="center">
    <?php
	 if ($dateEN<$dateEN2){
	 echo ('Pour une date antérieur à la date du jour seule une visualisation est autorisée.');}else { if (!$nbresult) {?>
    <input type="submit" name="creer" id="OK" value="Valider" accesskey="13" tabindex="13" /> 
    <?php } else {?>
     <input type="submit" name="modifier" id="Modifier" value="Modifier" accesskey="14" tabindex="14" /> 
   <input type="submit" name="supprimer" id="Supprimer" value="Supprimer" accesskey="15" tabindex="15"  /> 
   <?php }} ?>
  </p>
  </form>
  </td>
 
 
 
 <td>  
 
<form name="form1" method="post" action="declaration_dispo.php">
 
   <?php 
 
   //requête SQL ensemble des disponibilités déclarées (date()>= date déclarée):
    $dateD=date('d-m-Y');
    $dateEN = substr($dateD,6,4)."-".substr($dateD,3,2)."-".substr($dateD,0,2);
    $sqldecla = "SELECT * FROM dispo_journaliere where matricule=".$cookie_matricule." and jour>=#".$dateEN."# AND centre=".$centre." ORDER BY jour" ;
 
   // echo "".$sqldecla."";
    $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
    //exécution de la requête:
    $requetedecla = odbc_do($cnx, $sqldecla) ;
 
      $_SESSION["centre"]=$centre;
   echo ("<div align=\"center\">Disponibilité déclarée pour le:");
   while( $resultdecla = odbc_fetch_object( $requetedecla ) )
    { 
	$date2=$resultdecla->jour;
	$dateEN1 = date(substr($date2,8,2)."-".substr($date2,5,2)."-".substr($date2,0,4));
 
       ?> <div align="center"><a href="declaration_dispo.php?dateurl=<?php echo $dateEN1; ?>"><?php echo $dateEN1;?></a><br>
   <?php
 
    } ?>
    </form></td>
   </table>
 
<p align="center">&nbsp;</p>
 
</body>
</html> 
 
<?php
} else header('Location:index.php');
?>
hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 14h09   #5
malgache
Membre éprouvé
 
Homme Yann
IUT Informatique
Inscription : mars 2011
Messages : 400
Détails du profil
Informations personnelles :
Nom : Homme Yann
Localisation : France

Informations professionnelles :
Activité : IUT Informatique

Informations forums :
Inscription : mars 2011
Messages : 400
Points : 452
Points : 452
Pour la clarté d'une appli c'est toujours mieux d'avoir des dossier différents.

Je sais pas si j'ai une bonne approche du MVC mais part sur une base claire et simple, la quand je lis les postes je vous avoue que je suis un peu perdu.

La vue, sert à afficher l'html, donc disons qu'elle a besoin d'afficher un formulaire avec des données contenus en base, la vue demande au controlleur de lui donné ce qu'elle doit affiché pour ce formulaire. Le controlleur lui va demandé au modèle les données qu'il doit mettre dans le formulaire, mettre en forme et renvoie à la vue ce qu'il doit affiché.

Citation:
Pour les trois derniers formulaires, pour vérifier la donnée avant de faire la requête, peut-on utiliser un formulaire "controle_donnee.php" commun?
C'est vivement conseillé de regroupé ce que tu peux, ça évite de devoir aller chercher de partout et faire des modifications de partout si tu dois en faire.
malgache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 16h27   #6
bob633
Membre Expert
 
Homme Aurélien VDC
Développeur .NET / Biztalk
Inscription : octobre 2008
Messages : 971
Détails du profil
Informations personnelles :
Nom : Homme Aurélien VDC
Âge : 25
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur .NET / Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 971
Points : 1 463
Points : 1 463
Je pense que tu cherches trop compliquer.

L'avantage d'un MVC maison, c'est d'avoir sa propre vision des choses, et de coder comme tu le sens.

Le pattern MVC te donne juste une notion sur comment découper ton code pour t'y retrouver. A partir de là, tu fais comme tu veux/peux.

Perso, quand j'ai débuté le MVC, je suis partit directement sur Symfony2, pour le côté sécurité derrière. C'est un peu dépaysant au début, car il faut s’imprégner totalement d'une nouvelle méthode de coder, mais quand tu piges la chose, ça devient beaucoup plus facile et logique.

Citation:
j'ai pas trop compris le fichier controleur et ce qui suit bob633.
Le contrôleur te permet de choisir l'action qui doit être exécuté.

Dans une application MVC, tu as un fichier principal, qu'on appelle souvent "front controller" car c'est lui qui appelle les autres contrôleurs. Qué zako

Pour faire simple, ce front controller peut être ton index.php qui se trouve à la racine de ton site.

Toutes les actions doivent se déclencher à partir de ce fichier index.php. C'est pour cela qu'on déclare le contrôleur précédent (dans mon précédent poste) en début de ce fichier, pour pouvoir accéder à toutes les méthodes de ce contrôleur. Ce sont ces méthodes qui appelleront les données et la vue adéquat, personne d'autres !

Imaginons que tu as un menu sur le haut de ton site avec les actions suivantes (dans ton index.php tu appelles les vues header.html, menuhtml et footer.html de page) :
- Accueil
- Afficher voitures
- Afficher motos
- Contact

Chacun de ces liens enverra sur une url de ce genre :
- Accueil : www.nom_site.fr/?action=accueil
- Afficher voitures : www.nom_site.fr/?action=voitures
- Afficher motos : www.nom_site.fr/?action=motos
- Contact : www.nom_site.fr/?action=contact

Lorsque tu as déclaré ton contrôleur, tu appelles la méthode que tu veux.
Pour t'éviter de faire ça :
Code :
1
2
3
4
5
if($_GET['action'] == 'voitures')
{
    Controleur->action1();
}
else if(...){...}
tu peux t'arranger pour que le nom de ton action soit identique au nom de la méthode dans le Controleur, que tu puisses l'appeler directement par :
Code :
Controleur->$_GET['action'];
Exemple du index.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// index.php
 
<?php
include 'Controleur.php';
include 'header.html';
include 'menu.html';
 
Controleur = new Controleur();
 
if(!empty($_GET['action']))
{
	Controleur->$_GET['action']; // Où $_GET['action'] doit contenir la même valeur qu'une action
}
else
{
	// Si pas d'action, on renvoie vers l'action accueil
	Controleur->Accueil();
}
 
include 'footer.php';
Exemple du controleur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Controleur.php
<?php
 
class Controleur
{
	public function __construct()
	{ }
 
	public function accueil()
	{
		include 'modele_accueil.php';
		include 'vue_accueil.html';
	}
 
	public function voitures()
	{
		include 'modele_voitures.php';
		include 'vue_voitures.html';
	}
 
	// etc
	// Chaque action (donc chaque bouton de ton menu) doit avoir une fonction ici
}
Bien sûr, c'est une version simplifiée, mais au début, commence simple. Quand tu maîtriseras, tu sécurisera le tout
__________________
Règle N° 1 : Si tout va bien, ne touchez à rien.

Je ne réponds pas au MP technique, inutile donc de poser vos questions. Le forum est là pour ça
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 17h25   #7
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 316
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 316
Points : 114
Points : 114
je viens de travailler par rapport à tout ce qui vient d'être dit.

Est-ce que l'arborescence tient debout, ainsi que la répartition des fichiers?
où placer le fichier htaccess?

arbre.jpg

et voici le code a priori
merci de me dire si je prends la bonne route ou si je me plante carrément

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
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
<?php
//liaison base et controle token
include ("check.php");
 
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Déclaration dispo jour automatique</title>
</head>
 
<?php
//import du CSS
include ("css.php");
 
//Recuperation des valeurs des centres
 $sql = "SELECT * FROM Rcentre where matricule=".$cookie_matricule."";
    $requete = odbc_do($cnx, $sql) ;
	$result = odbc_fetch_object($requete);
 
	$centre1=$result->centre1;
	$centre2=$result->centre2;
	$ncentre1=$result->ncentre1;
	$ncentre2=$result->ncentre2;
	$centre=$centre1;
$_SESSION['centre4']=$centre1;
if (($centre1<>$centre2)AND($centre2<>"")){$_SESSION["centre2"]=$centre1;}else{$centre=$centre1;$_POST['radio']=$centre1 ;$_SESSION["centre2"]=$centre1;}
if (  (isset($_POST['ok'])) || (isset($_POST['creer']))  || (isset($_POST['modifier'])) ||(isset($_POST['dateform'])) )  {$centre=$_POST['radio'];$_SESSION["centre"]=$_POST['radio'];$_SESSION["centre2"]=$_POST['radio'];} else {$centre=$centre1;}
if (isset($_GET['dateurl'])){$centre=$_SESSION["centre"];;}
 
//connection à la base de données:
    $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
 
 
//Initiatisation des variables:
include ("initialisation_donnees.php");
 
// gestion date	
include ("gestion_date");	
 
include("recuperation_valeur_case_coche");
 
include("controle_double_declaration");
 
include ("erase_dispo.php");
 
include("recuperation_valeur_tranche_date.php"); ?>
 
<body> 
 
<table class="ds_box" cellpadding="0" cellspacing="0" id="ds_conclass" style="display: none;">
<tr><td id="ds_calclass">
</td></tr>
</table>
<?php
include("calendar.php");
include("donnees_utilisateur.php");
?>
 
 <table border="2">
 <tr><td><div align="center"><img src="csp.jpg" width="640" height="72" /></div></td>
 <td><p align="center">Bonjour <?php echo $prenom;?> <?php echo $nom;?> / <a href="deconnexion.php">Déconnexion</a></p>
 
<form  id="form2" name="form2" method="post" action="dispo_semaine.php">
 <?php
 if ($coche==1)
 {echo ("<a href=dispo_semaine.php> Semaine </a>");
  }
  ?>
 </form>
<form  id="form3" name="form3" method="post" action="dispo_tranche.php">
<?php
 if ($coche==1)
 {echo ("<a href=dispo_tranche.php> Jour </a>");
 }
 ?></form>
<form  id="form4" name="form4" method="post" action="dispo_tranche.php">
<?php
 if ($coche==1)
 {echo ("<a href=competance.php> Competence </a>");
 }
 ?>
 </form>
 
</td></tr>
 <tr><td>
 
<form id="form12" name="form12" method="post" action="declaration_dispo.php">
 
   <p>Veuillez entrez une date :
 
<input onclick="ds_sh(this);" name="dateform" readonly="readonly" style="cursor: text" value="<?php echo $jour;?>" />
 
 
 <?php 	if (isset($_POST['creer'])) {
 			if ($requeteinsert) 
			  echo(" (L'insertion a été correctement effectuée)") ;
		 	else
	          echo(" (L'insertion a échouée)");
		}
 
 		if (isset($_POST['modifier'])) {
 				if ($requeteupdate)
			  		echo(" (La mise à jour a correctement été effectuée)");
				else 
			  		echo(" (La mise à jour a échouée)");
		}
 
		if (isset($_POST['supprimer'])) {
 				if ($requetesupp)
			  		echo(" (La suppression a correctement été effectuée)");	  
				else 
			  		echo(" (La suppressiona échouée)");
		}
  ?>
 
 
 <?php if (!$nbresult) {?><p class="Style1">Aucune disponibilité renseignée à ce jour !!!</p><?php } ?>  <?php
	if (($centre1<>$centre2)AND($centre2<>"")){ ?>
 
<p>
<?php
 if ($centre==$centre1){
	 ?>
 
    <input type="radio" name="radio" id="centre" value="<?php echo $centre1; ?>"  checked="checked"   />
    <label for="centre"><?php echo $ncentre1; ?></label>
    <?php ;}
	else {
		 ?>
		  <input type="radio" name="radio" id="centre" value="<?php echo $centre1; ?>"  />
    <label for="centre"><?php echo $ncentre1; ?></label>
	<?php ;} ?>
 <br/>
<?php
 if ($centre==$centre2){
	 ?>
 
    <input type="radio" name="radio" id="centre2" value="<?php echo $centre2; ?>" checked="checked"  />
    <label for="centre2"><?php echo $ncentre2; ?></label>
     <?php ;}
	else {
		 ?>
         <input type="radio" name="radio" id="centre2" value="<?php echo $centre2; ?>"  />
    <label for="centre2"><?php echo $ncentre2; ?></label>
    <?php ;} ?>
  </p>
    <input type="submit" name="ok" id="ok" value="Selection centre" /> 
 
 <?php ;} else {  $_POST['radio']=$centre1; //echo $_POST['radio']
 ;}
 ?>
  <p>00h00 - 05h30
    <input type="checkbox" name="tranche1" accesskey="3" tabindex="3" <?php if ($tranche1) {?>checked="checked"?>
    <?php }?>
  </p>
  <p>05h30 - 07h30
    <input type="checkbox" name="tranche2" accesskey="4" tabindex="4" <?php if ($tranche2) {?>checked="checked"?>
    <?php }?>
  </p>
  <p>    07h30 - 09h30
    <input type="checkbox" name="tranche3" accesskey="5" tabindex="5" <?php if ($tranche3) {?>checked="checked"?>
    <?php }?>
  </p>
  <p>09h30 - 11h30
    <input type="checkbox" name="tranche4" accesskey="6" tabindex="6" <?php if ($tranche4){?>checked="checked"?>
    <?php }?>
  </p>
  <p>11h30 - 13h30
    <input type="checkbox" name="tranche5" accesskey="7" tabindex="7" <?php if ($tranche5){?>checked="checked"?>
    <?php }?>
  </p>
  <p>13h30 - 15h30
    <input type="checkbox" name="tranche6" accesskey="8" tabindex="8" <?php if ($tranche6){?>checked="checked"?>
    <?php }?>
  </p>
  <p>15h30 - 17h30
    <input type="checkbox" name="tranche7" accesskey="9" tabindex="9" <?php if ($tranche7){?>checked="checked"?>
    <?php }?>
  </p>
  <p>17h30 - 19h30
    <input type="checkbox" name="tranche8" accesskey="10" tabindex="10" <?php if ($tranche8){?>checked="checked"?>
    <?php }?>
  </p>
  <p>19h30 - 21h30
    <input type="checkbox" name="tranche9" accesskey="11" tabindex="11" <?php if ($tranche9){?>checked="checked"?>
    <?php }?>
  </p>
  <p>21h30 - 24h00
    <input type="checkbox" name="tranche10" accesskey="12" tabindex="12" <?php if ($tranche10){?>checked="checked"?>
    <?php }?>   
  </p>
  <p align="center">
    <?php
	 if ($dateEN<$dateEN2){
	 echo ('Pour une date antérieur à la date du jour seule une visualisation est autorisée.');}else { if (!$nbresult) {?>
    <input type="submit" name="creer" id="OK" value="Valider" accesskey="13" tabindex="13" /> 
    <?php } else {?>
     <input type="submit" name="modifier" id="Modifier" value="Modifier" accesskey="14" tabindex="14" /> 
   <input type="submit" name="supprimer" id="Supprimer" value="Supprimer" accesskey="15" tabindex="15"  /> 
   <?php }} ?>
  </p>
  </form>
  </td>
 
 
 
 <td>  
 
<form name="form1" method="post" action="declaration_dispo.php">
 
   <?php 
  include ("liste_date_decla.php");
  ?>
    </form></td>
   </table>
 
<p align="center">&nbsp;</p>
 
</body>
</html>
hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 09h39   #8
bob633
Membre Expert
 
Homme Aurélien VDC
Développeur .NET / Biztalk
Inscription : octobre 2008
Messages : 971
Détails du profil
Informations personnelles :
Nom : Homme Aurélien VDC
Âge : 25
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur .NET / Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 971
Points : 1 463
Points : 1 463
Ton dossier "control" c'est le dossier contrôleur ? Car si oui, je pense que tu ne vois pas trop bien la notion de contrôleur encore.

Il faut voir dans la notion de contrôleur quelque chose qui contrôle (non sans blague ). De ce pas, ce sont des fonctions qui sont appeler pour appeler d'autres éléments (modèles, vues, ...). Donc en gros, un seul contrôleur peut rassembler beaucoup d'actions.

Sinon généralement, comme dans Symfony2, tu créés 2 dossiers en tête :
- un dossier public : qui contient tes images, le css, ...
- un dossier private : qui contient tes modèles, tes contrôleurs, tes scripts, ... tout ce qui ne doit pas être vu par un utilisateur. Et c'est là que tu mets ton htaccess pour bloquer ce répertoire et tout son contenu.

Sinon est-ce normal que tu es un seul fichier ? Car je vois des includes de tous les côtés ... pour t'y retrouver ça va pas être évident :s C'est le rôle tu contrôleur d'appeler le modèle et la vue adéquates
__________________
Règle N° 1 : Si tout va bien, ne touchez à rien.

Je ne réponds pas au MP technique, inutile donc de poser vos questions. Le forum est là pour ça
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 10h00   #9
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 316
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 316
Points : 114
Points : 114
En fait je suis à la rue complet car je ne suis pas informaticien pour un sous, je "tripote" , en tout cas tes explications sont claires.

En fait j'ai du mal à voir comment l'information circule.

Formulaire de données (html) -> formulaire de contrôle (php) -> formulaire requête sql (php) -> formulaire de confirmation (html)

le contrôleur si j'ai compris, est un formulaire qui dit:
action1: formulaire de contrôle
action2: formulaire de requête sql
action3: formulaire de confirmation

hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 10h27   #10
LhIaScZkTer
Membre confirmé
 
Avatar de LhIaScZkTer
 
Inscription : mai 2004
Messages : 558
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : mai 2004
Messages : 558
Points : 243
Points : 243
Salut hugodu28,

Je ne me penche pas sur ta gestion d'arborescence qui à l'air pas mal. Par contre, au niveau de ton code, c'est un avis personnel que je donne, dans ta vue tu mélanges éléments de contrôle et modèle. La ligne 17 à 25 ne feraient-elle par parties d'un modèle ? Autre exemple les lignes 65 à 116 ne feraient-elles parties du contrôleur. J'ai pas cherché à comprendre ton script, c'est juste parcouru et vu des choses qui me sautaient aux yeux, d'après mon expérience.

Le tutoriel de Julien Pauli permet de façon très simple de comprendre le MVC : MVC en php

Dans l'introduction il propose une solution très simple et logique qui se décompose en 3 fichiers mymodel.php, myview.php et enfin mycontroller.php. J'émets juste quelques réserve sur son modèle, qui lui propose un fichier où il n'y a que des fonctions. Je proposerais la même chose, mais le modèle se transformerait en class avec tous les attributs et méthodes qui vont avec. De façon grossière, le modèle serait un abstraction d'une table de la base de données contenant les méthodes CRUD afin de pouvoir manipuler ton modèle dans le contrôleur.

Bonne journée
__________________
Sun Certified Java Programmer, SE 6 et Sun Certified Web Component Developer, J2EE 5
LhIaScZkTer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 11h38   #11
bob633
Membre Expert
 
Homme Aurélien VDC
Développeur .NET / Biztalk
Inscription : octobre 2008
Messages : 971
Détails du profil
Informations personnelles :
Nom : Homme Aurélien VDC
Âge : 25
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur .NET / Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 971
Points : 1 463
Points : 1 463
Citation:
En fait j'ai du mal à voir comment l'information circule.


J'ai essayé de faire simple.

En MVC, il faut que tu penses URL > Que faire > Qui appeler > Quoi afficher.

L'URL, elle contient les informations à afficher (l'action).

Que faire : Lorsque tu récupères l'action, tu sais quoi faire (si ton action c'est "Contact", tu dois afficher la page de contact). Mais à ce moment, c'est pas à toi d'inclure la page qui faut, c'est au contrôleur..

Qui appeler : Tu as ton paramètre action. Tu appelles donc ta fonction du contrôleur qui faut.

Quoi afficher : Tu es ici dans ta fonction du contrôleur. Ici par contre tu sais quoi inclure pour afficher la bonne page donc tu inclus d'abord ton modèle, qui va se charger de faire ce qui faut (appel BDD, lecture fichier, appels scripts, ...) puis ensuite ta vue. En gros dans ta page de vue, tu dois seulement avoir des echo $donners_PHP, que ton modèle te donnera

__________________
Règle N° 1 : Si tout va bien, ne touchez à rien.

Je ne réponds pas au MP technique, inutile donc de poser vos questions. Le forum est là pour ça
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/01/2013, 15h25   #12
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 316
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 316
Points : 114
Points : 114
bob633 , je commence à comprendre, il m'aura fallut du temps.

Pour être certain, pour 1 site, il y a 1 contrôleur avec autant de "function" qu'il peut y avoir d'actions.

chaque "function" appel via des "include" différentes pages qui mises bout à bout forment un code qui ressemble à peu près à celui que j'ai mis au début de cette discussion?

Dites moi que c'est ça S.V.P.

hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 15h30   #13
bob633
Membre Expert
 
Homme Aurélien VDC
Développeur .NET / Biztalk
Inscription : octobre 2008
Messages : 971
Détails du profil
Informations personnelles :
Nom : Homme Aurélien VDC
Âge : 25
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur .NET / Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 971
Points : 1 463
Points : 1 463
Oui ça ressemble à cela

Après suivant tes applications, tu peux diviser aussi en module.

Tu pourrais avoir dans une URL www.toto.fr??module=forum&action=afficher_postes

Ainsi au lieu d'avoir un seul contrôleur qui aurait des dizaines et des dizaines d'actions, tu peux diviser.

Sur ta page index.php, au lieu d'appeler toujours le même contrôleur, tu peux l'appeler en fonction du module.

Ceci te permet de diviser tes actions par thème : controleur forum (avec des fonctions afficher_poste, afficher_un_poste, afficher_xxx), controleur site (afficher_contact, affichier_calendrier), controleur utilisateur (afficher_profil, ajouter_utilisateur, ...).

Mais quand on débute, il faut voir simple, et pas trop complexifier la chose. Tu verras de toi même que quand tu seras un unique contrôleur, tu vas trouver bizarre de tout mettre dans le même alors que tu pourrais séparer pour bien faire les choses (et pas avoir un contrôleur de 5000 lignes ).
__________________
Règle N° 1 : Si tout va bien, ne touchez à rien.

Je ne réponds pas au MP technique, inutile donc de poser vos questions. Le forum est là pour ça
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 15h56   #14
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 316
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 316
Points : 114
Points : 114
Bon ba ça c'est limpide en tout cas merci pour ta patience.

La der des der et après je mets "résolu"

concernant l'arborescence:
-dossier "public": toutes les images du site et les CSS
-dossier "private": tout le reste,... y compris les vues??? le index.php???

concernant le .htaccess pour bloquer la lecture du dossier private.
Le plus simple, c'est de n'avoir que des XXX.php

et le code du .htaccess serait:
Code :
1
2
3
4
5
 
<FilesMatch"\.php$">
order allow,deny
deny from all
</FilesMatch>
hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 16h11   #15
bob633
Membre Expert
 
Homme Aurélien VDC
Développeur .NET / Biztalk
Inscription : octobre 2008
Messages : 971
Détails du profil
Informations personnelles :
Nom : Homme Aurélien VDC
Âge : 25
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur .NET / Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 971
Points : 1 463
Points : 1 463
Oui tu peux y mettre les vues, les modèles etc

Dans Symfony, les css se trouvent dans la partie public (surement parce qu'on peut mettre des liens d'images dans les css).

Concernant le .htaccess, symfony2 prépare le .htaccess avec seulement ce bout de code :
Peut-être une piste ... car si tu veux bloquer des scripts .js ou autre extensions, c'est pas forcément évident avec plusieurs lignes.

Mais je passe mon chemin pour le côté sécurité et accès aux données à quelqu'un qui connait mieux Mais tu peux partir là dessus sans problème en attendant
__________________
Règle N° 1 : Si tout va bien, ne touchez à rien.

Je ne réponds pas au MP technique, inutile donc de poser vos questions. Le forum est là pour ça
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 16h24   #16
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 316
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 316
Points : 114
Points : 114
ok et bien je pars avec ça sous le bras. Merci
hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h49.


 
 
 
 
Partenaires

Hébergement Web