Campo numero de pedido carrito de la compra php

Necesito numerar cada pedido que se haga a través de un carro de la compra en php+mysql. Lo último que tengo hecho me muestra un número por cada línea de pedido, cuando lo que necesito es que cada línea del mismo pedido tengo un número único. Por ejemplo, lo que busco es:
* Linea 1 - tomates rojos - número de pedido 1.
* Linea 2 - tomates verdes - número de pedido 1.
* Línea 3 - tomates amarillos - número de pedido 1.
Entonces, este sería el número de pedido 1, en este caso, tres líneas. Siguiente pedido:
* Línea 1 - manzanas - número de pedido 2.
* Línea 2 - peras - número de pedido 2.
Este sería el número de pedido 2, y asi sucesivamente.
En la actualidad, mi código hace lo siguiente, pongo el mismo primer ejemplo:
* Linea 1 - tomates rojos - número de pedido 1.
* Linea 2 - tomates verdes - número de pedido 2.
* Línea 3 - tomates amarillos - número de pedido 3.
Les dejo mi código:
<?php require_once('Connections/carniceria.php'); ?>
<?php
if(isset($_SESSION['carrito'])){
$carrito_mio=$_SESSION['carrito'];
$nombre=$_POST['nombre'];
$apellidos=$_POST['apellidos'];
$descripcion;
$pvp;
$cantidad;
$total=0;
$fechapedido=date('y,m,d');
$rs = mysql_query("SELECT MAX(numped) FROM pedidos") or die(mysql_error());
if($mid = mysql_fetch_row($rs)) {
$mid++;
}else{
$mid = 0;
}
for($i=0;$i<=count($carrito_mio)-1;$i ++){
if($carrito_mio[$i] !=NULL){
$descripcion = $carrito_mio[$i]['descripcion'];
$pvp = $carrito_mio[$i]['pvp'];
$cantidad = $carrito_mio[$i]['cantidad'];
$subtotal = $carrito_mio[$i]['pvp'] / 1000 * $carrito_mio[$i]['cantidad'];
// Con esta sentencia SQL insertaremos los datos en la base de datos
$sql_insert="INSERT INTO pedidos (pedidosid, numped, nombre, apellidos, fechapedido, descripcion, pvp, cantidad, subtotal) VALUES ('', '".$i."', '$nombre', '$apellidos', '$fechapedido', '$descripcion', '$pvp', '$cantidad', '$subtotal')";
mysql_query($sql_insert) or die('Error en la inserci&oacuten: '.mysql_error());
}
}
}
?>
Intento con el select max ver cual sería el último número de pedido, sumarle 1, y este resultado sería el nuevo número de pedido para la sesión en curso.
¿Me pueden ayudar con el código.

1 respuesta

Respuesta
1
No se si no estoy interpretando bien tu código pero a mi parecer si del siguiente fragmento:
$sql_insert="INSERT INTO pedidos (pedidosid, numped, nombre, apellidos, fechapedido, descripcion, pvp, cantidad, subtotal) VALUES ('', '".$i."', '$nombre', '$apellidos', '$fechapedido', '$descripcion', '$pvp', '$cantidad', '$subtotal')";
Sustituyes la $i por $mid que es donde traes el numero del siguiente pedido esto quedara resulto.
$sql_insert="INSERT INTO pedidos (pedidosid, numped, nombre, apellidos, fechapedido, descripcion, pvp, cantidad, subtotal) VALUES ('', '".$mid."', '$nombre', '$apellidos', '$fechapedido', '$descripcion', '$pvp', '$cantidad', '$subtotal')";
Necesito numerar cada pedido que se haga a través de un carro de la compra en php+mysql. Lo último que tengo hecho me muestra un número por cada línea de pedido, cuando lo que necesito es que cada línea del mismo pedido tengo un número único. Por ejemplo, lo que busco es:
* Linea 1 - tomates rojos - número de pedido 1.
* Linea 2 - tomates verdes - número de pedido 1.
* Línea 3 - tomates amarillos - número de pedido 1.
Entonces, este sería el número de pedido 1, en este caso, tres líneas. Siguiente pedido:
* Línea 1 - manzanas - número de pedido 2.
* Línea 2 - peras - número de pedido 2.
Este sería el número de pedido 2, y asi sucesivamente.
En la actualidad, mi código hace lo siguiente, pongo el mismo primer ejemplo:
* Linea 1 - tomates rojos - número de pedido 1.
* Linea 2 - tomates verdes - número de pedido 2.
* Línea 3 - tomates amarillos - número de pedido 3.
Les dejo mi código:
<?php require_once('Connections/carniceria.php'); ?>
<?php
if(isset($_SESSION['carrito'])){
$carrito_mio=$_SESSION['carrito'];
$nombre=$_POST['nombre'];
$apellidos=$_POST['apellidos'];
$descripcion;
$pvp;
$cantidad;
$total=0;
$fechapedido=date('y,m,d');
$rs = mysql_query("SELECT MAX(numped) FROM pedidos") or die(mysql_error());
if($mid = mysql_fetch_row($rs)) {
$mid++;
}else{
$mid = 0;
}
for($i=0;$i<=count($carrito_mio)-1;$i ++){
if($carrito_mio[$i] !=NULL){
$descripcion = $carrito_mio[$i]['descripcion'];
$pvp = $carrito_mio[$i]['pvp'];
$cantidad = $carrito_mio[$i]['cantidad'];
$subtotal = $carrito_mio[$i]['pvp'] / 1000 * $carrito_mio[$i]['cantidad'];
// Con esta sentencia SQL insertaremos los datos en la base de datos
$sql_insert="INSERT INTO pedidos (pedidosid, numped, nombre, apellidos, fechapedido, descripcion, pvp, cantidad, subtotal) VALUES ('', '".$i."', '$nombre', '$apellidos', '$fechapedido', '$descripcion', '$pvp', '$cantidad', '$subtotal')";
mysql_query($sql_insert) or die('Error en la inserci&oacuten: '.mysql_error());
}
}
}
?>
Intento con el select max ver cual sería el último número de pedido, sumarle 1, y este resultado sería el nuevo número de pedido para la sesión en curso.
¿Me pueden ayudar con el código, por favor, estoy totalmente atascado?
En primer lugar gracias por tu ayuda, pero no funciona, me graba un cero en el número de pedido, en dos pruebas que he hecho con el cambio indicado por ti.
Por otro lado, estaba intentando obtener el número más alto de pedido, que sería el último, y luego al valor obtenido sumarle uno, y este valor es el que debería guardarse en la tabla como número de pedido. Pero está claro que mi código no hace nada de eso, estoy venga a darle vueltas y hacer probaturas, pero no consigo nada.
Espero tus comentarios.
Saludo
Que tal si mejor envías la parte del proyecto donde estas batallando y la estructura de las tablas para analizarlo y resolverlo, ademas de sugerirte que utilices una clase al menos para el acceso a datos eso te ayudaría a analizar y optimizar tu código considerablemente.
Perdona experto, no tengo claro lo que es una "clase", soy bastante novato, todo lo que he ido haciendo ha sido con un curso y probando cosas.
De todas formas, volviendo a lo que te comentaba ayer, creo que si consigo el último número de pedido, le sumo 1 y lo mantengo y grabo para la sesión, conseguiría lo que necesito. He visto por ahí, que se puede hacer con SELECT MAX o haciendo un select de todos los registros y ordenando descendente. ¿Lo ves factible? Sino te mando la estructura de las tablas y lo que te haga falta.
Muchas gracias
Tienes un pequeño error que no había detectado hasta que me puse a revisar bien tu código, mysql_fetch_row te devuelve un array del tipo:
Array ( [0] => 50 ) si 50 fuera el ultimo pedido agregado por lo tanto al querer enviar la variable $mid en la consulta lo que esta enviando es la cadena "array" para que te quede más claro intenta imprimir de la siguiente manera print_r($mid) y observa lo que estas enviando, la solución creo que es cambiando lo siguiente:
if($mid = mysql_fetch_row($rs)) {
   $mid[0]++; //asi accedemos directo al valor y no el key del array
}else{
   $mid[0] = 1; //1 porque seria el primer pedido no el pedido 0
}
Al enviar la ejecución de la consulta con mysql_query() deberás tratar el $mid de la misma manera es decir enviarle $mid[0] o crear otra variable y asignarle el $mid[0] por ejemplo:
$siguiente_pedido = $mid[0]; // Y envias $siguiente_pedido en el query INSERT

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas