Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2008, 17h50   #1
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Par défaut [POO] Programmation objet : correction

Bonjour,

Je débute au niveau de la programmation objet, et j'ai créé une classe article qui permet de gérer les articles. J'aimerais bien que celle-ci soit commenté, pour me dire si elle réaliser de manière poo. Si ma fasson de programmer poo est correcte.

Merci d'avance

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
 
class article
{
	private $id;
	private $erreur;
 
 
 
	public function __construct($id_article=NULL)
	{
		$this->id = intval($id_article);
	} 
 
 
 
	public function modifier()
	{
		global $niveau_membre;
 
		$id = $this->id;
 
		(isset($_POST['idcategorie'])) ? $idcategorie=intval($_POST['idcategorie']) : $idcategorie="";
		(isset($_POST['titre'])) ? $titre=mysql_real_escape_string(htmlentities ($_POST['titre'], ENT_QUOTES)) : $titre="";
		(isset($_POST['resume'])) ? $resume=mysql_real_escape_string(htmlentities ($_POST['resume'], ENT_QUOTES)) : $resume="";
		(isset($_POST['corps_texte'])) ? $corps_texte=mysql_real_escape_string(htmlentities ($_POST['corps_texte'], ENT_QUOTES)) : $corps_texte="";
		(isset($_POST['etat'])) ? $etat=intval($_POST['etat']) : $etat="";
		(isset($_POST['url_court'])) ? $url_court=mysql_real_escape_string(htmlentities ($_POST['url_court'], ENT_QUOTES)) : $url_court="";
		(isset($_POST['meta_mots_cle'])) ? $meta_mots_cle=mysql_real_escape_string(htmlentities ($_POST['meta_mots_cle'], ENT_QUOTES)) : $meta_mots_cle="";
		(isset($_POST['meta_description'])) ? $meta_description=mysql_real_escape_string(htmlentities ($_POST['meta_description'], ENT_QUOTES)) : $meta_description="";
		(isset($_POST['position'])) ? $position=intval($_POST['position']) : $position="";
		(isset($_POST['verrouiller'])) ? $verrouiller=intval($_POST['verrouiller']) : $verrouiller="";
		(isset($_POST['afficher_date_publication'])) ? $afficher_date_publication=intval($_POST['afficher_date_publication']) : $afficher_date_publication="";
 
		//regarde si l'id de la categorie existe bien
		$retour=mysql_query("SELECT id FROM contenu_categorie WHERE id='$idcategorie'");
		$donnees=mysql_fetch_array($retour);
		(empty($donnees)) ? $idcategorie=0 : NULL;
 
		// Regarde si l'id existe
		$retour=mysql_query("SELECT url_court, verrouiller, etat, afficher_date_publication FROM contenu_article WHERE id='$id'");
		$donnees=mysql_fetch_array($retour);
		if (!empty($donnees))
		{
			if($niveau_membre<9)
			{
				$url_court=$donnees['url_court'];
				$verrouiller=$donnees['verrouiller'];
			}
			if($niveau_membre<5)
			{
				$etat=$donnees['etat'];
				$afficher_date_publication=$donnees['afficher_date_publication'];
			}
		}
		else
		{
			if($niveau_membre<9)
			{
				$url_court="";
				$verrouiller=0;
			}
			if($niveau_membre<5)
			{
				$etat=0;
				$afficher_date_publication=1;
			}
			$id=NULL;
		}
 
 
		if($verrouiller==1 AND $niveau_membre<9) // Empeche de modifier l'article si celui-ci est verrouillé.
		{
			$this->erreur = _LANG_CONTENU_NOUVARTICLEEVERROUILLER;
			return false;
		}
		if($idcategorie==0 AND $niveau_membre<9) // Empeche de créé un artice qui est dans aucune catégorie. Mais il autorise la modification d'un article qui est dans aucune catégorie.
		{
			$retour=mysql_query("SELECT * FROM contenu_article WHERE id='$id'");
			$donnees=mysql_fetch_array($retour);
			if (empty($donnees) OR $donnees['idcategorie']!=0)
			{
				$this->erreur = _LANG_CONTENU_NOUVARTICLEEINTERDITCATEGORIE;
				return false;
			}
		}
		if($idcategorie!=0 AND $niveau_membre<9) // Empeche de déplacer un article qui a un idcategorie égal à 0.
		{
			$retour=mysql_query("SELECT * FROM contenu_article WHERE id='$id'");
			$donnees=mysql_fetch_array($retour);
			if (!empty($donnees) AND $donnees['idcategorie']==0)
			{
				$this->erreur = _LANG_CONTENU_NOUVARTICLEEINTERDITCATEGORIEDEPLACEMENT;
				return false;
			}
		}
		if($titre==NULL)
		{
			$this->erreur = _LANG_CONTENU_NOUVARTICLEETITREMANQUANT;
			return false;
 
		}
		if($resume==NULL)
		{
			$this->erreur = _LANG_CONTENU_NOUVARTICLEERESUMEMANQUANT;
			return false;
		}
		if($corps_texte==NULL)
		{
			$this->erreur = _LANG_CONTENU_NOUVARTICLEECORPSTEXTEMANQUANT;
			return false;
		}
		if($position==NULL)
		{
			$this->erreur = _LANG_CONTENU_NOUVARTICLEEPOSITIONMANQUANT;
			return false;
		}
 
 
 
		$date_publication=time();			
 
		if($id==NULL)
		{
			mysql_query("INSERT INTO contenu_article VALUES('','$idcategorie','$titre','$resume', '$corps_texte','', '', '$date_publication', '$etat', '$url_court', '$meta_mots_cle','$meta_description','$position', '','$verrouiller','$afficher_date_publication')");
		}
		else
		{
			mysql_query("UPDATE contenu_article SET idcategorie='$idcategorie', titre='$titre', resume='$resume', corps_texte='$corps_texte', etat='$etat', url_court='$url_court', meta_mots_cle='$meta_mots_cle', meta_description='$meta_description', position='$position', verrouiller='$verrouiller', afficher_date_publication='$afficher_date_publication' WHERE id='$id'");
		}
 
		return true;
	}
 
 
 
 
 
 
	public function supprimer()
	{
		global $niveau_membre;
 
		$id = $this->id;
 
		$retour=mysql_query("SELECT idcategorie, verrouiller FROM contenu_article WHERE id='$id'");
		$donnees=mysql_fetch_array($retour);
 
		if (!empty($donnees))
		{
			if($donnees['idcategorie']==0 AND $niveau_membre<9)
			{
				$this->erreur = _LANG_CONTENU_ARTICLESUPPRIMERINTERDITRACINE;
				return false;
			}
			if($donnees['verrouiller']==1 AND $niveau_membre<9)
			{
				$this->erreur = _LANG_CONTENU_ARTICLESUPPRIMERINTERDITVERROUILLER;
				return false;
			}
 
			mysql_query("DELETE FROM contenu_article WHERE id='$id'");
 
			return true;
		}
 
		$this->erreur = _LANG_CONTENU_ARTICLESUPPRIMERNEXISTEPAS;
		return false;
	}
 
 
 
