Ver Mensaje Individual
  #8 (permalink)  
Antiguo 04/06/2010, 06:13
mitrofan
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 14 años
Puntos: 13
Respuesta: Carrito compra con arrays

He restructurado todo el código, lo pongo aunque hay una sola cosa que falla y que me gustaría resolver:

Datos.php

Código PHP:
<?php
session_start
();
$idmarca = array("1","2""3""4""5""6""7");
$marca = array("Acer""Asus""Hp""Lenovo""Toshiba""MSI""Samsumg");

// Arrays con los detalles para cada producto

$acer = array("Acer Aspire 4500" => "Procesador T4400, 320 Gb disco duro, 4 Gb de memoria Ram""Acer Ferrari RL" => "Procesador P8600, 320 Gb disco duro, 4 Gb de memoria Ram");

$asus = array("Asus LR500" => "Procesador P8700, 320 Gb disco duro, 4 Gb de memoria Ram""Asus LR750" => "Procesador P8700, 500 Gb disco duro, 4 Gb de memoria Ram");

$hp = array("HP 4750" => "Procesador P8600, 320 Gb disco duro, 4 Gb de memoria Ram""HP4800" => "Procesador T4400, 500 Gb disco duro, 4 Gb de memoria Ram");

$toshiba = array ("Toshiba 4320" => "Procesador T5800, 250 Gb disco duro, 4 Gb de memoria Ram");

$msi = array( "MSI CX5600" => "Procesador P8700, 320 Gb disco duro, 4 Gb de memoria Ram""MSI CXS650" => "Procesador P8700, 320 Gb disco duro, 4 Gb de memoria Ram""MSI CXS700"=> "Procesador P8500, 320 Gb disco duro, 4 Gb de memoria Ram");                                                

$lenovo = array("Lenovo FXJ" => "Procesador T5800, 320 Gb disco duro, 4 Gb de memoria Ram""Lenovo FXD" =>  "Procesador P8600, 320 Gb disco duro, 4 Gb de memoria Ram");

$samsung = array("Samsumg TRK" => "Procesador P8500, 320 Gb disco duro, 2 Gb de memoria Ram""Samsung RK500" =>  "Procesador T5800, 320 Gb disco duro, 4 Gb de memoria Ram",
              
"Samsung RK550" => "Procesador P8700, 320 Gb disco duro, 4 Gb de memoria Ram");

//Array para los precios asociados al nombre del producto

$producto = array("Acer Aspire 4500" => "400""Acer Ferrari RL" => "600""Asus LR500" => "650""Asus LR750" => "700""HP 4750" =>699"HP4800"=> "499""Lenovo FXJ" => "599",
            
"Lenovo FXD" => "625""Toshiba 4320" => "670""MSI CX5600" => "549",     "MSI CXS650" => "699",   "MSI CXS700" => "670""Samsumg TRK" => "680",
            
"Samsung RK500" => "570""Samsung RK500" => "620""Samsung RK550" => "670");

?>
Código marcas.php

Código PHP:
<?php
include("datos.php");
$preart $_GET[preart];
$nomart =  $_GET[nomart];
$cantidad $_GET[cantidad];

$_SESSION[cantidadcesta]=$cantidadcesta;

include(
"arriba.php"); //Parte superior con CSSS
?>

<div id="contentwrap">
  <div id="breadcrumb"><a href="cesta.php">Cesta</a> &raquo; <a href="http://www.free-css.com/">Somewhere</a></div>
  <div id="content"> <span class="floatright"><img src="assets/images/icon_email.gif" /><img src="assets/images/icon_print.gif" /></span>
    <h1>Port&aacute;tiles online</h1>
    <p> Venta de productos inform&aacute;ticos</p>
    <div class="hr">
      <hr />
    </div>
    <h1>Novedades</h1>
    <p> </p>
    
<?php
//Creamos una función para pintar el nombre del producto, los detalles y el precio (aunque esto último no va).

function pintarportatiles($varmodelo)
{
    foreach (
$varmodelo as $modelo => $detalles)
    {
    
?>
    <form action="<?=$PHP_SELF."?".$SID?>" method="get"/>
    <fieldset> <legend> Compra portatil </legend> <br/>
    <blockquote>
    <h1><?php echo $modelo;?></h1> 
    <p><?php echo $detalles;?></p>
    <p>Precio: <?php echo $producto[$modelo];?> &nbsp; Euros</p>
    </blockquote>
    <input type="hidden" name="nomart" value="<?php echo $modelo;?>"/>
    <input type="text" name="cantidad" value="1"/>
    <input type="submit" name="Enviar" value="Comprar"/> <br/>
    </fieldset>
    </form>
    <br/>
    <?php
        
}
    }    
    
    if (
$_GET[idmarca] == 0)
    {
    
pintarportatiles($acer);
    }
    
    if (
$_GET[idmarca] == 1)
    {
    
pintarportatiles($asus);    
    }
    
    if (
$_GET[idmarca] == 2)
    {
    
pintarportatiles($hp);    
    }
    
    if (
$_GET[idmarca] == 3)
    {
    
pintarportatiles($lenovo);    
    }
    
    if (
$_GET[idmarca] == 4)
    {
    
pintarportatiles($toshiba);    
    }
    
    if (
$_GET[idmarca] == 5)
    {
    
pintarportatiles($msi);    
    }
    
    if (
$_GET[idmarca] == 6)
    {
    
pintarportatiles($samsung);    
    }
    
?>       
     </div>

<?php

    
//Introducimos los valores de la sesión en un array de sesion con el nombre y la cantidad del producto    
    
$cantidadcesta[$nomart]=$cantidad;
    
    if(isset(
$cantidadcesta))
    {
        echo 
"<div>Cesta de compra es:</div><br/>";
            
            
//Recorremos el array y lo mostramos. Para mostrar el precio recorremos a la tabla producto que tenomos en datos.php
            
foreach ($cantidadcesta as $modelo => $unidad)
            {
            if (
$unidad>0)
                {
                    echo 
"<div> Producto: ".$modelo."<br/>";
                    echo 
"<div> Unidades: ".$unidad." </div>";
                    echo 
"<div> Precio: ".$producto[$modelo]."X".$unidad." = ".$producto[$modelo]*$unidad."</div><br/>";
                }
            }                
    }
    
include(
"abajo.php"); // Parte inferior con CSS
?>
La cesta funciona bien. Lo único que cuando se muestran los datos de los productos (antes de añadirlo a la cesta), el precio no lo coge ya que el array que recorre ($acer, $hp...) es de dos dimensiones, y por lo que sea no lo pilla de la tabla productos. Imagino que en vez de foreach se puede hacer un for y crear dos tablas más para cada producto. Por ejemplo:

$acer=array("acer ferrari", "Acer aspire".....);
$precioacer=array("400", "600".....);
$detalleacer=array("procesador tal.....", "porecsado, disco duro....");

for ($i=0; $i<count($acer) $i++)
{
echo "producto: ".$acer[$i];
echo "detalles: ".$detalleacer[$i];
echo "precio: ".$precioacer[$i];
}


Sin embargo también se me había ocurrido hacerlo todo en un array tridimensinal, asi queda todo en una variable:

$acer = array("Acer Aspire 4500" =>
array(detalles => "Procesador T4400, 320 Gb disco duro, 4 Gb de memoria Ram", precio => "400"),
"Acer Ferrari RL" =>
array(detalles=> "Procesador P8600, 320 Gb disco duro, 4 Gb de memoria Ram", precio =>"600")
);

Pero aqui viene la pregunta, ¿como se podría recorrer un array así para que me muestre todos los valores?