CARRITO SESSION GUARDAR CHAT GPT JS PHP MYSQL OTRO CASO

 <!DOCTYPE html>

<html lang="es">

<head>

    <meta charset="UTF-8">

    <title>Carrito de compras</title>

</head>

<body>

    <h1>Productos disponibles</h1>

    <ul id="productos"></ul>


    <script src="productos.js"></script>

</body>

</html>


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


const productos = document.getElementById('productos');


function obtenerProductos() {

    fetch('obtenerProductos.php')

    .then(response => response.json())

    .then(data => {

        data.forEach(producto => {

            const li = document.createElement('li');

            li.innerHTML = `${producto.nombre} - $${producto.precio}

<button onclick="agregarProducto(${producto.id})">Agregar al

carrito</button>`;

            productos.appendChild(li);

        });

    });

}


obtenerProductos();


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


<?php


require_once 'conexion.php';


$statement = $conexion->prepare('SELECT * FROM productos');

$statement->execute();

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


header('Content-Type: application/json');

echo json_encode($productos);



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


let carrito = [];


function agregarProducto(id) {

    fetch(`agregarProducto.php?id=${id}`)

    .then(response => response.json())

    .then(data => {

        carrito = data;

        mostrarCarrito(carrito);

    });

}


function actualizarCantidad(id, cantidad) {

    fetch(`actualizarCantidad.php?id=${id}&cantidad=${cantidad}`)

    .then(response => response.json())

    .then(data => {

        carrito = data;

        mostrarCarrito(carrito);

    });

}


function eliminarProducto(id) {

    fetch(`eliminarProducto.php?id=${id}`)

    .then(response => response.json())

    .then(data => {

        carrito = data;

        mostrarCarrito(carrito);

    });

}


function vaciarCarrito() {

    fetch('vaciarCarrito.php')

    .then(response => response.json())

    .then(data => {

        carrito = data;

        mostrarCarrito(carrito);

    });

}


function mostrarCarrito(carrito) {

    const carritoElement = document.getElementById('carrito');

    carritoElement.innerHTML = '';


    carrito.forEach(producto => {

        const row = document.createElement('tr');

        const item = document.createElement('td');

        item.innerHTML = `${producto.nombre} x <input type="number"

value="${producto.cantidad}" min="1" max="100"

onchange="actualizarCantidad(${producto.id}, this.value)" /> =

$${producto.precio * producto.cantidad}`;

        row.appendChild(item);


        const botonEliminar = document.createElement('button');

        botonEliminar.innerHTML = 'Eliminar';

        botonEliminar.onclick = () => eliminarProducto(producto.id);

        row.appendChild(botonEliminar);


        carritoElement.appendChild(row);

    });

}


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


carrito.php


<?php

session_start();

require_once 'config.php';


if (isset($_POST['id']) && isset($_POST['action'])) {

  $id = $_POST['id'];


  switch ($_POST['action']) {

    case 'add':

      agregarProducto($id);

      break;

    case 'update':

      actualizarCantidad($id, $_POST['cantidad']);

      break;

    case 'remove':

      eliminarProducto($id);

      break;

    case 'vaciar':

      vaciarCarrito();

      break;

  }

}


function agregarProducto($id) {

  global $pdo;


  $stmt = $pdo->prepare("SELECT * FROM productos WHERE id = ?");

  $stmt->execute([$id]);

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


  if (!$producto) {

    die("El producto seleccionado no existe.");

  }


  if (isset($_SESSION['carrito'][$id])) {

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

  } else {

    $_SESSION['carrito'][$id] = [

      'id' => $id,

      'nombre' => $producto['nombre'],

      'precio' => $producto['precio'],

      'cantidad' => 1

    ];

  }


  header('Content-Type: application/json');

  echo json_encode($_SESSION['carrito']);

}


function actualizarCantidad($id, $cantidad) {

  if (isset($_SESSION['carrito'][$id])) {

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

  }


  header('Content-Type: application/json');

  echo json_encode($_SESSION['carrito']);

}


function eliminarProducto($id) {

  if (isset($_SESSION['carrito'][$id])) {

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

  }


  header('Content-Type: application/json');

  echo json_encode($_SESSION['carrito']);

}


function vaciarCarrito() {

  unset($_SESSION['carrito']);


  header('Content-Type: application/json');

  echo json_encode($_SESSION['carrito']);

}


function mostrarCarrito() {

  $total = 0;


  if (isset($_SESSION['carrito'])) {

    echo '<table>';

    echo '<thead>';

    echo '<tr>';

    echo '<th>Producto</th>';

    echo '<th>Precio</th>';

    echo '<th>Cantidad</th>';

    echo '<th>Total</th>';

    echo '<th>Eliminar</th>';

    echo '</tr>';

    echo '</thead>';

    echo '<tbody>';


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

  $subtotal = $producto['precio'] * $producto['cantidad'];

  $total += $subtotal;


  echo '<tr>';

  echo '<td>' . $producto['nombre'] . '</td>';

  echo '<td>$' . number_format($producto['precio'], 2) . '</td>';

  echo '<td><input type="number" min="1" max="100" value="' .

$producto['cantidad'] . '" onchange="actualizarCantidad(' .

$producto['id'] . ', this.value)"></td>';

  echo '<td>$' . number_format($subtotal, 2) . '</td>';

  echo '<td><button onclick="eliminarProducto(' . $producto['id'] .

')">Eliminar</button></td>';

  echo '</tr>';

}


echo '</tbody>';

echo '<tfoot>';

echo '<tr>';

echo '<td colspan="3">Total:</td>';

echo '<td>$' . number_format($total, 2) . '</td>';

echo '<td></td>';

echo '</tr>';

echo '</tfoot>';

echo '</table>';

} else {

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

}

}


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



agregarProducto.php



<?php


// Verificar que se haya enviado un ID de producto

