Pour les opérations SQL j'utilise une classe (DAO) passerelle entre bdd et modèle objet. Cela me permet par exemple, si je veux update d'écrire simplement :
$update = DAO::update($membre);
, aprés avoir set les nouvelles valeurs du membre . ex :
$membre->setCivilite($newCivilite);
Voici la fonction update de la classe DAO : (mais sans connaître le projet . . .)
public static function update($instance,$updateMany=false){
$tableName=OrmUtils::getTableName(get_class($instance));
$ColumnskeyAndValues=Reflexion::getPropertiesAndValues($instance);
$ColumnskeyAndValues=array_merge($ColumnskeyAndValues, OrmUtils::getManyToOneMembersAndValues($instance));
$keyFieldsAndValues=OrmUtils::getKeyFieldsAndValues($instance);
$sql="UPDATE ".$tableName." SET ".SqlUtils::getUpdateFieldsKeyAndValues($ColumnskeyAndValues)." WHERE ".SqlUtils::getWhere($keyFieldsAndValues);
Logger::log("update", $sql);
$statement=DAO::$db->prepareStatement($sql);
foreach ($ColumnskeyAndValues as $key=>$value){
DAO::$db->bindValueFromStatement($statement,$key,$value);
}
$result= $statement->execute();
if($result && $updateMany)
DAO::insertOrUpdateAllManyToMany($instance);
return $result;
}
Et voici la fonction pour modifier le profil : (unpeu bordélique dsl !)
// permet de modifier le profil du membre
public function modifProfil(){
$membre=commonUtils::chargerMembre(); // on récupère le membre connecté
// stock les vrais set
$trueCivilite=$membre->getCivilite();
$trueNom=$membre->getNom();
$truePrenom=$membre->getPrenom();
$trueEmail=$membre->getEmail();
$trueMdp=$membre->getPassword();
$trueSignature=$membre->getSignature();
$arrayTrue = array("trueCivilite"=>$trueCivilite, "trueNom"=>$trueNom, "truePrenom"=>$truePrenom, "trueEmail"=>$trueEmail, "trueMdp"=>$trueMdp, "trueSignature"=>$trueSignature);
// stock les données returned par le POST
$newNom=$_POST["newNomProfil"];
$newPrenom=$_POST["newPrenomProfil"];
$newCivilite=$_POST["newCiviliteProfil"];
$newEmail=$_POST["newEmailProfil"];
$newMdp=$_POST["newMdpProfil"];
$newMdp2=$_POST["newMdp2Profil"];
$currentIdent=$_POST["currentIdentProfil"];
$currentMdp=$_POST["currentMdpProfil"];
$newSignature = $_POST["textareaSignatureProfil"];
// variables de tests
$needUpdate=false; // on considere qu'il n'y a pas besoin d'update le membre initialement
$validateModif=false; // on considere que la modification est de base non effectuée
$validateEmail=true; // on considere que l'email est disponible
$auth=false; // on considere que l'authentification est de base mauvaise
$mdpLength=true; // on considere que la longueur du mot de passe est sufisante
$mdpEquality=true; // on considere que les mots de passes sont identiques
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::: TEST MODIF NEED :::::::::::::::::::::::::::::::::::::::::::::::::::::::
// si y a besoin de modifier
if($newSignature != $membre->getSignature() || $newMdp != "" || $newEmail != $membre->getEmail() || $newCivilite != $membre->getCivilite() || $newNom != $membre->getNom() || $newPrenom != $membre->getPrenom()){
$needUpdate = true;
// auth
if(sha1($currentMdp) === $membre->getPassword() && $currentIdent === $membre->getIdentifiant()){ // si currentmdp/ident == membreConnecté.ident/.mdp => auth réussie
$auth=true; // auth réussie
$membre->setCivilite($newCivilite); // on set la nouvelle civilite
$membre->setNom($newNom); // on set le nouveau nom
$membre->setPrenom($newPrenom); // on set le nouveau prenom
$membre->setSignature($newSignature); // on set la nouvelle signature
// test mdp
if($newMdp != ""){
// vérification si le mdp n'est pas composé de moins de 7 caractères
if(strlen($newMdp)<7){
$mdpLength=false; // alors la taille du mdp est plus petit que 7
}
// vérification de l'égalité entre newMdp et newMdp confirmation
if($newMdp != $newMdp2){
$mdpEquality=false; // alors les mots de passe ne sont pas semblables
}
if($mdpEquality && $mdpLength){ // si conditions sont remplies
$membre->setPassword(sha1($newMdp));// on set le nouveau mdp
}
}
// test email
if($newEmail != $membre->getEmail()){
// vérification si l'email est disponible
$validateEmail = commonUtils::checkIfEmailExists($newEmail);
if($validateEmail){
$membre->setEmail($newEmail); // on set la nouvelle adresse
}
}
// test DAO update
if($mdpEquality && $mdpLength && $validateEmail){
$update = DAO::update($membre);
if($update==1){ // si toutes les modifs sont effectuées
$validateModif=true; // => modification effectuée
}else{
$this->initialSet($arrayTrue);
}
}else{
$this->initialSet($arrayTrue);
}
}
}
echo json_encode(array("auth"=>$auth, "validateModif"=>$validateModif, "validateEmail"=>$validateEmail, "mdpLength"=>$mdpLength, "mdpEquality"=>$mdpEquality, "needUpdate"=>$needUpdate));
}
Et enfin, dans cette dernière fonction, si je remplace la ligne :
$membre->setSignature($newSignature); // on set la nouvelle signature
par :
$membre->setSignature(""); // on set la nouvelle signature
, et bien cela ne modifie pas la valeur du champ dans la bdd. Mais si, je GET la valeur de l'objet membre , elle sera bien vide soit string "" jusqu'a ce que je déconnecte le membre.
Pour les opérations SQL j'utilise une classe (DAO) passerelle entre bdd et modèle objet. Cela me permet par exemple, si je veux update d'écrire simplement :
[php]$update = DAO::update($membre);[/php]
, aprés avoir set les nouvelles valeurs du membre . ex : [php]$membre->setCivilite($newCivilite);[/php]
Voici la fonction update de la classe DAO : (mais sans connaître le projet . . .)
[php]public static function update($instance,$updateMany=false){
$tableName=OrmUtils::getTableName(get_class($instance));
$ColumnskeyAndValues=Reflexion::getPropertiesAndValues($instance);
$ColumnskeyAndValues=array_merge($ColumnskeyAndValues, OrmUtils::getManyToOneMembersAndValues($instance));
$keyFieldsAndValues=OrmUtils::getKeyFieldsAndValues($instance);
$sql="UPDATE ".$tableName." SET ".SqlUtils::getUpdateFieldsKeyAndValues($ColumnskeyAndValues)." WHERE ".SqlUtils::getWhere($keyFieldsAndValues);
Logger::log("update", $sql);
$statement=DAO::$db->prepareStatement($sql);
foreach ($ColumnskeyAndValues as $key=>$value){
DAO::$db->bindValueFromStatement($statement,$key,$value);
}
$result= $statement->execute();
if($result && $updateMany)
DAO::insertOrUpdateAllManyToMany($instance);
return $result;
}[/php]
Et voici la fonction pour modifier le profil : (unpeu bordélique dsl !)
[php]// permet de modifier le profil du membre
public function modifProfil(){
$membre=commonUtils::chargerMembre(); // on récupère le membre connecté
// stock les vrais set
$trueCivilite=$membre->getCivilite();
$trueNom=$membre->getNom();
$truePrenom=$membre->getPrenom();
$trueEmail=$membre->getEmail();
$trueMdp=$membre->getPassword();
$trueSignature=$membre->getSignature();
$arrayTrue = array("trueCivilite"=>$trueCivilite, "trueNom"=>$trueNom, "truePrenom"=>$truePrenom, "trueEmail"=>$trueEmail, "trueMdp"=>$trueMdp, "trueSignature"=>$trueSignature);
// stock les données returned par le POST
$newNom=$_POST["newNomProfil"];
$newPrenom=$_POST["newPrenomProfil"];
$newCivilite=$_POST["newCiviliteProfil"];
$newEmail=$_POST["newEmailProfil"];
$newMdp=$_POST["newMdpProfil"];
$newMdp2=$_POST["newMdp2Profil"];
$currentIdent=$_POST["currentIdentProfil"];
$currentMdp=$_POST["currentMdpProfil"];
$newSignature = $_POST["textareaSignatureProfil"];
// variables de tests
$needUpdate=false; // on considere qu'il n'y a pas besoin d'update le membre initialement
$validateModif=false; // on considere que la modification est de base non effectuée
$validateEmail=true; // on considere que l'email est disponible
$auth=false; // on considere que l'authentification est de base mauvaise
$mdpLength=true; // on considere que la longueur du mot de passe est sufisante
$mdpEquality=true; // on considere que les mots de passes sont identiques
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::: TEST MODIF NEED :::::::::::::::::::::::::::::::::::::::::::::::::::::::
// si y a besoin de modifier
if($newSignature != $membre->getSignature() || $newMdp != "" || $newEmail != $membre->getEmail() || $newCivilite != $membre->getCivilite() || $newNom != $membre->getNom() || $newPrenom != $membre->getPrenom()){
$needUpdate = true;
// auth
if(sha1($currentMdp) === $membre->getPassword() && $currentIdent === $membre->getIdentifiant()){ // si currentmdp/ident == membreConnecté.ident/.mdp => auth réussie
$auth=true; // auth réussie
$membre->setCivilite($newCivilite); // on set la nouvelle civilite
$membre->setNom($newNom); // on set le nouveau nom
$membre->setPrenom($newPrenom); // on set le nouveau prenom
$membre->setSignature($newSignature); // on set la nouvelle signature
// test mdp
if($newMdp != ""){
// vérification si le mdp n'est pas composé de moins de 7 caractères
if(strlen($newMdp)<7){
$mdpLength=false; // alors la taille du mdp est plus petit que 7
}
// vérification de l'égalité entre newMdp et newMdp confirmation
if($newMdp != $newMdp2){
$mdpEquality=false; // alors les mots de passe ne sont pas semblables
}
if($mdpEquality && $mdpLength){ // si conditions sont remplies
$membre->setPassword(sha1($newMdp));// on set le nouveau mdp
}
}
// test email
if($newEmail != $membre->getEmail()){
// vérification si l'email est disponible
$validateEmail = commonUtils::checkIfEmailExists($newEmail);
if($validateEmail){
$membre->setEmail($newEmail); // on set la nouvelle adresse
}
}
// test DAO update
if($mdpEquality && $mdpLength && $validateEmail){
$update = DAO::update($membre);
if($update==1){ // si toutes les modifs sont effectuées
$validateModif=true; // => modification effectuée
}else{
$this->initialSet($arrayTrue);
}
}else{
$this->initialSet($arrayTrue);
}
}
}
echo json_encode(array("auth"=>$auth, "validateModif"=>$validateModif, "validateEmail"=>$validateEmail, "mdpLength"=>$mdpLength, "mdpEquality"=>$mdpEquality, "needUpdate"=>$needUpdate));
}[/php]
Et enfin, dans cette dernière fonction, si je remplace la ligne :
[php]$membre->setSignature($newSignature); // on set la nouvelle signature[/php]
par :[php]$membre->setSignature(""); // on set la nouvelle signature[/php]
, et bien cela ne modifie pas la valeur du champ dans la bdd. Mais si, je GET la valeur de l'objet membre , elle sera bien vide soit string "" jusqu'a ce que je déconnecte le membre.