Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/10/2014, 04:12
joaquintous
 
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?