if (!isset($_POST['id'])) {

  echo json_encode(array('ok' => false, 'mensaje' => 'No se ha

especificado un ID de producto.'));

  exit();

}


$id = $_POST['id'];


// Obtener el producto de la base de datos

// Aquí deberías reemplazar las credenciales y el nombre de la base de

datos con los tuyos

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

$usuario = 'nombre_de_usuario';

$contraseña = 'contraseña';

try {

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

  $consulta = $conexion->prepare('SELECT * FROM productos WHERE id = :id');

  $consulta->bindParam(':id', $id);

  $consulta->execute();

  $producto = $consulta->fetch(PDO::FETCH_ASSOC);

} catch (PDOException $e) {

  echo json_encode(array('ok' => false, 'mensaje' => 'Error al

conectar con la base de datos.'));

  exit();

}


// Verificar que se haya encontrado el producto en la base de datos

if (!$producto) {

  echo json_encode(array('ok' => false, 'mensaje' => 'No se ha

encontrado el producto especificado.'));

  exit();

}


// Verificar que haya suficiente stock para el producto

if ($producto['stock'] <= 0) {

  echo json_encode(array('ok' => false, 'mensaje' => 'No hay

suficiente stock para este producto.'));

  exit();

}


// Obtener el carrito actual del usuario

session_start();

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

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

}

$carrito = $_SESSION['carrito'];


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

$indice = array_search($id, array_column($carrito, 'id'));

if ($indice !== false) {

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

  $carrito[$indice]['cantidad'] += 1;

} else {

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

  $producto_carrito = array(

    'id' => $id,

    'nombre' => $producto['nombre'],

    'precio' => $producto['precio'],

    'cantidad' => 1,

  );

  array_push($carrito, $producto_carrito);

}


// Actualizar el stock del producto en la base de datos

$stock_actualizado = $producto['stock'] - 1;

try {

  $consulta = $conexion->prepare('UPDATE productos SET stock = :stock

WHERE id = :id');

  $consulta->bindParam(':stock', $stock_actualizado);

  $consulta->bindParam(':id', $id);

  $consulta->execute();

} catch (PDOException $e) {

  echo json_encode(array('ok' => false, 'mensaje' => 'Error al

actualizar el stock del producto.'));

  exit();

}


// Guardar el carrito actualizado en la sesión

$_SESSION['carrito'] = $carrito;


// Responder con el carrito actualizado

echo json_encode(array('ok' => true, 'carrito' => $carrito));


?>


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




actualizarCantidad.php




<?php


session_start();


if(isset($_SESSION['carrito']) && !empty($_GET['id']) &&

!empty($_GET['cantidad'])) {

    $id = $_GET['id'];

    $cantidad = $_GET['cantidad'];


    // Conexión a la base de datos

    $dsn = "mysql:host=localhost;dbname=nombre_de_la_base_de_datos;charset=utf8mb4";

    $usuario = "nombre_del_usuario";

    $contraseña = "contraseña_del_usuario";


    try {

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

        $conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    } catch(PDOException $e) {

        echo "Error: " . $e->getMessage();

    }


    // Consulta para obtener el producto

    $consulta = "SELECT * FROM productos WHERE id = :id";

    $statement = $conexion->prepare($consulta);

    $statement->execute(array(':id' => $id));

    $producto = $statement->fetch(PDO::FETCH_ASSOC);


    // Si el producto existe

    if ($producto) {

        $carrito = $_SESSION['carrito'];


        // Actualizar la cantidad

        foreach ($carrito as $key => $producto_carrito) {

            if ($producto_carrito['id'] == $id) {

                $carrito[$key]['cantidad'] = $cantidad;

            }

        }


        // Actualizar el carrito en la sesión

        $_SESSION['carrito'] = $carrito;


        // Devolver el carrito actualizado

        header('Content-Type: application/json');

        echo json_encode($_SESSION['carrito']);

    }

}


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


eliminarProducto.php



<?php

session_start();


if (isset($_GET['id'])) {

    $id = $_GET['id'];


    if (isset($_SESSION['carrito'][$id])) {

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

    }

}


header('Location: carrito.php');

exit();

?>







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

vaciarCarrito.php


<?php

session_start();


unset($_SESSION['carrito']);


header('Location: carrito.php');

exit();

?>


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


guardarCarrito.php



<?php

$servername = "localhost";

$username = "tu_usuario";

$password = "tu_contraseña";

$dbname = "tu_base_de_datos";


// Crear conexión

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

// Comprobar conexión

if ($conn->connect_error) {

  die("Connection failed: " . $conn->connect_error);

}


// Recibir datos del carrito

$carrito = json_decode($_POST['carrito']);


// Recorrer el carrito y guardar los productos en la tabla

foreach ($carrito as $producto) {

  $nombre = $producto->nombre;

  $cantidad = $producto->cantidad;

  $precio = $producto->precio;


  $sql = "INSERT INTO carrito (nombre, cantidad, precio) VALUES

('$nombre', $cantidad, $precio)";


  if ($conn->query($sql) === TRUE) {

    echo "Producto guardado correctamente";

  } else {

    echo "Error: " . $sql . "<br>" . $conn->error;

  }

}


$conn->close();

?>


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


function guardarCarrito() {


  const carrito = JSON.stringify(Object.values(localStorage));


  fetch('guardarCarrito.php', {

    method: 'POST',

    headers: {

      'Content-Type': 'application/json'

    },

    body: carrito

  })

  .then(response => {

    if (!response.ok) {

      throw new Error('Error al guardar el carrito');

    }

    localStorage.clear();

    alert('Carrito guardado exitosamente');

  })

  .catch(error => {

    console.error(error);

    alert('Error al guardar el carrito');

  });

}



//////////////////////esteeeeeeeeeeeeeeeeeeeeeeeee


function guardarCarrito() {

  fetch('guardarCarrito.php', {

    method: 'POST',

    headers: {

      'Content-Type': 'application/json'

    },

    body: JSON.stringify({ carrito: $_SESSION["carrito"] })

  })

  .then(response => {

    if (!response.ok) {

      throw new Error('Error al guardar el carrito');

    }

    return response.json();

  })

  .then(data => {

    console.log('Carrito guardado exitosamente:', data);

  })

  .catch(error => {

    console.error('Error al guardar el carrito:', error);

  });

}

En el archivo PHP guardarCarrito.php, puedes obtener el objeto JSON

enviado por la solicitud POST y luego convertirlo de nuevo en un

objeto PHP utilizando la función json_decode(). Aquí te muestro un

ejemplo:


php

Copy code

<?php

session_start();


if ($_SERVER['REQUEST_METHOD'] === 'POST') {

  $json = file_get_contents('php://input');

  $data = json_decode($json, true);


  $_SESSION['carrito'] = $data['carrito'];


  echo json_encode(['message' => 'Carrito guardado exitosamente']);

} else {

  echo json_encode(['error' => 'Solicitud no válida']);

}

?>


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



<?php

// Iniciar sesión

session_start();


// Verificar si el carrito existe

if (isset($_SESSION['carrito'])) {

    // Obtener los detalles de la conexión a la base de datos

    $host = 'localhost';

    $dbname = 'nombre_de_la_base_de_datos';

    $username = 'nombre_de_usuario';

    $password = 'contraseña';


    // Conectar a la base de datos usando PDO

    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);


    // Preparar la consulta para insertar los productos del carrito en la tabla

    $stmt = $pdo->prepare("INSERT INTO carrito (nombre, precio,

cantidad) VALUES (:nombre, :precio, :cantidad)");


    // Recorrer los productos del carrito

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

        // Asignar los valores de los productos a los parámetros de la consulta

        $stmt->bindParam(':nombre', $producto['nombre']);

        $stmt->bindParam(':precio', $producto['precio']);

        $stmt->bindParam(':cantidad', $producto['cantidad']);


        // Ejecutar la consulta

        $stmt->execute();

    }


    // Cerrar la conexión a la base de datos

    $pdo = null;


    // Vaciar el carrito

    unset($_SESSION['carrito']);


    // Redirigir al usuario a la página de confirmación de compra

    header('Location: confirmacion.php');

    exit;

} else {

    // Si el carrito no existe, redirigir al usuario a la página de inicio

    header('Location: index.php');

    exit;

}

?>


Comentarios

Entradas populares de este blog

INSERTAR Y UPDATE FECHA CON PHP MYSQL EN FORMULARIO METODO POST CON JQUERY ETIQUETA DATE

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

CONVERTIR IMÁGEN JPG O PNG A WEBP CON PHP DE FORMA SIMPLE