Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] implementar carrito de compras, borrar linea de pedido

Estas en el tema de implementar carrito de compras, borrar linea de pedido en el foro de PHP en Foros del Web. estiamdo foro buenas tardes , estoy desarrollando con la ayuda de un tutorial un carrito de compras. Todo iba de maravillas, hasta que me di ...
  #1 (permalink)  
Antiguo 02/03/2018, 14:25
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
implementar carrito de compras, borrar linea de pedido

estiamdo foro buenas tardes , estoy desarrollando con la ayuda de un tutorial un carrito de compras. Todo iba de maravillas, hasta que me di con el problema que no puedo eliminar o quitar un item que se haya cargado en el carrito a menos que borre todos los elementos vaciando todo el carrito. El funcionamiento del carrito es el siguiente:

el carrito lo cargo mediante ayax asi:


Código PHP:
session_start();
$suma=0;

if(isset(
$_GET["p"])){
$_SESSION['producto'][$_SESSION['contador']] = $_GET['p'];
$_SESSION['contador']++;
 }
 
 for(
$i 0;$i$_SESSION['contador'];$i++){
    
$peticion="SELECT * FROM productos WHERE id=".$_SESSION['producto'][$i];
    
$resultado=mysqli_query($conexion,$peticion);
    while(
$fila=mysqli_fetch_array($resultado)){
        echo 
$fila['nombre_productos']."- precio: ".$fila["precio"]."<a href='php/quitarProducto.php'>x quitar producto</a><br />";
        
$suma += $fila["precio"];

    }
}
echo 
"suma= ".number_format($suma,2); 
La verdad, que he intentado,-para que vean que al menos lo he intentado- crear una sesion quitar producto con esta sentencia:

Código PHP:
<?php 
session_start
();
echo 
"hola a todos";
$_SESSION['contador']--;

//$_SESSION["sacarProducto"]=$_GET["quitar"];
//echo $_SESSION["sacarProducto"]
?>
<script>
    window.location="../index.php";
</script>
pero solo quita el ultimo elemento agregado no puedo quitar linea de pedido.

Por favor ayuda para poder resolver :)
  #2 (permalink)  
Antiguo 03/03/2018, 07:28
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: implementar carrito de compras, borrar linea de pedido

A ver primero esa lista con contador esta mal pensada, se supone que un ID siempre debe ser único.

Dado que te dije que sea get puedes hacer esto

echo $fila['nombre_productos']."- precio: ".$fila["precio"]."<a href='php/quitarProducto.php?prod='.$fila["id"].''>x quitar producto</a><br />";

Y la sentencia para borrar

DELETE FROM productos WHERE id='$_POST["prod"]'

Pero debes validar que aquel prod. Es del usuario, ya que puede llegar un mal intencionado y borrar el de otras personas

Saludos
  #3 (permalink)  
Antiguo 05/03/2018, 09:41
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Apreciado Alvaro cincuentamil gracias por contestar, por tu paciencia y ayuda!

Pego el código completo, ojalá puedas darle una mirada y dar una opinión mientras trato de realizar lo que me sugieres

este es el index:

Código PHP:
    <?php
    
include("php/cabecera.php");


 
$conexion mysqli_connect("localhost","root","","carritocompras");
 
mysqli_set_charset($conexion,"utf8");
                
$peticion="SELECT * FROM productos";
                
$resultado=mysqli_query($conexion,$peticion);
                while(
$fila=mysqli_fetch_array($resultado)){
                    echo
"<div style='border-bottom:1px solid; padding:2%; width:30%'>";
                    echo 
"<h2>".$fila["nombre_productos"]."</h2>";
                    echo 
$fila["descripcion"]."<br />";
                    echo
"<p><strong>Precio: s/ ".$fila["precio"]."</strong><br /></p>";
        
                        
$peticion2="SELECT * FROM     images WHERE id_producto='".$fila["id"]."' Limit 1";
                        
$resultado2=mysqli_query($conexion,$peticion2);
                        while(
$fila2=mysqli_fetch_array($resultado2)){
                            echo 
"<img src='images/".$fila2["imagen"].".jpg' width=100% /><br />";
                        }
                    echo
"<a href='productos.php?id=".$fila["id"]."'><button>más información</button></a>";
                    echo
" <button value=".$fila["id"]." class='boton_compra'>comprar ahora</button>";
                    echo
"</div>";
     }
            
mysqli_close($conexion);
                 
            

    
    include(
"php/pie.php");
    
?>

pagina productos.php

Código PHP:
    <?php
    
include("php/cabecera.php");
/*el usuario hace la busqueda solicitando paquetes de viaje en america el cual tendía el siguiente id 'america'*/
 
$conexion mysqli_connect("localhost","root","","carritocompras");
 
mysqli_set_charset($conexion,"utf8");
                
$peticion="SELECT * FROM productos WHERE id=".$_GET["id"];
                
$resultado=mysqli_query($conexion,$peticion);
                while(
$fila=mysqli_fetch_array($resultado)){
                    echo
"<div style='border-bottom:1px solid; padding:2%; width:30%'>";
                    echo 
"<h2>".$fila["nombre_productos"]."</h2>";
                    echo 
$fila["descripcion"]."<br />";
                    echo
"<p><strong>Precio: s/ ".$fila["precio"]."</strong><br /></p>";
        
                        
$peticion2="SELECT * FROM     images WHERE id_producto='".$fila["id"]."'";
                        
$resultado2=mysqli_query($conexion,$peticion2);
                        while(
$fila2=mysqli_fetch_array($resultado2)){
                            echo 
"<img src='images/".$fila2["imagen"].".jpg' width=100% /><br />";
                        }
                    echo
"<a href='productos.php?id=".$fila["id"]."'><button>más información</button></a>";
                    echo
" <button>comprar ahora</button>";
                    echo
"</div>";
     }
            
mysqli_close($conexion);
                 
            

    
    include(
"php/pie.php");
    
?>

con este script cargo el carrito pasandole la id de producto en la variable p
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     //alert("aqui empezamos");
  3.     $("#carrito").load("php/poncarrito.php");
  4.     $(".boton_compra").click(function anade(){
  5.         //alert("ahora si");
  6.         $("#carrito").load("php/poncarrito.php?p="+$(this).val());
  7.        
  8.     })
  9. })


y la pagina de carga del carrito

Código PHP:
<?php 
session_start
();
$suma=0;
if(isset(
$_GET["p"])){
$_SESSION['producto'][$_SESSION['contador']] = $_GET['p'];
$_SESSION['contador']++;
 }

$conexion mysqli_connect("localhost","root","","carritocompras");
 
mysqli_set_charset($conexion,"utf8"); 
 
for(
$i 0;$i$_SESSION['contador'];$i++){
    
$peticion="SELECT * FROM productos WHERE id=".$_SESSION['producto'][$i];
    
$resultado=mysqli_query($conexion,$peticion);
    while(
$fila=mysqli_fetch_array($resultado)){
        echo 
$fila['nombre_productos']."- precio: ".$fila["precio"]."<a href='php/quitarProducto.php'>x quitar producto</a><br />";
        
$suma += $fila["precio"];

    }
}
echo 
"suma= ".number_format($suma,2);


?>

Última edición por rafret; 05/03/2018 a las 09:46
  #4 (permalink)  
Antiguo 05/03/2018, 21:57
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Cita:
Iniciado por alvaro_trewhela Ver Mensaje
A ver primero esa lista con contador esta mal pensada, se supone que un ID siempre debe ser único.

Dado que te dije que sea get puedes hacer esto

echo $fila['nombre_productos']."- precio: ".$fila["precio"]."<a href='php/quitarProducto.php?prod='.$fila["id"].''>x quitar producto</a><br />";

Y la sentencia para borrar

DELETE FROM productos WHERE id='$_POST["prod"]'

Pero debes validar que aquel prod. Es del usuario, ya que puede llegar un mal intencionado y borrar el de otras personas

Saludos

hola amigo en todo caso esta parte seria

delete from productos where id='$_GET["prod"]'

me podrías ayudar a escribir la sentencia porfa
  #5 (permalink)  
Antiguo 05/03/2018, 22:02
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

hola lo esribi asi pero no borra nada

Código PHP:
Ver original
  1. <?php
  2.  
  3. 'DELETE FROM productos WHERE id='.$_GET["prod"];
  4.  
  5. ?>
  6. <script>
  7.     window.location="../index.php";
  8. </script>
  #6 (permalink)  
Antiguo 06/03/2018, 17:48
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: implementar carrito de compras, borrar linea de pedido

Saludo

Eso jamás funcionará si no se conecta a la base de datos.

Es decir, en el archivo que se encarga de borrar la fila del carro de compras
se tiene que conectar a la base de datos y ejecutar el delete
(que teorizo es a una tabla llamada carrodecompras, porque si borras la de productos,
como actualmente estás haciendo, en algún momento te quedarás
sin productos para agregar al carro de compras)

Y adicional a esto, tienes que borrar la posición de la variable de sesión producto
del elemento seleccionado para borrar, y claramente, restar un elemento a la variable de sesión contador

Ahora, revisando tu código, te hago algunas observaciones.

1. En el index haces dos consultas a la base de datos,
cuando puedes hacer solo una
agregando el query de images como una subconsulta a la consulta principal
(además ambos querys traen todos los datos resultantes de las filas,
cuando solo se necesitan algunos campos solamente, es decir, el * es mejor evitarlo)

2. Como consecuencia del primer punto, te ahorras el segundo while

3. En la página de poncarrito.php tienes que enviar el id del producto en el link de eliminar
de cada fila, en caso contrario, al llegar a la página de quitarProducto.php no podrá
realizar la eliminación puesto que no tiene un id al cual buscar para borrar
(Es decir, hacer algo similar a lo que ya tienes en productos.php en la parte de 'Mas información')

4. Puedes dejar de usar la variable de sesión contador, pues solo con la variable de sesión
de productos es suficiente para saber cuantos productos hay
(es decir, se haría un count o un sizeof de la variable de sesión productos
en vez de usar la variable de sesión contador en el ciclo de la página poncarrito.php)

Esto implicaría que en el archivo de poncarrito.php simplemente se manejaría la segunda
posición de la variable de sesión productos en vacío (es decir, solo los []) a la hora de
asignar el id del producto que llega

Esto a su vez elimina la necesidad de realizar sumas y restas sobre la variable de sesión contador que se iría

Obviamente, esto hace necesario entonces buscar en el arreglo de sesión producto
el id del producto a eliminar para quitar la posición
(cosa que también se tiene que hacer en caso de seguir usando la variable de sesión contador)

También podrías cambiar a que en vez de un href a la hora de eliminar,
se ejecute una función ajax también que haga el borrado y recargue el carro de compras como tal
(es decir, lo mismo que se está haciendo a la hora de agregar)

Finalmente, creo que debes reevaluar la forma en que esta trabajando la aplicación
actualmente a nivel de base de datos, e igualmente en la parte de agregar
se podría mejorar el funcionamiento, pues por ej, si quiero agregar el mismo producto dos veces, o n veces,
tengo que dar tantos clic como productos del mismo necesite
(y por ende, la variable de sesión de productos tendría el mismo producto repetido n veces, haciendo engorrosa la eliminación cuando hayan varios productos con el mismo id),
esto podría minimizarse con un campo de texto donde se ingrese la cantidad de cada producto, y estas cantidades tendrían que ser otra posición del arreglo de sesión

Esto a su vez haría que a la hora de eliminar, puedan eliminar determinadas cantidades de un producto o todo un producto como tal
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 06/03/2018 a las 18:09
  #7 (permalink)  
Antiguo 06/03/2018, 23:42
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Hola mortiprogramador, que generoso en tu respuesta, en verdad gracias.
Como ves tengo muy poca experiencia en programación y por ahora el manejo de sessiones en php para mi es todo un reto que estoy pretendiendo incorporar en mi todavía pobre conocimiento y destreza.

Veo muy buenas tus sugerencias y observaciones con respecto a la aplicación que intento terminar de desarrollar siguiendo un tutorial y estoy seguro que me van a ayudar a repensar en una nueva estructuración para mejor funcionalidad de la misma. Sin embargo, por el momento quisiera me puedas ayudar a conseguir el objetivo de borrar las lineas de pedido sin tener que hacer mayores modificaciones ya que esto me podría traer muchas complicaciones, creo que una vez conseguido esto intentaré mejorar la aplicación reitero con tus importantes sugerencias.

/************************************************** ****************/

Antes de ver tu mensaje conseguí borrar lineas de pedido modificando un poco la parte del html de ponCarrito.php y añadiendo un código javascript a la parte fnal para borrar el div que contenía las lineas de pedido, consiguiendo borrar el div pero no modificaba el precio final y al recargar la pagina el carrito volvía a mostrar la lineas borradas


Código PHP:
<?php 
session_start
();
$suma=0;
if(isset(
$_GET["p"])){
$_SESSION['producto'][$_SESSION['contador']] = $_GET['p'];
$_SESSION['contador']++;
 }
echo
'<div id="places-container">';
$conexion mysqli_connect("localhost","root","","carritocompras");
 
mysqli_set_charset($conexion,"utf8"); 
 
for(
$i 0;$i$_SESSION['contador'];$i++){
    
$peticion="SELECT * FROM productos WHERE id=".$_SESSION['producto'][$i];
    
$resultado=mysqli_query($conexion,$peticion);
    while(
$fila=mysqli_fetch_array($resultado)){
        echo
"
                <div id='places-container' style='color:white'>
                    <div>
                        "
.$fila['nombre_productos']."- precio: ".$fila["precio"]."<button class='remove' style='color:black'>x</button>
                    </div>
                </div>
            "
;
        
$suma += $fila["precio"];

    }
}
echo
'</div>';
echo 
"suma= ".number_format($suma,2);


?>




Código Javascript:
Ver original
  1. $("#places-container").on("click",".remove",function(){
  2.         //console.log("bien");
  3.         var parent = $(this).parent().remove();
  4.     });



Puede ser que este intento sea errado o sin real noción pero espero valores que al menos lo estoy intentado.

/************************************************** *****************/


Estoy tratando de seguir tu guía a partir de aqui:

Cita:
3. En la página de poncarrito.php tienes que enviar el id del producto en el link de eliminar
de cada fila, en caso contrario, al llegar a la página de quitarProducto.php no podrá
realizar la eliminación puesto que no tiene un id al cual buscar para borrar
(Es decir, hacer algo similar a lo que ya tienes en productos.php en la parte de 'Mas información')
Entonces luego de borrar de ponCarrito.php el codigo javascript de intento anterior y añadir lo me sugieres me quedo asi

Código PHP:
<?php 
session_start
();
$suma=0;
if(isset(
$_GET["p"])){
$_SESSION['producto'][$_SESSION['contador']] = $_GET['p'];
$_SESSION['contador']++;
 }
echo
'<div id="places-container">';
$conexion mysqli_connect("localhost","root","","carritocompras");
 
mysqli_set_charset($conexion,"utf8"); 
 
for(
$i 0;$i$_SESSION['contador'];$i++){
    
$peticion="SELECT * FROM productos WHERE id=".$_SESSION['producto'][$i];
    
$resultado=mysqli_query($conexion,$peticion);
    while(
$fila=mysqli_fetch_array($resultado)){
        echo
"
                <div id='places-container' style='color:white'>
                    <div>
                        "
.$fila['nombre_productos']."- precio: ".$fila["precio"]."<a href='php/quitarProducto.php?r=".$fila["id"]."' style='color:white'> x borarProducto</a>
                    </div>
                </div>
            "
;
        
$suma += $fila["precio"];

    }
}
echo
'</div>';
echo 
"suma= ".number_format($suma,2);


?>


Cita:
4. Puedes dejar de usar la variable de sesión contador, pues solo con la variable de sesión
de productos es suficiente para saber cuantos productos hay
(es decir, se haría un count o un sizeof de la variable de sesión productos
en vez de usar la variable de sesión contador en el ciclo de la página poncarrito.php)
Aquí solo pude conseguir entender esto, pues como te explico mi conocimiento de sessiones es muy pobre y no logro conseguir avanzar:

Código PHP:
<?php 
session_start
();

if(isset(
$_GET["r"])){
$_SESSION['producto']=$_GET["r"];
echo 
$_SESSION['producto'];
 }

?>
Espero me puedas ayudar a resolver.

Saludos y gracias
  #8 (permalink)  
Antiguo 07/03/2018, 06:36
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: implementar carrito de compras, borrar linea de pedido

Hola rafret, no es nada.

En cuanto a tu solicitud, ya que por tu cuenta intentaste
realizar la tarea, corresponderé a tu esfuerzo mostrandote
a lo que me refería con cada punto, así que vamos a ello.

Cita:
Iniciado por mortiprogramador Ver Mensaje
1. En el index haces dos consultas a la base de datos,
cuando puedes hacer solo una
agregando el query de images como una subconsulta a la consulta principal
(además ambos querys traen todos los datos resultantes de las filas,
cuando solo se necesitan algunos campos solamente, es decir, el * es mejor evitarlo)

(este punto aplica para index.php y productos.php)
Código PHP:
Ver original
  1. $peticion="SELECT p.id, p.descripcion, p.nombre_productos,
  2. p.precio, (SELECT imagen FROM images WHERE id_producto= p.id LIMIT 1) imagen
  3. FROM productos p";

Cita:
Iniciado por mortiprogramador Ver Mensaje
2. Como consecuencia del primer punto, te ahorras el segundo while

Código PHP:
Ver original
  1. echo"<p><strong>Precio: s/ ".$fila["precio"]."</strong><br /></p>";
  2. echo "<img src='images/".$fila["imagen"].".jpg' width=100% /><br />";

Cita:
Iniciado por mortiprogramador Ver Mensaje
3. En la página de poncarrito.php tienes que enviar el id del producto en el link de eliminar
de cada fila, en caso contrario, al llegar a la página de quitarProducto.php no podrá
realizar la eliminación puesto que no tiene un id al cual buscar para borrar
(Es decir, hacer algo similar a lo que ya tienes en productos.php en la parte de 'Mas información')
Ya lo hiciste, genial!

Y ahora viene la parte extensa

Cita:
Iniciado por mortiprogramador Ver Mensaje
Puedes dejar de usar la variable de sesión contador
Esto a su vez elimina la necesidad de realizar sumas y restas sobre la variable de sesión contador que se iría

Esto implicaría que simplemente se manejaría la segunda
posición de la variable de sesión productos en vacío (es decir, solo los []) a la hora de
asignar el id del producto que llega

Código PHP:
Ver original
  1. if(isset($_GET["p"]))
  2.     $_SESSION['producto'][] = $_GET['p'];


Cita:
Iniciado por mortiprogramador Ver Mensaje
Solo con la variable de sesión
de productos es suficiente para saber cuantos productos hay
(es decir, se haría un count o un sizeof de la variable de sesión productos)
Código PHP:
Ver original
  1. $contador = sizeof($_SESSION['producto']);
  2.  
  3. for($i = 0; $i < $contador; $i++)


