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

Cambiar el estado de un mensaje en php

Hola muy buenos días.
Miren tengo un pequeño problema que no se me ocurre como poder solucionarlo.
Estoy haciendo una pequeña aplicación de mensajería, entonces cuando un usuario deja su mensaje me interesa que aparte de toda la información que se escriba también aparezca un estado del mensaje (Resuelto - No resuelto).
Entonces en la base de datos cree un campo llamado estado y en el formulario que inserta los datos en la base de datos, le puse un campo oculto llamado estado y con el valor por defecto No resuelto.
El problema lo tengo cuando pretendo cambiar el estado de este campo en la base de datos, por que siempre queda como no resuelto y no puedo cambiarlo a resuelto.
Aquí les muestro el código que inserta la información en la base de datos
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }
  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO contacto (Nombre, Apellido, Correo, Area_de_contacto, Mensaje, Estado) VALUES (%s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['Nombre'], "text"),
                       GetSQLValueString($_POST['Apellido'], "text"),
                       GetSQLValueString($_POST['Correo'], "text"),
                       GetSQLValueString($_POST['Area_de_contacto'], "text"),
                       GetSQLValueString($_POST['Mensaje'], "text"),
                       GetSQLValueString($_POST['Estado'], "text"));
  mysql_select_db($database_treboles, $treboles);
  $Result1 = mysql_query($insertSQL, $treboles) or die(mysql_error());
  $insertGoTo = "contacto-enviado.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
mysql_select_db($database_treboles, $treboles);
$query_Contacto = "SELECT * FROM contacto";
$Contacto = mysql_query($query_Contacto, $treboles) or die(mysql_error());
$row_Contacto = mysql_fetch_assoc($Contacto);
$totalRows_Contacto = mysql_num_rows($Contacto);
?>
Espero me den una mano con mi problema.
Se los agradecería mucho.
saludos
0
Puntos
3724
Visitas
8
Resp
Por tokens hace 115 meses
Principiante
Respuesta #1
Hola tokens.

Esa consulta es para insertar un nuevo tema, ¿no?
Bueno, para actualizar el estado de "No resuelto" a "Resuelto" debes crear otra consulta. O sea, tenderás que colocar un botón que diga por ejemplo "Resuelto" y que te lleve a hacer otra consulta, de tipo UPDATE. La consulta sería algo así
 $updateSQL = sprintf("UPDATE contacto SET estado=%s WHERE id=%s",
                       GetSQLValueString("Resuelto", "text"),
                       GetSQLValueString($_GET["id"], "int"));
Crea un nuevo archivo, y que la url sea por ejemplo
inc/resolver.php?id=
Después del igual (=) debes colocar el id extraído de una consulta SELECT. O sea, suponiendo que estás en el archivo donde muestras el post, allí haces la consulta SELECT para mostrar la información del post. Bueno ese botón que crearás, o enlace irá ahí.

Espero haberme explicado bien xd
Lo que trato es darte una idea de como hacer para que tu mismo puedas resolverlo :D
5
Puntos
Por Jose hace 115 meses
Experto Sitio web
Respuesta #2
como te explica Jose creas un enlace que te lance a un archivo con el update que te puso en el ejemplo:

update_estado.php
 $updateSQL = sprintf("UPDATE contacto SET estado=%s WHERE id=%s",
                       GetSQLValueString("Resuelto", "text"),
                       GetSQLValueString($_GET["id"], "int"));
ahora solo te falta el enlace para cambiar el estado de No resuelto a Resuelto y pasarle la id del mensaje a actualizar
<a href="update_estado.php?id=<?php echo $row_Consulta['id_mensaje'] ?>">Cambiar estado a Resuelto</a>
0
Puntos
Por alber hace 115 meses
Administrador
Respuesta #3
Hola Gracias Jose y Albert.
Miren el asunto es que el boton que me permite cambiar el estado lo tengo y el codigo tambien (Se los mostrare más abajo), el asunto es que el UPDATE en teoria parece funcionar, pero en realidad no me esta cambiando el valor de la base de datos. incluso la redirección luego de ejecutarse el codigo tambien la realiza bien, pero el valor queda igual.
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  $updateSQL = sprintf("UPDATE contacto SET Estado=%s WHERE idContacto=%s",
                       GetSQLValueString($_POST['Estado'], "text"),
                       GetSQLValueString($_POST['idContacto'], "int"));

  mysql_select_db($database_treboles, $treboles);
  $Result1 = mysql_query($updateSQL, $treboles) or die(mysql_error());

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

