Foros del Web » Programando para Internet » PHP »

Insertar datos una sola vez

Estas en el tema de Insertar datos una sola vez en el foro de PHP en Foros del Web. Hola, No sabía muy bien si poner esto en php o en mysql, si me he equivocado disculpadme. Estoy intentado ofrecer a mis usuarios un ...
  #1 (permalink)  
Antiguo 25/08/2003, 01:01
Avatar de t0m|ta  
Fecha de Ingreso: julio-2002
Ubicación: Madrid
Mensajes: 369
Antigüedad: 21 años, 8 meses
Puntos: 3
Insertar datos una sola vez

Hola,

No sabía muy bien si poner esto en php o en mysql, si me he equivocado disculpadme.

Estoy intentado ofrecer a mis usuarios un pequeño listado de los últimos artículos que han visto, para ello en cada artículo he añadido un pequeño código, que guarda el user_id, el topic_id y el forum_id:

[PHP]$user_id =$userdata['user_id'];
$insert= "INSERT INTO manual_vistos (user_id, topic_id,forum_id)
VALUES ('$user_id','$topic_id','$forum_id')";
@mysql_query($insert);
[PHP]

El problema es que si el usuario recarga la página, los valores se vuelven a insertar. Y se me queda la bd llena de valores repetidos.

Quizá sea bueno que se quede ahí, así consta extactamente cuantas veces un usuario determinado ha leido un artículo, pero al extraerlos sería bueno, que no salieran los artículos repetidos.

Para extraerlos, y que cada artículo aparezca en la lista una sola vez.... ¿sería con distinct? No tengo mucha idea de como hacerlo :)

Gracias
__________________
:ojotes: t0m|ta - IHQ :ojotes:
No tengo palabras
Instrucciones de andar por casa
  #2 (permalink)  
Antiguo 25/08/2003, 04:17
Avatar de t0m|ta  
Fecha de Ingreso: julio-2002
Ubicación: Madrid
Mensajes: 369
Antigüedad: 21 años, 8 meses
Puntos: 3
Conseguido, nada cómo estudiar
__________________
:ojotes: t0m|ta - IHQ :ojotes:
No tengo palabras
Instrucciones de andar por casa
  #3 (permalink)  
Antiguo 26/08/2003, 22:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Podrías comentar la solución .. pues es un problema "típico". Sobre todo cuando se muestran los mensajes de error/exito de un proceso como el de insertar un dato en una BD o proceso en sí (lease enviar un e-mail .. meterlo en un archivo de texto plano) en el mismo flujo del script que los recibe (los dtos) y los procesa junto con el método POST de envio (en formularios) al cual nos "pide confirmación" el navegador para ser reenviados .. y al reenviarse .. pues ya ves lo que sucede ..

Te pedía tu solución .. pues, yo siempre uso una técnica: .. redirecciono a otro escript al terminar el proceso (un header("location: va de maravillas"); y ahí le paso mi código de error/exito el cual lo proceso y muestro el mensajito de error/exito acorde .. si recargan la págin recargan la de "ver el mensaje" .. pero no la de mi proceso.

Otros métodos pasan por usar cabeceras de "expiración" HTTP o caché (ahí ahora no recuerdo bien) .. o la de usar GET en lugar de POST ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 27/08/2003, 05:28
Avatar de t0m|ta  
Fecha de Ingreso: julio-2002
Ubicación: Madrid
Mensajes: 369
Antigüedad: 21 años, 8 meses
Puntos: 3
mmm Cluster, tu vas mucho más lejos que yo. Yo no me atrevo a mandar headers.

La verdad es que el tema de insertar una sola vez, al final lo he dejado de lado, puesto que he pensado que saber si un usuario ve un artículo una y otra vez puede resultarme útil para saber cuales son los artículos que la gente utiliza como documentación de consulta.

Lo que intenté solucionar fue lo de extraer los datos una sola vez, lo hice con DISTINCT, y pareció funcionar, pero ahora no. Así que algo he hecho mal seguro.

El tema de insertar una sola vez, yo había pensado solucionarlo de una forma mucho más casera y chapuza.

Había pensado que cuando un usuario ve un artículo podía mandar una query para ver si el par user_id y topic_id existía ya en la bd, si no existe, lo inserto y si existe no lo inserto.

Con el tema de la huelga he estado ocupada preparándolo todo, así que no he seguido más con el tema
__________________
:ojotes: t0m|ta - IHQ :ojotes:
No tengo palabras
Instrucciones de andar por casa
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 22:45.