Crear una opción "Estado: Entregado / A entregar" PHP, MySQL ??

  • Autor Autor Geg1
  • Fecha de inicio Fecha de inicio
Geg1

Geg1

Kappa
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Buenas a todos. Tengo la siguiente "lista de pedidos":

La cual me gustaría agregarle un campo mas (Desde MySQL) que sea una especie de "Estado" en donde se de a elegir (y se pueda modificar) de No entregado a Entregado y viceversa.
Cual seria la opcion en MySQL y con que input lo deberia plasmar en PHP? Gracias!!



l6EdvQq.png


PHP:
<?php
mysql_pconnect("localhost", "root", "");
mysql_select_db("gestorpedidos");
mysql_query("SET NAMES 'utf8'");

if(isset($_GET["accion"])){

    $accion = $_GET["accion"];
    $id_pedido = $_GET["id_pedido"];

    if ($accion == "borrar")
    {
        $consulta_cpedidos = "DELETE FROM pedidos WHERE id_pedido =" .$id_pedido;
            $resultado = mysql_query($consulta_cpedidos);
     }
}  

$consulta_cpedidos = "SELECT * FROM pedidos INNER JOIN clientes ON pedidos.cliente_id = clientes.id_cliente INNER JOIN productos ON pedidos.producto_id = productos.id_producto";
$cpedidos = mysql_query($consulta_cpedidos) or die(mysql_error());
$fila_cpedidos = mysql_fetch_assoc($cpedidos);

?>

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" type="text/css" href="estilos.css">
	<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
	<title>Lista de Pedidos</title>
</head>
<body>
<table width="980" border="0">
	<tr><td class="lista2">Nº</td class="lista2"><td class="lista2">Fecha</td><td class="lista2">Cliente</td><td class="lista2">Producto</td><td class="lista2">Descripcion</td><td class="lista2">Precio</td></tr>
    <tr>
  <?php do { ?>
      <form action=listadepedido.php method=GET>	
      <td align="center" class="lista" width="30"><?php echo $fila_cpedidos['id_pedido']; ?></td>
      <td class="lista" width="100"><?php echo $fila_cpedidos['fecha']; ?></td>
      <td class="lista" width="150"><?php echo $fila_cpedidos['nombre']; ?></td>
      <td class="lista" width="180"><?php echo $fila_cpedidos['producto']; ?></td>
      <td class="lista" width="500"><?php echo $fila_cpedidos['descripcion_p']; ?></td>
      <td class="lista" width="80"><?php echo $fila_cpedidos['precio']; ?></td>
      <td class="listaboton" width="80"><?php echo "<a href=listadepedido.php?accion=borrar&id_pedido=".$fila_cpedidos["id_pedido"].">Eliminar</a>" ?> </td>
      <td class="listaboton" width="100"><a href="editarpedido.php?editarpedido=<?php echo $fila_cpedidos['id_pedido']; ?>">Editar Fecha </a></td>
      </form>
    </tr>
    <?php } while ($fila_cpedidos = mysql_fetch_assoc($cpedidos)); ?>
</table>

</body>
</html>
<?php

mysql_free_result($cpedidos);

?>
 
No entendi bien la pregunta, porque no pones un checkbox con el valor de "estado" en la DB?
 
No entendi bien la pregunta, porque no pones un checkbox con el valor de "estado" en la DB?

Como haria eso?? cual es el tipo de dato correcto a usar para "estado"??
 
<input type="checkbox" name="estado" value="1" <?php echo ($fila_cpedidos['estado']==1 ? 'checked' : '');?>>

Algo así se me ocurre :encouragement:
 
Como haria eso?? cual es el tipo de dato correcto a usar para "estado"??

Si SOLO usas dos datos (entregado, no entregado), usaria Boolean, y y seteas el dato por defecto al hacer la consulta :encouragement:
 
Y en la base de datos lo mejor sería que guardes un 0 o 1 dependiendo del estado (0 = no entregado, 1 = entregado) y el checkbox va a aparecer con el tic si esta entregado.
 
Y en la base de datos lo mejor sería que guardes un 0 o 1 dependiendo del estado (0 = no entregado, 1 = entregado) y el checkbox va a aparecer con el tic si esta entregado.

Claro, pero me queda el checkbox solamente en la lista, como hago para confimar que cambie?

entiendes? Solo sale el checkbox y luego no hace nada cuando lo tildo.

- - - Actualizado - - -

Si SOLO usas dos datos (entregado, no entregado), usaria Boolean, y y seteas el dato por defecto al hacer la consulta :encouragement:

Me quedo asi:

PHP:
<?php
mysql_pconnect("localhost", "root", "");
mysql_select_db("gestorpedidos");
mysql_query("SET NAMES 'utf8'");

if(isset($_GET["accion"])){

    $accion = $_GET["accion"];
    $id_pedido = $_GET["id_pedido"];

    if ($accion == "borrar")
    {
        $consulta_cpedidos = "DELETE FROM pedidos WHERE id_pedido =" .$id_pedido;
            $resultado = mysql_query($consulta_cpedidos);
     }
}  

if(isset($_GET["accion2"])){

    $accion = $_GET["accion2"];
    $estado = $_GET["estado"];

    if ($accion == "modif")
    {
        $consulta_cpedidos = "UPDATE pedidos SET estado = '1' WHERE estado = '%s'". $estado;
            $resultado = mysql_query($consulta_cpedidos);
     }
}  

$consulta_cpedidos = "SELECT * FROM pedidos INNER JOIN clientes ON pedidos.cliente_id = clientes.id_cliente INNER JOIN productos ON pedidos.producto_id = productos.id_producto";
$cpedidos = mysql_query($consulta_cpedidos) or die(mysql_error());
$fila_cpedidos = mysql_fetch_assoc($cpedidos);

?>

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" type="text/css" href="estilos.css">
	<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
	<title>Lista de Pedidos</title>
</head>
<body>
<table width="980" border="0">
	<tr><td class="lista2">Nº</td class="lista2"><td class="lista2">Fecha</td><td class="lista2">Cliente</td><td class="lista2">Producto</td><td class="lista2">Descripcion</td><td class="lista2">Precio</td></tr>
    <tr>
  <?php do { ?>
      <form action=listadepedido.php method=GET>	
      <td align="center" class="lista" width="30"><?php echo $fila_cpedidos['id_pedido']; ?></td>
      <td class="lista" width="100"><?php echo $fila_cpedidos['fecha']; ?></td>
      <td class="lista" width="150"><?php echo $fila_cpedidos['nombre']; ?></td>
      <td class="lista" width="180"><?php echo $fila_cpedidos['producto']; ?></td>
      <td class="lista" width="500"><?php echo $fila_cpedidos['descripcion_p']; ?></td>
      <td class="lista" width="80"><?php echo $fila_cpedidos['precio']; ?></td>
      <td class="listaboton" width="80"><?php echo "<a href=listadepedido.php?accion=borrar&id_pedido=".$fila_cpedidos["id_pedido"].">Eliminar</a>" ?> </td>
      <td class="listaboton" width="100"><a href="editarpedido.php?editarpedido=<?php echo $fila_cpedidos['id_pedido']; ?>">Editar Fecha </a></td>
      <td class="listaboton" width="80"><?php echo "<a href=listadepedido.php?accion2=modif&estado=".$fila_cpedidos["estado"].">Entregado</a>" ?> </td>
      </form>
    </tr>
    <?php } while ($fila_cpedidos = mysql_fetch_assoc($cpedidos)); ?>
</table>

</body>
</html>
<?php

mysql_free_result($cpedidos);

?>


Pero no me setea el Estado a 1 cuando le doy a "Entregado" 🙁
 
Con el checkbox es mas complejo, deberias hacer que se envie al cambiar el "tic" con javascript.

Yo cambiaria esto:

HTML:
<td class="listaboton" width="80"><?php echo "<a href=listadepedido.php?accion2=modif&estado=".$fila_cpedidos["estado"].">Entregado</a>" ?> </td>

por

HTML:
<td class="listaboton" width="80"><?php echo "<a href=listadepedido.php?accion2=modif&id_pedido=".$fila_cpedidos["id_pedido"]."&estado=".$fila_cpedidos["estado"].">Entregado</a>" ?> </td>

Después:

Insertar CODE, HTML o PHP:
if ($accion == "modif")
    {
        $consulta_cpedidos = "UPDATE pedidos SET estado = '1' WHERE estado = '%s'". $estado;
            $resultado = mysql_query($consulta_cpedidos);
     }

por

Insertar CODE, HTML o PHP:
if ($accion == "modif")
    {
        $consulta_cpedidos = "UPDATE pedidos SET estado = '1' WHERE id_pedido =" .$id_pedido;
            $resultado = mysql_query($consulta_cpedidos);
     }
 
Con el checkbox es mas complejo, deberias hacer que se envie al cambiar el "tic" con javascript.

Yo cambiaria esto:

HTML:
<td class="listaboton" width="80"><?php echo "<a href=listadepedido.php?accion2=modif&estado=".$fila_cpedidos["estado"].">Entregado</a>" ?> </td>

por

HTML:
<td class="listaboton" width="80"><?php echo "<a href=listadepedido.php?accion2=modif&id_pedido=".$fila_cpedidos["id_pedido"]."&estado=".$fila_cpedidos["estado"].">Entregado</a>" ?> </td>

Después:

Insertar CODE, HTML o PHP:
if ($accion == "modif")
    {
        $consulta_cpedidos = "UPDATE pedidos SET estado = '1' WHERE estado = '%s'". $estado;
            $resultado = mysql_query($consulta_cpedidos);
     }

por

Insertar CODE, HTML o PHP:
if ($accion == "modif")
    {
        $consulta_cpedidos = "UPDATE pedidos SET estado = '1' WHERE id_pedido =" .$id_pedido;
            $resultado = mysql_query($consulta_cpedidos);
     }

Cuando le doy a "Entregado" me sale:

Notice: Undefined index: estado in on line 21:

$estado = $_GET["estado"];


que puede ser?
 
Borra esa linea, por lo que veo ahora no la precisas
 
Borra esa linea, por lo que veo ahora no la precisas

Listo!! ahora si.. tengo dos consultas mas, si es posible.. desde ya MUCHAS GRACIAS!

1 - Porque puedo ponerle cualquier numero desde la base de datos si elegi el tipo "BOOLEAN" no es 0 -1 los que puedo darle como valor, en todo caso?

2 - Como hago para que se sepa que el valor cambio a "1" osea, entregado en este caso? me refiero a de que forma puedo mostrarle al usuario que ese pedido ya figura como "Entregado"?
 
Agrega esta linea en la tabla donde quieras:

HTML:
<td class="lista" width="80"><?php $fila_cpedidos['estado'] == 1 ? echo "Entregado" : echo "No entregado"; ?></td>

Debe de detectar el 0 como false y cualquier otro numero como true.
 
Agrega esta linea en la tabla donde quieras:

HTML:
<td class="lista" width="80"><?php $fila_cpedidos['estado'] == 1 ? echo "Entregado" : echo "No entregado"; ?></td>

Debe de detectar el 0 como false y cualquier otro numero como true.

Parse error: syntax error, unexpected 'echo' (T_ECHO)

Me da error :S
 
Perdón me equivoque:

HTML:
<td class="lista" width="80"><?php echo $fila_cpedidos['estado'] == 1 ? "Entregado" : "No entregado"; ?></td>
 
Perdón me equivoque:

HTML:
<td class="lista" width="80"><?php echo $fila_cpedidos['estado'] == 1 ? "Entregado" : "No entregado"; ?></td>

Te agradezco muchisimo!! quedo perfecto! de verdad, gracias!!
 
Tu código es bastante vulnerable a inyección sql, deberias de usar consultas preparadas y separar html de php para que sea mas entendible :encouragement:
 
Atrás
Arriba