CARRITO COMPRAS PDF SIMPLE CON PHP MYSQL SESSION

haz un carrito compras con php mysql con lista de articulos y guardar carrito en la base datos hazlo en archivos separados de html y php primero el productos.php de la lista


Para crear un carrito de compras con PHP y MySQL con una lista de artículos, primero debemos crear una base de datos en MySQL y una tabla para almacenar los productos. Luego, podemos crear una página de lista de productos llamada "productos.php".

Crear la base de datos y la tabla


Podemos crear una base de datos llamada "carrito" con una tabla llamada "productos" que tiene los siguientes campos:




id: un identificador único para cada producto


nombre: el nombre del producto


descripcion: una descripción breve del producto


precio: el precio del producto


Podemos usar el siguiente código SQL para crear la tabla:




sql


Copy code


CREATE TABLE productos (


  id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,


  nombre VARCHAR(50) NOT NULL,


  descripcion VARCHAR(255) NOT NULL,


  precio FLOAT(10, 2) NOT NULL


);


Crear la página de lista de productos


Podemos crear un archivo llamado "productos.php" y agregar el siguiente código:




php


Copy code


<!DOCTYPE html>


<html>


<head>


  <title>Lista de productos</title>


</head>


<body>


  <h1>Lista de productos</h1>




  <?php


  // Conectar a la base de datos


  $servername = "localhost";


  $username = "tu_usuario";


  $password = "tu_contraseña";


  $dbname = "carrito";


  $conn = new mysqli($servername, $username, $password, $dbname);




  // Verificar la conexión


  if ($conn->connect_error) {


    die("Fallo al conectar con la base de datos: " . $conn->connect_error);


  }




  // Obtener la lista de productos de la base de datos


  $sql = "SELECT * FROM productos";


  $result = $conn->query($sql);




  // Mostrar la lista de productos


  if ($result->num_rows > 0) {


    echo "<table>";


    echo "<tr><th>ID</th><th>Nombre</th><th>Descripción</th><th>Precio</th></tr>";


    while($row = $result->fetch_assoc()) {


      echo "<tr>";


      echo "<td>" . $row["id"] . "</td>";


      echo "<td>" . $row["nombre"] . "</td>";


      echo "<td>" . $row["descripcion"] . "</td>";


      echo "<td>$" . $row["precio"] . "</td>";


      echo "</tr>";


    }


    echo "</table>";


  } else {


    echo "No se encontraron productos.";


  }




  // Cerrar la conexión


  $conn->close();


  ?>




</body>


</html>


Este código se conecta a la base de datos, obtiene la lista de productos y los muestra en una tabla en la página.




Agregar productos al carrito


Para agregar productos al carrito, podemos agregar un botón "Agregar al carrito" junto a cada producto en la lista. Podemos agregar un formulario con un botón para cada producto en la lista y pasar el ID del producto al formulario como un parámetro. Podemos usar el método POST para enviar el formulario al servidor.




Podemos agregar el siguiente código dentro del bucle while en la página "productos.php":




php


Copy code


<form method="POST" action="agregar.php">


  <input type="hidden" name="id" value="<?php echo $row["id"]; ?>">


  <input type="submit" value="Agregar al carrito">


</form>


Este código agrega un formulario con un botón










jose fernandez


productos.php con boton agregar al carrito


Por supuesto, aquí tienes el código para la página "productos.php" con el botón "Agregar al carrito" para cada producto:




php


Copy code


<!DOCTYPE html>


<html>


<head>


  <title>Lista de productos</title>


</head>


<body>


  <h1>Lista de productos</h1>




  <?php


  // Conectar a la base de datos


  $servername = "localhost";


  $username = "tu_usuario";


  $password = "tu_contraseña";


  $dbname = "carrito";


  $conn = new mysqli($servername, $username, $password, $dbname);




  // Verificar la conexión


  if ($conn->connect_error) {


    die("Fallo al conectar con la base de datos: " . $conn->connect_error);


  }




  // Obtener la lista de productos de la base de datos


  $sql = "SELECT * FROM productos";


  $result = $conn->query($sql);




  // Mostrar la lista de productos


  if ($result->num_rows > 0) {


    echo "<table>";


    echo "<tr><th>ID</th><th>Nombre</th><th>Descripción</th><th>Precio</th><th></th></tr>";


    while($row = $result->fetch_assoc()) {


      echo "<tr>";


      echo "<td>" . $row["id"] . "</td>";


      echo "<td>" . $row["nombre"] . "</td>";


      echo "<td>" . $row["descripcion"] . "</td>";


      echo "<td>$" . $row["precio"] . "</td>";


      echo "<td>";


      echo "<form method='POST' action='agregar.php'>";


      echo "<input type='hidden' name='id' value='" . $row["id"] . "'>";


      echo "<input type='submit' value='Agregar al carrito'>";


      echo "</form>";


      echo "</td>";


      echo "</tr>";


    }


    echo "</table>";


  } else {


    echo "No se encontraron productos.";


  }




  // Cerrar la conexión


  $conn->close();


  ?>




</body>


</html>


Este código agrega un botón "Agregar al carrito" para cada producto en la lista. Al hacer clic en el botón, se envía un formulario con el ID del producto al archivo "agregar.php" para agregar el producto al carrito.










jose fernandez


de agregar.php hazme el codigo


¡Claro! Aquí tienes el código para el archivo "agregar.php", que recibe el ID del producto del formulario de "productos.php" y agrega el producto al carrito:




php


Copy code


<?php


// Iniciar la sesión


session_start();




// Obtener el ID del producto a agregar


$id = $_POST["id"];




// Verificar que el ID del producto sea válido


if (!is_numeric($id)) {


  die("ID de producto inválido.");


}




// Conectar a la base de datos


$servername = "localhost";


$username = "tu_usuario";


$password = "tu_contraseña";


$dbname = "carrito";


$conn = new mysqli($servername, $username, $password, $dbname);




// Verificar la conexión


if ($conn->connect_error) {


  die("Fallo al conectar con la base de datos: " . $conn->connect_error);


}




// Obtener la información del producto de la base de datos


$sql = "SELECT * FROM productos WHERE id = " . $id;


$result = $conn->query($sql);




// Verificar que se encontró el producto


if ($result->num_rows == 0) {


  die("No se encontró el producto.");


}




// Obtener el producto de la consulta


$row = $result->fetch_assoc();




// Agregar el producto al carrito


if (!isset($_SESSION["carrito"])) {


  // Si no existe el carrito, crearlo


  $_SESSION["carrito"] = array();


}




// Verificar si el producto ya está en el carrito


if (array_key_exists($id, $_SESSION["carrito"])) {


  // Si el producto ya está en el carrito, aumentar la cantidad


  $_SESSION["carrito"][$id]["cantidad"]++;


} else {


  // Si el producto no está en el carrito, agregarlo con cantidad 1


  $_SESSION["carrito"][$id] = array(


    "id" => $id,


    "nombre" => $row["nombre"],


    "precio" => $row["precio"],


    "cantidad" => 1


  );


}




// Mostrar mensaje de éxito y redirigir al usuario al carrito


echo "El producto \"" . $row["nombre"] . "\" se ha agregado al carrito.";


header("Location: carrito.php");




// Cerrar la conexión


$conn->close();


?>


Este código agrega el producto al carrito, verificando si ya está en el carrito y aumentando la cantidad si es así. Luego, muestra un mensaje de éxito y redirige al usuario a la página "carrito.php".










jose fernandez


haz el carrito.php


¡Por supuesto! Aquí tienes el código para la página "carrito.php", que muestra el contenido del carrito y permite al usuario modificar la cantidad de cada producto o eliminarlo del carrito:




php


Copy code


<?php


// Iniciar la sesión


session_start();




// Verificar que el carrito tenga productos


if (!isset($_SESSION["carrito"]) || count($_SESSION["carrito"]) == 0) {


  echo "<p>No hay productos en el carrito.</p>";


  exit();


}




// Conectar a la base de datos


$servername = "localhost";


$username = "tu_usuario";


$password = "tu_contraseña";


$dbname = "carrito";


$conn = new mysqli($servername, $username, $password, $dbname);




// Verificar la conexión


if ($conn->connect_error) {


  die("Fallo al conectar con la base de datos: " . $conn->connect_error);


}




// Obtener los productos del carrito de la base de datos


$ids = array_keys($_SESSION["carrito"]);


$sql = "SELECT * FROM productos WHERE id IN (" . implode(",", $ids) . ")";


$result = $conn->query($sql);




// Mostrar los productos del carrito


$total = 0;


echo "<table>";


echo "<tr><th>ID</th><th>Nombre</th><th>Precio</th><th>Cantidad</th><th>Total</th><th></th></tr>";


while($row = $result->fetch_assoc()) {


  $id = $row["id"];


  $nombre = $row["nombre"];


  $precio = $row["precio"];


  $cantidad = $_SESSION["carrito"][$id]["cantidad"];


  $subtotal = $precio * $cantidad;


  $total += $subtotal;




  echo "<tr>";


  echo "<td>" . $id . "</td>";


  echo "<td>" . $nombre . "</td>";


  echo "<td>$" . $precio . "</td>";


  echo "<td>";


  echo "<form method='POST' action='actualizar.php'>";


  echo "<input type='hidden' name='id' value='" . $id . "'>";


  echo "<input type='number' name='cantidad' value='" . $cantidad . "' min='1'>";


  echo "<input type='submit' value='Actualizar'>";


  echo "</form>";


  echo "</td>";


  echo "<td>$" . $subtotal . "</td>";


  echo "<td>";


  echo "<form method='POST' action='eliminar.php'>";


  echo "<input type='hidden' name='id' value='" . $id . "'>";


  echo "<input type='submit' value='Eliminar'>";


  echo "</form>";


  echo "</td>";


  echo "</tr>";


}


echo "<tr><td colspan='4'>Total:</td><td>$" . $total . "</td><td></td></tr>";


echo "</table>";




// Cerrar la conexión


$conn->close();


?>




<p>


  <a href="productos.php">Seguir comprando</a> |


  <a href="vaciar.php">Vaciar carrito</a> |


  <a href="comprar.php">Comprar</a>


</p>


Este código muestra una tabla con los productos del carrito, permitiendo al usuario modificar la cantidad de cada producto o eliminarlo del carrito. También muestra el total de la compra y enlaces para seguir comprando, vaciar el carrito o comprar los productos.










jose fernandez


hazme el codigo de actualizar.php


¡Claro! Aquí tienes el código para la página "actualizar.php", que actualiza la cantidad de un producto en el carrito:




php


Copy code


<?php


// Iniciar la sesión


session_start();




// Obtener el ID del producto y la cantidad nueva


$id = $_POST["id"];


$cantidad = $_POST["cantidad"];




// Verificar que el ID y la cantidad sean válidos


if (!isset($id) || !isset($cantidad) || $cantidad < 1) {


  echo "Datos inválidos.";


  exit();


}




// Actualizar la cantidad del producto en el carrito


$_SESSION["carrito"][$id]["cantidad"] = $cantidad;




// Redirigir de vuelta al carrito


header("Location: carrito.php");


exit();


?>


Este código obtiene el ID del producto y la cantidad nueva desde el formulario enviado desde la página "carrito.php", verifica que los datos sean válidos y luego actualiza la cantidad del producto en el carrito en la variable de sesión "carrito". Finalmente, redirige de vuelta a la página "carrito.php".










jose fernandez


hazme codigo de eliminar.php


¡Por supuesto! Aquí tienes el código para la página "eliminar.php", que elimina un producto del carrito:




php


Copy code


<?php


// Iniciar la sesión


session_start();




// Obtener el ID del producto a eliminar


$id = $_POST["id"];




// Verificar que el ID sea válido


if (!isset($id)) {


  echo "ID inválido.";


  exit();


}




// Eliminar el producto del carrito


unset($_SESSION["carrito"][$id]);




// Redirigir de vuelta al carrito


header("Location: carrito.php");


exit();


?>


Este código obtiene el ID del producto a eliminar desde el formulario enviado desde la página "carrito.php", verifica que el ID sea válido y luego elimina el producto del carrito en la variable de sesión "carrito". Finalmente, redirige de vuelta a la página "carrito.php".










jose fernandez


hazme el codigo de vaciar.php


¡Por supuesto! Aquí tienes el código para la página "vaciar.php", que vacía completamente el carrito:




php


Copy code


<?php


// Iniciar la sesión


session_start();




// Vaciar el carrito


unset($_SESSION["carrito"]);




// Redirigir de vuelta al carrito


header("Location: carrito.php");


exit();


?>


Este código simplemente vacía completamente el carrito en la variable de sesión "carrito" y luego redirige de vuelta a la página "carrito.php".










jose fernandez


hazme el codigo de comprar.php  para guardar  carrito de compras en una tabla llamada datalle_compras  con los campos id - idproducto - cantidad - precio - subtotal


¡Por supuesto! Aquí tienes el código para la página "comprar.php", que guarda el carrito de compras en una tabla llamada "detalle_compras" con los campos "id", "idproducto", "cantidad", "precio" y "subtotal":




php


Copy code


<?php


// Iniciar la sesión


session_start();




// Conectar a la base de datos


$conexion = mysqli_connect("localhost", "usuario", "contraseña", "basededatos");




// Verificar la conexión


if (mysqli_connect_errno()) {


  echo "Error de conexión a la base de datos: " . mysqli_connect_error();


  exit();


}




// Obtener el ID de la última compra realizada


$sql = "SELECT MAX(id) as id FROM compras";


$resultado = mysqli_query($conexion, $sql);


$fila = mysqli_fetch_assoc($resultado);


$idcompra = $fila["id"];




// Verificar si la última compra fue hace más de 5 minutos


$sql = "SELECT fecha FROM compras WHERE id = $idcompra";


$resultado = mysqli_query($conexion, $sql);


$fila = mysqli_fetch_assoc($resultado);


$fecha = strtotime($fila["fecha"]);


$ahora = strtotime("now");


if (($ahora - $fecha) > 300) {


  echo "La última compra realizada fue hace más de 5 minutos. Por favor, intente de nuevo.";


  exit();


}




// Insertar los productos del carrito en la tabla detalle_compras


foreach ($_SESSION["carrito"] as $id => $producto) {


  $idproducto = $producto["id"];


  $cantidad = $producto["cantidad"];


  $precio = $producto["precio"];


  $subtotal = $cantidad * $precio;


  $sql = "INSERT INTO detalle_compras (idcompra, idproducto, cantidad, precio, subtotal) VALUES ($idcompra, $idproducto, $cantidad, $precio, $subtotal)";


  mysqli_query($conexion, $sql);


}




// Vaciar el carrito


unset($_SESSION["carrito"]);




// Redirigir de vuelta al carrito con un mensaje de éxito


header("Location: carrito.php?compraexitosa=1");


exit();


?>


Este código primero se conecta a la base de datos y verifica si la última compra fue hace más de 5 minutos (para evitar compras duplicadas). Luego, obtiene el ID de la última compra realizada y, para cada producto en el carrito, inserta una nueva fila en la tabla "detalle_compras" con los campos "idcompra", "idproducto", "cantidad", "precio" y "subtotal". Después de insertar todos los productos, vacía el carrito y redirige de vuelta a la página "carrito.php" con un mensaje de éxito.










jose fernandez


haz el .sql de la tabla  detalle_compras


Claro, aquí tienes el código SQL para crear la tabla "detalle_compras" en la base de datos:




sql


Copy code


CREATE TABLE detalle_compras (


  id INT(11) NOT NULL AUTO_INCREMENT,


  idcompra INT(11) NOT NULL,


  idproducto INT(11) NOT NULL,


  cantidad INT(11) NOT NULL,


  precio DECIMAL(10,2) NOT NULL,


  subtotal DECIMAL(10,2) NOT NULL,


  PRIMARY KEY (id)


);


Esta tabla tiene un ID autoincremental y los campos necesarios para almacenar los detalles de cada producto comprado: el ID de la compra, el ID del producto, la cantidad, el precio y el subtotal.










jose fernandez


hazme el .sql de la tabla compras


¡Claro! Aquí tienes el código SQL para crear la tabla "compras" en la base de datos:




sql


Copy code


CREATE TABLE compras (


  id INT(11) NOT NULL AUTO_INCREMENT,


  fecha TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,


  PRIMARY KEY (id)


);


Esta tabla tiene un ID autoincremental y un campo para almacenar la fecha y hora en que se realizó la compra.










jose fernandez


ha productos.php agregar un buscador por nombre


¡Por supuesto! Aquí tienes el código para agregar un buscador por nombre a la página "productos.php":




php


Copy code


<?php


// Conectar a la base de datos


$conexion = mysqli_connect("localhost", "usuario", "contraseña", "basededatos");




// Verificar la conexión


if (mysqli_connect_errno()) {


  echo "Error de conexión a la base de datos: " . mysqli_connect_error();


  exit();


}




// Obtener los productos de la base de datos


$sql = "SELECT * FROM productos";


if (isset($_GET["buscar"]) && $_GET["buscar"] != "") {


  $buscar = mysqli_real_escape_string($conexion, $_GET["buscar"]);


  $sql .= " WHERE nombre LIKE '%$buscar%'";


}


$resultado = mysqli_query($conexion, $sql);


$productos = mysqli_fetch_all($resultado, MYSQLI_ASSOC);


?>




<!DOCTYPE html>


<html>


<head>


  <title>Lista de productos</title>


</head>


<body>


  <h1>Lista de productos</h1>


  <form action="productos.php" method="get">


    <label for="buscar">Buscar por nombre:</label>


    <input type="text" id="buscar" name="buscar">


    <button type="submit">Buscar</button>


  </form>


  <table>


    <tr>


      <th>ID</th>


      <th>Nombre</th>


      <th>Descripción</th>


      <th>Precio</th>


      <th>Acciones</th>


    </tr>


    <?php foreach ($productos as $producto): ?>


    <tr>


      <td><?php echo $producto["id"]; ?></td>


      <td><?php echo $producto["nombre"]; ?></td>


      <td><?php echo $producto["descripcion"]; ?></td>


      <td><?php echo $producto["precio"]; ?></td>


      <td>


        <form action="agregar.php" method="post">


          <input type="hidden" name="id" value="<?php echo $producto["id"]; ?>">


          <input type="hidden" name="nombre" value="<?php echo $producto["nombre"]; ?>">


          <input type="hidden" name="precio" value="<?php echo $producto["precio"]; ?>">


          <label for="cantidad">Cantidad:</label>


          <input type="number" id="cantidad" name="cantidad" min="1" value="1">


          <button type="submit">Agregar al carrito</button>


        </form>


      </td>


    </tr>


    <?php endforeach; ?>


  </table>


</body>


</html>


Este código agrega un formulario de búsqueda en la página "productos.php". Si se envía el formulario con un valor en el campo de búsqueda, se agrega una cláusula "WHERE" a la consulta SQL para buscar productos cuyo nombre contenga el valor de búsqueda. Si no se envía el formulario, se muestran todos los productos en la lista.




El resto del código es similar al anterior, con la adición de la columna "Acciones" en la tabla de productos, que contiene un formulario para agregar el producto al carrito con una cantidad especificada por el usuario.


///////////////////////////////////////////////////

HAZME EL productos.php PERO CON EL METODO PDO PHP

¡Claro! Aquí te muestro cómo se vería la página "productos.php" utilizando el método PDO para conectarse a la base de datos y obtener los productos:


php

Copy code

<?php

// Conectar a la base de datos con PDO

$dsn = 'mysql:host=localhost;dbname=basededatos';

$usuario = 'usuario';

$contraseña = 'contraseña';


try {

    $conexion = new PDO($dsn, $usuario, $contraseña);

} catch (PDOException $e) {

    echo 'Error de conexión a la base de datos: ' . $e->getMessage();

    exit();

}


// Obtener los productos de la base de datos

$sql = 'SELECT * FROM productos';

if (isset($_GET["buscar"]) && $_GET["buscar"] != "") {

  $buscar = '%' . $_GET["buscar"] . '%';

  $sql .= ' WHERE nombre LIKE :buscar';

  $stmt = $conexion->prepare($sql);

  $stmt->bindParam(':buscar', $buscar, PDO::PARAM_STR);

} else {

  $stmt = $conexion->query($sql);

}

$productos = $stmt->fetchAll(PDO::FETCH_ASSOC);

?>


<!DOCTYPE html>

<html>

<head>

  <title>Lista de productos</title>

</head>

<body>

  <h1>Lista de productos</h1>

  <form action="productos.php" method="get">

    <label for="buscar">Buscar por nombre:</label>

    <input type="text" id="buscar" name="buscar">

    <button type="submit">Buscar</button>

  </form>

  <table>

    <tr>

      <th>ID</th>

      <th>Nombre</th>

      <th>Descripción</th>

      <th>Precio</th>

      <th>Acciones</th>

    </tr>

    <?php foreach ($productos as $producto): ?>

    <tr>

      <td><?php echo $producto["id"]; ?></td>

      <td><?php echo $producto["nombre"]; ?></td>

      <td><?php echo $producto["descripcion"]; ?></td>

      <td><?php echo $producto["precio"]; ?></td>

      <td>

        <form action="agregar.php" method="post">

          <input type="hidden" name="id" value="<?php echo $producto["id"]; ?>">

          <input type="hidden" name="nombre" value="<?php echo $producto["nombre"]; ?>">

          <input type="hidden" name="precio" value="<?php echo $producto["precio"]; ?>">

          <label for="cantidad">Cantidad:</label>

          <input type="number" id="cantidad" name="cantidad" min="1" value="1">

          <button type="submit">Agregar al carrito</button>

        </form>

      </td>

    </tr>

    <?php endforeach; ?>

  </table>

</body>

</html>

La principal diferencia aquí es que en lugar de utilizar la función mysqli_connect() y los métodos mysqli_query() y mysqli_fetch_all(), se utiliza el objeto PDO para conectarse a la base de datos y ejecutar la consulta SQL. Además, se utiliza una consulta preparada con un parámetro para la búsqueda por nombre, lo que ayuda a prevenir inyecciones SQL.





jose fernandez

hazme el codigo de comprar.php PERO CON EL METODO PDO

¡Claro! Aquí te muestro cómo se vería la página "comprar.php" utilizando el método PDO para conectarse a la base de datos y guardar el carrito de compras en la tabla "detalle_compras":


php

Copy code

<?php

// Conectar a la base de datos con PDO

$dsn = 'mysql:host=localhost;dbname=basededatos';

$usuario = 'usuario';

$contraseña = 'contraseña';


try {

    $conexion = new PDO($dsn, $usuario, $contraseña);

} catch (PDOException $e) {

    echo 'Error de conexión a la base de datos: ' . $e->getMessage();

    exit();

}


// Obtener el ID de la última compra insertada

$stmt = $conexion->query('SELECT MAX(id) AS max_id FROM compras');

$compra = $stmt->fetch(PDO::FETCH_ASSOC);

$id_compra = $compra["max_id"] + 1;


// Insertar los detalles de la compra en la tabla detalle_compras

$stmt = $conexion->prepare('INSERT INTO detalle_compras (id, idproducto, cantidad, precio, subtotal) VALUES (:id, :idproducto, :cantidad, :precio, :subtotal)');


foreach ($_SESSION["carrito"] as $producto) {

    $idproducto = $producto["id"];

    $cantidad = $producto["cantidad"];

    $precio = $producto["precio"];

    $subtotal = $cantidad * $precio;


    $stmt->bindParam(':id', $id_compra, PDO::PARAM_INT);

    $stmt->bindParam(':idproducto', $idproducto, PDO::PARAM_INT);

    $stmt->bindParam(':cantidad', $cantidad, PDO::PARAM_INT);

    $stmt->bindParam(':precio', $precio, PDO::PARAM_STR);

    $stmt->bindParam(':subtotal', $subtotal, PDO::PARAM_STR);

    $stmt->execute();

}


// Actualizar el stock de los productos en la tabla productos

$stmt = $conexion->prepare('UPDATE productos SET stock = stock - :cantidad WHERE id = :idproducto');


foreach ($_SESSION["carrito"] as $producto) {

    $idproducto = $producto["id"];

    $cantidad = $producto["cantidad"];


    $stmt->bindParam(':idproducto', $idproducto, PDO::PARAM_INT);

    $stmt->bindParam(':cantidad', $cantidad, PDO::PARAM_INT);

    $stmt->execute();

}


// Insertar la compra en la tabla compras

$total = $_SESSION["total"];

$fecha = date('Y-m-d H:i:s');


$stmt = $conexion->prepare('INSERT INTO compras (fecha, total) VALUES (:fecha, :total)');

$stmt->bindParam(':fecha', $fecha, PDO::PARAM_STR);

$stmt->bindParam(':total', $total, PDO::PARAM_STR);

$stmt->execute();


// Vaciar el carrito y redirigir a la página de confirmación

$_SESSION["carrito"] = array();

$_SESSION["total"] = 0;


header('Location: confirmacion.php');

exit();

?>

La principal diferencia aquí es que en lugar de utilizar la función mysqli_connect() y los métodos mysqli_query() y mysqli_fetch_assoc(), se utiliza el objeto PDO para conectarse a la base de datos y ejecutar las consultas SQL. Además, se utiliza una consulta preparada con parámetros para las inserciones y actualizaciones, lo que ayuda a prevenir inyecciones SQL.





jose fernandez

HAZME EL CODIGO DE confirmacion.php CON EL DETALLE DE LA COMPRA

¡Por supuesto! Aquí te muestro cómo podrías construir la página "confirmacion.php" para mostrar los detalles de la compra:


php

Copy code

<?php

// Iniciar sesión para acceder al carrito y al total de la compra

session_start();

?>


<!DOCTYPE html>

<html>

<head>

    <title>Confirmación de compra</title>

    <meta charset="UTF-8">

</head>

<body>

    <h1>Confirmación de compra</h1>

    <p>Gracias por su compra. A continuación se muestra el detalle de su pedido:</p>


    <?php

    // Obtener el ID de la última compra insertada

    $dsn = 'mysql:host=localhost;dbname=basededatos';

    $usuario = 'usuario';

    $contraseña = 'contraseña';


    try {

        $conexion = new PDO($dsn, $usuario, $contraseña);

    } catch (PDOException $e) {

        echo 'Error de conexión a la base de datos: ' . $e->getMessage();

        exit();

    }


    $stmt = $conexion->query('SELECT MAX(id) AS max_id FROM compras');

    $compra = $stmt->fetch(PDO::FETCH_ASSOC);

    $id_compra = $compra["max_id"];


    // Obtener los detalles de la compra de la tabla detalle_compras

    $stmt = $conexion->prepare('SELECT productos.nombre, detalle_compras.cantidad, detalle_compras.precio, detalle_compras.subtotal FROM detalle_compras JOIN productos ON detalle_compras.idproducto = productos.id WHERE detalle_compras.id = :id');

    $stmt->bindParam(':id', $id_compra, PDO::PARAM_INT);

    $stmt->execute();


    echo '<table>';

    echo '<tr><th>Producto</th><th>Cantidad</th><th>Precio unitario</th><th>Subtotal</th></tr>';


    while ($detalle = $stmt->fetch(PDO::FETCH_ASSOC)) {

        echo '<tr><td>' . $detalle["nombre"] . '</td><td>' . $detalle["cantidad"] . '</td><td>' . $detalle["precio"] . '</td><td>' . $detalle["subtotal"] . '</td></tr>';

    }


    echo '</table>';


    // Mostrar el total de la compra

    echo '<p>Total: $' . number_format($_SESSION["total"], 2) . '</p>';


    // Vaciar el carrito

    $_SESSION["carrito"] = array();

    $_SESSION["total"] = 0;

    ?>


    <p>Gracias por su compra. Esperamos verlo pronto de nuevo.</p>

</body>

</html>

Aquí, se utiliza PDO para conectarse a la base de datos y obtener el ID de la última compra insertada. Luego, se utiliza una consulta preparada para obtener los detalles de la compra de la tabla detalle_compras, uniendo la tabla productos para obtener el nombre de cada producto. Finalmente, se muestra una tabla con los detalles de cada producto, el total de la compra y un mensaje de agradecimiento. Además, se vacía el carrito para que el usuario pueda hacer otra compra si lo desea


////////////////////////


hazme un pdf con libreria FPDF al finalizar la compra con php y mysql

¡Por supuesto! Para generar un PDF utilizando la librería FPDF al finalizar la compra, puedes utilizar el siguiente código en la página "confirmacion.php":


php

Copy code

<?php

// Iniciar sesión para acceder al carrito y al total de la compra

session_start();


// Incluir la librería FPDF

require('fpdf/fpdf.php');


// Obtener el ID de la última compra insertada

$dsn = 'mysql:host=localhost;dbname=basededatos';

$usuario = 'usuario';

$contraseña = 'contraseña';


try {

    $conexion = new PDO($dsn, $usuario, $contraseña);

} catch (PDOException $e) {

    echo 'Error de conexión a la base de datos: ' . $e->getMessage();

    exit();

}


$stmt = $conexion->query('SELECT MAX(id) AS max_id FROM compras');

$compra = $stmt->fetch(PDO::FETCH_ASSOC);

$id_compra = $compra["max_id"];


// Obtener los detalles de la compra de la tabla detalle_compras

$stmt = $conexion->prepare('SELECT productos.nombre, detalle_compras.cantidad, detalle_compras.precio, detalle_compras.subtotal FROM detalle_compras JOIN productos ON detalle_compras.idproducto = productos.id WHERE detalle_compras.id = :id');

$stmt->bindParam(':id', $id_compra, PDO::PARAM_INT);

$stmt->execute();


// Crear el PDF

$pdf = new FPDF();

$pdf->AddPage();

$pdf->SetFont('Arial', 'B', 16);

$pdf->Cell(0, 10, 'Detalle de la compra', 0, 1, 'C');

$pdf->Ln();


$pdf->SetFont('Arial', 'B', 12);

$pdf->Cell(40, 10, 'Producto', 1);

$pdf->Cell(30, 10, 'Cantidad', 1);

$pdf->Cell(30, 10, 'Precio', 1);

$pdf->Cell(40, 10, 'Subtotal', 1);

$pdf->Ln();


while ($detalle = $stmt->fetch(PDO::FETCH_ASSOC)) {

    $pdf->SetFont('Arial', '', 12);

    $pdf->Cell(40, 10, $detalle["nombre"], 1);

    $pdf->Cell(30, 10, $detalle["cantidad"], 1);

    $pdf->Cell(30, 10, $detalle["precio"], 1);

    $pdf->Cell(40, 10, $detalle["subtotal"], 1);

    $pdf->Ln();

}


// Mostrar el total de la compra

$pdf->SetFont('Arial', 'B', 12);

$pdf->Cell(100, 10, 'Total', 1);

$pdf->Cell(40, 10, '$' . number_format($_SESSION["total"], 2), 1);

$pdf->Ln();


// Vaciar el carrito

$_SESSION["carrito"] = array();

$_SESSION["total"] = 0;


// Descargar el PDF

$pdf->Output('D', 'detalle_compra.pdf');

?>

Este código crea un objeto PDF utilizando la librería FPDF, obtiene los detalles de la compra de la tabla detalle_compras y los agrega al PDF utilizando la función Cell(). También se muestra el total de la compra y se vacía el carrito. Finalmente, el PDF se descarga en el navegador utilizando la función Output() con el parámetro 'D' para descargar el archivo en lugar de guardarlo en el servidor.

















-- --------------------------------------------------------




--


-- Estructura de tabla para la tabla `compras`


--




CREATE TABLE `compras` (


  `id` int(11) NOT NULL,


  `fecha` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,


  `total` double(10,2) NOT NULL


) ENGINE=InnoDB DEFAULT CHARSET=latin1;




--


-- Volcado de datos para la tabla `compras`


--




INSERT INTO `compras` (`id`, `fecha`, `total`) VALUES


(1, '2023-04-20 16:48:39', 0.00),


(2, '2023-04-20 17:03:39', 0.00),


(3, '2023-04-20 17:38:22', 0.00),


(4, '2023-04-20 17:40:32', 40.50),


(5, '2023-04-20 17:44:53', 67.00);




-- --------------------------------------------------------




--


-- Estructura de tabla para la tabla `detalle_compras`


--




CREATE TABLE `detalle_compras` (


  `id` int(11) NOT NULL,


  `idcompra` int(11) NOT NULL,


  `idproducto` int(11) NOT NULL,


  `cantidad` int(11) NOT NULL,


  `precio` decimal(10,2) NOT NULL,


  `subtotal` decimal(10,2) NOT NULL


) ENGINE=InnoDB DEFAULT CHARSET=latin1;




--


-- Volcado de datos para la tabla `detalle_compras`


--




INSERT INTO `detalle_compras` (`id`, `idcompra`, `idproducto`, `cantidad`, `precio`, `subtotal`) VALUES


(1, 1, 3, 2, '20.75', '41.50'),


(2, 1, 2, 1, '15.00', '15.00'),


(3, 1, 4, 1, '5.99', '5.99'),


(4, 1, 1, 1, '10.50', '10.50'),


(5, 2, 1, 1, '10.50', '10.50'),


(6, 3, 1, 2, '10.50', '21.00'),


(7, 4, 1, 1, '10.50', '10.50'),


(8, 4, 2, 2, '15.00', '30.00'),


(9, 5, 1, 1, '10.50', '10.50'),


(10, 5, 2, 1, '15.00', '15.00'),


(11, 5, 3, 2, '20.75', '41.50');




-- --------------------------------------------------------




--


-- Estructura de tabla para la tabla `productos`


--




CREATE TABLE `productos` (


  `id` int(11) NOT NULL,


  `nombre` varchar(50) NOT NULL,


  `descripcion` text NOT NULL,


  `precio` decimal(10,2) NOT NULL,


  `imagen` varchar(100) NOT NULL


) ENGINE=InnoDB DEFAULT CHARSET=latin1;




--


-- Volcado de datos para la tabla `productos`


--




INSERT INTO `productos` (`id`, `nombre`, `descripcion`, `precio`, `imagen`) VALUES


(1, 'Producto 1', 'Descripción del producto 1', '10.50', 'imagen1.jpg'),


(2, 'Producto 2', 'Descripción del producto 2', '15.00', 'imagen2.jpg'),


(3, 'Producto 3', 'Descripción del producto 3', '20.75', 'imagen3.jpg'),


(4, 'Producto 4', 'Descripción del producto 4', '5.99', 'imagen4.jpg');




--


-- Índices para tablas volcadas


--




--


-- Indices de la tabla `compras`


--


ALTER TABLE `compras`


  ADD PRIMARY KEY (`id`);




--


-- Indices de la tabla `detalle_compras`


--


ALTER TABLE `detalle_compras`


  ADD PRIMARY KEY (`id`);




--


-- Indices de la tabla `productos`


--


ALTER TABLE `productos`


  ADD PRIMARY KEY (`id`);




--


-- AUTO_INCREMENT de las tablas volcadas


--




--


-- AUTO_INCREMENT de la tabla `compras`


--


ALTER TABLE `compras`


  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;




--


-- AUTO_INCREMENT de la tabla `detalle_compras`


--


ALTER TABLE `detalle_compras`


  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12;




--


-- AUTO_INCREMENT de la tabla `productos`


--


ALTER TABLE `productos`



  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;


Comentarios

Entradas populares de este blog

Como proteger una api json con php al pasar el parametro POST[id] de los ataques sql injection y xss

Copia de Seguridad de Archivo MS Access (.mdb) a Pendrive con VB6

NUMEROS SERIE DE DISCO RIGIDO Y PENDRIVER USB CON PHP