Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/10/2004, 12:27
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Tengo una aplicacion tipica en la que un usuario se conecta (por login y todo eso) y edita algo que luego guardo en una base de datos. Me gustaria hacer que cuando alguien intente editar el mismo registro le indique que ya esta siendo usado por otro. He pensado en poner alguna especie de 'flag' en la base de datos, pero si el usuario cierra el navegador quedaria el flag siempre activado...
En lugar de usar un campo tipo "flag" (1/0 .. on/off) .. usa fechas; fecha de ingreso a editar ese registro. Eso te servirá para hacerte rutinas de cálculos de "tiempo de inactividad" .. Ese campo lo actualizas a cada petición de una página a tu servidor y en tu zona de código donde entres a modificar ese registro, verificas ese tiempo y lo contrastas con la fecha/hora actual .. si es mayor que el tiempo que determines como "tiempo de inactividad" (es decir; que el usuario aparentemente no està haciando nada en el sistema o salió cerrando su navegador) .. Lo desbloqueas.

En el foro se suele hablar del tema con propuestas para evitar el problema .. busca por el término "concurrencia" .. veras soluciones alternativas.

Cita:
Tambien tengo un formulario para insertar datos, uso el metodo if(isset(...)) para la ejecucion del codigo que introduce el registro, el problema es que si el usuario actualiza el naveador vuelve a ejecutar el mismo codigo y introduce 2 veces el mismo registro,¿como evito esto?. He pensado en usar unset() despues de ese codigo pero no me funciona...
Para evitar ese problema .. se trata de que redirecciones desde tu script/parte de proceso al terminar este hacia otra página o si misma. Ejemplo:

Código PHP:
<?
//proceso .. PHP (insertar datos a tu BD .. etc ..)

header ("Location: pagina.tal");
exit;
?>
Si en ese proceso .. al ocurrir un error o bien al terminar con exito lo que tenga que hacer, actualmente muestras un mensaje de error/exito, no lo hagas ahí .. usa una variable extra en el link que se redirecciona a otra página y muestra el mensaje bajo el valor de esa variable (o existencia: isset()) ...en la página/script que quedas al redireccionar.

Cita:
Una ultima cuestion, ¿hay en PHP alguna forma de que cualquier sesion pueda ver si existe alguna variable comun para todas?, seria como una variable superglobal
Las sesiones de por sí al igual que las cookies son únicas y les pertenece al cliente que las crea .. He de ahí su "seguridad". Si tu necesitas una(s) variables comunes para toda tu aplicación (al estilo "ASP con sus variables de aplicación") lo que es en PHP tendrás que usar tu própio método de almacenamiento compartido para tu aplicación .. ejemplo: un archivo de texto plano que creas en el servidor .. o un registro en tu BD .. etc. No te servirá por lo dicho ni cookies ni sesiones.

En otros casos .. si tus variables son "fijas" .. puedes llevar todo eso a un archivo cualquier .php con la definición de esas variables y llamarlos en tus scripts por include() por ejemplo:

variables.php
<?
$variable="valor";
?>

y donde lo requieras ..
include ("variables.php");

Un saludo,