Foros del Web » Programando para Internet » PHP »

¿Algún gurú de PHP que de con la solución?

Estas en el tema de ¿Algún gurú de PHP que de con la solución? en el foro de PHP en Foros del Web. Bueno, voy a exponer aquí un "problema" con un script php, que tras haber rebuscado por la red, HE VISTO QUE MUCHAS PERSONAS LO TIENEN, ...
  #1 (permalink)  
Antiguo 15/03/2009, 17:20
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Bueno, voy a exponer aquí un "problema" con un script php, que tras haber rebuscado por la red, HE VISTO QUE MUCHAS PERSONAS LO TIENEN, pero a nadie le han sabido dar una respuesta con el origen del problema.

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);
    
  } 
POR DAR MAS DATOS, Si en el segundo $$isbn, pongo 25, al pulsar en cambios (sin modificar nada en las casillas), me pone el 25 en TODAS las casillas donde va la cantidad de productos comprados (donde teóricamente va $qty).


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>&nbsp;</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>&nbsp;</tr>";    
        echo 
"<p>No hay artículos en tu bolso</p>";
        echo 
"<tr>&nbsp;</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>&nbsp;</p>";
         echo 
"<p>&nbsp;</p>";
        }

?>    
    
  </div><!-- end #mainContent -->
  
    <br class="clearfloat" />
  
  <div id="footer">
  
   <?
   
  pie_pagina
()
  
  
?>
  <!-- end #footer --></div>
<!-- end #container --></div>
</body>
</html>
Aqui esta display_cart:


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]>&& $size[1]>0)
         {
           echo 
"<img src=ruta" border=";
           echo "
width ". $size[0]/6 ." height " .$size[1]/6 . ">";
         }
      }
      else
         echo "
&nbsp;";
      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>&nbsp;</td>
          <th align = center bgcolor=\"#dddddd\" class=carro2>$items</th>
          <th align = center bgcolor=\"#dddddd\" class=carro2>"
.number_format($total_price2)." eu</th>
        </tr>"
;
  
// mostrar boton de guardar cambios
  
if($change == true)
  {
    echo 
"<tr>
             <td colspan = "
. (2+$images) .">&nbsp;</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>&nbsp;</tr>
            </td>
            <td>&nbsp;</td>
            </tr>
            </tr>"
;
        }
  
  echo 
"</form></table>";
    

Bueno, si alguien puede ayudarme, LO AGRADECERÍA YO, y creo que bastante gente en toda la RED, que no consigue solucionar el problema, tambien.

Muchas Gracias a todos por vuestro tiempo.

Última edición por jam1138; 18/03/2009 a las 14:21
  #2 (permalink)  
Antiguo 15/03/2009, 18:05
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

Voy haciendo pruebas, y os pongo más "pistas" de lo que ocurre....

ME PARECE QUE EL VALOR de "$QTY" que debe recoger en la caja de texto cuando change=true, no lo recoge. Supuestamente es la variable $save, pero me da que no recoge ningún valor....

Otra cosa: SI QUITO UN '$' EN el segundo $$ISBN, NO DA EL ERROR DEL ARRAY.....

Gracias

Última edición por parriman; 16/03/2009 a las 19:49
  #3 (permalink)  
Antiguo 15/03/2009, 18:20
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

Supongo que he puesto un "tocho" de consulta y requiere mucho tiempo mirarlo bien, pero si alguien está por la labor.......

Por si hace falta esta parte...

Código PHP:
function calculate_items($cart)
{
  
// suma total de los artículos en el carrito de compras
  
$items 0;
  if(
is_array($cart))
  {
    foreach(
$cart as $isbn => $qty)
    {
      
$items += $qty;
    }
  }
  return 
$items;

Muchas gracias.

Última edición por parriman; 16/03/2009 a las 19:54
  #4 (permalink)  
Antiguo 17/03/2009, 09:24
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

Más pistas.......

Si lo pongo así, al darle al boton de "guardar cambios" me pone un "1" en la casilla...... Y si pongo dejo sin valor el primer $$isbn, me borra el artículo correctamente.

RECTIFICO LO DE $SAVE: Save sí que recoge valor, por que realiza el loop (if($save)), la que NO COGE EL VALOR ES $$isbn.

Todo apunta a un fallo en el formulario, pero por más que rebusco y pruebo, no lo encuentro !!!!!!!!

Código PHP:
if($save)
  {
      
       foreach (
$cart as $isbn => $qty)
    {
        if($
$isbn=="0")
        {unset(
$cart[$isbn]);
        }
       else
        { 
$cart[$isbn]=1;}
    }
    
$total_price calculate_price($cart);
    
$items calculate_items($cart);
  } 
Es desesperante las horas que llevo sin dar con el resultado..... y seguro que es una chorrada.....

A ver si al solucionar esto, funciona bien del todo, ya que el cambio que se hace, ahora lo aplica a TODO los productos del carro......... Pienso que cuando isbn tenga valor, irá todo bien.......

¿NADIE SABE QUE PUEDE SER?

Gracias a todos, y en especial, a los que habéis llegado hasta esta línea.........

Saludos

Última edición por parriman; 17/03/2009 a las 09:52
  #5 (permalink)  
Antiguo 17/03/2009, 11:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ¿Algún gurú de PHP que de con la solución?

primero $isbn es el índice de un array, eso es obvio...

luego para que $$isbn te devuelva un valor... debería existir la variable relacionada...

osea, si $isbn = 'uno'; debe existir un variable, desde antes que se llame: $uno

no seria mejor...

Código PHP:
if($qty==0// si no hay cantidad
        
{unset($cart[$isbn]); // borramos el item ¿?

si no dime, que carajos es $isbn ¿? ¿donde "crees" que lo asignas, yo no lo veo!!! ¿?

eso es simple, solo analiza bien lo que haces, por favor...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 17/03/2009, 11:39
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: ¿Algún gurú de PHP que de con la solución?

¿Sabes cual es el problema? Que es un codigo antiguo, desfasado. Requiere register_globals a on, y usa session_register para gestionar la sesion. Te recomiendo que busques un codigo mas moderno.
  #7 (permalink)  
Antiguo 17/03/2009, 15:45
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

Pateketrueke... sale (creo) de aquí:

Código PHP:
 if ($change == true
     { 
      echo 
"<input type = 'text' name = "$isbn" value = '$qty' size=2>"
      } 
Se supone que aunque se muestre $qty en el form, para saber la cantidad de productos elegidos de cada tipo, si se modifica el valor (cambiamos la cantidad, o sea, el contenido del carrito), ese número que ponemos en la casilla, SE SUPONE que se asigna a "$isbn\"...... Al menos es de lo que estoy convencido..... y miro muchos form, y creo que está bien hecho......

Lo que tu dices de que lo lógico que sería "if $qty=0", tienes razón, a mí también me lo parece, pero como me he basado en una web de un curso de php, la cual funcionaba, no quiero cambiar por eso..... Sobre todo, por que el cambio me lo aplica A TODOS LOS PRODUCTOS DEL CARRO, y no solo al que modifico en el form.... por eso insisto en sacarlo con $isbn, por si el misterio de que afecte a todos o a uno solo, está ahí (utiliza $isbn en lugar de otro nombre cualquiera, cuando $isbn es tambien el id de la tabla de productos. Que sea el mismo nombre PIENSO que debe estar relacionado con el correcto funcionamiento del script).

¿que opinas?

DARKJ, es un script de hace unos tres años..... me gustaría usar uno más moderno, pero llevo dos meses "a piñón" con el PHP, y he ido aprendiendo con este código. Ahora, DEBO hacer que funcione así, y con más tranquilidad, ir acoplándome a cosas más actuales, e ir actualizando el código, pero empecé con este, y conforme vas aprendiendo, te das cuenta de muchas cosas...... y no tenía ya marcha atrás.

Lo de register_globals on, lo he mirado, y he cambiado los http_post_vars y compañía, por los $_GET, $_SERVER, etc...... por lo que dices, hay algo que me he dejado sin actualizar....... Encuentro info sobre este tema, pero no he visto ninguna que sea concreta, es decir, que diga: "Esto" debe cambiarse por "ESTO", o similares. Supongo que me entiendes....

Y lo de sesion_register, no lo sabía, lo miraré también a ver a qué hace referencia. Mi intención es hacer que funcione con globals OFF, pero hasta que no empiece a darme fallos concretos, no sabré realmente donde tengo que modificar..... Es lo que tiene ser novato en el tema.....

El script, y la web entera, se hizo en PHP 4.x , y ahora trabajo con PHP 5, lo que me da algún que otro quebradero de cabeza......

Gracias a los dos por las respuestas . Ya me habeis dado faena para un buen rato

Saludos

Última edición por parriman; 17/03/2009 a las 15:56 Razón: Ampliar datos en la respuesta
  #8 (permalink)  
Antiguo 17/03/2009, 16:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ¿Algún gurú de PHP que de con la solución?

ese es otro error, el usar como name un ID numérico... ya que no es legal, y mucho menos útil....

lo mejor, es que revises bien como hacerlo de nuevo....

Código PHP:
<input name="foo[<?php echo $isbn?>]"/>
así, ya tienes un arreglo en $_POST['foo'] que es mas sencillo de tratar que $$isbn (ya que por register_globals, inseguro, inadecuado y obsoleto es tu código)

Código PHP:
if (empty($_POST['foo'][$isbn])) // ... 
en resumen, si usas un name numérico esto al usar register_globals NO puede crearse una variable numérica en el contexto de PHP ... por lo tanto es un error

por eso, te recomiende uses el ID como índice de un arreglo, que es perfectamente correcto!

osea:

<input name="21"/>

NO te va a entregar una variable $21 ... ya que PHP es estricto en este aspecto, de que no puedes crear variable que no comiencen por un carácter [a-z_] al inicio de la cadena....

eso ya lo deberías saber, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 18/03/2009, 13:44
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

Hola pateketrueke.

Ante todo, gracias por tu interés, aunque pienses (que ya lo pienso yo tambien después de leer todos vuestros comentarios) que el código que uso es "de los malos".....

Lo que dices que PHP no asigna un número como variable, que debe empezar por "a-z", sí que lo sabía, pero pensaba que lo que hacía en el form, era darle un valor a la variable, no intentar hacerla con el número introducido...... Si es como dices, puede ser el fallo.....

Sobre tu sugerencia para solventarlo, entiendo que haga del valor recuperado en el form, el índice de una variable....... ¿es así? Por tanto, si la variable toma valor, ese valor se pondrá como key del producto en cuestión, dejándola como $qty en mi script.......... si no toma valor, que deje todo como está..... y si toma valor "0" (empty), que borre el elemento del array $cart....

¿he entendido bien el proceso que propones? Lo que no sabía es que se podía dar un indice a una variable, sin hacerla array previamente...... ¿o tengo que definirla antes como array?

Ya se que puede parecer "estudida" alguna de mis preguntas, pero es que cuanto más miro el foro, y pregunto cosas, más inútil me siento..... pero todo es empezar ¿no?

MUCHAS GRACIAS por las respuestas. Voy a probar lo que yo he entendido, aunque primero voy a ver como montarlo en php.......

Saludos
  #10 (permalink)  
Antiguo 18/03/2009, 14:45
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

Perdona tanta pegunta....

Cuando decías que usaba "("items");", te referías a que se debería usar "$_SESSION['items']" ????

Y que en lugar de usar esas variables sólo con la "llamada" "$items" debería hacerlo con $_SESSION['items']???

Lo que no tengo claro es si en cada lugar en el que uso la variable $items, tengo que sustituirlo por $_SESSION['items'] o lo que tengo que hacer es incluir en la cabecera, después de session_start(), una $_SESSION de cada variable que vaya a usar en esa pagina php.......

Si voy muy liado o perdido, dimelo y ya consultaré cuando lo vea más claro..... es por saber si voy por buen camino antes ponerme a cambiar todo el código....

Gracias de nuevo
  #11 (permalink)  
Antiguo 18/03/2009, 16:51
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

¡¡¡ pateketrueke !!!

MUCHAS GRACIAS POR TU SABIDURÍA.

Acabo de conseguir que me sume y me reste productos. El script en cuestión ha quedado así:

Código PHP:
if($save)
  {
      
       foreach (
$cart as $isbn => $qty)
    {
        
        if(empty(
$_POST['foo'][$cant])) 
        {
            unset(
$cart[$isbn]); 
        }
        else
        {
          {
$cart[$isbn] = $_POST['foo'][$cant];} 
        }
    }
    
$total_price calculate_price($cart); 
    
$items calculate_items($cart); 
  } 
Tanto si pongo "0" como si borro el contenido, el artículo se borra de $cart.

Si pongo CUALQUIER CIFRA, se modifica y recalcula a la perfección...... Ese problema por tanto resuelto.

PERO..... PERO......

"$_POST['foo'][$cant]" Toma el valor del form, pero DEL ÚLTIMO PRODUCTO AÑADIDO AL CARRO. Me explico:

Con un producto va pefecto. Cuando añado otro, si quiero modificar el segundo, lo hace a la perfección, PERO MODIFICA TAMBIÉN AL PRIMERO. Y el primero ya NO permite modificaciones. Se rige por el segundo...... Y si añado un tercero, ese último es el que manda........

Yo creo que la solución tiene que pasar por hacer que foo[$cant], funcione como un array, digamos algo así como foo[$cart][$isbn] (el isbn era el indice de $cart), y que al hacer el loop donde resta o suma, solo lo hiciese del producto con ese $isbn....... ¿qué opinas?

Lo que pasa es que no acabo de enterarme como hacer un array de foo[$cant]......... ¿donde declaro foo[$cant] como array? ¿debe ser después del form? ¿puede ser antes del loop que muestra el array $cart?????

Voy a seguir investigando, pero si me puedes dar una pista, te lo agradecería eternamente......

MIL GRACIAS.

Última edición por parriman; 18/03/2009 a las 17:13 Razón: Añado info
  #12 (permalink)  
Antiguo 18/03/2009, 17:37
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

Hola de nuevo.

Debe ir por el tema de los arrays nultidimensionales, pero es que tampoco me entero bien de COMO APLICARLO AL SCRIPT.

Sigo estudiandolo, pero no se me ocurre como hacerlo...

Gracias por vuestra ayuda.

Última edición por parriman; 20/03/2009 a las 09:53 Razón: Concretar la pregunta
  #13 (permalink)  
Antiguo 20/03/2009, 13:05
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

Hola una vez más.

Creo que tengo la solución pero no sé aplicar un array a lo que me dijo pateketrueke....

Para que me aplique el cambio introducido SÓLO al producto que modifico, creo que debería hacer lo siguiente, CONSIDERANDO QUE EN ESTE EJEMPLO en lugar de usar foo[$cant] voy a usar un array llamado $cant:

Código PHP:
if($save)
  {
      
$i=0;

 foreach (
$cart as $isbn => $qty)
   {
                         
 if(empty(
$_POST[$cant]) 
  {
    unset(
$cart[$isbn]); 
   }
  else
   {
     if (
$cart[$isbn] = $_POST[$cant[$i]) 
     {
    
$cart[$isbn]=$cart[$isbn];
     }
    else
   { 
   
$cart[$isbn] = $cant[$i];
   }
 }
  
$i=$i++;
}
   
$total_price calculate_price($cart); 
    
$items calculate_items($cart); 
  } 
¿creeis que está bien el script?

Si está bien, el PROBLEMA es que NO SÉ HACER UN ARRAY DE 'foo'[$cant] para esta linea del form....:

Código PHP:
echo "<input type = 'text' name = 'foo'[$cant] value = '$qty' size=2>"
¿Se puede hacer? ¿cual es el lugar adecuado para hacerlo?

POR FAVOR, estoy ya desesperado.... ¿no puede ayudarme nadie?

Gracias de nuevo, y perdonad que sea tan pesado, pero es que quiero dar cuantos más datos mejor.

Saludos
  #14 (permalink)  
Antiguo 01/04/2009, 10:29
 
Fecha de Ingreso: abril-2009
Mensajes: 1
Antigüedad: 15 años
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

yo lo solucione de la siguiente manera y me funciona

en el archivo de output_fns.php en la linea que esta
Código PHP:
echo "<input type = text name = \"$isbn\" value = $qty size = 3>"
La cambie por
Código PHP:
echo "<input type = text name = \"cant[]\" value = $qty size = 3>"
y luego en el archivo show_cart.php para llamarlo por $_POST hice lo siguiente
Código PHP:
$cant = array();    
for(
$i 0$i <= count($_POST['cant']); $i++)
{
    
$cant[$i] = $_POST['cant'][$i];

y por ultimo en donde saca el error
Código PHP:
if($save)
{
    
$i 0;
    foreach (
$cart as $isbn => $qty)
    {
        if(
$cant[$i] == "0")
        {
            unset(
$cart[$isbn]);
        }
        else
        {
            
$cart[$isbn] = $cant[$i];
        }
        
$i++;
    }
    
$total_price calculate_price($cart);
    
$items calculate_items($cart);

  #15 (permalink)  
Antiguo 02/04/2009, 02:55
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: ¿Algún gurú de PHP que de con la solución?

¡¡¡ Byron412 !!!



Eres un crack.......

Un millon de gracias creo que se queda corto para agradecero tu mensaje.....

Lo iba a dejar como lo tenía, con ese "fallo", aunque le había añadido una función de "eliminar" productos de forma individual, y ahora tiene toda su funcionalidad....

Me alegra ver que yo no iba mal encaminado, pero como siempre, aunque sea un detalle más o menos pequeño, te puede deprimir durante mucho tiempo el que no funcione.....

Un detalle:

Cuando pones la parte esta:

Código PHP:
if($save

    
$i 0
    foreach (
$cart as $isbn => $qty
    { 
        if(
$cant[$i] == "0"
        { 
            unset(
$cart[$isbn]); 
        } 
No elimina el producto cuando un usuario deja la casilla vacia. Es decir, si en lugar de modificar el numero de productos, simplemente lo borra y no pone nada más, no lo elimina, lo deja visible, y con valor cero.

SI lo pones así:

Código PHP:
if(isset($_POST['save']))

    
$i 0
    foreach (
$cart as $isbn => $qty
    { 
        if(empty(
$cant[$i])) 
        { 
            unset(
$cart[$isbn]); 
El "empty" soluciona ese asunto. En valor cero, actúa, y si no hay valor, también.

Bueno, mil gracias, de verdad.

Un saludo
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:14.