hola a todos. a ver. estoy armando una tienda virtual. utilizo base de datos y sesiones. y resulta lo siguiente:
en la pantalla principal muestro los productos que tengo en la base de datos, con sus precios, características, etc... y debajo de cada producto aparecen dos enlaces:
'añadir al carrito'
'ver mi carrito'
bien. el enlace añadir al carrito tiene la siguiente forma:
Código PHP:
echo ('<a href="adcarrito.php?new='.$row["codigo"].'">añadir al carrito</a>');
donde "codigo" es el código que tiene cada producto en la base de datos y que introduce el administrador para cada uno de los productos (ojo, no es un autonumérico, eh?).
el enlace ver mi carrito tiene la siguiente forma:
Código PHP:
echo ('<a href="adcarrito.php">ver mi carrito</a>');
Bien. el archivo "adcarrito.php" tiene el siguiente código:
Código PHP:
<?php
include ('modulos/bases.php');
// El carrito de compra necesita sesiones, así que iniciar una.
if($new)
{
//nuevo artículo seleccionado
if(!session_is_registered("cart"))
{
$cart = array();
session_register("cart");
$unidades = 0;
session_register("unidades");
$precio_total = "0.00";
session_register("precio_total");
}
if($cart[$new])
$cart[$new]++;
else
$cart[$new] = 1;
$precio_total = calculo_importe($cart);
$unidades = calculo_unidades($cart);
}
if($cart&&array_count_values($cart))
mostrar_carrito($cart);
else
{
echo "<p>No hay artículos en tu carro";
echo "<hr>";
}
?>
Bien. $new es la variable para indicar que es un nuevo artículo para el carrito . se usan una serie de funciones, pero la que muestra el carrito es la funcion mostrar_carrito($cart), que es esta:
Código PHP:
function mostrar_carrito($cart, $change = true, $images = 1)
{
// mostramos las unidades del crrito
// permitimos cambios (true -sí permitimos cambios or false -no permitimos cambios)
// permitimos incluir imágenes (1 - si, 0 - no)
global $unidades;
global $precio_total;
echo "<table border = 0 width = 100% cellspacing = 0>
<form action = adcarrito.php method = post>
<tr><th colspan = ". (1+$images) ." bgcolor=\"#cccccc\">Artículo</th>
<th bgcolor=\"#cccccc\">Precio</th><th bgcolor=\"#cccccc\">Unidades</th>
<th bgcolor=\"#cccccc\">Total</th></tr>";
//mostramos cada artículo en una fila
foreach ($cart as $codigo => $qty)
{
$producto = detalles_productos($codigo);
echo "<tr>";
if($images ==true)
{
echo "<td align = left>";
if (file_exists("$imagen"))
{
$size = GetImageSize("$imagen");
if($size[0]>0 && $size[1]>0)
{
echo ('<img src='.$row["imagen"].'"" border=0');
echo "width = ". $size[0]/3 ." height = " .$size[1]/3 . ">";
}
}
else
echo " ";
echo "</td>";
}
echo "<td align = left>";
echo "<a href = mostrarproductos?codigo=".$codigo.">".$producto["nombre"]."";
echo "</td><td align = center>$".number_format($producto["precio"], 2);
echo "</td><td align = center>";
// unidades si es que permitimos cambios
if ($change == true)
echo "<input type = text name = \"$codigo\" value = $qty size = 3>";
else
echo $qty;
echo "</td><td align = center>$".number_format($producto["precio"]*$qty,2)."</td></tr>\n";
}
// columna total
echo "<tr>
<th colspan = ". (2+$images) ." bgcolor=\"#cccccc\"> </td>
<th align = center bgcolor=\"#cccccc\">
$unidades
</th>
<th align = center bgcolor=\"#cccccc\">
\$".number_format($precio_total, 2).
"</th>
</tr>";
// mostramos salvar cambios
if($change == true)
{
echo "<tr>
<td colspan = ". (2+$images) ."> </td>
<td align = center>
<input type = hidden name = save value = true>
<input type = image src = \"images/save-changes.gif\"
border = 0 alt = \"Save Changes\">
</td>
<td> </td>
</tr>";
}
echo "</form></table>";
}
entonces, cuando estamos en la página principal y yo no he añadido ningún artículo al carrito, si pincho en ver carrito, me debería sacar "No hay artículos en tu carro";
Pero si hubiera alguno, debería mostrarme la función "mostrar_carrito".
bien. pues resulta que al ejecutar cualquiera de las dos acciones me da estos errores:
cuando hago "ver mi carrito":
Código PHP:
Notice: Undefined variable: new in adcarrito.php on line 6
Notice: Undefined variable: cart in adcarrito.php on line 38
No hay artículos en tu carro
cuando hago "añadir a mi carrito":
Código PHP:
Warning: session_register() [function.session-register]: Cannot send session cookie - headers already sent by (output started at funciones.php:309) in adcarrito.php on line 11
Warning: session_register() [function.session-register]: Cannot send session cache limiter - headers already sent (output started at funciones.php:309) in adcarrito.php on line 11
Notice: Undefined index: 123456DDD in adcarrito.php on line 17
Ambos errores en la línea 11 del archivo adcarrito.php corresponden a
session_register("cart");
$unidades = 0;
session_register("unidades");
$precio_total = "0.00";
session_register("precio_total");
cuál es el problema? por qué no va nada? necesito ayuda, por favor.