IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MkFramework Discussion :

Aide sur la methode d'insertion des données dans la base


Sujet :

MkFramework

  1. #1
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut Aide sur la methode d'insertion des données dans la base
    Bonsoir imikado

    Dans le but de récupérer un certains nombres d'informations sur les utilisateurs qui se connectent a l'application, j'aimerais comprendre comment se fait le processus d'insertion au niveau du Framework.
    Dans mes débuts quand je ne connaissait pas le Framework et que je bricolais avec php j'avais créer une table TRACEUSERS dans lequel j'ajoutais les informations suivantes (Le nom du user, l'adresse ip de la machine et un commentaire) avec PDO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     $query = 'INSERT INTO TRACEUSERS( USER_TRACE, MACHINE_TRACE, ACTION_TRACE) VALUES (?, ?, ?);';
       $prep = $db->prepare($query);
       $prep->bindValue(1, $leuserbase , PDO::PARAM_STR);
       $prep->bindValue(2, $ip         , PDO::PARAM_STR);
       $prep->bindValue(3, 'Vient de se connecter a la base / S--> SITE RUSTA', PDO::PARAM_STR);
       $prep->execute();
    j'ai vu la fonction save(), mais je n'arrive pas a comprendre le processus d’insertion vu que dans le cas en haut j'écrivais moi même le code sql d'insertion.
    Comment puis je le faire avec le Framework ? j'ai besoin d'aiguillage.

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 89
    Points : 95
    Points
    95
    Par défaut
    bonsoir,

    le processus save est hérité de la classe abstract_row ( enfin un nom qui ressemble a ca ... )

    pour enregistrer ta valeur il faut que tu fasses un truc du genre apres avoir generer la model traceusers )
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $oTraceusers=new row_traceUsers;	
     
    $oTraceusers->USER_TRACE= $USER_TRACE;
    $oTraceusers->MACHINE_TRACE= $MACHINE_TRACE ;
    $oTraceusers->ACTION_TRACE=$ACTION_TRACE ;
     
    if($oTraceusers->save()){
    _root::redirect('default::index');
    }
    }else{
    var_dump($oArticles->getListError());
     
    }

    au dessus c'est la version moche faisant abstraction des traitements préalable celle de mk est plus chouette ..
    ex pour une table articles


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    private function processSave(){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
     
    		$oPluginXsrf=new plugin_xsrf();
    		if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    			return array('token'=>$oPluginXsrf->getMessage() );
    		}
     
    		$iId=_root::getParam('id',null);
    		if($iId==null){
    			$oArticles=new row_articles;	
    		}else{
    			$oArticles=model_articles::getInstance()->findById( _root::getParam('id',null) );
    		}
     
    		$tColumn=array('title','content','datatime','members_id');
    		foreach($tColumn as $sColumn){
    			$oArticles->$sColumn=_root::getParam($sColumn,null) ;
    		}
     
     
    		if($oArticles->save()){
    			//une fois enregistre on redirige (vers la page liste)
    			_root::redirect('adminArticles::list');
    		}else{
    			return $oArticles->getListError();
    		}
     
    	}

  3. #3
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    ok je vois.
    Mon problème est que je veut faire cette insertion au niveau de mon module Authentification.
    Comment puis je intégrer ce code ?

    Voici la procédure que je veux employer :
    1. Login de l’utilisateur
    2. Insertion dans ma table des Traceusers des informations
    3. Affichage de ma page Accueil


    Merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 89
    Points : 95
    Points
    95
    Par défaut
    si tu veux le mettre à la connexion

    dans le controleur auth

    tu as une fonction checkLoginPass qui ressemble a cela

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    private function checkLoginPass(){
    		//si le formulaire n'est pas envoye on s'arrete la
    		if(!_root::getRequest()->isPost() ){
    			return null;
    		}
     
    		$sLogin=_root::getParam('login');
    		$sPassword=_root::getParam('password');
     
    		if(strlen($sPassword) > $this->maxPasswordLength){
    			return 'Mot de passe trop long';
    		}
     
    		//on stoque les mots de passe hashe dans la classe model_members
    		$sHashPassword=model_members::getInstance()->hashPassword($sPassword);
    		$tAccount=model_members::getInstance()->getListAccount();
     
    		//on va verifier que l'on trouve dans le tableau retourne par notre model
    		//l'entree $tAccount[ login ][ mot de passe hashe ]
    		if(!_root::getAuth()->checkLoginPass($tAccount,$sLogin,$sHashPassword)){
    			return 'Mauvais login/mot de passe';
    		}
     
              $oUser=_root::getAuth()->getAccount();
              model_rightsManager::getInstance()->loadForUser($oUser);
     
     
     
    		_root::redirect('default::index');
    	}


    a ta place j ajouterai une fonction "set_traceuser" que tu ajouterais juste avant la redirection

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // on laisse a l identique tout ledebut de la fonction
    $this->set_traceuser();
    _root::redirect('default::index');

    et on ajoute la fonction qui va bien dans le controleur

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    	private function _set_traceuser(){
    		//iic on mettra le traitement désiré pour la table traceusers
    //il te faudra récuperer les infos a inserer
     
    $oTraceusers=new row_traceUsers;
     
    $oTraceusers->USER_TRACE= " nom de la base";
    $oTraceusers->MACHINE_TRACE=$_SERVER['REMOTE_ADDR'] ;// a priori c juste une ip 
    $oTraceusers->ACTION_TRACE="blabla se connecte"  ;
     
     
     
    if($oTraceusers->save()){
    _root::redirect('default::index');
    }
    }else{
    echo "oups ";
     
    }
     
    	}

    enjoy

  5. #5
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    ok je vais essayer d’implémenter ça (surtout avec la méthode dite propre ! en ref a Imikado) et faire un retour.
    Merci

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Tout d'abord merci à oliverell62 pour ses réponses pertinentes

    Ensuite: attention il y a une petite erreur:
    La méthode c'est
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    	private function set_traceuser(){
    (il n'y a pas de underscore dans l'appel)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->set_traceuser();

    PS: il faut bien sur ne pas oublier de créer la classe model mode_traceUsers via le builder

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 89
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par imikado Voir le message
    Tout d'abord merci à oliverell62 pour ses réponses pertinentes

    Ensuite: attention il y a une petite erreur:
    La méthode c'est
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    	private function set_traceuser(){
    (il n'y a pas de underscore dans l'appel)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->set_traceuser();

    PS: il faut bien sur ne pas oublier de créer la classe model mode_traceUsers via le builder
    Oups, je ne suis pas encore au point
    merci

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    On fait tous des petites erreurs

  9. #9
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    Bonjour a tous

    Voici ce que j'ai effectué après les recommandations :

    1/ Création de la classe model_TRACEUSERS

    Ensuite dans Main du module Authentification voici le code que j'ai ajouter :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    // Fonction de récupération de l'adresse ip
    	public function recip() 
        {
         if (getenv('HTTP_X_FORWARDED_FOR')) { return getenv('HTTP_X_FORWARDED_FOR'); }
         elseif (getenv('HTTP_CLIENT_IP')) { return getenv('HTTP_CLIENT_IP'); }
         else { return getenv('REMOTE_ADDR'); }
        }
        // Fonction d'insertion dans la base
        private function mytraceuser($sConnected){
    	  $sip=recip();
     
          $oTRACEUSERS=new row_TRACEUSERS;
     
          $oTRACEUSERS->USER_TRACE=$sConnected;
          $oTRACEUSERS->MACHINE_TRACE=$sip; 
          $oTRACEUSERS->ACTION_TRACE="Viens de se connecter depuis internet"  ;
          if($oTRACEUSERS->save()){
           _root::redirect('default::index');
            }
          else{
            echo "Erreur";
           }
          }

    et dans la fonction checkLoginPass() :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    .....
    // ICI MA METHODE DE TRACE
            $this->mytraceuser($sLogin);
            //

    Mais j'ai un message d'erreur :
    Fatal error: Call to undefined function recip()
    c'est relatif a ma fonction recip(). je dois l'avoir mal définie ?

    Merci

  10. #10
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    C'est une méthode, donc :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sip=$this->recip();
    et non
    Vous avez oublié $this

  11. #11
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    ça marche Merci pour $This j'y avait pas pensé ! je vais essayer d'utilisé la méthode processSave() du model model_TRACEUSERS
    Questions
    1- Dois je généré un module CRUD du model model_TRACEUSERS d'abord pour utiliser cette fonction ?
    2- Pour appeler cette fonction dans mon module authentification qu'elle serait la syntaxe ?

    Merci

  12. #12
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Non pas besoin de CRUD: ce que vous avez juste besoin c'est la couche modèle
    Le CRUD sert à avoir une interface d'administration (tableau + formulaire)

    Comme indiqué précédemment par oliverell62, vous avez juste besoin de:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     $oTRACEUSERS=new row_TRACEUSERS;
     
          $oTRACEUSERS->USER_TRACE=$sConnected;
          $oTRACEUSERS->MACHINE_TRACE=$sip; 
          $oTRACEUSERS->ACTION_TRACE="Viens de se connecter depuis internet"  ;
          if($oTRACEUSERS->save()){

  13. #13
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    OK je peux donc marquer résolu alors !

    Merci a vous

  14. #14
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    J'ai suivi avec attention la discussion et j'aimerais prolonger.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $oTRACEUSERS->save()


    OU se trouve cette methode save()? dans la classe abstract_row?ou puis-je trouver cette classe pour prendre connaissance de son contenu?

    Merci

  15. #15
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    OUi exact, dans la classe abstract_row
    vous pouvez la surcharger si besoin, cf la documentation de l'ORM http://mkframework.com/orm.html#automatiserretraitement

  16. #16
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    dans quel dossier/fichier se trouve la classe abstract_row?

  17. #17
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Dans le framework
    lib/framework/abstract

  18. #18
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    D’accord, je regarde tout ça. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/06/2010, 20h14
  2. Insertion des données dans une base access 2007
    Par guy_antoine_mav dans le forum Accès aux données
    Réponses: 2
    Dernier message: 11/11/2009, 22h34
  3. nouveau problême d'insertion des données dans la base de données
    Par tchimou dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/03/2007, 16h32
  4. [MySQL] insertion des données dans la base
    Par ciel65 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/02/2007, 12h10
  5. [VB6]problème d'insertion des donneés dans une base d'Access2003
    Par lanbok dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/05/2006, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo