PHP - CARRITO DE COMPRAS

 
Vista:
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARRITO DE COMPRAS

Publicado por Juan Camilo (21 intervenciones) el 10/12/2016 01:20:26
Hola a todos cómo están
Nunca he hecho un carrito de compras y conseguí un vídeo tutorial en el cual ilustran el paso a paso, sin embargo no logro saber porque cuando hago clic en el botón comprar en uno de los artículos me agrega un articulo la primer vez y después que hago clic en el otro producto muestre dicho producto 2 veces, este es mi código:

index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
        <link href="StyleCSS/Standar.css" rel="stylesheet" type="text/css" media="screen"/>
        <link rel="shortcut icon" href="/imagenes/aprobado.png" media="screen"/>
        <link href="https://fonts.googleapis.com/css?family=Rokkitt" rel="stylesheet"/>
        <title>Compras</title>
    </head>
    <body>
        <header>
            <form>
                <table align="right">
                    <tbody>
                        <tr>
                            <td><input type="text" placeholder="Buscar Art&iacute;culo"/><input type="submit" value="Buscar"/></td>
                        </tr>
                    </tbody>
                </table>
            </form>
        </header>
        <h1>Listado de Productos</h1>
        <table align="center">
            <tbody>
                <tr>
                    <th>ID</th>
                    <th>Im&aacute;gen</th>
                    <th>Nombre</th>
                    <th>Precio</th>
                    <th>Descripci&oacute;n</th>
                    <th>Inventario</th>
                    <th>Agregar</th>
                </tr>
                <?php
                    include('SQL/conexion.php');
                    $pr1="select * from producto";
                    $pr2=  mysql_query($pr1) or die ('La Consulta de Productos no fue Ejecutada');
                    $cp=  mysql_num_rows($pr2);
                    if($cp>0){
                        for($j=1;$j<=$cp;$j++){
                            $pr=  mysql_fetch_array($pr2);
                            echo '<tr>';
                            echo '<td>'.$pr['id_p'].'</td>';
                            echo '<td><img src="'.$pr['imagen_p'].'" height="100" width="100"/></td>';
                            echo '<td>'.$pr['nombre_p'].'</td>';
                            echo '<td>$ '.number_format($pr['precio_p']).'</td>';
                            echo '<td>'.$pr['descripcion_p'].'</td>';
                            echo '<td>'.$pr['inventario_p'].'</td>';
                            echo '<td>'
                            . '<form method="POST" action="carrito.php">'
                                    . '<input type="hidden" name="idprod" value="'.$pr['id_p'].'"/>'
                                    . '<input type="hidden" name="nombre_p" value="'.$pr['nombre_p'].'"/>'
                                    . '<input type="hidden" name="precio_p" value="'.$pr['precio_p'].'"/>'
                                    . '<input type="hidden" name="cantidad" value="1"/>'
                                    . '<input type="submit" value="Comprar"/>'
                                . '</form>'
                                . '</td>';
                        }
 
                    }else{
                        echo '<td><h1>No hay productos disponibles en la tienda</h1></td>';
                    }
                    echo '</tr>';
                    mysql_free_result($pr2);
                    mysql_close($conexion);
                ?>
 
            </tbody>
        </table>
    </body>
</html>

carrito.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
        <link href="StyleCSS/Standar.css" rel="stylesheet" type="text/css" media="screen"/>
        <link rel="shortcut icon" href="/imagenes/aprobado.png" media="screen"/>
        <link href="https://fonts.googleapis.com/css?family=Rokkitt" rel="stylesheet"/>
        <title>Compras</title>
    </head>
    <body>
        Carrito de Compras
        </br>Sus Compras hasta el momento son:
 
        <?php
            session_start();
            include('SQL/conexion.php');
            if(isset($_POST['idprod'])){
                $car1=$_POST['idprod'];
                $car2=$_POST['cantidad'];
                $car3=$_POST['precio_p'];
                $car4=$_POST['nombre_p'];
                $car5[]=array('id_p'=>$car1,'nombre_p'=>$car4,'precio_p'=>$car3,'cantidad'=>$car2);
            }
 
            if(isset($_SESSION['carrito'])){
                $car1=$_POST['idprod'];
                $car2=$_POST['cantidad'];
                $car3=$_POST['precio_p'];
                $car4=$_POST['nombre_p'];
                $car5[]=array('id_p'=>$car1,'nombre_p'=>$car4,'precio_p'=>$car3,'cantidad'=>$car2);
            }
            if(isset($car5))$_SESSION['carrito']=$car5;
        ?>
        <table>
            <tbody>
                <tr>
                    <th colspan="4">Listado de Compras</th>
                </tr>
                <tr>
                    <th>Producto</th>
                    <th>Precio</th>
                    <th>Cantidad</th>
                    <th>Subtotal</th>
                </tr>
                <?php
                    if(isset($car5)){
                        $total=0;
                        for($i=0;$i<count($car5);$i++){
                ?>
                <tr>
                    <td><?php echo $car5[$i]['nombre_p']; ?></td>
                    <td><?php echo $car5[$i]['precio_p']; ?></td>
                    <td><?php echo $car5[$i]['cantidad']; ?></td>
                    <?php
                        $subtotal=$car5[$i]['precio_p']*$car5[$i]['cantidad'];
                        $total=$total+$subtotal;
                    ?>
                    <td><?php echo $subtotal ?></td>
                </tr>
                <?php
                        }
                    }
                ?>
                <tr>
                    <th colspan="3">Total</th>
                    <th><?php if(isset($total))echo $total; ?></th>
                </tr>
            </tbody>
        </table>
        <a href="index.php">Seguir Comprando</a>
    </body>
</html>

en mi base de datos tengo una tabla que se llama producto y esta conformada así:

