Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Problema al eliminar mensaje

Hola como estan?

les cuento tengo este script :
          <?php do { ?>          
           <?php if ($row_sacarmensajes['mensaje']=="") echo "sin mensajes";
		   else { ?>
          <div id="fav"><strong>Mensaje :</strong> <?php echo $row_sacarmensajes['mensaje']; ?> <strong>fecha :</strong> <?php echo $row_sacarmensajes['fecha']; ?><strong> tu publicacion :</strong><?php echo $row_sacarmensajes['asunto']; ?> <strong>de usuario :</strong> <?php echo user ($row_sacarmensajes['envia']); ?> responder  | <a href="borrar_preg.php?id=<?php echo $row_sacarmensajes['id']; ?>">Borrar</a></div>
              <br>
          </p><?php }?>
          <?php } while ($row_sacarmensajes = mysql_fetch_assoc($sacarmensajes)); ?>
en el cual saca bien las preguntas que me han echo.

y tengo este otro :
<?php require_once('/Connections/config.php'); 

if ((isset($_GET['id'])) && ($_GET['id'] != "")) {
  $deleteSQL = sprintf("DELETE FROM hs_mensajes WHERE id=%s",
                       GetSQLValueString($_GET['id'], "int"));

  mysql_select_db($database_config, $config);
  $Result1 = mysql_query($deleteSQL, $config) or die(mysql_error());

  $deleteGoTo = "../cuenta.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $deleteGoTo));
}

$colname_borrarpreguntar = "-1";
if (isset($_GET['id'])) {
  $colname_borrarpreguntar = $_GET['id'];
}
mysql_select_db($database_config, $config);
$query_borrarpreguntar = sprintf("SELECT * FROM hs_mensajes WHERE envia = %s", GetSQLValueString($colname_borrarpreguntar, "int"));
$borrarpreguntar = mysql_query($query_borrarpreguntar, $config) or die(mysql_error());
$row_borrarpreguntar = mysql_fetch_assoc($borrarpreguntar);
$totalRows_borrarpreguntar = mysql_num_rows($borrarpreguntar);

mysql_free_result($borrarpreguntar);
?>

borrando...
y la borra!! no tengo inconveniente con eso...

entonces cual es el problema se preguntaran??

bien yo elimino el mensaje que me mando pedrito hasta hay todo bien como dije, pero luego hago sesión como pedrito y también se le borro el mensaje que el envió me entienden???

lo que necesito es saber como hacer para que fernandito borre la pregunta pero no se le borre a Pedrito jaaja
0
Puntos
1623
Visitas
4
Resp
Por fernandoury hace 102 meses
Principiante Sitio web
Respuesta #1
Hola fernandoury, bueno, se borran porque el mensaje pertenece a una sola base de datos llamada hs_mensajes. Tienes opciones para lo que quieres. Una de las opciones podría ser crear dos tablas:

- Mensajes Enviados (id, emisor, receptor, titulo, mensaje, estado)
- Mensajes Recibidos (id, emisor, receptor, titulo, mensaje, estado)

La cosa sería que al enviar un mensaje, se envíe a ambas tablas, pero al eliminar el mensaje se elimine en la tabla que corresponda.

Si Fernandito borra el mensaje que él le envió a Pedrito entonces estaría borrando el mensaje de la tabla Mensajes Enviados donde Fernandito es el emisor y Pedrito el receptor. Pero aún queda el mensaje en Mensajes Recibidos donde también Fernandito es el emisor y Pedrito el receptor.

____________________________________________________________

Otra opción que se me acaba de ocurrir viendo que puede existir un "estado" que solemos usar como leído o no leído, pues también podemos crear un estado para el emisor y para el receptor donde no sería eliminar el mensaje de la base de datos sino "esconderlo" por decir así, de aquel usuario que le haya dado a "eliminar". Por ejemplo, tienes tu base de datos:

- hs_mensajes (id, emisor, receptor, titulo, mensaje, estado, estado_receptor, estado_emisor)

Si estado_receptor = 1. El mensaje se le muestra a Pedrito.
Si estado_emisor = 1. El mensaje se le muestra a Fernandito.
Si estado_receptor = 0. El mensaje no se le muestra a Pedrito (Pedrito le dio a eliminar).
Si estado_emisor = 0. El mensaje no se le muestra a Fernandito (Fernandito le dio a eliminar)

Entonces, aquí no usarías un DELETE sino un UPDATE, y mostrarías los mensajes al emisor (Fernandito) dependiendo de estado_emisor, y los mensajes al receptor (Pedrito) dependiendo del estado_receptor.

Ahora ¿cuál opción usar?

Si usas la primera opción, estás creando el doble de contenido, por lo tanto estás llenando más rápido la base de datos. Pero la segunda opción, aunque Fernandito le de a eliminar, el mensaje no se estaría eliminando, aún queda disponible para Pedrito. Tendría que hacer un script para cuando los dos hayan dado a eliminar (estado_receptor = 0 y estado_emisor = 0), el mensaje se elimine, o darle por ejemplo 90 días para que se elimine el mensaje automáticamente.
1
Puntos
Por Jose hace 102 meses
Experto Sitio web
Respuesta #2
jajajj siempre es bueno preguntar.. siempre aprendemos algo nuevo!!

gracias lo pondre en practica y vere cual de los dos usare ejeejej
0
Puntos
Por fernandoury hace 102 meses
Principiante Sitio web
Respuesta #3
¿Tendría que hacer un script para cuando los dos hayan dado a eliminar (estado_receptor = 0 y estado_emisor = 0), el mensaje se elimine, o darle por ejemplo 90 días para que se elimine el mensaje automáticamente.?

me tirare por este.

ya puse en la base de datos estado_envia personalizado 0 y estado_recibe personalizado 0 .

ahora como hacer para que se elimine automaticamente luego de 90 días??

0
Puntos
Por fernandoury hace 102 meses
Principiante Sitio web
Respuesta #4
Colócale una fecha, o un time, yo lo haría con un time, y lo guardas en otra columna por ejemplo: tiempo.

Cada unidad de time() es 1 segundo, entonces 90 días por 24 horas por 60 minutos por 60 segundos son 7776000. Entonces guardarías esto:
$tiempo = time() + 7776000;
Luego haces un script que esté en todas las páginas para que siempre que alguien esté usando la web, se ejecute automáticamente. No se si tienes algún archivo funciones.php, o alguno que esté presente en todas las páginas y crearías un script que diga: Cuando el tiempo del mensaje sea igual o menor al tiempo actual, se borrará.
<?php

$sql = sprintf("DELETE FROM hs_mensajes WHERE tiempo <= %s", GetSQLValueString(time(),"int"));
$consulta = mysql_query($sql);

?>
time() sería el tiempo actual.
Estamos diciendo que si time es igual a tiempo, han pasado 90 días, elimínalo. Y si time es mayor que tiempo, han pasado más de 90 días (por ejemplo 90 días y 1 segundo), entonces, también se eliminará.

Si MySQL no acepta el operador <= entonces usa solo <

0
Puntos
Por Jose hace 102 meses
Experto Sitio web
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate