méthode de travail

Petit nouveau ! | 6 Messages

15 janv. 2010, 16:02

Bonjour à tous,

Je me met doucement aux classes et j'avoue que j'hésite encore pas mal
sur certaines façon de faire, pourriez-vous me donner votre avis.

J'essaye de comprendre comment agencer mes scripts et veiller à bien
séparer le code de la mise en forme.

J'essaye de mettre en place un simple formulaire d'identification.

La classe:
<?php

class Identification
	{
	private $user;
	private $password;
	private $db;
	private $identification_result;
	
	public function __construct($user, $password, $db)
		{
		$this->user = $user;
		$this->password = $password;
		$this->db = $db;
		$this->identification_result = false;

		$query_txt = "	SELECT
							cms_user.*,
							cms_user_group.*
						FROM
							cms_user,
							cms_user_group
						WHERE
							cms_user.login = '".mysql_real_escape_string($user)."'
						AND
							cms_user.my_password = '".mysql_real_escape_string($password)."'
						AND
							cms_user.fk_user_group = cms_user_group.idx";
							//echo $query_txt;
		$query = mysql_query($query_txt, $this->db->link);
		
		if(mysql_num_rows($query) > 0)
			{
			$result = mysql_fetch_array($query);
			
			$_SESSION['logged'] = 1;
			$_SESSION['user_idx'] = $result['idx'];
			$_SESSION['user_prenom'] = stripslashes($result['prenom']);
			$_SESSION['user_nom'] = stripslashes($result['nom']);
			$_SESSION['user_group_idx'] = stripslashes($result['fk_user_group']);
			$_SESSION['user_group_name'] = stripslashes($result['group_name']);
			
			$_SESSION['user_privileges'] = array('priv_site'=>$result['priv_site'], 'priv_user'=>$result['priv_user'], 'priv_structure'=>$result['priv_structure'], 'priv_files'=>$result['priv_files'], 'priv_appli'=>$result['priv_appli'], 'priv_stat'=>$result['priv_stat'], 'priv_aide'=>$result['priv_aide']);
			
			$this->identification_result = true;
			}
			else
			{
			session_destroy();
			}
		}
	
	public function check_identification()
		{
		return $this->identification_result;
		}
	}

?>
...et la page de traitement
<?php

include('../includes/constants.php');
include('../includes/Db.class.php');
include('../includes/Session.class.php');
include('../classes/classes.php');

/*$current_session = new Session($db);
session_start();*/

if(!isset($_POST['action']))
	{
	header('location: ../../login.php?login=error');
	die();
	}
switch($_POST['action'])
	{
	case 'identification':
	
	if(!isset($_POST['login_login']) || !isset($_POST['login_password']))
		{
		header('location: ../../login.php?login=error');
		die();
		}
	
	$current_identification = new Identification($_POST['login_login'], $_POST['login_password'], $db);
	
	if($current_identification->check_identification() == true)
		{
		header('location: ../../admin.php');
		die();
		}
		else
		{
		header('location: ../../login.php?login=error');
		die();
		}
	
	break;
	}

?>
Il y a en plus un formulaire qui envoie en POST l'id et le mot de passe.

Ceci vous parait-il correct en terme de POO.

Merci d'avance pour vos réponse.

++
santino

ViPHP
AB
ViPHP | 5818 Messages

15 janv. 2010, 19:04

A quoi te sert
                $this->user = $user;
                $this->password = $password;
                $this->db = $db;
et la déclaration précédente de ces variables si tu ne t'en sert pas. Elles m'ont l'air inutiles d'après ce que je vois du code :-k


EDIT Sinon le stripslashes pour récupérer tes variables n'est-il pas de trop ?

Petit nouveau ! | 6 Messages

15 janv. 2010, 19:16

Salut,

En effet je ne m'en sers pas, je m'en vais les virer.

Sinon d'un point de vue logique, agencement des scripts et header après traitement,
tout ca te semble correct ?

++

ViPHP
AB
ViPHP | 5818 Messages

15 janv. 2010, 19:38

Les headers m'ont l'air correct.

Par contre je ne comprend pas ton switch puisqu'il ne switch rien. Un if $_POST['action'] == ''identification'' me paraîtrait plus clair.

