Foros del Web » Programando para Internet » PHP »

Posible Error en sesión?? Ayuda please

Estas en el tema de Posible Error en sesión?? Ayuda please en el foro de PHP en Foros del Web. Hola amigos de Foros del Web!! Estoy algo enquistado con una clase muy sencilla, un carito de la compra que los amigos de www.desarrolloweb.com ofrecieron ...
  #1 (permalink)  
Antiguo 29/05/2010, 07:55
 
Fecha de Ingreso: febrero-2010
Mensajes: 36
Antigüedad: 14 años, 9 meses
Puntos: 0
Posible Error en sesión?? Ayuda please

Hola amigos de Foros del Web!!

Estoy algo enquistado con una clase muy sencilla, un carito de la compra que los amigos de www.desarrolloweb.com ofrecieron hace un tiempo.

La clase es la siguiente:

Código PHP:
<?
class carrito {
    
//atributos de la clase
       
public $num_productos;
       public 
$array_id_prod;
       public 
$array_nombre_prod;
       public 
$array_precio_prod;

    
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
    //inicializa el numero de productos a 0
    
function __constructor () {
           
$this->num_productos=0;
    }
    
    
//Introduce un producto en el carrito. Recibe los datos del producto
    //Se encarga de introducir los datos en los arrays del objeto carrito
    //luego aumenta en 1 el numero de productos
    
function introduce_producto($id_prod,$nombre_prod,$precio_prod){
        
$this->array_id_prod[$this->num_productos]=$id_prod;
        
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
        
$this->array_precio_prod[$this->num_productos]=$precio_prod;
        
$this->num_productos++;
    }
    
    function 
num_items(){
    echo 
count ($this->array_id_prod);

    }

    
//Muestra el contenido del carrito de la compra
    //ademas pone los enlaces para eliminar un producto del carrito
    
function imprime_carrito(){
        
$suma 0;
        echo 
'<table border=1 cellpadding="3">
              <tr>
                <td><b>Nombre producto</b></td>
                <td><b>Precio</b></td>
                <td>&nbsp;</td>
              </tr>'
;
        for (
$i=0;$i<$this->num_productos;$i++){
            if(
$this->array_id_prod[$i]!=0){
                echo 
'<tr>';
                echo 
"<td>" $this->array_nombre_prod[$i] . "</td>";
                echo 
"<td>" $this->array_precio_prod[$i] . "</td>";
                echo 
"<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
                echo 
'</tr>';
                
$suma += $this->array_precio_prod[$i];
            }
        }
        
//muestro el total
        
echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>";
        
//total más IVA
        
echo "<tr><td><b>IVA (16%):</b></td><td> <b>" $suma 1.16 "</b></td><td>&nbsp;</td></tr>";
        echo 
"</table>";
    }
    
    
//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
    //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
    
function elimina_producto($linea){
        
$this->array_id_prod[$linea]=0;
    }

//inicio la sesión

 
session_start();
 
//si no esta creado el objeto carrito en la sesion, lo creo

 
if (!isset($_SESSION["ocarrito"])){
     
$_SESSION["ocarrito"] = new carrito();
 }

?>
Así de sencilla. Todo el carrito se rige por sesiones, se supone que en cada página hay que empezar lo típico, con session_start(); y que la sesión: $_SESSION["ocarrito"] se enlaza a la creación de un objeto: $_SESSION["ocarrito"] = new carrito();

El caso es que funciona bien salvo para el primer "pedido". La primera vez que "compro" algo no funciona, la segunda, tercera etc si. Por eso creo que es un problema con las sesiones, pq en el código de la clase no encontré ningún error.

La página para ver el carrito sería algo así:

Código PHP:
<?
include("clases/lib_carrito.php");
session_start();
?>

<html>
<head>
    <title>Introduce Producto</title>
</head>

<body>

<?
$_SESSION
["ocarrito"]->imprime_carrito();
$_SESSION["ocarrito"]->num_items();
?>
<br>
<br>
<a href="index.php">Volver</a>


</body>
</html>
y la página para añadir productos sería así:

Código PHP:
<?
include("clases/lib_carrito.php");
session_start();
if (!isset(
$_SESSION["ocarrito"])){
    
$_SESSION["ocarrito"] = new carrito();
 }

$_SESSION["ocarrito"]->introduce_producto($_GET["id"], $_GET["nombre"], $_GET["precio"]);
?>

<html>
<head>
    <title>Introduce Producto</title>
</head>

<body>

Producto introducido.
<br />
<br />
<a href="index.php">- Volver</a>
<br />
<br />
<a href="ver_carrito.php">- Ver carrito</a>

</body>
</html>
los productos, enlaces son de la forma:

Código HTML:
<a href="mete_producto.php?id=12&nombre=silla+modelo+jupiter&precio=80">Silla modelo jupiter 80 euros</a>

Espero me puedan aydar, porque la clase aunque muy sencilla me sería de gran ayuda.

¿Porque creen que la primera de las compras no funciona y las siguientes si?

Muchas gracias!!!

Última edición por Fennesz; 29/05/2010 a las 08:02
  #2 (permalink)  
Antiguo 30/05/2010, 02:24
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Posible Error en sesión?? Ayuda please

Hola
ehm, con cual versión de php dijiste que trabajabas???
y ese código de cual versión sera???

intenta cambiando todo esto <? por <?php
saludos
  #3 (permalink)  
Antiguo 30/05/2010, 09:27
 
Fecha de Ingreso: febrero-2010
Mensajes: 36
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Posible Error en sesión?? Ayuda please

Pues es php5, aunque la clase está construida en php4
  #4 (permalink)  
Antiguo 30/05/2010, 17:20
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Posible Error en sesión?? Ayuda please

Y ya cambiaste lo que te sugeri y probaste?

Etiquetas: posible, sesión
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 06:45.