Captura

Me pueden ayudar por favor.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

CARRITO DE COMPRAS

Publicado por xve (6935 intervenciones) el 10/12/2016 11:54:02
Hola Juan, a simple vista, me da la sensación que siempre tienes que visualizar el ultimo producto añadido... aunque si refrescas la pagina carrito.php sin enviar nuevamente los valores, creo que no te mostrara ningún producto!!!

Tendrias que obtener el valor de la variable de sesion: $_SESSION['carrito']... si no lo coges siempre tendras el ultimo producto... creo que tendria que ser algo así:

1
2
3
4
5
6
7
8
if(isset($_SESSION['carrito'])){
    $car1=$_POST['idprod'];
    $car2=$_POST['cantidad'];
    $car3=$_POST['precio_p'];
    $car4=$_POST['nombre_p'];
    $car5=$_SESSION['carrito'];
    $car5[]=array('id_p'=>$car1,'nombre_p'=>$car4,'precio_p'=>$car3,'cantidad'=>$car2);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARRITO DE COMPRAS

Publicado por Juan Camilo (21 intervenciones) el 11/12/2016 21:11:10
XVE ya habiendo implementado dicha corrección y agregando otras cositas, me encuentro con el inconveniente de que cuando hago clic en el link de ver carrito, a pesar de que no me muestra ningún error, no me muestra nada: Sabes que problema puede ser?

carrito.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
        <link href="StyleCSS/Standar.css" rel="stylesheet" type="text/css" media="screen"/>
        <link rel="shortcut icon" href="/imagenes/aprobado.png" media="screen"/>
        <link href="https://fonts.googleapis.com/css?family=Rokkitt" rel="stylesheet"/>
        <title>Compras</title>
    </head>
    <body>
        Carrito de Compras
        </br>Sus Compras hasta el momento son:
 
        <?php
            session_start();
            include('SQL/conexion.php');
            if(isset($_POST['idprod'])){
                $car1=$_POST['idprod'];
                $car2=$_POST['cantidad'];
                $car3=$_POST['precio_p'];
                $car4=$_POST['nombre_p'];
                $car5[]=array('id_p'=>$car1,'nombre_p'=>$car4,'precio_p'=>$car3,'cantidad'=>$car2);
            }
            if(isset($_POST['idprod'])){
                if(isset($car1)){
                    $car5=$_SESSION['carrito'];
                    $car1=$_POST['idprod'];
                    $car2=$_POST['cantidad'];
                    $car3=$_POST['precio_p'];
                    $car4=$_POST['nombre_p'];
                    $pos=-1;
                    for($i=1;$i<=count($car5);$i++){
                        if($car1==$car5[$i]['id_p']){
                            $pos=$i;
                        }
                    }
                    if($pos!=-1){
                        $contar=$car5[$pos]['cantidad']+$car2;
                        $car5[$pos]=array('id_p'=>$car1,'nombre_p'=>$car4,'precio_p'=>$car3,'cantidad'=>$contar);
                    }else{
                        $car5[]=array('id_p'=>$car1,'nombre_p'=>$car4,'precio_p'=>$car3,'cantidad'=>$car2);
                    }
                }
            }
            if(isset($car5))$_SESSION['carrito']=$car5;
        ?>
        <table>
            <tbody>
                <tr>
                    <th colspan="4">Listado de Compras</th>
                </tr>
                <tr>
                    <th>Producto</th>
                    <th>Precio</th>
                    <th>Cantidad</th>
                    <th>Subtotal</th>
                </tr>
                <?php
                    if(isset($car5)){
                        $total=0;
                        for($i=0;$i<count($car5);$i++){
                ?>
                <tr>
                    <td><?php echo $car5[$i]['nombre_p']; ?></td>
                    <td><?php echo number_format($car5[$i]['precio_p']); ?></td>
                    <td><?php echo $car5[$i]['cantidad']; ?></td>
                    <?php
                        $subtotal=$car5[$i]['precio_p']*$car5[$i]['cantidad'];
                        $total=$total+$subtotal;
                    ?>
                    <td><?php echo number_format($subtotal) ?></td>
                </tr>
                <?php
                        }
                    }
                ?>
                <tr>
                    <th colspan="3">Total</th>
                    <th><?php if(isset($total))echo number_format($total); ?></th>
                </tr>
            </tbody>
        </table>
        <a href="index.php">Seguir Comprando</a>
    </body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

CARRITO DE COMPRAS

Publicado por xve (6935 intervenciones) el 12/12/2016 08:31:42
Todo parece estar bien a simple vista... has comprobado que entre en el bucle for()? que valor devuelve count($car5)?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARRITO DE COMPRAS

Publicado por Juan Camilo (21 intervenciones) el 12/12/2016 08:59:23
XVE me saca este error en el for

Notice: Undefined offset: 8 in C:\xampp\htdocs\tienda\carrito.php on line 36

y la Linea 36 es esta

1
for($i=1;$i<=count($car5);$i++)

No entiendo que tiene malo, y cuando le digo que me muestre
1
echo count($car5);
me muestra esto: 88888888
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

CARRITO DE COMPRAS

Publicado por xve (6935 intervenciones) el 12/12/2016 10:53:29
Hola Juan, el problema, es que es demasiado grande el array... si haces un:
1
print_r($car5);

Que te devuelve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARRITO DE COMPRAS

Publicado por Juan Camilo (21 intervenciones) el 12/12/2016 10:57:18
Me devuelve esto: 88888888

Pero entonces como soluciono eso? la verdad no se que hacer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

CARRITO DE COMPRAS

Publicado por xve (6935 intervenciones) el 12/12/2016 16:24:52
que estraño... tanto el count() como el print_r() devuelven lo mismo???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar