I use PHP classes for managing users accounts and I wonder if what I'm doing is correct.
I directly use the $_POST['form']
for hydrate User
objects. But there is some field that I don't want user to modify (i.e. : Id_user
, admin_level
, ... [They can be able to do it by creating a new input field called id_user
or admin_level
, and get admin level])
So I use an argument in each setID
or setAdmin_level
(a boolean called $forcer
) :
<?php
Class User extends Content{
private $_id_user;
private $_date_inscription;
private $_ip_inscription;
private $_derniere_connexion;
private $_nom_utilisateur;
private $_email;
private $_mot_de_passe;
private $_nom;
private $_prenom;
private $_role;
const USER_UNLOGGED = 0;
const USER_LOGGED = 1;
const USER_ADMIN = 5;
public function __construct(array $donnees = null, $forcer = false)
{
if($donnees){
$this->hydrate($donnees,$forcer);
}
}
public function hydrate(array $donnees, $forcer = false)
{
foreach($donnees as $champ => $valeur){
$method = 'set'.ucfirst($champ);
if(method_exists($this,$method))
{
if($forcer){
try {
$this->$method($this->securite($valeur), true);
}catch(Exception $e){
$this->$method($this->securite($valeur));
}
}else {
$this->$method($this->securite($valeur));
}
}
}
}
public function setId_user($id_user, $forcer = false)
{
if(is_numeric($id_user)&&$forcer)
{
$this->_id_user = $id_user;
return true;
}else {
$this->addErreur('id_user','User ID incorrect');
return false;
}
}
public function getId_user()
{
return $this->_id_user;
}
public function setDate_inscription($date_inscription = "")
{
if(is_numeric($date_inscription))
{
$this->_date_inscription = $date_inscription;
}else {
$this->_date_inscription = time();
}
}
public function getDate_inscription()
{
return $this->_date_inscription;
}
public function setIp_inscription($ip_inscription ='')
{
if($ip_inscription)
{
$this->_ip_inscription = $ip_inscription;
}else {
$this->_ip_inscription = $_SERVER['REMOTE_ADDR'];
}
}
public function getIp_inscription()
{
return $this->_ip_inscription;
}
public function setDerniere_connexion()
{
$this->_derniere_connexion = time()."#".$_SERVER['REMOTE_ADDR'];
}
public function getDerniere_connexion()
{
return $this->_derniere_connexion;
}
public function setNom_utilisateur($nom_utilisateur)
{
$this->_nom_utilisateur = $nom_utilisateur;
}
public function getNom_utilisateur()
{
return $this->_nom_utilisateur;
}
public function setEmail($email)
{
if($this->is_mail($email))
{
$this->_email = $email;
}else {
$this->addErreur('email','email incorrect.');
return false;
}
}
public function getEmail()
{
return $this->_email;
}
public function setMot_de_passe($mot_de_passe, $encrypted=false)
{
if($this->is_password($mot_de_passe))
{
if($encrypted)
{
$this->_mot_de_passe = $mot_de_passe;
}else {
$this->_mot_de_passe = crypt($mot_de_passe, $GLOBALS['salt_crypt']);
}
}else{
$this->addErreur('mot_de_passe','Mot de passe incorrect. Minimum 6 caractères.');
return false;
}
}
public function getMot_de_passe()
{
return $this->_mot_de_passe;
}
public function setNom($nom)
{
$this->_nom = $nom;
}
public function getNom()
{
return $this->_nom;
}
public function setPrenom($prenom)
{
$this->_prenom = $prenom;
}
public function getPrenom()
{
return $this->_prenom;
}
public function setRole($role, $forcer = false)
{
if(is_numeric($role)&&$forcer)
{
$this->_role = intval($role);
}else{
$this->addErreur('role','Role incorrect');
return false;
}
}
public function getRole()
{
return $this->_role;
}
} // Fin de la classe User
So, in order to register a new user, I hydrate a new User object with the form POST :
$user = new User($_POST['form'], false);
And I need to set the $force
bool to true for create a new User
from an Id
or if I want to set a field protected.
$user = $userManager->getUserFromId(new User(['id_user' => 1], true));
Is this a good way?