Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #20  
Antiguo 04-09-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Román
Yo no creo que sea necesario actualizar nada. Por ello mencioné lo de valores por defecto. Cuando un usuario se conecte, al momento de deserializar, el objeto OpcionesUsuario tendrá más propiedades, pero éstas tendran valores por defecto. Cuando guardes las opciones ya guardarás todas ellas pues lo que habrás actualizado será el método Save del objeto.
Me pierdo un poco en el tema de la inicialización de las opciones. En lo que "he caído" es en que acaso no sea preciso serializar todo el objeto, sino que bastaría con hacerlo con el Array que guarde las opciones, propiamente. Esto es posible porque PHP no sólo serializa Objetos (ignoro ahora mismo si un Array lo es en PHP, pero, me parece que no), sino, variables de tipo "mixed"... y Arrays, por ejemplo.

Cita:
Empezado por Maeyanes
Ahora, como sería? Como usuario inicio sesión, la aplicación lee las opciones de la base de datos ("deserializa" el objeto), hago algún cambio de estas opciones, trabajo con la aplicación y finalizo la sesión, la aplicación aquí guarda las opciones (o puede guardarlas desde que aplico los cambios a estas opciones).
Exacto. Las opciones por defecto siempre serán las mismas hasta que el usuario las cambie... en el apartado de opciones de la aplicación. Efectivamente, tendrá que "aplicar los cambios", puesto que, por las características de una aplicación de este tipo, no es posible guardar las opciones "cuando el usuario salga de la aplicación", pongamos por caso.

Pero, de todos modos, los programas no tienen porqué guardar las opciones al salir, aunque ahora me doy cuenta de que esto lo he hecho alguna que otra vez... hombre, tal vez algunas opciones han de guardarse al salir, como la posición de un formulario en pantalla, pero, buena parte de las opciones se "tocarán" en el apartado de opciones, se editarán y se guardarán desde ahí cuando el usuario lo precise.

Cita:
Empezado por Maeyanes
Dado lo anterior, ¿en que momento se podría agregar una opción nueva? Esto lo pregunto por que no se exactamente como funciona la serialización de objetos en PHP. A lo que voy, si creo el objeto con un arreglo de X elementos, al "deserializar" este objeto conteniendo X - 1 elementos, ¿se pierde el elemento extra con el que inicialicé el arreglo o solo se sobreescriben los que ya existían?
Si serializas un objeto que contiene diez "propiedades" al deserializar será eso lo que recuperes. Ahora... cómo añades opciones... pues supongo que "todo a la vez". Esto es, supongamos un Plugin que necesitara añadir un par de opciones de usuario... cuando esto se llevara a cabo habría se añadirían las opciones al Array correspondiente, y, efectivamente, habría en ese mismo punto que actualizar la base de datos, es decir, para que en sucesivas ocasiones la nueva opción estuviera disponible.

No he podido resistir y he escrito este poco de código en un momento como aquél que dice (no lo he probado ni nada) y lo expongo aquí porque creo que puede dar alguna idea de cómo llevar a cabo el tema, haciéndolo como venimos diciendo:

Código PHP:
<?php

class Opciones
{
  var 
$idUsuario 0;
  var 
$opciones null;

  function 
Opciones($idUsuario)
  {
    
$this->opciones = array();
    
$this->idUsuario $idUsuario;    
    
$this->Cargar();
  }

  
/**
   * Cargamos las opciones del usuario.
   */
  
function Cargar()
  {
    global 
$bdatos;
    
$consultaSql "SELECT opcion_contenido FROM opciones 
     WHERE opcion_id_usuario = '
{$this->idUsuario}' LIMIT 1;";
    
$this->opciones unserialize($bdatos->Variable($consultaSql));    
  }

  
/**
   * Guardamos las opciones del usuario.
   */
  
function Guardar()
  {
    global 
$bdatos;
    
$contenido serialize($this->opciones);
    
$consultaSQL "UPDATE opciones SET opcion_contenido = '$contenido'
     WHERE opcion_id_usuario = '
{$this->idUsuario}' LIMIT 1;";
  }
  
  
/**
   * Averiguamos si existe una opción de usuario en concreto.
   *
   * @param string $clave
   * @return boolean
   */
  
function Existe($clave)
  {
    return 
array_key_exists($clave$this->opciones);
  }

  
/**
   * Leemos el valor de una opción. Si esta no existe retornamos el valor
   * por defecto que se especifique en el parámetro correspondiente.
   * 
   * Nota: esos "mixed", ¿qué pasa con ellos?
   *
   * @param string $clave
   * @param mixed $valorPorDefecto
   * @return mixed
   */
  
function Leer($clave$valorPorDefecto '')
  {
    if(!isset(
$this->opciones[strtolower($clave)]))
      return 
$valorPorDefecto;    
    else 
      return 
$this->opciones[strtolower($clave)];
  }

  
/**
   * Escribimos el valor de una opción del usuario.
   *
   * Nota: Otra vez el "mixed" sale a relucir...
   * 
   * @param string $clave
   * @param mixed $valor
   */
  
function Escribir($clave$valor)
  {
    
$this->opciones[strtolower($clave)] = $valor;    
    
$this->Actualizar();
  }  
  
  
/**
   * Actualiza las opciones del usuario.
   */
  
function Actualizar()
  {
    
$this->Guardar();
  }
  
// class Opciones

?>
Por supuesto el código anterior no está ni probado, ni "concluído" ni nada de nada... pero puede dar alguna idea, espero. En caso de dudas aquí estamos. ¡Y otra vez muchas gracias a todos muchachos!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Cómo ver a los usuarios conectados desde mi aplicacion? federiconqn21 Conexión con bases de datos 3 23-07-2006 01:56:09
Problema al ejecutar un procedimiento dos usuarios distintos en aplicacion asp.net mamen .NET 5 04-05-2006 14:58:23
lanzo aplicación para que sea terminada por usuarios de internet unreal4u Varios 0 25-11-2004 19:34:03
Usuarios conectados en mi aplicacion ? Jorge Taveras MS SQL Server 8 29-06-2004 22:18:41
opciones para grabar un video jfgonzalez OOP 2 11-08-2003 16:25:42


La franja horaria es GMT +2. Ahora son las 23:57:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi