• Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.


PHP [RELEASE] Système de logs pour votre site !

Statut
N'est pas ouverte pour d'autres réponses.

Nekr0w

Développeur web
Premium
Inscrit
22 Septembre 2012
Messages
416
J'aime
148
Points
4 133
#1
Bonjour à tous, aujourd'hui je vous fais ce petit tuto pour vous apprendre à faire des logs pour votre site :)

Tout d'abord, vous devrez créer une table SQL logs avec les infos suivantes :

- id (int, auto increment)
- name (varchar)
- action (varchar)
- details (varchar)
- page (varchar)
- ip (varchar)
- date (int)

Une fois que vous avez fais ça, créer un fichier php que vous appellerez fonctions.php ou comme vous voulez, et vous allez insérer le code suivant :

PHP:
function insertLog($action, $details) {
   
        if(isset($_SESSION['login'])) {
       
            $login = $_SESSION['login'];
           
        }
        else $login = "Guest";
   
        $ip = $_SERVER['REMOTE_ADDR'];
   
        $log = mysql_query("INSERT INTO logs VALUES ('', '". $login ."', '". $action ."', '". $details ."', '". $_SERVER['PHP_SELF'] ."', '". $ip ."', '". time() ."')");
       
        if(!$log) return false;
       
        else return true;
   
    }
Petite explication :

Lorsque vous voudrez insérer un log sur votre base de données, par exemple une connexion, vous écrirez ça :

PHP:
<?php

$log = insertLog("Connexion", "Connexion reussie");

?>
Cela vous ajoutera un log comme ceci



Donc récapitulons, si vous voulez insérer un système de log dans une connexion, vous devrez avoir ceci dans votre code :

PHP:
if (isset($_POST['login'])) {
    # code...
    if (mysql_num_rows($requetedeconnexion) == 1) {
        # code...
        $log = insertLog("Connexion", "Connexion reussie");
    }
    else { #si le mot de passe est érroné
        $log = insertLog("Tentative de connexion", "Pseudo : ". $login ."<br>Password : ". $password ."");
    }
}
N'oubliez pas d'inclure votre fichier fonctions.php en début de code avec include() !

J'espère avoir été assez clair ^^ Si vous avez la moindre question, n'hésitez à me MP ;)
 
Inscrit
10 Décembre 2011
Messages
83
J'aime
27
Points
3 620
#4
Merci, mais pourrais-tu rajouter une colonne avec l'ip de création et une colonne avec toutes les ip avec lesquelles le compte a été accédé ?
Bien-sur si une ip est deja dans cette colonne, elle est ignorée ;)
Sa serait vraiment super sympas, et si tu t'y connais vraiment bien, j'ai un truc a te demander mais on verra ça plus tard !
Encore merci du partage !
 
Inscrit
3 Décembre 2013
Messages
48
J'aime
15
Points
71
#6
C'est gentil de ta part, mais sa l'aurais étais encore plus si tu aurais fournis la partie SQL ;)
 
Inscrit
5 Juillet 2014
Messages
14
J'aime
7
Points
78
#7
Pourquoi ne pas avoir fais cela sous forme de classe statique ?
De plus, stocker la fonction dans une variable alors qu'elle renvoi uniquement true ou false n'est pas super utile et te prend 1 place en mémoire pour rien.

Exemple:
PHP:
<?php
/**
*    Log System by Nexaz
*    Remake by SkyzohKey
**/

class Logger
{
    /**
    * Function Connect to db.
    * @return PDO Connection pointer.
    **/
    private function connect()
    {
        try
        {
            return new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPass);
        }
        catch (Exception $e)
            throw new Exception("Error Processing Request : " . $e, 1);   
    }   

    /**
    * Function Add log.
    * @param $action : Type of the log.
    * @param $message : Message to log.
    * @return null.
    **/
    public static function add($action, $message)
    {
        // Ternaire condition.
        $login = (isset($_SESSION["login"])) ? $_SESSION["login"] : "Guest";
        $ip = $_SERVER["REMOTE_ADDR"];

        // PDO Connetion, more secure.
        $db = $this->connect();
        $db->prepare("INSERT INTO logs VALUES (NULL, :login, :action, :details, :script, :ip, :time")
            ->bindParam(":login", $login)
            ->bindParam(":action", $action)
            ->bindParam(":details", $message)
            ->bindParam(":script", $_SERVER["PHP_SELF"])
            ->bindParam(":ip", $ip)
            ->bindParam(":time", time())
            ->execute();

        return null;
    }
}
 

Nekr0w

Développeur web
Premium
Inscrit
22 Septembre 2012
Messages
416
J'aime
148
Points
4 133
#8
Joli code, mais la release était pour faire au plus simple pour que la maximum de gens puissent comprendre ;) Mais c'est vrai tu as raison en partie :)
 
Inscrit
5 Juillet 2014
Messages
14
J'aime
7
Points
78
#10
J'oubliais, pour utiliser ma classe il suffit de faire comme suit :
PHP:
<?php
require_once("Logger.class.php");

// Pour créer un nouveau log :
Logger::add("Achat", "Le produit « Femme toute nue » vient d'être acheté par XXX-Men pour 666€.");
?>
 
Statut
N'est pas ouverte pour d'autres réponses.


Discussions similaires