Foros del Web » Programando para Internet » PHP »

guardar usuario logado en php en una tabla mysql

Estas en el tema de guardar usuario logado en php en una tabla mysql en el foro de PHP en Foros del Web. Buenas, tengo lo siguiente: index.php Código: <?php if ($_SERVER['REQUEST_METHOD']=='POST') { // ¿Nos mandan datos por el formulario? include('php_lib/config.ini.php'); //incluimos configuración include('php_lib/login.lib.php'); //incluimos las funciones //verificamos ...
  #1 (permalink)  
Antiguo 01/10/2014, 04:12
 
Fecha de Ingreso: abril-2012
Ubicación: Sevilla
Mensajes: 10
Antigüedad: 12 años
Puntos: 0
Exclamación guardar usuario logado en php en una tabla mysql

Buenas, tengo lo siguiente: index.php
Código:
<?php

if ($_SERVER['REQUEST_METHOD']=='POST') { // ¿Nos mandan datos por el formulario?
    include('php_lib/config.ini.php'); //incluimos configuración
    include('php_lib/login.lib.php'); //incluimos las funciones

    //verificamos el usuario y contraseña mandados
    if (login($_POST['usuario'],$_POST['password'])) {

       //acciones a realizar cuando un usuario se identifica
      
//Conectamos con la base de datos
  $conexion = mysql_connect(SERVIDOR_MYSQL, USUARIO_MYSQL, PASSWORD_MYSQL);
//si falla
    if (!$conexion) {
        trigger_error('Error al conectar al servidor mysql: ' . mysql_error(),E_USER_ERROR);
    }
    // Seleccionar la base de datos activa
    $db_selected = mysql_select_db(BASE_DATOS, $conexion);
    if (!$db_selected) {
        trigger_error ('Error al conectar a la base de datos: ' . mysql_error(),E_USER_ERROR);
    }

  $usr = $_POST['usuario'];
  //Sentencia SQL para buscar un usuario con esos datos 
    $registros=mysql_query("select usuario, nivel from usuarios where usuario = '".$usr."'",$conexion) or die("Problemas en el select:".mysql_error());
    if ($reg=mysql_fetch_array($registros))
        {
        switch($reg['nivel'])
        {
            case 1:
            header('Location: /registro/volu/volu.php');
            break;

            case 2:
            header('Location: /registro/volu/volu5.php');
            break;

            case 3:
            header('Location: /registro/volu/volu10.php');
            break;
            
            case 4:
            header('Location: /registro/volu/volu15.php');
            break;
            
            case 5:
            header('Location: /registro/aum/aum.php');
            break;

            case 6:
            header('Location: /registro/aum/aum5.php');
            break;

            case 7:
            header('Location: /registro/aum/aum10.php');
            break;
            
            case 8:
            header('Location: /registro/aum/aum15.php');
            break;
            
            default:
            echo "Algo está fallando. Si los problemas persisten contacta con nosotros desde el enlace ¿problemas?";  

}
    }
        
    die();
    } else {
        //acciones a realizar en un intento fallido
        //Ej: mostrar captcha para evitar ataques fuerza bruta, bloqueas durante un rato esta ip, ....


        //preparamos un mensaje de error y continuamos para mostrar el formulario
        $mensaje='Usuario o contraseña incorrectos.';
     }
} //fin if post
?>
        
        <?php
            //si hay algún mensaje de error lo mostramos escapando los carácteres html
            if (!empty($mensaje)) echo('<h2>'.htmlspecialchars($mensaje).'</h2>');
        ?>
        <form action="index.php" enctype="multipart/form-data" method="post">
            <label>Usuario:
                     <input name="usuario" type="text" />
            </label>
          </br></br> <label>Contraseña:
                <input name="password" type="password" />
            </label>
            </br></br><input type="submit" value="Entrar" name="submit" style="float:left; left:40%; position:absolute" />
        </form>
        
        <div style="position:absolute; float:left; left:35%; top:200px; width:200px;">
            <!-- The activator -->
            <a class="activator" id="activator">¿Problemas?</a>
        </div>
</div>

Ahora el config.ini.php:
Código:
<?php
/* 
 * Configuración general: conexión a la base de datos y otro parámetros
 */

define('SERVIDOR_MYSQL','127.0.0.1'); //servidor de la base de datos
define('USUARIO_MYSQL','user'); //usuario de la base de datos
define('PASSWORD_MYSQL','pass'); //la clave para conectar
define('BASE_DATOS','bd'); // indica el nombre de la base de datos que contiene la tabla de los usuarios

define('TABLA_DATOS_LOGIN','usuarios'); //nombre de la tabla usuarios
define('CAMPO_USUARIO_LOGIN','usuario'); //campo que contiene los datos de los usuarios (se puede usar el email)
define('CAMPO_CLAVE_LOGIN','password'); //campo que contiene la contraseña


define('METODO_ENCRIPTACION_CLAVE','texto'); //método utilizado para almacenar la contraseña encriptada. Opciones: sha1, md5, o texto


?>
Y el login.lib.php:

Código:
<?php
function login($usuario,$password) {

    //usuario y password tienen datos?
    if (empty($usuario)) return false;
    if (empty ($password)) return false;

    //1 - conectamos a la base de datos utilizando los parámetros globales
    $link =  mysql_connect(SERVIDOR_MYSQL, USUARIO_MYSQL, PASSWORD_MYSQL);

    if (!$link) {
        trigger_error('Error al conectar al servidor mysql: ' . mysql_error(),E_USER_ERROR);
    }
    // Seleccionar la base de datos activa
    $db_selected = mysql_select_db(BASE_DATOS, $link);
    if (!$db_selected) {
        trigger_error ('Error al conectar a la base de datos: ' . mysql_error(),E_USER_ERROR);
    }

    //2 - preparamos la consulta SQL a ejecutar utilizando sólo el usuario y evitando ataques de inyección SQL.
    $query='SELECT '.CAMPO_USUARIO_LOGIN.', '.CAMPO_CLAVE_LOGIN.' FROM '.TABLA_DATOS_LOGIN.' WHERE '.CAMPO_USUARIO_LOGIN.'="'.  mysql_real_escape_string($usuario).'" LIMIT 1 '; //la tabla y el campo se definen en los parametros globales
    $result = mysql_query($query);
    
    if (!$result) {
        trigger_error('Error al ejecutar la consulta SQL: ' . mysql_error(),E_USER_ERROR);
    }


    //3 - extraemos el registro de este usuario
    $row = mysql_fetch_assoc($result);

    if(mysql_num_rows($result) == 1) {
    $_SESSION['usuario'] = $usuario;}
    
    if ($row) {
        switch (METODO_ENCRIPTACION_CLAVE) {
            case 'sha1'|'SHA1':
                $hash=sha1($password);
                break;
            case 'md5'|'MD5':
                $hash=md5($password);
                break;
            case 'texto'|'TEXTO':
                $hash=$password;
                break;
            default:
                trigger_error('El valor de la constante METODO_ENCRIPTACION_CLAVE no es válido. Utiliza MD5 o SHA1 o TEXTO',E_USER_ERROR);
        }

        if ($hash==$row[CAMPO_CLAVE_LOGIN]) {
            @session_start();
            $_SESSION['USUARIO']=array('user'=>$row[CAMPO_USUARIO_LOGIN]);            return true; //usuario y contraseña validadas
           if(mysql_num_rows($result) == 1) {
    // Obtuvimos un solo resultado.
    // Primero, guardamos la informacion del usuario en variables de sesion
    // (es util mas adelante para saber si alguien esta logueado, por ejemplo)
    $_SESSION['usuario'] = $usuario;}
        } else {
            @session_start();
            unset($_SESSION['USUARIO']); //destruimos la session activa al fallar el login por si existia
            return false; //no coincide la contraseña
        }
    } else {
        //El usuario no existe
        return false;
    }

}

/**
 * Veridica si el usuario está logeado
 * @return bool
 */
function estoy_logeado () {
    @session_start(); //inicia sesion (la @ evita los mensajes de error si la session ya está iniciada)
    
    if (!isset($_SESSION['USUARIO'])) return false; //no existe la variable $_SESSION['USUARIO']. No logeado.
    if (!is_array($_SESSION['USUARIO'])) return false; //la variable no es un array $_SESSION['USUARIO']. No logeado.
    if (empty($_SESSION['USUARIO']['user'])) return false; //no tiene almacenado el usuario en $_SESSION['USUARIO']. No logeado.

    //cumple las condiciones anteriores, entonces es un usuario validado
    return true;

}

/**
 * Vacia la sesion con los datos del usuario validado
 */
function logout() {
    @session_start(); //inicia sesion (la @ evita los mensajes de error si la session ya está iniciada)
    unset($_SESSION['USUARIO']); //eliminamos la variable con los datos de usuario;
    session_write_close(); //nos asegurmos que se guarda y cierra la sesion
    return true;
}


    
?>
Bien ahora si entra el primer usuario se me va a un formulario en concreto, supongamos este:

volu.php

Código:
<form name="webtaller" action="guarda.php" method="post">
nombre: <input type="text" name="nombre"><br>
nick: <textarea name="nick"></textarea><br>
<input type="submit" value="Enviar información">
</form>
bien y su guarda.php:
Código:
<?php 
    
$link = mysqli_connect("127.0.0.1", "user", "pass");
mysqli_select_db($link, "bd");


$tildes = $link->query("SET NAMES 'utf8'"); //Para que se inserten las tildes correctamente
$nombre = $_POST["nombre"];
$nick = $_POST["nick"];

@session_start();
$_SESSION['USUARIO']=array('user'=>$row[CAMPO_USUARIO_LOGIN]);
if ($_SESSION["usuario"] = "SI"){ //evalúa si tu usuario NO esta logueado
$_SESSION["usuario"] = $usr;}

mysqli_query($link, "INSERT INTO volu0 VALUES ('$usr', '$nombre', '$nick')");
mysqli_close($link); // Cerramos la conexion con la base de datos
echo 'Los datos han sido insertados en la base de datos';
?>
en este último lo que hago es insertar en la tabla volu0 un nombre y un nick, pero quiero que también se me guarde el nombre del usuario que ha entrado, por eso he intentado eso de:
Código:
@session_start();
$_SESSION['USUARIO']=array('user'=>$row[CAMPO_USUARIO_LOGIN]);
if ($_SESSION["usuario"] = "SI"){ //evalúa si tu usuario NO esta logueado
$_SESSION["usuario"] = $usr;}

mysqli_query($link, "INSERT INTO volu0 VALUES ('$usr', '$nombre', '$nick')
pero claro en el campo usuario me guarda sí, soy muy nuevo en esto de php y no tengo narices de hacerlo, imagino que debe ser fácil y no lo consigo. Mi tabla en cuestión es sencilla, usuario, nombre y nick todos varchar de 60. ¿podéis echarme un cable?

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:50.