enregistrement des actions

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : enregistrement des actions

Re: enregistrement des actions

par moogli » 19 mars 2012, 18:04

heu c'est quoi que tu ne sais pas utiliser ?


si c'est ma classe, c'est simple. Il suffit de récupérer l'instance et de d'utiliser la méthode addlog()
en gros
<?php
include ('logger.class.php'); // inclusion de la définition de la classe
try {
    $log = logger\logger::getInstance(); // on récupère l'instance (pour rappel c'est un singleton)
    //$log->initTables(); // pour creer les tables si elles n'existe pas c'est a faire une seule fois
    // ça c'est un exemple pour supprimer une ligne de la table
    if (isset($_GET['clear'])){
        $log->delLog($_GET['clear']);
    }
/**
* cette ligne est la plus importante c'est elle que tu met partout dans le code pour "logger" les actions. 
* le 1er paramètre est l'id de l'utilisateur (que tu aura mis en corrélation avec ta table utilisateurs existante) classiquement c'est un $_SESSION['idUtilisateur'];
* le second paramètre est une description courte de l'action, le second une longye, par exemple (12, 'Suppression article','ID article, ficher, ligne, le mec a fait tel et telle chose avant, tu peux imaginer y coller un var_dump(de post / get etc etc) (en utilisant les ob_*) ou avec var_export
*/
    $r = $log->addLog(52,'test','Il s agit la d un test de log :)');
}
 catch (Exception $e){
     echo '<div class="avertissement erreur">'.nl2br($e->getMessage()).'<br />'.nl2br($e->getTraceAsString()).'</div>'; // gestion exception a personnaliser
 }
?>
http://fr.php.net/manual/fr/function.var-export.php

@+

Re: enregistrement des actions

par piotrowski-s » 19 mars 2012, 08:53

quelqu'un sait? d'avance merci.

Re: enregistrement des actions

par piotrowski-s » 09 mars 2012, 17:24

j'ai bien vu, ce code, mais je ne sais pas comment l'exploiter en somme.

Re: enregistrement des actions

par moogli » 05 mars 2012, 18:29

de rien , si tu a encore des questions (sur ton code a toi ;) ) hésite pas.

le miens est surement plus que perfectible ;)

@+

Re: enregistrement des actions

par piotrowski-s » 05 mars 2012, 14:49

je vais tester tout cela, merci beaucoup pour votre aide.

Re: enregistrement des actions

par moogli » 05 mars 2012, 10:33

oui oui ça fonctionne, le seul problème c'est que tu doit faire ça pour chaque action à logguer.

alors qu'avec une classe tu a juste ajouter l'instanciantion de la classe et une méthode pour l'insertion.

de plus tu ajoute un niveau d'application : tu masque complètement le fonctionnement du log ce qui te permet de changer facilement et a un seul endroit en cas de modif (la si tu a 50 fichiers c'est 50 modif le nombre de fois où tu utilise le log ;)

j'ai corrigé deux trois âneries de fin de nuit + ajout d'une méthode pour l'initialisation de la base sqlite.
j'ai virer la clef primaire en double de la table users et fait fonctionner l'init des tables ;)


@+

Re: enregistrement des actions

par piotrowski-s » 05 mars 2012, 00:59

merci beaucoup ... je vais tenter :) je m'étais lancé dans la création de doubles requêtes... je ne sais pas si ca vaut mieux ?
<?php
if (isset ($_POST['NOUVEAU_NUM_DE_TELEPHONE'])
 {
   // On modifie le num' de téléphone du membre.
   $MAJ_BDD = $bdd->prepare('UPDATE Membres SET telephone = :TEL');
   $MAJ_BDD = $bdd->execute(array('TEL' => $_POST['NOUVEAU_NUM_DE_TELEPHONE']));

   // On ajoute une ligne dans la table 'activites' pour voir que l'utilisateur a modifié son pseudo.
   $MAJ_ACTIVITE = $bdd->prepare('INSERT INTO activites(id, activite, date) VALUES (:id, :activite, :date)');
   $MAJ_ACTIVITE = $bdd->execute(array('id' => 'id du membre',
                                       'activite' => 'Numero de téléphone modifié en'. $_POST['NOUVEAU_NUM_DE_TELEPHONE'] .'.',
                                       'date' => 'xx:xx');
 }
?>

Re: enregistrement des actions

par moogli » 04 mars 2012, 01:55

aller tiens je viens de faire un exemple fonctionnel, bien entendu a adapter a ce que tu veux :)

logger.class.php : la classe logger qui permet les logs
log.class.php : la classe log, décrit un log (une ligne de log)
logger.sqlite3 : le fichier de base de données sqlite
testlog.php : Le fichier de test qui te montre comment on peux utiliser la chose.

ATTENTION : nécessite php5.3 mini (sinon faut que tu vire l'utilisation des espaces de noms

@+

Re: enregistrement des actions

par piotrowski-s » 03 mars 2012, 17:44

bon maintenant je vois comment faire... A moi d'oeuvrer... ma fois, ça me parait bien difficile tout cela.
merci pour vos réponses

Re: enregistrement des actions

par moogli » 03 mars 2012, 17:35

voilà c'est ça tu fait comme tu veux sur le serveur et doit penser a prévoir les cas erreur et il faut que tu le traite correctement en ajax (et donc afficher une belle dans ce cas ;) )


@+

Re: enregistrement des actions

par xTG » 03 mars 2012, 17:31

Ton script Ajax il appelle de toute façon un script PHP non ?
Donc ajax ou pas ajax n'est pas le problème. ;)

Les sessions ? Elles viennent faire quoi là dedans ?
Le fait d'identifier tes utilisateurs via session ?
Dans ce cas dans l'exemple de moogli c'est juste que $user est à remplacer par une variable de session identifiant l'utilisateur.

Re: enregistrement des actions

par piotrowski-s » 03 mars 2012, 17:17

mais le fait que ça soit du ajax ça peut fonctionner? et comment faire avec les sessions?

Re: enregistrement des actions

par moogli » 03 mars 2012, 15:00

salut,


En gros il faut ajouter l'utilisation d'une fonction dans toute tes actions.
en gros
<?php
mysql_query('update truc set machin=\'chose\'');
?>
devient
<?php
log($user, $action, $valeur);
mysql_query('update truc set machin=\'chose\'');
?>
et la fonction log fait appel à la db pour le stockage.

perso j'utiliserais plutot une classe pour le logger.

au début du script tu instancie la classe et avant chaque action à utiliser : $log->addLog( .... );

a toi de bien définir les info que tu souhaite sauvegarder.

Pense que ta classe ne doit utiliser directement les super globale (ça permet la réutilisabilitée de la classe).

j'allais oublier : a mon sens cette classe doit être in singleton, et pourquoi pas totalement dé corrélée du système globale (pourquoi en utilisant sqlite).

@+

Re: enregistrement des actions

par piotrowski-s » 03 mars 2012, 14:35

je ne comprends pas trop. aurais tu un exemple stp?

Re: enregistrement des actions

par Ryle » 03 mars 2012, 14:18

Il faut pour cela que tu crées une fonction qui fera les mysql_query() - ou execute() si tu utilises pdo :)

En gros, quand dans ton code l'utilisateur fait un update ou un delete, au lieu de l'exécuter la requête immédiatement, tu appelles ta fonction en lui passant les éléments nécessaires (par exemple la requête à exécuter). Ta fonction va alors pouvoir enregistrer les infos (utilisateur, action ...) au préalable et fera l'exécution de la requête ensuite :)