Ir al contenido


Foto

problema con tutorial 66 de php poo de cesar cancino


  • Por favor identifícate para responder
3 respuestas en este tema

#1 shinneo

shinneo

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 04 diciembre 2014 - 12:33

Hola, llevo 4 dias atascado en algo que no consigo resolver,

Tenemos  2 tablas
ventas (id_venta,id_cliente,total,fecha,id_vendedor)
facturas(id_factura,neto,iva,total,estado,id_venta,fecha)

La idea es la siguiente primero mostramos todos los campos de la tabla ventas en html (esto no genera problemas)
posteriormente generamos la venta y posteriormente la factura, al generar la venta la insercion va en la tabla ventas y al generar la factura la insercion va en la tabla facturas
Esto no es secuencial se puede hacer en cualquier momento, pero el problema viene aqui, cuando mostramos al principio todos los campos de la tabla ventas hay uno en el que tiene que poner si hay o no hay factura para esa venta

la idea es que compruebe si el campo id_venta es igual en las dos tablas, si es que existe en la tabla facturas,
el resultado deberia ser 0 en caso de que no haya o 1 en caso de que haya factura para la venta.

Esto se esta haciendo con php pdo, yo haciendo lo mismo no consigo que me funcione correctamente.
Cesar cancino hace que el resultado de un metodo sea el resultado de otro
Estos son mis metodos


delphi
  1. public function listaVentas()
  2.     {
  3.         self::setNames();
  4.         $sql="select ventas.id_venta as ventasidventa,
  5.             destinatario_factura.nombre as nombre_destinatario,
  6.             vendedores.nombre as nombre_vendedor,
  7.             clientes.nombre as nombre_cliente,
  8.             total,
  9.             concat_ws('-',day(ventas.fecha),month(ventas.fecha),year(ventas.fecha)) as fecha,
  10.             concat_ws(':',hour(ventas.fecha),minute(ventas.fecha)) as hora
  11.  from
  12.                 destinatario_factura,vendedores,ventas,clientes
  13. where
  14.                 destinatario_factura.id_destinatario_factura=ventas.id_destinatario and
  15.                 clientes.id_cliente=ventas.id_cliente and
  16.                 vendedores.id_vendedor=ventas.id_vendedor";
  17.      
  18.         foreach ($this->conexion->query($sql) as $reg)
  19.       {
  20.           $this->personas[]=$reg;
  21.       }
  22.       return $this->personas;
  23.             $this->conexion=null;
  24.   }   
  25.  
  26.   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  27. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////     
  28.     public function compruebaExisteFactura($id)
  29.     {
  30.      
  31.         self::setNames();
  32.  self::set_names();
  33.         $sql="select *
  34.         from
  35.         factura
  36.         where
  37.         id_venta=?";
  38.         $stmt=$this->dbh->prepare($sql);
  39.       if($stmt->execute( array($id) ) )
  40.             {
  41.                 while($row = $stmt->fetch())
  42.                 {
  43.                     $this->factura[]=$row;
  44.                 }
  45.                 return $this->factura;
  46.                 $this->conexion=null;
  47.             }
  48.     }
  49.       }



y asi lo llamo desde otro documento


delphi
  1. $trabajoinstan= new Trabajo();
  2. $listandoventas=$trabajoinstan->listaVentas();
  3.     for ($i = 0; $i < count($listandoventas); $i++)
  4. {
  5. $existefactura=$trabajoinstan->compruebaExisteFactura($listandoventas[$i]["ventasidventa"]);
  6. }


Todo esto esta en su tutorial 66 de php poo mejor explicado en el minuto 20

Espero me puedan ayudar.
Gracias
  • 0

#2 elcelador

elcelador

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 10 diciembre 2014 - 06:21

Hola. Aún estoy aprendiendo con los tutoriales del maestro Cesar Cancino, y no sé si será la respuesta correcta a tu duda, pero te comento la solución que se me ocurre.

Incorrecta??


delphi
  1. $existefactura=$trabajoinstan->compruebaExisteFactura($listandoventas[$i]["ventasidventa"]);



Correcta??


delphi
  1. $existefactura=$listandoventas->compruebaExisteFactura($listandoventas[$i]["ventasidventa"]);




  • 0

#3 shinneo

shinneo

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 11 diciembre 2014 - 03:25

No, desgraciadamente no es correcta,

Trabajoinstan almacena al principio la creacion de la clase Trabajo
$trabajoinstan= new Trabajo()
Y luego los siguientes son llamadas a metodos de esa clase
$listandoventas=$trabajoinstan->listaVentas();

listando ventas almacena un metodo de una clase
trabajoinstan almacena la clase con todos sus metodos

De todos modos, gracias.


Sigo abierto a sugerencias, quizás hay algun metodo mas sencillo ya sea por php o sql de hacer esto

Hay algo que me falla y no entiendo el porque.
Voy a poner dos capturas, de un print_r de la variable "Existefactura" que es mia y la variable "tiene de cesar cancino", en teoria deberia salir un resultado bastante similar, salvo por el numero de registros pero no es asi.

De Cesar cancino.
http://subefotos.com...d303549f88o.jpg
Mi captura
http://subefotos.com...e432713ed8o.jpg
Como veis, en el de cesar cancino solo hay un array lleno, que es el que tiene registros y tiene factura, los demas arrays estan vacios,

En mi caso hay un array en todos los registros, que de repetirse deberia ser igual en todos, pero no es asi, parece que es acumulativo y va acumulando registros, y francamente no se por que.
Espero que puedan ilustrarme un poco mas
  • 0

#4 porfi.dev

porfi.dev

    Advanced Member

  • Miembros
  • PipPipPip
  • 183 mensajes
  • LocationMy House @ México

Escrito 15 diciembre 2014 - 09:53

(h)

Va acumulando registros por que así lo mandaste a hacer con la linea

$this->factura[]=$row;


$this->factura[] ahora es un arreglo, lo que haces es guardar "cada resultado" de tu consulta en ese arreglo por eso parece que va acumulando datos, por que cada vez el arreglo se hace mas grande.

En resumen, tu consulta de factura arroja más de 1 resultado ;) verifica si es lo que quieres hacer, Saludos.
  • 0




IP.Board spam blocked by CleanTalk.