Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 03/04/2011, 17h52   #1
Invité régulier
 
Avatar de Jenojen
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 6
Points : 6
Par défaut Utilisation d'une classe User

BOnjour,

Je me suis trouvé une classe sympa en php et j'aimerais pouvoir utiliser cette classe depuis mon fichier enregistrement.php pour enregistrer mes nouveaux membres.

Je voudrais savoir comment avec mon formulaire pouvoir enregistrer les données fournies par l'utilisateur en faisant appel à ma classe. Parce que dans la classe je ne vois pas à quel moment les fonctions reçoivent les données nécessaires à l'enregistrement du nouvel utilisateur.


Donc moi ce que j'essaie de faire c'est:


$utilisateur = new utlisateur();

Ensuite derrière je claque mon formulaire de type POST.

Et je voudrais savoir comment appeler et quelle fonction appeler pour enregistrer les données dans ma bdd.


Voici la classe

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
<?php
class Utilisateur
 
{
 
    private $idClient;
 
    private $pseudo;
 
    private $mdp;
 
    private $email;
 
    private $prenom;
 
    private $nom;
 
    private $adresse;
 
    private $ville;
 
    private $codepostal;
 
    private $telephone;
 
    private $age;
 
    private $dateIn;
 
    private $level;
 
    private $ip;
 
    private $visite;
 
 
 
    private $erreur;
 
 
 
 
 
 
 
    /**
 
    * Constructeur : est appelé a l'instanciation de la classe
 
    *
 
    * @param $idClient                   : id de l'utilisateur
 
    * @param bool $updateAttributes : mise à jour des attributs
 
    * @return bool FALSE ou TRUE
 
    */
 
    public function __construct($id = 0, $updateAttributes = true)
 
    {
 
        $this->id = intval($idClient);
 
        if ($this->idClient != 0 AND $this->idClient != NULL AND $updateAttributes) {
 
            $this->updateAttributes();
 
        }
 
 
 
        return true;
 
    }
 
 
 
 
 
 
 
    /**
 
    * Mise à jour des attributs récupérés dans la base de données
 
    *
 
    * @return bool FALSE ou TRUE
 
    */
 
    private function updateAttributes()
 
    {
 
        $result=mysql_query("SELECT * FROM tUtilisateurs WHERE idClient='$idClient'");
 
        if (mysql_num_rows($result)) {
 
            $donnees=mysql_fetch_array($result);
 
            $this->pseudo = $donnees['pseudo'];
 
            $this->mdp = $donnees['mdp'];
 
            $this->prenom = $donnees['prenom'];
 
            $this->nom= $donnees['nom'];
 
            $this->adresse = $donnees['adresse'];
 
            $this->codePostal = $donnees['codePostal'];
 
            $this->ville = $donnees['ville'];
 
            $this->pays = $donnees['pays'];
 
            $this->age = $donnees['age'];
 
            $this->dateReg = $donnees['dateReg'];
 
            $this->level = $donnees['level'];
 
            $this->ip = $donnees['ip'];
 
            $this->dateVisite = $donnees['dateVisite'];
 
            return true;
 
        } else {
 
            $this->erreur = "imposible de mettre à jour les attributs : l'id n'existe pas";
 
            return false;
 
        }
 
    }
 
 
 
 
 
 
 
    /**
 
    * Ajoute dans la base de données le nouvel utilisateur
 
    *
 
    * @return bool FALSE ou TRUE
 
    */
 
    public function create()
 
