Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Duda PHP

Estas en el tema de Duda PHP en el foro de PHP en Foros del Web. Buenas noches, este es mi primer mensaje en el foro, y es que este año he empezado a estudiar el ciclo de ASIR (Administración de ...
  #1 (permalink)  
Antiguo 10/07/2015, 19:21
 
Fecha de Ingreso: julio-2015
Mensajes: 67
Antigüedad: 8 años, 9 meses
Puntos: 5
Pregunta Duda PHP

Buenas noches, este es mi primer mensaje en el foro, y es que este año he empezado a estudiar el ciclo de ASIR (Administración de sistemas informáticos en red), y este primer año hemos realizado un proyecto para Base de datos, el cual ha consistido en crear una base de datos con una aplicación web para una empresa.

El problema está en que soy nuevo programando, y algo que quiero mejorar en mi proyecto (el proyecto ya fue presentado en clases, pero quiero mejorarlo aún más antes de presentarselo a la empresa).

Para ponernos en situación:

Tengo 2 tablas que están relacionadas, una es compra, y otra es factura. Al dar de alta una compra, creo directamente la factura asociada a ella, hasta ahí todo correcto..el dilema está en que quiero agregar más de un producto a dicha factura, y no he sido capaz de lograrlo..cada vez que doy de alta una compra se genera una factura diferente para un mismo cliente, y lo que quiero conseguir es que en una misma factura (tiene un id autoincremental) se pueda añadir más de un producto.

No quiero liarme a añadir varios campos iguales en el formulario, ni tener que caparlo poniendo un número máximo de productos..

No sé como lograr hacer esto que planteo, según me han dicho los profesores, debo utilizar un "flags" (no sé que es eso exactamente) para mantener activa la sesión de la factura, y de esta forma ir añadiendo los productos deseados, y una vez estén todos, realizar el insert.

Estoy bastante perdido en esto, y no sé si voy a requerir de otro lenguaje que no sea PHP (es el único que he manejado, y aún me queda muuuucho por aprender).

No sé si este es el lugar adecuado para realizar esta consulta, o si esta está bien formulada, mis disculpas si es así.

Un saludo y muchas gracias.
  #2 (permalink)  
Antiguo 10/07/2015, 21:50
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Duda PHP

Deberías crear otra tabla para los detalles de cada producto colocando un campo que se llame p ej Numero de factura con el cual la vas a relacionar a la factura que se está creando y TODA la información tanto los detalles de los productos como la información de la factura y la compra deberías guardarla en la base de datos hasta que ya tengas todos los productos cargados, es decir hasta el final. En resumen se hace una compra, en la cual se añaden cierta cantidad de productos, se guardan los datos del cliente y demás, luego se guardan los datos de la factura como tal y luego se guarda el detalle de cada uno de los productos comprados relacionando las 3 tablas entre sí. Espero haberme hecho entender.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #3 (permalink)  
Antiguo 11/07/2015, 05:09
 
Fecha de Ingreso: julio-2015
Mensajes: 67
Antigüedad: 8 años, 9 meses
Puntos: 5
Respuesta: Duda PHP

Muchas gracias por la respuesta chronos682, la tabla compra es resultante de una relación ternaria, en ella aparece DNI del cliente, el ID del producto y el ID de la factura, pero lo que yo trato de hacer, es que al dar de alta una nueva compra, pueda añadir tantos productos como quiera (a través del formulario) a una misma factura.

Desde el formulario de alta de la compra, se insertan datos en la tabla de compra, y de factura, creando una factura para compra.

Luego hago una consulta para ver cual es el último ID de factura que se ha creado, y se selecciona para registrar la compra, ya que es un campo requerido.

No sé si me he explicado bien.

Un saludo y muchas gracias.
  #4 (permalink)  
Antiguo 11/07/2015, 07:02
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Duda PHP

Pero si son compras diferentes no deberían tener facturas diiferentes así sea el mismo cliente?
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #5 (permalink)  
Antiguo 11/07/2015, 08:05
 
Fecha de Ingreso: julio-2015
Mensajes: 67
Antigüedad: 8 años, 9 meses
Puntos: 5
Respuesta: Duda PHP

Claro, un cliente puede tener varias facturas, pero en una misma factura de un cliente, pueden haber varios productos, no tiene porque ser la compra de un único producto.

Lo que quiero es no tener que generar una factura por cada producto que compra, sino que en una misma factura de la opción a meter tantos productos como desee para esa compra.

Por ejemplo, el día de hoy un cliente ha comprado 3 productos..pues esos 3 productos deberían ir en una única factura.

De la forma en la que lo tengo ahora, genera una factura para cada producto que registro.

Un saludo y gracias por contestar de nuevo.
  #6 (permalink)  
Antiguo 11/07/2015, 08:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda PHP

Lo que estás buscando es el clásico caso de una relación maestro-detalle. Tu problema es que esa tabla de Factura que tienes está desnormalziada y por lo tanto no sirve como la tienes.
Una relación Maestro-Detalle es de este tipo:


Ese es el esquema clásico que se usa siempre que bajo un mismo concepto se deben agrupar un numero de items.
Se usa en facturas, recibos, ordenes de trabajo, e incluso en las cuentas bancarias que consultas, donde el detalle de movimientos de una cuenta se almacena en tablas separadas.

Por lo que veo, en realidad no debes haber cursado hasta ahora ninguna asignatura de Base de Datos, ¿no es así?
Digo, porque esto es parte de los conceptos más basicos del modelado de datos, y lo puedes encontrar en cualquier manual del tema. Resulta extraño que te estés trabando en algo así.

Este sería, por ejemplo, el modelo de una base de datos para facturación (invoice) de clientes, de diversos productos y hasta usando diferentes medios de pago:

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/07/2015, 08:22
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Duda PHP

Cita:
Iniciado por xPHPerox Ver Mensaje
Claro, un cliente puede tener varias facturas, pero en una misma factura de un cliente, pueden haber varios productos, no tiene porque ser la compra de un único producto.

Lo que quiero es no tener que generar una factura por cada producto que compra, sino que en una misma factura de la opción a meter tantos productos como desee para esa compra.

Por ejemplo, el día de hoy un cliente ha comprado 3 productos..pues esos 3 productos deberían ir en una única factura.

De la forma en la que lo tengo ahora, genera una factura para cada producto que registro.

Un saludo y gracias por contestar de nuevo.
Entonces es tal cual como te escribí en el primer mensaje, crear una tabla para detalles en la cual vas a relacionar el campo id factura con el identificador único de la factura que guardaste en la tabla Factura.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #8 (permalink)  
Antiguo 11/07/2015, 08:23
 
Fecha de Ingreso: julio-2015
Mensajes: 67
Antigüedad: 8 años, 9 meses
Puntos: 5
Respuesta: Duda PHP

Sí, este año vimos Base de datos, y vimos hasta la 3 Forma normal..pero no, maestro-detalle no lo vi ni por asomo.

El proyecto que he realizado ha sido además como trabajo final del primer año de Base de datos, y nunca había trabajado con algo así.

Te copio aquí un esquema de mi base de datos, porque no he entendido del todo lo que me has explicado:



En la tabla de compra tengo la cantidad del producto, y la fecha de la compra, aparte del DNI del cliente, el ID del producto y el ID de la factura.

Desde un mismo formulario estoy dando de alta a la factura, con su importe total, y a la compra.

El importe total ya lo inserta sólo, haciendo el cálculo de coste producto * cantidad.

Es algo muy básico, y no tengo demasiada experiencia en esto aún.

Muchas gracias por la respuesta.
  #9 (permalink)  
Antiguo 11/07/2015, 08:27
 
Fecha de Ingreso: julio-2015
Mensajes: 67
Antigüedad: 8 años, 9 meses
Puntos: 5
Respuesta: Duda PHP

Cita:
Iniciado por chronos682 Ver Mensaje
Entonces es tal cual como te escribí en el primer mensaje, crear una tabla para detalles en la cual vas a relacionar el campo id factura con el identificador único de la factura que guardaste en la tabla Factura.
No te estoy entendiendo del todo bien entonces..porque ese ID se recoge en la tabla compra, relacionando el producto con el ID de factura.

El problema está en que no sé como hacer para registrar varias compras para una misma factura..porque lo que quiero hacer es que desde el alta compra se pueda tener la posibilidad de poner tantos productos como quiera.

¿Lo que me dices es que cree una tabla nueva, en la que ponga un ID de compra relacionado con un ID de factura? Porque no entiendo bien lo que me dices.

Lo siento...mi mente no está trabajando hoy con normalidad, muchas gracias de nuevo por la respuesta.
  #10 (permalink)  
Antiguo 11/07/2015, 08:40
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Duda PHP

La forma como yo diseño esas BD es así:
Una tabla para clientes, otra para facturas y otra para detalles.
En la tabla clientes estan todos los datos personales de la persona y cada cliente tiene un codigo unico el cual va a ser parte de la tabla factura para relacionar las dos tablas.

P ej:
Tabla clientes
id - Nombre - telefono
1 - Juan Gomez - 1234
2 - Maria Perez - 4567

Juan Gomez hace una compra y genera factura

Tabla Factura
id_factura - id_cliente - valor total - iva -etc
1 - 1 - 100 - 16
2 - 1 - 200 - 32

Como se puede ver el mismo cliente 1 hizo dos compras y generó 2 facturas. Ahora vamos a ver los detalles de la factura 1:

Tabla detalles:
Id producto - id factura - producto - cantidad - valor unit - valor total
1 - 1 - Producto 1 - 2 - 20 - 40
2 - 1 - Producto 2 - 1 - 30 - 30
3 - 1 - Producto 3 - 3 - 10 - 30

Como ves el cliente en su primera compra adquirió 3 productos que quedaron relacionados a la factura 1.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #11 (permalink)  
Antiguo 11/07/2015, 08:48
 
Fecha de Ingreso: julio-2015
Mensajes: 67
Antigüedad: 8 años, 9 meses
Puntos: 5
Respuesta: Duda PHP

Vale, ahora si te entendido..pero claro, si tuviera que hacer eso tendría que remodelar toda la base de datos, desde el Entidad-Relación, y ahora mismo no puedo hacer eso..

Partiendo de lo que tengo, ¿hay alguna forma de hacer lo que digo? Ya sea repitiendo campos del formulario, o cualquier otra cosa.

Muchas gracias por la ayuda Chronos.
  #12 (permalink)  
Antiguo 11/07/2015, 10:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda PHP

Tienes dos opciones: Remodelas las base de datos, corrigiendo los errores que has cometido, y logras algo que funcione bien, o parchas brutalmente la tabla, con el altísimo riesgo de reprobar la materia en cuanto vean lo que hiciste.
Si dependiese de mis profesores, con sólo ver el diagrama de la base ya habrías fallado. ni siquiera seguirían mirando el examen. Y no bromeo.
Corregir los errores te llevará algo de tiempo, pero siempre ganarás muchísimo mas, luego, al momento de desarrollar los procesos de persistencia de datos.

Si quieres "parchar lo que tienes, vas al fracaso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 11/07/2015, 10:23
 
Fecha de Ingreso: julio-2015
Mensajes: 67
Antigüedad: 8 años, 9 meses
Puntos: 5
Respuesta: Duda PHP

Ya, lo entiendo..en problema es que ya está corregido y aprobado el proyecto..más de una vez le consulté dudas al profesor y en ningún momento me habló de este problema.

Las relaciones ternarias fueron sugeridas además por el profesor, y en el diagrama, no se apreciará, apliqué formas normales a clientes y proveedores, porque los teléfonos eran grupos repetitivos, así que les apliqué 1 forma normal.

Ahora, para este caso, lo que necesito hacer entonces, ¿es normalizar la tabla compras? Aplicándole la 1 forma normal, dividiendo la tabla compra en dos tablas, quedando compra con idfactura, dni, idproducto..y luego, otra tabla llamada compraproducto con idproducto y cantidad.

¿Sería algo así? Muchas gracias a ambos por la ayuda, son muy amables
  #14 (permalink)  
Antiguo 11/07/2015, 10:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda PHP

Cita:
Ahora, para este caso, lo que necesito hacer entonces, ¿es normalizar la tabla compras? Aplicándole la 1 forma normal, dividiendo la tabla compra en dos tablas, quedando compra con idfactura, dni, idproducto..y luego, otra tabla llamada compraproducto con idproducto y cantidad.
Es exactamente ESO lo que hemos estado diciéndote todo el tiempo...

Hazlo.

Más allá de eso, por lo que he visto de tu diagrama, tiene tantos errores de diseño que me asombra que te lo hayan aprobado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 11/07/2015, 11:00
 
Fecha de Ingreso: julio-2015
Mensajes: 67
Antigüedad: 8 años, 9 meses
Puntos: 5
Respuesta: Duda PHP

¿Qué otros errores ves? Iba haciendo cosas y me iban corrigiendo.. Vamos, iba siendo guiado prácticamente.

Siento no haberles entendido desde el principio, pero llevo muy poco en esto.

De nuevo muchas gracias por la ayuda, cuando lo tenga hecho les diré como me fue.

Un saludo.
  #16 (permalink)  
Antiguo 11/07/2015, 12:09
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Duda PHP

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Más allá de eso, por lo que he visto de tu diagrama, tiene tantos errores de diseño que me asombra que te lo hayan aprobado.
Yo hice ASI (lo que ahora es ASIR), y no sé por allí... pero aqui, según el instituto... deja mucho que desear el profesor...

Pero bueno, almenos, ha tenido la inquietud de preguntar, y ha comprendido lo que le decíais! Ya es mucho más que otros que hay por aqui

@xPHPerox: por ejemplo, algo que puedes "arreglar" de forma relativamente sencilla, y que espero que te venga bien en un futuro... Siempre que vayas a guardar un importe (dato exacto) no utilices un valor aproximado(FLOAT). En este caso, usa un DECIMAL...

De primeras, no te darías cuenta del pq... pero en caso de que llegasen a ser sumas grandes, te podría descuadrar la facturación, tienes algo más de info aqui: http://blog.eleazan.net/2013/07/mysql-float-vs-decimal/ (es un post mio de hace tiempo...)

Por cierto... esto es más para los foros de bases de datos que para PHP ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #17 (permalink)  
Antiguo 11/07/2015, 14:24
 
Fecha de Ingreso: julio-2015
Mensajes: 67
Antigüedad: 8 años, 9 meses
Puntos: 5
Respuesta: Duda PHP

La verdad es que aquí en canarias deja bastante que desear la educación..

Muchas gracias por la respuesta, quería dejar el proyecto bien, porque aunque las clases ya han acabado, voy a entregarlo a la empresa a la que le hice la base de datos, y quería entregar una cosa bien hecha.

Luego desde casa miraré el enlace, que ahora estoy con el móvil.

Me ha gustado mucho el tema de base de datos y php, nunca he estudiado algo con tantas ganas.

Un saludo y muchas gracias.

Edit:

Bueno, ya he realizado lo que me habían comentado los compañeros gnzsoloyo, chronos682 y Eleazan.

He dividido la tabla compra, aplicandole la 1 Forma Normal, dándo lugar a una nueva tabla (la he llamado detalles) en la que he incluido los campos id_producto, cod_factcliente y cantidad.

Ahora ya puedo insertar varios productos en una única factura.

Para que no aparecieran varias líneas al realizar la consulta, he utilizado la función group_concat de mysql, y de esta forma en un sólo campo de la consulta puedo observar los productos que se han comprado, la cantidad de ellos, y el importe total de la compra.

También he cambiado los tipos de dato FLOAT por DECIMAL, después de leer el enlace que dejó el compañero Eleazan.

Muchas gracias por la ayuda a todos, un saludo.

Última edición por xPHPerox; 13/07/2015 a las 14:40 Razón: Resuelto, explicación.

Etiquetas: formulario, tabla
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 00:13.