	public function afficherModifier()
	{
		global $template;
		global $niveau_membre;
 
		$id = $this->id;
 
		$template->set_filenames(array('categorie' => 'modules/contenu/templates/article_modifier.html'));
 
		$retour=mysql_query("SELECT * FROM contenu_article WHERE id='$id'");
		$donnees=mysql_fetch_array($retour);
 
 
		if (!empty($donnees) AND $_POST==NULL)
		{	
			$titrepage = _LANG_CONTENU_MODIARTICLEEETITRE;
			$message = _LANG_CONTENU_MODIARTICLEEEMESSAGE;
			$titre = stripslashes($donnees['titre']);
			$resume = stripslashes($donnees['resume']);
			$corps_texte = stripslashes($donnees['corps_texte']);
			$etat = $donnees['etat'];
			$url_court = $donnees['url_court'];
			$meta_mots_cle = $donnees['meta_mots_cle'];
			$meta_description = $donnees['meta_description'];
			$position = $donnees['position'];
			$idcategorie = $donnees['idcategorie'];
			$verrouiller = $donnees['verrouiller'];
			$afficher_date_publication = $donnees['afficher_date_publication'];
		}
		else
		{
			$titrepage = _LANG_CONTENU_NOUVARTICLEEETITRE;
			$message = _LANG_CONTENU_NOUVARTICLEEEMESSAGE;
			(isset($_POST['titre'])) ? $titre = stripslashes($_POST['titre']) : $titre="";
			(isset($_POST['resume'])) ? $resume = stripslashes($_POST['resume']) : $resume="";
			(isset($_POST['corps_texte'])) ? $corps_texte = stripslashes($_POST['corps_texte']) : $corps_texte="";
			(isset($_POST['etat'])) ? $etat = $_POST['etat'] : $etat=1;
			(isset($_POST['url_court'])) ? $url_court = $_POST['url_court'] : $url_court="";
			(isset($_POST['meta_mots_cle'])) ? $meta_mots_cle = $_POST['meta_mots_cle'] : $meta_mots_cle="";
			(isset($_POST['meta_description'])) ? $meta_description = $_POST['meta_description'] : $meta_description="";
			(isset($_POST['position'])) ? $position = $_POST['position'] : $position=1;
			(isset($_POST['idcategorie'])) ? $idcategorie = $_POST['idcategorie'] : $idcategorie=0;
			(isset($_POST['verrouiller'])) ? $verrouiller = $_POST['verrouiller'] : $verrouiller=0;
			(isset($_POST['afficher_date_publication'])) ? $afficher_date_publication = $_POST['afficher_date_publication'] : $afficher_date_publication=1;
		}
 
		arborescence(0, 0, $idcategorie);
 
		if($etat==1){ $etat1="selected"; $etat0="";} else { $etat1=""; $etat0="selected";}
		if($verrouiller==1){ $verrouiller1="selected"; $verrouiller0="";} else { $verrouiller1=""; $verrouiller0="selected";}
		if($afficher_date_publication==1){ $afficher_date_publication1="selected"; $afficher_date_publication0="";} else { $afficher_date_publication1=""; $afficher_date_publication0="selected";}	
 
		$template->assign_vars(array(
			'titrepage'  => $titrepage,
			'message'  => $message,
			'titre'  => $titre,
			'resume'  => $resume,
			'corps_texte'  => $corps_texte,
			'etat1'  => $etat1,
			'etat0'  => $etat0,
			'verrouiller1'  => $verrouiller1,
			'verrouiller0'  => $verrouiller0,
			'afficher_date_publication1'  => $afficher_date_publication1,
			'afficher_date_publication0'  => $afficher_date_publication0,
			'url_court'  => $url_court,
			'meta_mots_cle'  => $meta_mots_cle,
			'meta_description'  => $meta_description,
			'position'  => $position,
			'id' => $id
		));		
 
		if($this->erreur != NULL)
		{
			$template->assign_block_vars('attention', array(
				'titre' => $this->erreur
			));
		}
 
		if($niveau_membre>=5)
		{
			$template->assign_block_vars('etat', array());
			$template->assign_block_vars('afficher_date_publication', array());
		}
		if($niveau_membre>=9)
		{
			$template->assign_block_vars('url_court', array());
			$template->assign_block_vars('verrouiller', array());
		}
 
		$template->assign_block_vars('javascript', array(
			'url' => "bbcode.js"
		));
 
		$template->assign_vars(array(
			'URL_THEME' => _URL_THEME
		));	
 
		$template->set_filenames(array('theme' => 'themes/default/theme.html'));
		$template->assign_var_from_handle('CONTENU', 'categorie');
 
	}
 
 
 
 
	public function afficher()
	{
		global $template;
		global $niveau_membre;
 
		$id = $this->id;
 
		$id=trouverIdURL($id, "article");
 
		$retour=mysql_query("SELECT * FROM contenu_article WHERE id='$id'");
		$donnees=mysql_fetch_array($retour);
 
		$date_publication=date('d/m/Y', $donnees['date_publication']);
		$corps_texte=bbcode($donnees['corps_texte']);
		$corps_texte=nl2br(stripslashes($corps_texte)); //Mettre les retours à la ligne en HTML et enlève les entislash.
 
		$template->set_filenames(array('categorie' => 'modules/contenu/templates/article.html'));
		$template->assign_vars(array(
		'titre'  => stripslashes($donnees['titre']),
		'compteur'  => $donnees['compteur'],
		'date'  => $date_publication,
		'corps_texte'  => $corps_texte
		));
 
		if($donnees['afficher_date_publication']==1)
		{
			$template->assign_block_vars('date_publication', array());
		}
 
		if($niveau_membre>=5)
		{
			$template->assign_block_vars('administration', array(
				'id' => $id
			));
		}
 
		$template->assign_vars(array(
			'URL_THEME' => _URL_THEME,
			'URL_SITE' => _URL_SITE
		));	
 
		$template->set_filenames(array('theme' => 'themes/default/theme.html'));
		$template->assign_var_from_handle('CONTENU', 'categorie');
 
		debutFilAriane($donnees['idcategorie'], stripslashes($donnees['titre']));
		metaTag($donnees['titre']." - AutoX", $donnees['meta_description'], $donnees['meta_mots_cle']);
 
		mysql_query("UPDATE contenu_article SET compteur=compteur+1 WHERE id='$id'");
	}
 
 
 
 
 
	public function afficherAdmin($erreur=NULL)
	{
		global $template;
 
		$template->set_filenames(array('listecategorie' => 'modules/contenu/templates/article_liste_modifier.html'));
 
		$retour_article=mysql_query("SELECT idcategorie, titre, id, url_court, position FROM contenu_article ORDER BY position");	
 
		while ($donnees_article = mysql_fetch_array($retour_article))
		{
			$idcategorie=$donnees_article['idcategorie'];
			$retour_categorie=mysql_query("SELECT titre, id, url_court FROM contenu_categorie WHERE id='$idcategorie'");
			$donnees_categorie=mysql_fetch_array($retour_categorie);
 
			$url_article=creerUrlContenu("article", $donnees_article['titre'], $donnees_article['id'], $donnees_article['url_court']);
			$url_categorie=creerUrlContenu("categorie", $donnees_categorie['titre'], $donnees_categorie['id'], $donnees_categorie['url_court']);
 
			$template->assign_block_vars('liste', array(
			'urlarticle' =>$url_article,
			'urlcategorie' =>$url_categorie,
			'titrecategorie' =>stripslashes($donnees_categorie['titre']),
			'titrearticle' =>stripslashes($donnees_article['titre']),
			'position' =>$donnees_article['position'],
			'id' =>$donnees_article['id']
			));
		}
 
		if($this->erreur != NULL)
		{
			$template->assign_block_vars('attention', array(
				'titre' => $this->erreur
			));
		}	
 
		$template->assign_vars(array(
			'URL_THEME' => _URL_THEME
		));	
 
		$template->set_filenames(array('theme' => 'themes/default/theme.html'));
		$template->assign_var_from_handle('CONTENU', 'listecategorie');
	}
}
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 18h37   #2
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 333
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 333
Points : 3 772
Points : 3 772
Salut,

pour un début je trouve ton approche pas mal, et puis je crois pas qu'il ai des "normes" pour dire si ton appli est POO...
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 11h26   #3
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
euh au risque d'etre pas sympa, mais ça me semble pas du tout correct au niveau abstraction : normalement ton objet doit en avoir rien a faire de l'extérieur, il doit pouvoir marcher dans n'importe quel environnement d'appel :
par exemple tu appelle $_POST['idcategorie'] (tout comme "global $niveau_membre;"), ça veut donc dire que ta méthode doit etre appelée quand il y a un postback , ou que la variable $niveau_membre existe, ce qui si j'ecris un script comme celui ci :
Code :
1
2
3
 
$monarticle = new Article();
$monarticle->modifier();
plante avec des undefined index et compagnie
...

Donc je te conseille de créer tes méthodes avec en entrée tout les paramètre dont tu as besoin, par exemple :
Code :
1
2
3
4
5
6
7
8
9
 
public class Article{
[...]
public function modifier($nv_membre,$tab_param){
...}
[...]
}
$monarticle->modifier($niveau_membre,$_POST){
}
pareil pour supprimer.

Ensuite tu utilise $template, ce qui veut dire que ta classe Article s'occupe ET des donnée et du rendu.
Fait plutot une classe RenduArticle, qui possède une méthode par exemple
Code :
1
2
3
4
5
6
7
8
9
10
 
public class RenduArticle{
private $template;
__construct(url_template){
$this->template = set_filenames(array('categorie' => 'modules/contenu/templates/article_modifier.html'));
}
renduModifArticle(article){
//affiche les infos de l'article
}
}
Ensuite je te conseille soit d'utiliser des choses deja faites (pdo) soit de te crée une classe "sql" pour faire tes acces en base, comme ça ta classe Article ignore entièrement le serveur sql utilisé et connait uniquement la structure de ta base. Et puis si un jour tu decide de changer de sgbd, tu n'aura que 1 classe a modifier.

puis je te conseille aussi de mettre en attribut de ta classe tout les champs de l'article id_categorie, url court etc ... Apres tu pourra avoir un code de ce style :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public class Article{
public $id_article;
public $titre;
[...]
public function modifierTitreBD(){
$sql = new sql("UPDATE table_article SET titre = '".$this->titre."' WHERE id_article = '".$this->id_article."'");
$sql->executeNonQuery();
}
[...]
}
$monarticle->titre = "TOTO au bresil";
$monarticle->modifierTitreBD();
Perso en objet j'ai une devise (peut être idiote) : des que je copie / colle plus de 1 lignes, j'en fait une fonction et j'y trouve une classe, si une classe correcte existe pas, je la crée. Comme ça tu te retrouve avec 5-6 classes pleine de fonction utile que tu peut utiliser dans tout tes projets.
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 13h10   #4
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Merci Bourgui, je vais recoder ma classe en suivant tes conseilles.
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 17h57   #5
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Bonjour,

j'ai modifié ma classe. Pouvez vous me dire si elle est correcte ?
Merci d'avance pour votre aide.

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
 
<?php
 
 
class Article
{
  private $id=0;
	private $idCategory;
	private $title;
	private $summary;
	private $image;
	private $author;
	private $datePublication;
	private $status;
	private $shortUrl;
	private $metaKeywords;
	private $metaDescription;
	private $weight;
	private $counter;
	private $lock;
	private $displayDatePublication;
 
	private $userLevel;
	private $erreur;
 
 
	public function __construct($userLevel)
	{
		$this->userLevel = intval($userLevel);
	} 
 
	public function testDelete()
	{
		$retour=mysql_query("SELECT contenu_article.idCategory AS idCategory, 
									              contenu_article.lock AS locked ,
									              contenu_page.id 			     AS id_page 
              									FROM 		    contenu_article 
              									LEFT JOIN 	contenu_page 	  ON contenu_article.id = contenu_page.idarticle 
              									WHERE contenu_article.id='$this->id'") or die (mysql_error());
		$donnees=mysql_fetch_array($retour);
		if (!empty($donnees))
		{
			if($donnees['idCategory'] == 0 AND $this->userLevel < 9)
			{
				$this->error = _LANG_CONTENU_ARTICLESUPPRIMERINTERDITRACINE;
				return false;
			}
			if($donnees['locked'] == 1 AND $this->userLevel < 9)
			{
				$this->error = _LANG_CONTENU_ARTICLESUPPRIMERINTERDITVERROUILLER;
				return false;
			}
			if($donnees['id_page'] != NULL)
			{
				$this->error = _LANG_CONTENU_ARTICLESUPPRIMERPRESENTPAGE;
				return false;
			}
			return true;
		}
		$this->error = _LANG_CONTENU_ARTICLESUPPRIMERNEXISTEPAS;
		return false;
	}
 
	public function delete()
	{
			mysql_query("DELETE FROM contenu_article WHERE id='$this->id'");
			return true;
	}
 
 
	public function getId()
	{
		return $this->idCategory;
	}
 
	public function getTitle()
	{
		return $this->title;
	}
 
	public function getSummary()
	{
		return $this->summary;
	}
 
	public function getImage()
	{
		return $this->image;
	}
 
	public function getStatus()
	{
		return $this->status;
	}
 
	public function getShortUrl()
	{
		return $this->shortUrl;
	}
 
	public function getMetaKeywords()
	{
		return $this->metaKeywords;
	}
 
	public function getMetaDescription()
	{
		return $this->metaDescription;
	}
 
	public function getWeight()
	{
		return $this->weight;
	}
 
	public function getCounter()
	{
		return $this->counter;
	}
 
	public function getLock()
	{
		return $this->lock;
	}
 
	public function getDisplayDatePublication()
	{
		return $this->displayDatePublication;
	}
 
  public function getArticle()
	{		
		$retour=mysql_query("SELECT * FROM contenu_article WHERE id='$this->id'") or die (mysql_error());
		$donnees=mysql_fetch_array($retour);
 
  	$this->idCategory = $donnees['idCategory'];
  	$this->title = $donnees['title'];
  	$this->summary = $donnees['summary'];
  	$this->image = $donnees['image'];
  	$this->author = $donnees['author'];
  	$this->datePublication = $donnees['datePublication'];
  	$this->status = $donnees['status'];
  	$this->shortUrl = $donnees['shortUrl'];
  	$this->metaKeywords = $donnees['metaKeywords'];
  	$this->metaDescription = $donnees['metaDescription'];
  	$this->weight = $donnees['weight'];
  	$this->counter = $donnees['counter'];
  	$this->lock = $donnees['lock'];
  	$this->displayDatePublication = $donnees['displayDatePublication'];
	}	
 
  public function getAllArticle()
	{
		$retour = mysql_query("SELECT * FROM contenu_article ORDER BY weight");
		if(!mysql_num_rows($retour))
		{
				return false;
		}
    $array = array();
		while ($donnees = mysql_fetch_array($retour))
		{
      $array[] = $donnees;
		}
		return $array;
	}
 
 
	public function setId($id)
	{
    $this->id = intval($id);
  }
 
	public function setTitle($title)
	{
		$this->title = mysql_real_escape_string(htmlentities ($title, ENT_QUOTES));
	}
 
	public function setSummary($summary)
	{
		$this->summary = mysql_real_escape_string(htmlentities ($summary, ENT_QUOTES));
	}
 
	public function setImage($image)
	{
		$this->image = mysql_real_escape_string(htmlentities ($image, ENT_QUOTES));
	}
 
	public function setStatus($status)
	{
		$this->status = intval($status);
	}
 
	public function setShortUrl($shortUrl)
	{
		$this->shortUrl = mysql_real_escape_string(htmlentities ($shortUrl, ENT_QUOTES));
	}
 
	public function setMetaKeywords($metaKeywords)
	{
		$this->metaKeywords = mysql_real_escape_string(htmlentities ($metaKeywords, ENT_QUOTES));
	}
 
	public function setMetaDescription($metaDescription)
	{
		$this->metaDescription = mysql_real_escape_string(htmlentities ($metaDescription, ENT_QUOTES));
	}
 
	public function setWeight($weight)
	{
		$this->weight = intval($weight);
	}
 
	public function setCounter($counter)
	{
		$this->counter = intval($counter);
	}
 
	public function setLock($lock)
	{
		$this->lock = intval($lock);
	}
 
	public function setDisplayDatePublication($displayDatePublication)
	{
		$this->displayDatePublication = intval($displayDatePublication);
	}
 
 
 
	public function insert()
	{
		mysql_query("INSERT INTO contenu_article VALUES('','$idCategory','$title','$summary', '$image', '$author', '$datePublication', '$status', '$shortUrl', 
														'$metaKeywords','$metaDescription','$weight', '$counter','$lock','$displayDatePublication')");
	}
 
 
	public function update()
	{
		mysql_query("UPDATE contenu_article SET idCategory='$idCategory', title='$title', summary='$summary', status='$status', shortUrl='$shortUrl', metaKeywords='$metaKeywords', 
												metaDescription='$metaDescription', weight='$weight', lock='$lock', displayDatePublication='$displayDatePublication' 
												WHERE id='$id'");
	}
 
 
 
	public function testUpdateAndInsert()
	{		
		//regarde si l'id de la categorie existe bien
		$retour = mysql_query("SELECT id FROM contenu_categorie WHERE id='$this->idCategory'");
		$donnees=mysql_fetch_array($retour);
		if (empty($donnees))
		{
      return false;
    }
 
		// Regarde si l'id existe
		$retour=mysql_query("SELECT url_court, verrouiller, etat, afficher_date_publication FROM contenu_article WHERE id='$this->id'");
		$donnees=mysql_fetch_array($retour);
		if (!empty($donnees))
		{
			if($this->niveau_membre < 9)
			{
				$url_court=$donnees['url_court'];
				$verrouiller=$donnees['verrouiller'];
			}
			if($this->niveau_membre < 5)
			{
				$etat=$donnees['etat'];
				$afficher_date_publication=$donnees['afficher_date_publication'];
			}
		}
		else
		{
			if($this->niveau_membre < 9)
			{
				$url_court="";
				$verrouiller=0;
			}
			if($this->niveau_membre < 5)
			{
				$etat=0;
				$afficher_date_publication=1;
			}
			$id=NULL;
		}
 
 
		if($this->lock == 1 AND $this->userLevel < 9) // Empeche de modifier l'article si celui-ci est verrouillé.
		{
			$this->erreur = _LANG_CONTENU_NOUVARTICLEEVERROUILLER;
			return false;
		}
		if($this->idCategory == 0 AND $this->userLevel < 9) // Empeche de créé un artice qui est dans aucune catégorie. Mais il autorise la modification d'un article qui est dans aucune catégorie.
		{
			$retour=mysql_query("SELECT * FROM contenu_article WHERE id='$this->id'");
			$donnees=mysql_fetch_array($retour);
			if (empty($donnees) OR $donnees['idCategory'] != 0)
			{
				$this->erreur = _LANG_CONTENU_NOUVARTICLEEINTERDITCATEGORIE;
				return false;
			}
		}
		if($this->idCategory != 0 AND $this->userLevel < 9) // Empeche de déplacer un article qui a un idcategorie égal à 0.
		{
			$retour=mysql_query("SELECT * FROM contenu_article WHERE id='$this->id'");
			$donnees=mysql_fetch_array($retour);
			if (!empty($donnees) AND $donnees['idCategory']==0)
			{
				$this->erreur = _LANG_CONTENU_NOUVARTICLEEINTERDITCATEGORIEDEPLACEMENT;
				return false;
			}
		}
		if ($this->title == NULL)
		{
			$this->erreur = _LANG_CONTENU_NOUVARTICLEETITREMANQUANT;
			return false;
		}
		if ($this->summary == NULL)
		{
			$this->erreur = _LANG_CONTENU_NOUVARTICLEERESUMEMANQUANT;
			return false;
		}
		if ($this->weight == NULL)
		{
			$this->erreur = _LANG_CONTENU_NOUVARTICLEEPOSITIONMANQUANT;
			return false;
		}
		return true;
	}
 
 
 
}
 
 
 
?>
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 18h07   #6
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
a premiere vu c'est pas mal, j'aurais ajouté une classe sql, de sorte que au lieu de

Code :
1
2
3
4
5
6
7
$retour=mysql_query("SELECT contenu_article.idCategory AS idCategory, 
									              contenu_article.lock AS locked ,
									              contenu_page.id 			     AS id_page 
              									FROM 		    contenu_article 
              									LEFT JOIN 	contenu_page 	  ON contenu_article.id = contenu_page.idarticle 
              									WHERE contenu_article.id='$this->id'") or die (mysql_error());
		$donnees=mysql_fetch_array($retour);
tu ai

Code :
1
2
3
4
5
6
7
8
 
$sql = new sql("SELECT contenu_article.idCategory AS idCategory, 
									              contenu_article.lock AS locked ,
									              contenu_page.id 			     AS id_page 
              									FROM 		    contenu_article 
              									LEFT JOIN 	contenu_page 	  ON contenu_article.id = contenu_page.idarticle 
              									WHERE contenu_article.id='$this->id'");
$donnees = $sql->table();
Comme ça le jour ou tu change de sgbd t'a juste a aller dans ta class"sql" et changer les noms des fonctions, et non a aller dans toutes tes classe. Tout comme si tu veut faire un traitement particulier en cas d'erreur sql tu as uniquement a aller dans ta classe et faire le traitement et non faire "rechercher tout les mysql_query" et rajouter l'appel a ta fonction.

Les fonction getArticle et getAllArticle devrait etre statique (ça existe en php ?) si ça existe pas en php fait en des fonction d'une classe genre ArticleMaker, dans getArticle tu n'initialiserai pas this, mais un $article que tu retourne.

Et dans getArticle tu devrai mettre l'id en paramètre au lieu de le récupérer dans this, en fait getArticle est comme un constructeur.

Une remarque qui n'a rien a voir avec l'objet : sur un update sql met le nom des champs après le nom de la table c'est 12 fois plus simple a debugger que aller dans la base pour voir le nom des champs.
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 18h35   #7
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Merci pour votre reponsse.
Pour la classe sql, je l'ajouterais par la suite.

Pourquoi les fonction getArticle et getAllArticle devrait etre statique ?
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 19h15   #8
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
Ben faut penser objet : a tu deja vu une voiture qui fabrique une voiture ? pour ma part non Mais je vois bien une usine qui fabrique une voiture

Pour la classe sql, tu a pdo qui existe deja, mais perso j'ai la mienne qui me suffit

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
<?
class sql {
	var $req;
	var $res ;
	var $log;
	var $pass;
	var $host ;
	var $db ;
	var $display_error ;
	//execute le parametre
	function sql($req){
		$this->req = $req ;
		$this->res = mysql_query($this->req) or die ($this->displayError());		
	}
	//retourne ligne a ligne le resultat de la requète
	function table(){
		if($this->nb_ligne()!=0)
		return(mysql_fetch_assoc($this->res));
		else return(null);
	}
	//retourne le nombre de ligne de la requète
	function nb_ligne(){
 
		return(mysql_numrows($this->res));
	}
	//v chercher le contenu d'une cellule en particulier
	function resultat($ligne,$colonne){
//		echo $this->req ;
		return(mysql_result($this->res,$ligne,$colonne));
	}
	//libere le resultat de la requète
	function liberer(){
		mysql_free_result($this->res);
	}
	//recharge la requète
	function reload(){
		$this->liberer();
		$this = new sql($this->req);
		mysql_field_seek($this->res,0);
	}
	//definition des param de connection a la bdd si en local ou en prod
	function connect(){		
		 if($_SERVER['SERVER_NAME'] == "localhost"){
			  $this->log = "XXXX" ;
			 $this->pass = "XXXX" ;
			 $this->host = "XXXX" ;
			 $this->display_error = true ;
		 }
		 else{
			 $this->log = "XXXX" ;
			 $this->pass = "XXXX" ;
			 $this->host = "XXXX" ;
			 $this->display_error = false ;
		 }
		 //connection a mysql
		 $this->db = mysql_connect ($this->host, $this->log, $this->pass) or die($this->displayError()) ;
		 //choix de la bdd "jeux"
		 mysql_select_db ("XXXX" , $this->db) or die ($this->displayError());
	}
	//affiche les erreurs
	function displayError(){
		if($this->display_error){
			exit(mysql_error()." - ".$this->req);
		}
	}
} ?>
Je l'ai pas faites a php 5 donc il manque des truc mais ça reste un bon point de départ. J'ai commenté un minimum, je pense que ça reste compréhensible.
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 19h24   #9
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Citation:
Envoyé par Bourgui Voir le message
Ben faut penser objet : a tu deja vu une voiture qui fabrique une voiture ? pour ma part non Mais je vois bien une usine qui fabrique une voiture
Désolé, mais sa m'aide pas à comprendre. Sa veux dire coi static ?
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 20h05   #10
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
une methode est une methode que tu utilise avec une classe et non avec une instance de cette classe :
classe d'exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
public class Voiture{
 private $vitesse = 0;
 [...]
 public static function getAllVoiture(){
  [...]
 }
 public function Accelerer(){
  $vitesse++;
 }
 [...]
}
methode d'instance

Code :
1
2
3
 
$voiture = new Voiture(); // on instancie
$voiture->Avancer();
methode statique

Code :
1
2
 
$tab_voiture = Voiture::getAllVoiture();
Du coup la méthode statique ne dépend pas de l'objet (elle ne connais pas titre ou id article), mais de la classe.
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 18h41   #11
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Bonjour,
merci pour les reponsses.

Je programme en MVC, la classe article fait partit du modèle.
Dans cette classe j'ai une fonction testDelete() et testUpdateAndInsert()
Mais ces vérification doive se faire dans le controleur non. Donc en dehors de la classe article non ?
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 19h28   #12
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
Non laisse dans Article, et meme je rajouterai que l'appel a testDelete et l'autre, se font avant TOUT update ou delete d'article (dans les methode UpdateArticle ou DeleteArticle tu fait la verif puis tu delete/update).

Le controleur ne fait que dire a la vue "hey affiche ça" et au modele "hey fait ça", et non modele "est ce que tu peut faire ça ? alors fait le", le modele se debrouille tout seul sur la partie du travail qui le concerne.

Comme ça le jour ou t veut utiliser la base de ton cms dans un autre contexte t'es sur que coté donnée tout va se passer comme avant
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 19h21   #13
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Pour recupérer les données de plusieurs article je doit procéder de cette manière :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
   /**
   * Afficher Article or ligne
   **/ 	
		$result = $article->getAllArticleOffLine();
		if($result != FALSE)
		{
		  $template->assign_block_vars('en_ligne', array());
  		foreach ($result AS $donnees)
  		{
  		  $article->getArticle($donnees['idItem']);
      	$template->assign_block_vars('en_ligne.liste', array(
      		'titrearticle' => $article->getTitle(),
      		'position' => $article->getWeight(),
      		'id' => $article->getIdItem()
      		));
  		}
  	}
Exist'il pas un moyen plus simple ?
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 20h17   #14
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
le problème ici c'est que tu selectionne les id des articles, puis tu selectionne les infos allant avec chaques id, pourkoi tu ne sélectionne pas toutes les infos dès le début ?
Je me souviens avoir fait cette erreur sur un jeux : je selectionnait tout les id des cases que voyai le personnage et apres pour chaques case j'allait chercher les infos --> beaucoup de requète pr rien
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 22h42   #15
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Ben enfaite c'est pour eviter d'utiliser des $donnees['title'], mais plutot getTitle(). Et je ne c'est pas comment sa avec une seul requet.
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2008, 10h52   #16
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
voila une piste,

j'ai un objet (ma table table_ersonne a deux champ : id et nom);

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
public class Personne{
public $id ;
public $nom;
public static function getAllPersonne(){
$array_personne = Array();
$sql = new sql("SELECT * FROM table_personne");
while($une_personne = $sql->table()){
$obj_personne = new Personne();
$obj_personne->id = $une_personne["id"];
$obj_personne->nom = $une_personne["nom"];
$array_personne[] = $obj_personne;
}
return $array_personne;
}
}
Non ? Et la je ne fait que 1 Select pour obtenir une infinité de personne.
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2008, 19h17   #17
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Et pour les recupperer, je fai comment ?
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2008, 20h47   #18
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
tu parcours le tableau retourné par la fonction qui est un tableau de personne

$array_personne[X] est une personne, donc je peut faire echo $array_personne[X]->nom ;
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2008, 23h07   #19
Membre à l'essai
 
Avatar de snyfir
 
Inscription : avril 2007
Messages : 235
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 235
Points : 24
Points : 24
Comment je fai pour parcourire le tableau jusqu'a la fin de manière automatisé ?
snyfir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 08h53   #20
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
comme un tableau normal
Code :
1
2
3
4
5
 
for($i = 0;$i<sizeof($array_personne);$i++){
$une_personne = $array_personne[$i];
[traitement]
}
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h50.


 
 
 
 
Partenaires

Hébergement Web