Erro undefined criando carrinho de compras

  • Autor Autor giulichajari
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
giulichajari

giulichajari

Gamma
Usuário com poucas negociações! Use sempre o saldo do 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:

Inserir CODE, HTML ou 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?
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
[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
 
Voltar
Topo