Cita:
Iniciado por mortiprogramador Ver Mensaje
Obviamente, esto hace necesario entonces buscar en el arreglo de sesión producto
el id del producto a eliminar para quitar la posición
Código PHP:
Ver original
  1. $conexion = mysqli_connect("localhost","root","","carritocompras");
  2. mysqli_set_charset($conexion,"utf8");
  3. // esto borrará el producto como tal de la tabla, así que si no necesitas eso por ahora, dejalo en comentario o quitalo
  4. $peticion = 'DELETE FROM productos WHERE id= '.$_GET["prod"];
  5. $resultado = mysqli_query($conexion,$peticion);
  6.  
  7. $existe = array_search($_GET['prod'], $_SESSION['producto']);
  8.  
  9. if($existe)
  10. {
  11.     unset($_SESSION['producto'][$existe]);
  12.     $_SESSION['producto'] = array_values($_SESSION['producto']);
  13. }

Y finalmente, lo que hiciste de borrar es correcto a nivel visual,
pero como bien dices, cuando se recarga vuelve a pintar todo,
eso es porque no has eliminado los ids de productos correspondientes
en la variable de sesión, pero ya va solventado en esta explicación,
así que prueba todo y comentas.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 09/03/2018 a las 07:09
  #9 (permalink)  
Antiguo 09/03/2018, 11:08
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Hola mortiprogramador gracias nuevamente.

Estoy empezando a implementar la aplicación con la guía que me enviaste, pero salta el primer problema, aunque ya había empezado a usar ésta -para mi- nueva forma de petición a la base sin llamar a todas la filas en otro proyecto aplicándolo con éxito a una galería de imágenes con resultado óptimo, en la del carrito me da el error que la imagen del elemento 1 de la tabla se repite en todos los resultados.

Proyecto con resultado óptimo:

Código PHP:
$peticion="SELECT id, imagen, alt FROM galery";
                    
$resultado=mysqli_query($conexion,$peticion); 
                    while(
$fila=mysqli_fetch_array($resultado)){ 
                    
                        echo
'<div class="item">';
                        echo
'    <div class="madre">';
                        echo
'        <a class="fancybox" href="images/galery/big/'.$fila['imagen'].'.jpg" 
                                    data-fancybox-group="galery" title="'
.$fila['alt'].'">';
                        echo
'            <div>';
                        echo
'                <img  src="images/galery/'.$fila['imagen'].'.jpg"
                                            itemprop="image"
                                            alt="'
.$fila['imagen'].'" />';
                        echo
'            </div>';
                        echo
'            <div class="fondoEfecto">
                                        </div>'
;
                        echo
'        </a>';
                        echo
'    </div>';
                        echo
'</div>';
                    } 
Hasta aquí íbamos bien:


Cita:
1. En el index haces dos consultas a la base de datos,
cuando puedes hacer solo una
agregando el query de images como una subconsulta a la consulta principal
(además ambos querys traen todos los datos resultantes de las filas,
cuando solo se necesitan algunos campos solamente, es decir, el * es mejor evitarlo)

(este punto aplica para index.php y productos.php)
Código PHP:
Ver original
$peticion="SELECT p.id, p.descripcion, p.nombre_productos,
p.precio, (SELECT imagen FROM images WHERE id_producto= p.id LIMIT 1) imagen
FROM productos p";
El código me queda asi:

Código PHP:
<?php
    
include("php/cabecera.php");

/*el usuario hace la busqueda solicitando paquetes de viaje en america el cual tendía el siguiente id 'america'*/
 
$conexion mysqli_connect("localhost","root","","carritocompras");
 
mysqli_set_charset($conexion,"utf8");
 
                
$peticion="SELECT id, descripcion, nombre_productos,
                precio, (SELECT imagen FROM images WHERE id_producto=id LIMIT 1) imagen
                FROM productos"
;
                
//$peticion="SELECT * FROM productos";
                
$resultado=mysqli_query($conexion,$peticion);
                while(
$fila=mysqli_fetch_array($resultado)){

                    echo
"<div style='border-bottom:1px solid; padding:2%; width:30%'>";
                    echo 
"<h2>".$fila["nombre_productos"]."</h2>";
                    echo 
$fila["descripcion"]."<br />";
                    echo
"<p><strong>Precio: s/ ".$fila["precio"]."</strong><br /></p>";
                    
//lo que era segunda peticion    
                    
echo "<img src='images/".$fila["imagen"].".jpg' width=100% /><br />";
                    
                    echo
"<a href='productos.php?id=".$fila["id"]."'><button>más información</button></a>";
                    echo
" <button value=".$fila["id"]." class='boton_compra'>comprar ahora</button>";
                    echo
"</div>";
     }
            
mysqli_close($conexion);
                 
            

    
    include(
"php/pie.php");
    
?>
Que hago mal o que omito? // esa "p" tal vez, pero como hacerla funcionar correctamente o como trabaja?

Sé que debes estar ocupado, así que esperare paciente tus comentarios. Saludos

Última edición por rafret; 09/03/2018 a las 11:15 Razón: añadir footer
  #10 (permalink)  
Antiguo 09/03/2018, 11:24
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Estimado, mirando el codigo veo que en
Código PHP:
Ver original
  1. $peticion="SELECT id, descripcion, nombre_productos,
  2.                precio, (SELECT imagen FROM images WHERE id_producto=id LIMIT 1) imagen
  3.                FROM productos";

Cita:
(SELECT imagen FROM images WHERE id_producto=id
La imagen se repite porque me esta dando la Id de la tabla images y no de la tabla productos. Estará mi error en esa "p"?
  #11 (permalink)  
Antiguo 09/03/2018, 11:29
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Ya no me contestes hasta nuevo aviso, ya lo conseguí, bueno lo que va de la primera parte.

Código PHP:
Ver original
  1. <?php
  2.     include("php/cabecera.php");
  3.  
  4. /*el usuario hace la busqueda solicitando paquetes de viaje en america el cual tendía el siguiente id 'america'*/
  5.  $conexion = mysqli_connect("localhost","root","","carritocompras");
  6.  mysqli_set_charset($conexion,"utf8");
  7.  
  8.                 $peticion="SELECT p.id, p.descripcion, p.nombre_productos,
  9.                 p.precio, (SELECT imagen FROM images WHERE id_producto=p.id LIMIT 1) imagen
  10.                 FROM productos p";
  11.                 //$peticion="SELECT * FROM productos";
  12.                 $resultado=mysqli_query($conexion,$peticion);
  13.                 while($fila=mysqli_fetch_array($resultado)){
  14.  
  15.                     echo"<div style='border-bottom:1px solid; padding:2%; width:30%'>";
  16.                     echo "<h2>".$fila["nombre_productos"]."</h2>";
  17.                     echo $fila["descripcion"]."<br />";
  18.                     echo"<p><strong>Precio: s/ ".$fila["precio"]."</strong><br /></p>";
  19.                     //lo que era segunda peticion  
  20.                     echo "<img src='images/".$fila["imagen"].".jpg' width=100% /><br />";
  21.                    
  22.                     echo"<a href='productos.php?id=".$fila["id"]."'><button>más información</button></a>";
  23.                     echo" <button value=".$fila["id"]." class='boton_compra'>comprar ahora</button>";
  24.                     echo"</div>";
  25.      }
  26.             mysqli_close($conexion);
  27.                  
  28.            
  29.  
  30.    
  31.     include("php/pie.php");
  32.     ?>
  #12 (permalink)  
Antiguo 09/03/2018, 15:03
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Hola que tal, el codigo de poncarrito.php segun la guia me queda asi:


Código PHP:
<?php 
session_start
();
$suma=0;
if(isset(
$_GET["p"])){
$_SESSION['producto'][] = $_GET['p'];
 }
 
$conexion mysqli_connect("localhost","root","","carritocompras");
mysqli_set_charset($conexion,"utf8");  

$contador sizeof($_SESSION['producto']); 

for(
$i 0$i $contador$i++){
    
    
$peticion="SELECT id, precio, nombre_productos FROM productos WHERE id=".$_SESSION['producto'][$i];
    
$resultado=mysqli_query($conexion,$peticion);
    while(
$fila=mysqli_fetch_array($resultado)){
        echo
"
                <div id='places-container' style='color:white'>
                        "
.$fila['nombre_productos']."- precio: ".$fila["precio"]."<a href='php/quitarProducto.php?r=".$fila["id"]."' style='color:white'> x borarProducto</a>
                </div>
            "
;
            
$suma += $fila["precio"];
            }
    

    }

echo 
"suma= ".number_format($suma,2);


?>
y me sale este error:


Código HTML:
Ver original
  1. Notice: Undefined index: producto in C:\xampp\htdocs\carritoCompras\php\poncarrito.php on line 11
  #13 (permalink)  
Antiguo 09/03/2018, 15:22
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: implementar carrito de compras, borrar linea de pedido

Hola
Eso es porque cuando el carrito no tiene nada,
al tratar de calcular el sizeof dará ese notice.

Solventalo de este modo

Código PHP:
Ver original
  1. $contador = 0;
  2.  
  3. if( isset($_SESSION['producto']) )
  4.     $contador = sizeof($_SESSION['producto']);
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #14 (permalink)  
Antiguo 09/03/2018, 16:10
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

hola que tal, listo ya solucione con lo que me enviaste el error de la linea 11.

Pero al borrar los productos los borra excepto el primero de ellos ni tampoco si lo repito después.

Te envìo los codigo de como me quedaron. Saludos y GRACIAS

Código PHP:
Ver original
  1. <?php
  2. $suma=0;
  3. if(isset($_GET["p"])){
  4. $_SESSION['producto'][] = $_GET['p'];
  5. $contador = sizeof($_SESSION['producto']);
  6.  }
  7.  
  8. $conexion = mysqli_connect("localhost","root","","carritocompras");
  9. mysqli_set_charset($conexion,"utf8");  
  10.  
  11.  
  12. $contador = 0;
  13. if( isset($_SESSION['producto']) ){
  14.     $contador = sizeof($_SESSION['producto']);
  15.     }
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23. for($i = 0; $i < $contador; $i++){
  24.    
  25.     $peticion="SELECT * FROM productos WHERE id=".$_SESSION['producto'][$i];
  26.     $resultado=mysqli_query($conexion,$peticion);
  27.     while($fila=mysqli_fetch_array($resultado)){
  28.         echo"
  29.                 <div id='places-container' style='color:white'>
  30.                         ".$fila['nombre_productos']."- precio: ".$fila["precio"]."<a href='php/quitarProducto.php?r=".$fila["id"]."' style='color:white'> x borarProducto</a>
  31.                 </div>
  32.             ";
  33.             $suma += $fila["precio"];
  34.             }
  35.    
  36.  
  37.     }
  38.  
  39. echo "suma= ".number_format($suma,2);
  40.  
  41.  
  42. ?>


Código PHP:
Ver original
  1. <?php
  2. $suma=0;
  3. if(isset($_GET["p"])){
  4. $_SESSION['producto'][] = $_GET['p'];
  5.  }
  6. echo'<div id="places-container">';
  7. $conexion = mysqli_connect("localhost","root","","carritocompras");
  8. mysqli_set_charset($conexion,"utf8");
  9.  
  10. $contador = sizeof($_SESSION['producto']);
  11.  
  12. for($i = 0; $i < $contador; $i++){
  13.    
  14.     //$peticion = 'DELETE FROM productos WHERE id= '.$_GET["r"];
  15.     $resultado = mysqli_query($conexion,$peticion);
  16.    
  17.     $resultado = mysqli_query($conexion,$peticion);
  18.  
  19.     $existe = array_search($_GET['r'], $_SESSION['producto']);
  20.  
  21.     if($existe)
  22.     {
  23.         unset($_SESSION['producto'][$existe]);
  24.         $_SESSION['producto'] = array_values($_SESSION['producto']);
  25.     }
  26. }
  27. echo'</div>';
  28. //echo "suma= ".number_format($suma,2);
  29.  
  30.  
  31. ?>
  #15 (permalink)  
Antiguo 09/03/2018, 16:25
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: implementar carrito de compras, borrar linea de pedido

Hola
Ya casi esta entonces

Ok, viendo el código, en ponCarrito esta el sizeof dos veces, elimina el primero (línea 6)

Y en el de borrar esta dos veces el mysql_query, quita uno y el otro en comentario pues el query que ejecutaría esta en comentario también.
Veo también que pusiste la parte de agregar elementos a productos en la parte de eliminar, tal vez por eso es que te sucede lo que dices que se queda el primero,
en cuyo caso eso no iría en el archivo de borrar, solo en el de ponCarrito

Y una pregunta, la variable $_GET['r'] es nueva, o es la misma $_GET['p'] ?
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #16 (permalink)  
Antiguo 09/03/2018, 17:29
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Aquí me perdí totalmente...
Cita:
Veo también que pusiste la parte de agregar elementos a productos en la parte de eliminar

Cita:
tal vez por eso es que te sucede lo que dices que se queda el primero,
en cuyo caso eso no iría en el archivo de borrar, solo en el de ponCarrito
No deberia existir la pagina quitarProducto.php y hacer el borrado en el mismo ponCarrito.php?... ya me perdi creo


Desde el inicio creo la variable "r" en la que envío el id del elemento a borrar hacia quitarProducto.php, aunque veo que podria ser la misma "p"
Cita:
Y una pregunta, la variable $_GET['r'] es nueva, o es la misma $_GET['p'] ?
y en esta parte de la guía que me mandas

Cita:
$conexion = mysqli_connect("localhost","root","","carritocompr as");
mysqli_set_charset($conexion,"utf8");
// esto borrará el producto como tal de la tabla, así que si no necesitas eso por ahora, dejalo en comentario o quitalo
$peticion = 'DELETE FROM productos WHERE id= '.$_GET["prod"];
$resultado = mysqli_query($conexion,$peticion);

$existe = array_search($_GET['prod'], $_SESSION['producto']);

if($existe)
{
unset($_SESSION['producto'][$existe]);
$_SESSION['producto'] = array_values($_SESSION['producto']);
}
yo suplanto $_GET["prod"] por "r" por que en realidad no entendía de donde viene $_GET["prod"]
  #17 (permalink)  
Antiguo 09/03/2018, 17:49
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: implementar carrito de compras, borrar linea de pedido

Me refiero a lo siguiente

Código PHP:
Ver original
  1. $suma=0;
  2. if(isset($_GET["p"])){
  3. $_SESSION['producto'][] = $_GET['p'];
  4.  }

Esto no estaba antes en la parte de borrar, solo en agregar

En cuanto a la variable prod, sí, es la misma p.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #18 (permalink)  
Antiguo 09/03/2018, 18:06
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

hola gracias, el codigo me queda asi el de quitarProducto.php:

pero sigue sin borrar el primero :

Código PHP:
Ver original
  1. <?php
  2. $conexion = mysqli_connect("localhost","root","","carritocompras");
  3. mysqli_set_charset($conexion,"utf8");
  4. $contador = sizeof($_SESSION['producto']);
  5. for($i = 0; $i < $contador; $i++){
  6.     //$peticion = 'DELETE FROM productos WHERE id= '.$_GET["p"];
  7.     //$resultado = mysqli_query($conexion,$peticion);
  8.     $existe = array_search($_GET['p'], $_SESSION['producto']);
  9.     if($existe)
  10.     {
  11.         unset($_SESSION['producto'][$existe]);
  12.         $_SESSION['producto'] = array_values($_SESSION['producto']);
  13.     }
  14. }
  15. //echo "suma= ".number_format($suma,2);
  16.  
  17.  
  18. ?>


Poncarrito.php queda asi:

Código PHP:
Ver original
  1. <?php
  2. $suma=0;
  3. if(isset($_GET["p"])){
  4. $_SESSION['producto'][] = $_GET['p'];
  5.  
  6.  }
  7.  
  8. $conexion = mysqli_connect("localhost","root","","carritocompras");
  9. mysqli_set_charset($conexion,"utf8");  
  10.  
  11.  
  12. $contador = 0;
  13. if( isset($_SESSION['producto']) ){
  14.     $contador = sizeof($_SESSION['producto']);
  15.     }
  16.  
  17. for($i = 0; $i < $contador; $i++){
  18.    
  19.     $peticion="SELECT * FROM productos WHERE id=".$_SESSION['producto'][$i];
  20.     $resultado=mysqli_query($conexion,$peticion);
  21.     while($fila=mysqli_fetch_array($resultado)){
  22.         echo"
  23.                 <div id='places-container' style='color:white'>
  24.                         ".$fila['nombre_productos']."- precio: ".$fila["precio"]."<a href='php/quitarProducto.php?p=".$fila["id"]."' style='color:white'> x borarProducto</a>
  25.                 </div>
  26.             ";
  27.             $suma += $fila["precio"];
  28.             }
  29.    
  30.  
  31.     }
  32.    
  33.  
  34. echo "suma= ".number_format($suma,2);
  35.  
  36.  
  37. ?>
  #19 (permalink)  
Antiguo 09/03/2018, 18:55
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: implementar carrito de compras, borrar linea de pedido

Hola

En ese caso, has este cambio

Código PHP:
Ver original
  1. unset($_SESSION['producto'][$existe]);
  2. $_SESSION['producto'] = array_values($_SESSION['producto']);

Es decir, el if de $existe se va y solo queda la acción del unset y el array values
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #20 (permalink)  
Antiguo 09/03/2018, 19:23
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Hola!! desde hoy tu eres la palabra y yo soy tu apostol!



una última, conoces algún tutorial para aprender y entender mejor sessiones?

el código quedo así:




Código PHP:
Ver original
  1. <?php
  2. $conexion = mysqli_connect("localhost","root","","carritocompras");
  3. mysqli_set_charset($conexion,"utf8");
  4. $contador = sizeof($_SESSION['producto']);
  5. for($i = 0; $i < $contador; $i++){
  6.     //$peticion = 'DELETE FROM productos WHERE id= '.$_GET["p"];
  7.     //$resultado = mysqli_query($conexion,$peticion);
  8.     $existe = array_search($_GET['p'], $_SESSION['producto']);
  9.    
  10. }
  11.  
  12.     unset($_SESSION['producto'][$existe]);
  13.     $_SESSION['producto'] = array_values($_SESSION['producto']);
  14.  
  15. //echo "suma= ".number_format($suma,2);
  16.  
  17.  
  18. ?>



No sé como expresarme realmente para dejar sentir mi agradecimiento a tu ayuda, has sido muy generoso repito y en verdad sin exagerar, el mundo necesita màs gente como tu y como mucha gente de este foro para ser un lugar mejor para todos apreciado Mortiprogramador. Felicitaciones!
  #21 (permalink)  
Antiguo 09/03/2018, 19:48
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: implementar carrito de compras, borrar linea de pedido

Hola
Jajaja, muy fervorosa tu frase!!

En cuanto a lo de manejo de sesiones, revisa esto

Y en cuanto a carros de compras, aquí en forosdelweb
encontrarás muchos ejemplos variados o pues por la web
también hay muchos más por si acaso quieres en algún momento
echarle ojo a eso también, un saludo.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #22 (permalink)  
Antiguo 10/03/2018, 00:02
 
Fecha de Ingreso: junio-2010
Mensajes: 221
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: implementar carrito de compras, borrar linea de pedido

Jajaja pero en verdad no era para menos, no sabes CUANTO! me has ayudado, he pasado una barrera amigo!

Gracias por la info!

Etiquetas: carritodecompras
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.
Respuesta




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