Eléphant du PHP | 453 Messages

15 janv. 2010, 21:37

Hello,
A quoi te sert
                $this->user = $user;
                $this->password = $password;
                $this->db = $db;
et la déclaration précédente de ces variables si tu ne t'en sert pas. Elles m'ont l'air inutiles d'après ce que je vois du code :-k
+1

Hum, pourquoi mysql_ .... et mysql_.... ? Pourquoi la classe authentification alors que principalement il y a une connection à la base ? J'ai l'impression que tu devrais revoirrevoir tes propriétés.
Pour extrapoler ce que je viens d'écrire et suivant ta classe : J'ai un volant qui a un système ABS à l'intérieur. Est ce que le système ABS peut être utiliser dans un autre endroit du script ?
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Petit nouveau ! | 6 Messages

16 janv. 2010, 13:56

Bonjour niuxe,

Merci pour ta réponse.

Je n'ai pas très bien compris ton exemple de l'ABS...
La connexion à la db vient de l'objet $db que je passe en paramètre à la fonction,
les variables user et password sont celles envoyées par le form d'identification.
Peut-être y-a-t-il confusion avec celle de la db ?

Pour la classe Identification, elle ne sera utilisée qu'une seule fois.
L'objet $db sera lui utilisé un peu partout ailleurs.

Merci pour ton aide

++
santino

ViPHP
AB
ViPHP | 5818 Messages

16 janv. 2010, 15:34

La connexion à la db vient de l'objet $db que je passe en paramètre à la fonction,
C'est une manière de faire mais perso je préfère ne passer que les paramètres spécifiques à la fonction ou à la classe, soit dans ton exemple les variables user et password. Ensuite tu pourrais appeler une instance de connexion depuis ta classe avec par exemple ce genre de méthode.
Attention je ne dis pas qu'il faut faire comme cela, je dis qu'on peut aussi faire comme cela. A toi de voir suivant tes besoins :wink:

Eléphant du PHP | 453 Messages

24 janv. 2010, 17:51

Hello, :)
Je n'ai pas très bien compris ton exemple de l'ABS...
J'ai exagéré pour grossir ton erreur.

En te posant des questions, je vais essayer que tu comprennes où je veux en venir.

Que fait volant et que fait ABS ?
Quelles sont les propriétés ?
Peut on les dissocier ?
Si oui, quelles sont les propriétés et actions de chacun ?

;)

De toute évidence, nous sommes dans un cas où ces deux objets sont pour une voiture de sport. Mais est ce que le volant (avec système abs intégré suivant ton code) est adaptable sur une traction-avant, un jeu vidéo (joystick), tracteur, poids-lourd, trottinette, transpalette, chariot élévateur, etc. en faisant le minimum ?

@AB : Je crois avoir compris ce que tu veux dire. Merci. :)

Bon fin de dimanche
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Petit nouveau ! | 6 Messages

26 janv. 2010, 17:50

Salut Niuxe,

Merci pour ta réponse.

J'ai un peu avancé depuis et je comprend maintenant ce que tu veux dire, enfin je crois.

Je suis confronté à un autre problème:
J'ai lu à droite à gauche qu'il n'était pas idéal de mettre du code html dans des fonctions d'objet et
qu'il fallait bien séparer la prog, de la mise en forme.

Mais disons que je souhaite générer une liste de profil inscrit à tel ou tel évènement sous forme de
tableau (par exemple).
Ma classe Profil aura forcément une fonction display_listing() qui renverrait du code HTML, non ?

Merci pour ton aide

++
santino

ViPHP
AB
ViPHP | 5818 Messages

04 févr. 2010, 18:25

Tu peux aussi créer une classe d'affichage séparée qui fera appel à ta classe profil, ou encore te servir de ta classe profil pour alimenter directement le code html ou encore faire comme tu as dis...
En fait c'est au niveau de la maintenance/réutilisation de tes classes que la différence va se faire sentir. Si tu utilises ta classe profil dans un autre contexte, ta fonction intégrée d'affichage risque d'être totalement à refaire

Petit nouveau ! | 6 Messages

10 févr. 2010, 12:55

Merci pour ta réponse