    {
 
        //on supprime les membre non activé de plus de 24 heures
 
        $temps = time() - (60 * 60 * 24);
 
        mysql_query("DELETE FROM tUtilisateurs WHERE dateReg < '$temps' AND level='0'");
 
 
 
        // On enregistre le membre
 
        if ($this->erreur == NULL) {
 
            $this->dateReg = time();
 
           // $this-> = time();
 
            $this->ip = realip();
 
            mysql_query("INSERT INTO tUtilisateurs (pseudo, mdp, prenom,nom, adresse, codePostal,
 
                         villle, pays, age, dateReg, level, ip, dateVisite)
 
                         VALUES('$this->pseudo', '$this->mdp', '$this->prenom', 
 
                        '$this->nom' '$this->adresse', '$this->codePostal', '$this->ville', 
 
                        '$this->pays', '$this->age', '$this->dateReg', '$this->level', 
 
                        '$this->ip', '$this->dateVisite')");
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
}
Et pour le code d'enregistrement.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
<?php 
 
require_once('Utilisateur.class.php');
 
 
 
 
 
 
function formulaire($action='', $method, $donnees)
	{
	$formulaire ="<form action='' method='post'>";
	$formulaire .="<table border = 0 cellspacing=0 cellpadding=0 >";
	$formulaire .="<tr><td colspan=2> Formulaire d'enregistrement</td></tr>";
	$formulaire .="<tr><td colspan=2><center><b>Se connecter</b></center></td></tr>";
	$formulaire .="<tr><td>Nom d'utilisateur</td><td><input type='text' name='pseudo' value='{$_POST['pseudo']}' size='50'/></td></tr>";
	$formulaire .="<tr><td>E-mail</td><td><input type='text' name='adresseemail' value='{$_POST['adresseemail']}' size='50'/></td></tr>";
	$formulaire .="<tr><td>Mot de passe</td><td><input type='password' name='password' value='{$_POST['password']}' size='50'/></td></tr>";
	$formulaire .="<tr><td>Confirmation du mot de passe</td><td><input type='password' name='cmdp' size='50'/></td></tr>";
	$formulaire .="<tr><td colspan=2><center><b>Coordonnées</b></center></td></tr>";
	$formulaire .="<tr><td>Prénom</td><td><input type='text' name='prenom' value='{$_POST['prenom']}' size='50'/></td></tr>";
	$formulaire .="<tr><td>Nom de famille</td><td><input type='text' name='nom' value='{$_POST['nom']}' size='50'/></td></tr>";
	$formulaire .="<tr><td>Téléphone</td><td><input type='text' name='telephone'  value='{$_POST['telephone']}' size='50'/></td></tr>";
	$formulaire .="<tr><td>Adresse</td><td><input type='text' name='adresse' value='{$_POST['adresse']}' size='50'/></td></tr>";
	$formulaire .=  "<tr><td>Selectionner le pays</td><td>";
	//$formulaire .= listePays($donnees['pays']); 
	$formulaire .="<tr><td>Ville</td><td><input type='text' name='ville' value='{$_POST['ville']}' size='50'/></td></tr>";
	$formulaire .="<tr><td>Code postal</td><td><input type='text' name='codepostal'  value='{$_POST['codepostal']}' size='50'/></td></tr>";
	$formulaire .="<tr><td colspan='2'><center><input type='submit' value='Envoyer' name='envoyer'/></center></td></tr>";
	$formulaire .="</table>";
	$formulaire .="</form>";
 
	return $formulaire;
	}
 
 
echo formulaire(null, 'post', $_POST);
 
$utilisateur = new Utilisateur();
 
 
//C'est à partir de la que je ne sais comment utiliser ma classe pour l'enregistrement des données dans la bdd
 
?>
Je dois pouvoir envoyer mes données qui sont dans $_POST mais je me demande bien à quelle fonctions les envoyer parce que la construction ne m'aide pas. En modifiant le code de la classe ça passe mais je dois enlever certains contrôles.
Merci de bien vouloir m'aider.
Jenojen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 21h32   #2
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Bonsoir,

C'est quoi ces "-" à la place des "=" dans la signature de ton constructeur ?

Ensuite il faut que tu donnes un moyen à l'utilisateur de ta classe de valoriser les valeurs qu'il y a dedans, le plus simple : mets tes attributs public au lieu de private.

Ensuite il te suffit de faire ceci :

Code :
1
2
3
4
 
$u = new Utilisateur;
$u->pseudo = 'JoeLaMouk';
$u->updateAttributes();
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 12h38   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
Ensuite il faut que tu donnes un moyen à l'utilisateur de ta classe de valoriser les valeurs qu'il y a dedans, le plus simple : mets tes attributs public au lieu de private.
Oui ou bien tu peux surcharger __get et __set dans ce sens:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
class MaClasseModele {
 
  protected $_data;
 
  public function __construct () {
     $this->_data = array();
  }
 
  public function __get ($key) {
     return isset($this->_data[$key]) ? $this->_data[$key] : null;
  }
 
  public function __set ($key, $value) {
     $this->_data[$key] = $value;
  }
}
 
$obj = new MaClasseModele;
$obj->var1 = "A";
$obj->var2 = "B";
var_dump($obj);
De cette manière tu peux factoriser une maximum de comportements en créant une classe abstraite Model par exemple dont hériteront toutes tes classes modèle

Selon moi, une classe modèle ne dois pas renvoyer un formulaire au sens HTML car c'est la responsabilité de la couche vue de mettre ça en forme. En revanche, cette classe doit pouvoir fournir une information sur sa structure pour que la vue puisse le mettre en forme.
Personnelement, j'ai créé des classes Modèle qui réalisent une interface Exportable et Importable qui permet d'obtenir et de définir des structures XML à destination des autres couches. L'avantage de cette méthode est que le XML est facilement transformable (voir XSLT). Donc avec un même objet modèle, on peut créer des formulaires XHML, des tableaux pour visualiser les données, des flux RSS etc.
A toi de voir ce qui te convient le mieux.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 18h39   #4
Invité régulier
 
Avatar de Jenojen
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 6
Points : 6
Merci pour vos réponses. J'ai adapté la classe plutôt que de m'adapter à elle et ça passe impec.

J'ai viré la fonction updateAttribut ou du moins je l'ai intégrée dans mon constructeur qui lui récupère les données envoyées par le formulaire.

Merci de m'avoir répondu c'est sympa.
Jenojen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 10h13   #5
Membre régulier
 
Inscription : novembre 2008
Messages : 108
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 108
Points : 88
Points : 88
Citation:
Envoyé par ThomasR Voir le message
Ensuite il faut que tu donnes un moyen à l'utilisateur de ta classe de valoriser les valeurs qu'il y a dedans, le plus simple : mets tes attributs public au lieu de private.
De cette manière a quoi sert l'encapsulation ?
burndev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 10h21   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Le plus simple ne veut pas dire le plus propre Mais c'est vrai que si les getters setters se résument à un accès direct à des propriétés, il convient de les mettre en public. A moins qu'on ne souhaite un comportement particulier comme dans mon exemple.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 11h49   #7
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Citation:
Envoyé par burndev Voir le message
De cette manière a quoi sert l'encapsulation ?
Euhh, à gérer une notion de portée et d'occurence ?.... De plus, si je lui ai dit de mettre ses attributs en public c'est parce qu'il n'avait actuellement aucun moyen de les valoriser, et qu'au vu de ses capacités programmatiques, lui demander de créer des fonctions de type getter/setter (voire __get/__set) avec des vérifications des données d'entrées ca me parait un peu sioux.
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h40.


 
 
 
 
Partenaires

Hébergement Web