Os adelanto que es una "adaptación" de una web de tienda online que anda por la red, que funciona teóricamente, pero que a la mayoría de las personas que les falla, lo hace en el mismo punto: modificando el carrito de la compra.
Supuestamente se puede modificar la cantidad ($qty) de cada producto, pero cuando lo hago, me aparece el siguiente error:
Warning: array_count_values() [function.array-count-values]: Can only count STRING and INTEGER values! in “ruta” on line 254
Esa linea, es esta: if($cart&&array_count_values($cart))
Y los valores del Array $cart, son, por poner un ejemplo (2010010 => 1 ; 2011012 =>1), donde la Key es la que identifica al producto, y el ´value' el numero de productos elegidos ($qty).
SI HE AÑADIDO TRES ELEMENTOS AL CARRO, Y PULSO EL BOTON DE CAMBIOS, ME SALE TRES VECES EL ERROR MENCIONADO...... Y si añado luego otro elemento al carro, me muestra solo un error al principio, y al mostrar el carro, me enseña el elemento añadido, y los que tenía antes del error, pero estos últimos, sin valor en el cuadro de texto $qty.
He hecho muchas pruebas, pero no sé que hacer más. También es cierto que no soy un experto de PHP, pero por eso os consulto...
LA MODIFICACIÓN QUE DEBE HACER EN UN ELEMENTO DEL ARRAY, la hace a todos..... Si modifico valores para hacer pruebas, me modifica TODOS los productos.......
Espero haberme explicado. Aquí os pongo primero el script que creo que genera el problema....
Código PHP:
if($save)
{
foreach ($cart as $isbn => $qty)
{
if($$isbn=="0")
{unset($cart[$isbn]);
}
else
{$cart[$isbn] == $$isbn;}
}
$total_price = calculate_price($cart);
$items = calculate_items($cart);
}
AHORA OS PONGO TODO EL CONJUNTO, QUE INCLUYE TAMBIÉN EL ANTERIOR SCRIPT
Código PHP:
<?
include ('book_sc_fns.php');
// El carrito de compra necesita sesiones, así que empezar una
session_start();
// recuperar categorías de la base de datos
$cat_array = get_categories(); //recupera info de la DB por una function de otro archivo
if($new)
{
//nuevo artículo seleccionado
if(!session_is_registered("cart"))
{
$cart = array();
session_register("cart");
$items = 0;
session_register("items");
$total_price = "0.00";
session_register("total_price");
}
if($cart[$new])
$cart[$new]++;
else
$cart[$new] = 1;
$total_price = calculate_price($cart);
$items = calculate_items($cart);
}
if($save)
{
foreach ($cart as $isbn => $qty)
{
if($$isbn=="0")
{unset($cart[$isbn]);
}
else
{$cart[$isbn] == $$isbn;}
}
$total_price = calculate_price($cart); //simplemente se da nuevamente valor a estas variables tras los cambios
$items = calculate_items($cart);
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tu bolso de la compra</title>
<body>
<div id="mainContent">
<!-- ventana principal -->
<?
if($cart&&array_count_values($cart))
{
echo "<table><tr><td> </td></tr>";
echo "<tr><td colspan = 5 align = center class=carro4><U>Estas han sido tus elecciones</b></td></tr></table>";
display_cart($cart); //abajo hay otro script con esta funcion
}
else
{
echo "<tr> </tr>";
echo "<p>No hay artículos en tu bolso</p>";
echo "<tr> </tr>";
}
$target = "index.php";
// si hemos añadido un artículo al carro, continuar comprando en esa categoría
if($new)
{
$details = get_book_details($new);
if($details["catid"])
$target = "aqui un enlace”;
}
display_button($target, "sigomirando", "Seguir mirando ropa");
$path = $_SERVER['PHP_SELF'];
$path = str_replace("show_cart.php", "", $path);
display_button("aquí hay un enlace”)."login.php", "hacerpedido", "Comenzar tu pedido");
echo "<p> </p>";
echo "<p> </p>";
}
?>
</div><!-- end #mainContent -->
<br class="clearfloat" />
<div id="footer">
<?
pie_pagina()
?>
<!-- end #footer --></div>
<!-- end #container --></div>
</body>
</html>
Código PHP:
function display_cart($cart, $change = true, $images = 1)
{
// display items in shopping cart
// optionally allow changes (true or false)
// optionally include images (1 - yes, 0 - no)
global $items;
global $total_price;
echo "<table border = 0 width = 95% cellpadding=3 cellspacing = 0>
<form action = “Va a show_cart.php” method = post>
<tr><th colspan = ". (1+$images) ." bgcolor=\"#3333333\" class=carro1>Producto</th>
<th bgcolor=\"#333333\" class=carro1>Precio</th><th bgcolor=\"#333333\" class=carro1>Cantidad</th>
<th bgcolor=\"#333333\" class=carro1>Total</th></tr>";
//display each item as a table row
foreach ($cart as $isbn => $qty)
{
$book = get_book_details($isbn);
echo "<tr>";
if($images ==true)
{
echo "<td align = left>";
if (file_exists("ruta"))
{
$size = GetImageSize("ruta");
if($size[0]>0 && $size[1]>0)
{
echo "<img src=ruta" border=0 ";
echo "width = ". $size[0]/6 ." height = " .$size[1]/6 . ">";
}
}
else
echo " ";
echo "</td>";
}
echo "<th align = left class=carro2>";
echo "<= ruta>".$book["producto"]." ".$book["color"]." ".$book["modelo"]."</a>";
echo "</td><th align = center class=carro2>".number_format($book['precio'],2)." eu";
echo "</td><th align = center class=carro2>";
// si se permiten cambios, van en cajas de texto
if ($change == true)
{
echo "<input type = 'text' name = "$isbn\" value = '$qty' size=2>";
}
else
{
echo $qty;
}
echo "</td><th align = center class=carro2>".number_format($book["precio"]*$qty,2)." eu</td></tr>\n";
}
// display total row
echo "<tr>
<th colspan = ". (2+$images) ." bgcolor=\"#dddddd\" class=carro2> </td>
<th align = center bgcolor=\"#dddddd\" class=carro2>$items</th>
<th align = center bgcolor=\"#dddddd\" class=carro2>".number_format($total_price, 2)." eu</th>
</tr>";
// mostrar boton de guardar 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 = ruta
border = 0 alt = \"Click aqui para modificar el contenido de tu bolso\">
<tr> </tr>
</td>
<td> </td>
</tr>
</tr>";
}
echo "</form></table>";
}
Muchas Gracias a todos por vuestro tiempo.