New question

Question:

Date: 02-05-2019 19:21:40 (In Spanish)

[ANS] ¿Cómo crear LOG de inicio de sesión básico sin POO?.[Unresolved]

Hola a toda la comunidad de PHPCentral.com!, en esta oportunidad quería aclarar una duda que tenía, la cual es si se puede crear un LOG mediante base de datos, algo sensillo la verdad, acá abajo dejare algo para que más o menos entiendan.

TABLA: cpUsuarios
COLUMNA: inicioLOG
COLUMNA: finalLOG
COLUMNA: totalLOG

¿Que quiero decir con esto?, bueno que solamente diga: el LOG actual, que deje otro LOG cuando finalice sesión y por último que todos los LOGS se almacenen.

Tengo una base de datos con uno nombre 'x' y una tabla 'cpUsuarios', en la cual están todos los datos de los usuarios (9Columnas, si metemos las otras 3Columnas serían 12Columnas), quería saber quien me podría ayudar ya que estoy creando un proyecto para mí, para experimentar con el.

Si leíste esto, gracias, que tengas un buen día, un cordial saludo!
Tags: Votes: -1 - Answers: 4 - Views: 7 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 03-05-2019 13:46:34 Por qué no utilizar POO?

    Te ayudaría bastante pues nada más tendrías que implementar la interface sugerida por PSR-3.

    Suponiendo que tienes una tabla definida así (puedes verla funcionando en este fiddle):

    CREATE TABLE logs (
        created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        message text NOT NULL
    );
    


    El siguiente código de ejemplo es una adaptación de la interfaz proporcionada por PSR-3 y almacenaría los datos en esa tabla.

    <?php
    namespace Log;
    
    const EMERGENCY = 'emergency';
    const ALERT     = 'alert';
    const CRITICAL  = 'critical';
    const ERROR     = 'error';
    const WARNING   = 'warning';
    const NOTICE    = 'notice';
    const INFO      = 'info';
    const DEBUG     = 'debug';
    
    /**
     * Saves the log to the DB
     * 
     * @param string $type
     * @param string $message
     */
    function saveLog($type, $message) {
        $success = false;
        $query = 'INSERT INTO logs VALUES (NOW, ?, ?)';
        $stmt = mysqli_stmt_init(getConnection()); //getConnection() is a function that lives in the global scope and returns a valid mysqli connection.
        if (mysqli_stmt_prepare($stmt, $query)) {
            mysqli_stmt_bind_param($stmt, 'ss', $type, $message);
            $success = mysqli_stmt_execute($stmt);
        }
        
        if(!$success) {
            throw new \RuntimeException('No se pudo generar el log');
        }
    }
    
    /**
     * Interpolates context values into the message placeholders.
     *
     * @param string $message
     * @param array  $context
     *
     * @return string
     */
    function interpolate($message, array $context = [])
    {
        // build a replacement array with braces around the context keys
        $replace = [];
        foreach ($context as $key => $val) {
            // check that the value can be casted to string
            if (!is_array($val) && (!is_object($val) || method_exists($val, '__toString'))) {
                $replace['{' . $key . '}'] = $val;
            }
        }
    
        // interpolate replacement values into the message and return
        return strtr($message, $replace);
    }
    
    /**
     * System is unusable.
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    function emergency($message, array $context = []) {
    
        saveLog(EMERGENCY, interpolate($message, $context));
    }
    
    /**
     * Action must be taken immediately.
     *
     * Example: Entire website down, database unavailable, etc. This should
     * trigger the SMS alerts and wake you up.
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    function alert($message, array $context = []) {
        saveLog(ALERT, interpolate($message, $context));
    }
    
    /**
     * Critical conditions.
     *
     * Example: Application component unavailable, unexpected exception.
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    function critical($message, array $context = []) {
        saveLog(CRITICAL, interpolate($message, $context));
    }
    
    /**
     * Runtime errors that do not require immediate action but should typically
     * be logged and monitored.
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    function error($message, array $context = []) {
        saveLog(ERROR, interpolate($message, $context));
    }
    
    /**
     * Exceptional occurrences that are not errors.
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable things
     * that are not necessarily wrong.
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    function warning($message, array $context = []) {
        saveLog(WARNING, interpolate($message, $context));
    }
    
    /**
     * Normal but significant events.
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    function notice($message, array $context = []) {
        saveLog(NOTICE, interpolate($message, $context));
    }
    
    /**
     * Interesting events.
     *
     * Example: User logs in, SQL logs.
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    function info($message, array $context = []) {
        saveLog(INFO, interpolate($message, $context));
    }
    
    /**
     * Detailed debug information.
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    function debug($message, array $context = []) {
        saveLog(DEBUG, interpolate($message, $context));
    }
    
    /**
     * Logs with an arbitrary level.
     *
     * @param mixed $level
     * @param string $message
     * @param array $context
     * @return void
     */
    function log($level, $message, array $context = []) {
        $validLevels = [EMERGENCY, ALERT, CRITICAL , ERROR, WARNING, NOTICE, INFO, DEBUG];
        if(!in_array($level, $validLevels, true)) {
            throw new \InvalidArgumentException('Invalid level for log');
        }
    
        $level($message, $context);
    }
    


    Cuando hagas el login sólo debes de llamar a cualquiera de estas funciones y listo.

    Espero esto te ayude, aunque insisto en que sería mejor utilizar POO.

    Saludos!
      Votes: 1 - Link answer
     
  • Date: 03-05-2019 13:50:35 Si de casualidad te animas a utilizar POO entonces evítate problemas y utiliza Monolog   Votes: 2 - Link answer
     
  • Date: 03-05-2019 16:12:14 Hola Ernesto!, muchas gracias por tu gran aporte, bueno, he pensado muchas veces en usar POO, pero es que estoy practicando primero con PHP puro para después empezar a familiarizarme con POO, no se casi nada de POO la verdad y las guías que he visto, varias de ellas muy largas me han ayudado a entender que es POO, como funciona, para que sirve y un gran etcétera pero, no puedo programar en POO sin todavía terminar de saber PHP puro, aun que en tu opinión, ¿que prefieres?, que primero termine de practicar PHP normal o que me pase a POO, creo que si me paso a POO no habría una gran diferencia para expandir mi conocimiento, pero me costaría más entender el código ¿no?, y ¿que es eso de Monolog?, he visto ese nombre varias veces. GRACIAS!!!   Votes: 0 - Link answer
     
  • Date: 06-05-2019 05:12:12 Yosmar:

    No termino de entender qué es lo que quieres almacenar en los logs. Según la estructura de BBDD que planteas pareciera que lo que quieres almacenar es el tiempo en que un usuario tuvo su sesión abierta en tu aplicación... ¿es así?

    Respecto del tema Monolog: se trata de una librería estándar para realizar logging (dejar información útil para casos de fallos o para entender mejor qué sucede con la aplicación en funcionamiento).

    Al respecto de esto he escrito estos artículos que te pueden ser úitles:

    https://academy.leewayweb.com/como-logear-errores-con-php/
    https://academy.leewayweb.com/como-ser-el-primero-en-enterarse-de-los-errores-de-tu-aplicacion-web/

    Y respecto a si aprender primero POO o seguir con PHP puro, claramente es una decisión tuya saber si ya te sientes suficientemente cómodo con PHP como para avanzar... yo diría que si ya puedes hacer interacciones con BBDD sin grandes problemas estás listo, pero bueno... es una decisión tuya. Si quieres practicar un poco más este programa puede interesarte.

    En todo caso, si te puede ayudar, he elaborado esta guía que tal vez te interese.

    Saludos.
      Votes: 2 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In