mysql_select_db($database_treboles, $treboles);
$query_JuegoDeRegistro = "SELECT * FROM contacto";
$JuegoDeRegistro = mysql_query($query_JuegoDeRegistro, $treboles) or die(mysql_error());
$row_JuegoDeRegistro = mysql_fetch_assoc($JuegoDeRegistro);
$totalRows_JuegoDeRegistro = mysql_num_rows($JuegoDeRegistro);
?>
no se si ustedes pueden ver algún error que me impida realizar el cambio.
Saludos y gracias.
0
Puntos
Por tokens hace 115 meses
Principiante
Respuesta #4
Hola tokens, prueba cambiando ésto
GetSQLValueString($_POST['Estado'], "text"),
Por ésto
GetSQLValueString("Resuelto", "text"),

Lo digo porque sospecho que el $_POST["Estado"] está extrayendo un valor de un input. Y ese valor es "No resuelto". O sea
<input name="Estado" type="hidden" value="No Resuelto">
Y por supuesto, el valor de ese value no va a cambiar.. Entonces al hacer el update lo que estás haciendo es extraer el valor de ese input que dice lo mismo.
0
Puntos
Por Jose hace 115 meses
Experto Sitio web
Respuesta #5
Hola Jose.
Mira estuve probando tu sugerencia y dándole una vuelta al asunto, la verdad es que no funciona si cambio lo que tu me comentas, pero algo raro hay con el campo oculto del formulario de contacto, evidentemente este tiene un valor de no resuelto, y así entra a la base de datos, pero no puedo modificarlo desde la administración, si no pongo el campo oculto lo puedo modificar sin ningún problema.

Pero necesito que cuando me contacten por el formulario se ponga por defecto el estado no resuelto, y que se pueda modificar posteriormente.

Talvez la manera en que estoy trabajando esta incorrecta, tu conoces otra forma de hacer esto?.

Saludos y muchas gracias
0
Puntos
Por tokens hace 115 meses
Principiante
Respuesta #6
No es necesario tener un input de tipo hidden (campo oculto) para que al contactarte se coloque como "No resuelto". Mira, hay dos formas aparte de esa.

La primera y creo que mejor, es que configures la tabla de mensajes en el phpmyadmin, y el campo llamado "estado" por default tenga el valor de "No resuelto" y NO debes agregar eso en la consulta mysql ya que es automático, o sea puedes borrar el campo oculto. Ejemplo gráfico

La segunda manera sería en la consulta. Cuando alguien envíe el mensaje, en tu consulta MySQL insert.. En vez de colocar $_POST["estado"] colocas directamente "No resuelto".
$sql = sprintf("INSERT INTO mensajes (titulo,mensaje,email,estado) VALUES (%s,%s,%s,'No resuelto')",
           GetSQLValueString($_POST["titulo"], "text"),
           GetSQLValueString($_POST["mensaje"], "text"),
           GetSQLValueString($_POST["email"], "text"));

mysql_query($sql);

De estas dos formas no necesitas ningún campo oculto. El campo oculto se usa más que todo cuando es una variable que cambia como por ejemplo las ID.. Pero si siempre será "No resuelto" hasta que tú lo actualices a "Resuelto", no necesitaría ese campo oculto.

NOTA: Todo lo que comenté arriba se refiere a cuando el usuario envía el mensaje, no cuando actualizas. Cuando actualices el estado, haz lo que te dije en el mensaje anterior.
0
Puntos
Por Jose hace 115 meses
Experto Sitio web
Respuesta #7
Jose. que tal.

Mira realize el cambio que me comentaste, es decir eliminar el campo oculto y poner en el navicat como predeterminado el campo estado a Pendiente,
Y si resulto. Se cambia el estado.
Muchas gracias
5
Puntos
Por tokens hace 115 meses
Principiante
Respuesta #8
De nada :-)

Que bueno que hayas podido resolver de esa forma. :P
0
Puntos
Por Jose hace 115 meses
Experto Sitio web
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate