Error undefined creando carrito de compras

  • Autor Autor giulichajari
  • Fecha de inicio Fecha de inicio
giulichajari

giulichajari

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Obtengo este error haciendo un var_dump de carrito, una variable que contiene detalles de compras(cantidad, precio nombre,etc)
(3) […]​0: Object { __PHP_Incomplete_Class_Name: "detalleTicket" }​1: Object { __PHP_Incomplete_Class_Name: "detalleTicket" }​2: Object { __PHP_Incomplete_Class_Name: "detalleTicket" }​length: 3​<prototype>: Array [] ticket.js:22:11

El codigo de php es:

PHP:
<?php
session_start();

require ("../../models/claseTicket.php");


    if (isset($_POST['accion'])){
   if ($_POST['accion']=="listar"){

    if(isset($_SESSION['carrito'])){
             $carrito = $_SESSION['carrito'];
               
             echo json_encode($carrito);
                     
        }else{
         
      $carrito = array();
      echo json_encode($carrito);
        }
        
    
    
   }else if ($_POST['accion']=="agregar"){
        $id = $_POST['id'];
        $pu = $_POST['precio'];
        $cant = $_POST['cantidad'];
        $nom = $_POST['nombre'];
        $detalle = new detalleTicket($id,$pu,$cant,$nom);
    
        
 
        
        if(isset($_SESSION['carrito'])){
            $carrito = $_SESSION['carrito'];
        } else {
            $carrito = array();
        }
        
                array_push($carrito, $detalle);
      var_dump($carrito);
        $_SESSION['carrito'] = $carrito;
        
    }
    
  
   
}   

?>
Donde si se va a agregar es un codigo, y por AJAX al cargar la pantallade ticket llamo a listar los detalles. Aqui elk ajax:

Insertar CODE, HTML o PHP:
var content;
var id;
var nombre;
var marca;
var precio;
$(document).ready(function() {
listar();
var nombreBusqueda;

 $("#nombre").keyup(function() {
            
        nombreBusqueda=$("#nombre").val();
        filtrar(nombreBusqueda);
    }
);
  var id;
  var nombre;
  var marca;
  var producto;
    var precio;
// Detectar clic en una fila
$("#resultado tbody").click(function(event) {
  $("tr").click(function(event) {
 id = $(this).find("td:first-child").text();
 nombre = $(this).children('td').eq(1).text();
 marca = $(this).children('td').eq(2).text();
 precio = $(this).children('td').eq(4).text();
 producto = nombre + "  " +  marca;
$("#nombreselec").val(producto);

});
 
});
$("#Agregar").click(function(event){
  var cantidad=$("#CANTIDAD").val(); 
  if (cantidad!==""){
    var accion = "agregar";
    $.ajax({
	  
            type: "POST",
            url: "../gestionweb/includes/php/procesoDetalle.php",
            data: {"accion":accion,"id":id,"cantidad":cantidad,"nombre":nombre,"marca":marca,"precio":precio}, 
            
  dataType:'html',
            error: function(){
                alert("error petición ajax");
            },
            success: function(data){
               console.log(data);
                      
            }
        }).fail( function( jqXHR, textStatus, errorThrown ) {

  if (jqXHR.status === 0) {

    alert('Not connect: Verify Network.');

  } else if (jqXHR.status == 404) {

    alert('Requested page not found [404]');

  } else if (jqXHR.status == 500) {

    alert('Internal Server Error [500].');

  } else if (textStatus === 'parsererror') {

    alert('Requested JSON parse failed.');

  } else if (textStatus === 'timeout') {

    alert('Time out error.');

  } else if (textStatus === 'abort') {

    alert('Ajax request aborted.');

  } else {

    alert('Uncaught Error: ' + jqXHR.responseText);

  }

});

    
  } else{
    alert("ingrese cantidad");
  }
});

});


function filtrar(dato){
        var filtrado=[];
        var existe;
    for(var i = 0; i < content.length; i++) {
    if (content[i].nombre.toLowerCase().indexOf(dato.toLowerCase())!=-1) {
        filtrado.push(content[i]);
        
       
    }
}
     if (filtrado.length>0) {
        
      $("#resultado tbody").empty();
        
            for (var i = 0; i < filtrado.length; i++) {
          
                var newRow =
                    "<tr>" +
                    "<td>" + filtrado[i].idproducto + "</td>" +
                    "<td>" + filtrado[i].nombre + "</td>" +
                    "<td>" + filtrado[i].marca + "</td>" +
                    "<td>" + filtrado[i].categoria + "</td>" +
                    "<td>" + filtrado[i].precio + "</td>" +
                    "<td><input type='radio' id='"+filtrado[i].idproducto+"' name='seleccion'/></td>"+
                    "</tr>";
                  
                $(newRow).appendTo("#resultado tbody");                 
       }
 
	
  
}};
function listar(){

    tipofiltro="todos";
	 $.ajax({
	  
            type: "POST",
            url: "../gestionweb/includes/php/filtroP.php",
            data: { "tf": tipofiltro}, 
            dataType: "json",
            error: function(){
                alert("error petición ajax");
            },
            success: function(data){
           content=data;
               for (var i = 0; i < data.length; i++) {
          
                var newRow =
                    "<tr>" +
                    "<td>" + data[i].idproducto + "</td>" +
                    "<td>" + data[i].nombre + "</td>" +
                    "<td>" + data[i].marca + "</td>" +
                    "<td>" + data[i].categoria + "</td>" +
                    "<td>" + data[i].precio + "</td>" +
                    "<td><input type='radio' id='"+data[i].idproducto+"' name='seleccion'/></td>"+
                    "</tr>";
                $(newRow).appendTo("#resultado tbody");                 
       
    
               
            }
        
  

        }  
});
};

Que puede ser?
 
[MENTION=157498]giulichajari[/MENTION]

Creo que el error esta en claseTicket.php
Algo de falta al formar la clase.
 
[MENTION=157498]giulichajari[/MENTION]

Creo que el error esta en claseTicket.php
Algo de falta al formar la clase.

Te muestro el archivo:

PHP:
<?php
require_once ("/../includes/claseConexion.php");
require_once ("claseProducto.php");

class detalleTicket{
    
    private $idp;
    private $precio;
    private $cantidad;
    private $nombre;
    private $subtotal;
    
   
   public function __construct($id,$pu,$cant,$nom){
    
    
    $this->idp=$id;
    $this->precio=$pu;
    $this->cantidad=$cant;
    $this->nombre=$nom;
    $this->subtotal= ($this->cantidad * $this->precio);
   
   }
   public function setSubtoal($sub){
    
    $this->subtotal=$sub;
    
   }
   public function actualizaCantidad($nueva){
    
    $this->cantidad=$this->cantidad + $nueva;
    $sub= $this->cantidad * $this->precio;
     $this->setSubtoal($sub);    
    
   }
}
class Ticket{
  private $id;
  private $detalle = array();
  private $fecha;
  private $hora;
  private $total;
  private $stm;
  private $vuelto; 
  
  public function __construct(){
    

    
  }
  public function agregaDetalle(detalleTicket $d){
    
    $this->detalle[] = $d;
  } 
  public function setTotal($val){
    
    $this->total=$val;
    
  }
public function listarArt(){
    
  return $this->detalle;
}
public function registrar(){
    //me conecto a la bd
    $conexion = Conexion::singleton_conexion(); 
 try{

    $conexion->beginTransaction();
    $queryid="select comprobante from identificadores;"; 
     $array=$conexion->query($queryid);
   foreach($array as $a){
    $id = $a['comprobante'];
      }
 
  $qnuevoid="UPDATE identificadores SET comprobante=".++$id.";";
  $conexion->query($qnuevoid);
  
        $queryticket="insert into despensa.ticket (idticket, fecha, total,vuelto) values (".$id.",'".$this->fecha."',56,88);";
		$conexion->query($queryticket);

   $conexion->commit();
   
 }catch(Exception $e){
   $conexion->rollBack();
     echo "Fallo: " . $e->getMessage(); 
 }
 

    
}
}


?>

Igual nunca llamo a ticket, solo a detalleTicket, pero el constructor lo invoco como corresponde, o podria usar el vacio?
 
No veo ningún error.
Tu servidor corre con php 7.x?
 
No veo ningún error.
Tu servidor corre con php 7.x?

Tengo XAMPP Control Panel v 3.2.2, a lo mejor esta desactualizado?

- - - Actualizado - - -

incomplete.webp

Ese seria el problema
 
la versión PHP la ves en el Cpanel.
Multiphp selector se llama creo

ya desinstale xampp, baje la ultima version e instale y sigue el problema

- - - Actualizado - - -

la versión PHP la ves en el Cpanel.
Multiphp selector se llama creo

Probe otra solucion que encontre y es poner el incio de sesion despues del include:

PHP:
include_once ($_SERVER['DOCUMENT_ROOT'].'/gestionweb/models/claseTicket.php');
session_start();

Y no da mas ese error pero llega vacio el objeto.
 
Si te da vacio, en el caso de que no puedas darte cuenta donde esta el error, anda probando con "echo"y alguna palabra o variable por partes del código. Anda probando cuando te muestra ese echo, y en que parte lo deja de mostrar. Ahi te vas a dar cuenta, o vas a poder descartar posibilidades.
No es problema de servidor, ni de local, ni xampp. Es error de código.

Saludos
 
Atrás
Arriba