Foros del Web » Programando para Internet » PHP »

Ayuda con carrito de la compra

Estas en el tema de Ayuda con carrito de la compra en el foro de PHP en Foros del Web. Usé el código que se peude encontrar en http://www.desarrolloweb.com/articul....php?manual=56 sobre el carrito de la compra en PHP. Creo 4 archivos llamados lib_carrito.php, ver_carrito.php, mete_producto.php y ...
  #1 (permalink)  
Antiguo 12/03/2005, 18:45
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
Exclamación Ayuda con carrito de la compra

Usé el código que se peude encontrar en http://www.desarrolloweb.com/articul....php?manual=56 sobre el carrito de la compra en PHP. Creo 4 archivos llamados lib_carrito.php, ver_carrito.php, mete_producto.php y eliminar_producto.php igual que se indica en el tutorial. Meto el mismo código del tutorial en los archivos php correspondientes. En la página donde tengo los productos meto al pircipio del código:
<?
include("lib_carrito.php");
}
?>
y en el enlace meto:
<a href="mete_producto.php?id=002&nombre=asics+cyberf lash&precio=167">añadir al carrito</a>
Sin embargo, en vez de cargarse la página mete_producto.php, me dice:
Fatal error: Call to a member function on a non-object in /home/www/monroy.freeownhost.com/pruebaportal/mete_producto.php on line 3

la linea 3 del codigo del archivo es:
$_SESSION["ocarrito"]->introduce_producto($_GET["id"], $_GET["nombre"], $_GET["precio"]);

No sé cuál es el fallo. El servidor admite PHP 4.3.1 y lo he probado también en miarroba y tampoco funciona, da el mismo error. En el código observo que hay una especie de flecha "->" entre ["ocarrito"] e introduce_producto, y en el editor html que tengo aparece hasta esta flechita en gris (color que pone el editor al codigo de los scripts) y despues de esta flecha aparece en negro ¿podría ser que cerrara el script de PHP? ¿cómo arreglo este problema?contestenme lo antes que puedan, muchas gracias.
  #2 (permalink)  
Antiguo 12/03/2005, 19:59
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
ESTOY PEGADO... no se me ocurre hacer nada... todo lo que hago no funciona... sigue apareciendo el mismo error... Por favor ayudaaaaaa
  #3 (permalink)  
Antiguo 12/03/2005, 22:36
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 20 años, 7 meses
Puntos: 0
quizas el error no este especificamente en la misma linea 3, o puede que no este obtenido uno de los valores que le asignas via $_GET
  #4 (permalink)  
Antiguo 13/03/2005, 04:57
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
tengo un archivo llamado lib_carrito.php donde almacena toda la "configuracion" del carrito:
<html>
<head>
<title>carrito</title>
</head>
<body>
<?
class carrito {
//atributos de la clase
var $num_productos;
var $array_id_prod;
var $array_nombre_prod;
var $array_precio_prod;
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
//inicializa el numero de productos a 0
function carrito () {
$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_p rod){
$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++;
}
//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> </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> </td></tr>";
//total más IVA
echo "<tr><td><b>IVA (16%):</b></td><td> <b>" . $suma * 1.16 . "</b></td><td> </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;
}
}
?>

</body>
</html>

aquí termina el lib_carrito.php. tengo el index.php (princpal) y el lib_carrito.php metido en n directorio llamado comercios, y en de los aptrocinadores en otro directorio con el nombre del patrocinador, es decir: comercios/running/runningsport.php; comercios/lib_carrito.php; index.php (sin ningun directorio)

bien, al cargarse la pagina pricipal (index.php) se comienza cargandose así:
<?
include("comercios/lib_carrito.php");
if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
}
?>

en esta pagina no se hace ninguna referencia directa al carrito. se hace a uno de los patrocinadores... runningsport.php;

runningsport.php tambien comienza así:
<?
include("../lib_carrito.php");
if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
}
?>
<html>
.....

<body>
<a href="../mete_producto.php?id=2&nombre=cyberflash&precio=16 7">Añadir al carrito</a>
</body>

esta sería al estructura principal de los enlaces, van dirigidos a mete_producto.php (en mismo directorio que lib_carrito.php). Bien, pues aquí está el fallo... La página mete_producto.php no se carga, sino en vez de eso sale este error:

Fatal error: Call to a member function on a non-object in /home/www/monroy.freeownhost.com/pruebaportal/comercios/mete_producto.php on line 3

el codigo de esta pagina es el siguiente:
<?
include("lib_carrito.php");
$_SESSION["ocarrito"]->introduce_producto($_GET["id"], $_GET["nombre"], $_GET["precio"]);
?>
<html>
...
<body>
<p>Producto añadido al carrito</p>
<p><a href="../index.php">- Volver</a></p>
<p><a href="ver_carrito.php">- Ver carrito</a></p>
</body>
....

segun el error supongo que ni si quiera consigue llamar a la función... He leído en los comentarios de este tutorial que a la gente le funcionaba, así que supongo que será un fallo mio. Por favor, diganme dond esta, porque no lo veo por ninguna parte...
  #5 (permalink)  
Antiguo 15/03/2005, 07:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No he leido en profundidad dicho artículo .. pero la forma de trabajar con el objeto y las sesiones no me agrada mucho .. Yo usaría la siguiente construcción:

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

// y luego uso $carrito->metodos_que_correspondan() ...
$carrito->introduce_producto($_GET["id"], $_GET["nombre"], $_GET["precio"]);


// Para dejar todo cambio en la sesión .. si no lo hace el objeto como así parecer .. tendrás que hacer:
$_SESSION['ocarrito']=$carrito;
// y redireccionar a donde corresponda .. por ejemplo a otro script que haga el listado de lo que tengas en el carrito:
header ("Location: ver_carrito.php");
exit;
?>
Es decir .. si la sesión existe .. la sigo usando (ya está instanaciada y tiene sus variables) .. si no existe . .la defino y la instancio (el new es la "instancia").

El uso de session_start() es insprescindible para acceder a tus variables de sesión .. (no sé si en include("../lib_carrito.php"); se define .. si es así puedes omitirlo ahí ..)

Por cierto .. todo ese HTML de "lib_carrito.php" sobra .. no sé por qué lo usas ahí .. eso es un objeto que tiene su formato y sus métodos .. por otro lado es donde lo usas.

Un saludo,

Última edición por Cluster; 15/03/2005 a las 08:04
  #6 (permalink)  
Antiguo 15/03/2005, 19:42
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
respecto al codigo html no se como lo he puesto ahi, no lo tengo puesto en el archivo, supongo que se me irria la cabeza al escribir esto... Muchas gracias por la ayuda...
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 03:36.