Carrito de compra
Estoy creando una web en PHP en la cual necesito crear un carrito de compra. ¿Me podrían pasar información sobre cómo empezar o si tienen el código? Me gustaría hacerlo por módulos y así poder utilizarlo en diferentes web.
¿Cómo podría hacerlo?
¿Cómo podría hacerlo?
1 Respuesta
Respuesta de Alfredo Villa
1
1
Alfredo Villa, Programador Php, MySQL, Javascript, Html, Xml, Ajax, Marketing...
Te envío uno sencillo con array, y otro com base de edatos mysql.
Con Array:
La idea de este tutorial es ayudar un poco al post anterior de manejo de sesiones con php a través de un par de ejemplos. Más específicamente voy a demostrar cómo crear un sistema de autenticación y un carrito de compras y, los dos de una manera muy simple.
Sistema de autenticación:
Supongamos que tenemos una serie de usuarios guardados en una base de datos. El script login.php buscará el usuario ingresado por el usuario a través un formulario y, si el password ingresado coincide, incializará la sesión.
<?php
$Query = mysql_query("SELECT * FROM `usuarios` WHERE `username` = '$_POST[username]'");
if(mysql_num_rows($Query) != 0) {
$data = mysql_fetch_array($Query);
if($data['password'] = $_POST['password']) {
session_start();
$_SESSION['auth'] = true;
header("Location: pagina1.php");
} else {
$error = "El password ingresado es incorrecto";
}
} else {
$error = "El usuario ingresado no existe";
}
?>
Voy a tratar de explicar el script línea a línea para que lo puedan comprender fácilmente.
Para comenzar, buscamos la información del usuario en la base de datos y la guardamos en la variable $Query.
Luego comparamos que el usuario exista comprobando la cantidad de registros que obtuvimos de la base de datos. Mysql_num_rows($Query) debería ser igual a 1, de ser igual a 0 nos estaría indicando que el usuario no existe, y de ser mayor a 1, habría más de un usuario con el mismo nombre.
A continuación comparamos el password enviado por el usuario ($_POST['password']) con el que se encuentra guardado en la base de datos ($data['password']). De ser correcto, inicializar la sesión, crear una variable de sesión cualquiera ($_SESSION['auth']) y redireccionar al usuario a la siguiente página.
El resto sería crear un script que reanude la sesión (session_start()) y compruebe la existencia de la variable creada anteriormente. Ese script debería ir incluido en todas las páginas reservadas a los usuarios registrados.
<?php
session_start();
if(!$_SESSION['auth']) {
header("Location: login.php?error=true");
}
?>
Por último, un simple script para cerrar la sesión que llame a la función session_destroy().
Carrito de compras:
Si ya entendieron bien lo anterior, esto no debería ser una gran complicación por lo que voy a explicar este ejemplo brevemente.
Basta con un script que cree una variable de sesión en forma de array (matriz) en el que podemos guardar la lista de todos los productos que el usuario va agregando al carrito. Supongamos que contamos con una página que obtiene la lista de productos desde una base de datos y crea un link al carrito para cada producto pasando el id del producto por la URL. El script que agregue los productos al carrito podría ser algo similar a esto:
<?php
if($_GET['id']) {
session_start();
if(!$_SESSION['productos']) { $_SESSION['productos'] = array(); }
$_SESSION['productos'][] = $_GET['id'];
} else {
echo "Error: no se encuentra el id del producto.";
}
?>
Simple, ¿no? Ahora contamos con el array $_SESSION['productos'] que contiene todos los productos del carrito. El resto es cuestión de trabajar con ese array para manipular el pedido: enviarlo por e-mail, guardarlo en un archivo, en una base de datos, etc.
****************
Con Mysql:
Este script te permite tener en tu propia página web un Carrito de Compras, fácil y muy practico de instalar, que resulta toda una solución a la hora de ofrecer una caratula de productos para la venta en internet, utiliza Mysql .
Estructura de la tabla de Mysql
# Table structure for table 'inventory'
#
CREATE TABLE inventory (
product tinytext NOT NULL,
quantity tinytext NOT NULL,
id int(4) DEFAULT '0' NOT NULL auto_increment,
description tinytext NOT NULL,
price float(10,2) DEFAULT '0.00' NOT NULL,
category char(1) DEFAULT '' NOT NULL,
KEY id (id),
PRIMARY KEY (id),
KEY price (price)
);
#
# Table structure for table 'shopping'
#
CREATE TABLE shopping (
session tinytext NOT NULL,
product tinytext NOT NULL,
quantity tinytext NOT NULL,
card tinytext NOT NULL,
id int(4) DEFAULT '0' NOT NULL auto_increment,
KEY id (id),
PRIMARY KEY (id)
);
CREAREMOS EL ARCHIVO shoppingcart.php
<?
/* shoppingcart.php
*
*
*/
if(!$session && !$scid) {
$session = md5(uniqid(rand()));
SetCookie("scid", "$session", time() + 14400);
} /* last number is expiration time in seconds, 14400 sec = 4 hrs */
class Cart {
function check_item($table, $session, $product) {
$query = "SELECT * FROM $table WHERE session='$session' AND product='$product' ";
$result = mysql_query($query);
if(!$result) {
return 0;
}
$numRows = mysql_num_rows($result);
if($numRows == 0) {
return 0;
} else {
$row = mysql_fetch_object($result);
return $row->quantity;
}
}
function add_item($table, $session, $product, $quantity) {
$qty = $this->check_item($table, $session, $product);
if($qty == 0) {
$query = "INSERT INTO $table (session, product, quantity) VALUES ";
$query .= "('$session', '$product', '$quantity') ";
mysql_query($query);
} else {
$quantity += $qty;
$query = "UPDATE $table SET quantity='$quantity' WHERE session='$session' AND ";
$query .= "product='$product' ";
mysql_query($query);
}
}
function delete_item($table, $session, $product) {
$query = "DELETE FROM $table WHERE session='$session' AND product='$product' ";
mysql_query($query);
}
function modify_quantity($table, $session, $product, $quantity) {
$query = "UPDATE $table SET quantity='$quantity' WHERE session='$session' ";
$query .= "AND product='$product' ";
mysql_query($query);
}
function clear_cart($table, $session) {
$query = "DELETE FROM $table WHERE session='$session' ";
mysql_query($query);
}
function cart_total($table, $session) {
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0) {
while($row = mysql_fetch_object($result)) {
$query = "SELECT price FROM inventory WHERE product='$row->product' ";
$invResult = mysql_query($query);
$row_price = mysql_fetch_object($invResult);
$total += ($row_price->price * $row->quantity);
}
}
return $total;
}
function display_contents($table, $session) {
$count = 0;
$query = "SELECT * FROM $table WHERE session='$session' ORDER BY id ";
$result = mysql_query($query);
while($row = mysql_fetch_object($result)) {
$query = "SELECT * FROM inventory WHERE product='$row->product' ";
$result_inv = mysql_query($query);
$row_inventory = mysql_fetch_object($result_inv);
$contents["product"][$count] = $row_inventory->product;
$contents["price"][$count] = $row_inventory->price;
$contents["quantity"][$count] = $row->quantity;
$contents["total"][$count] = ($row_inventory->price * $row->quantity);
$contents["description"][$count] = $row_inventory->description;
$count++;
}
$total = $this->cart_total($table, $session);
$contents["final"] = $total;
return $contents;
}
function num_items($table, $session) {
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
return $num_rows;
}
function quant_items($table, $session) {
$quant = 0;
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
while($row = mysql_fetch_object($result)) {
$quant += $row->quantity;
}
return $quant;
}
}
?>
--------------------------------------------------------------------------------
Ejemplo:
<?
include("shoppingcart.php");
$cart = new Cart;
$mysql_link = mysql_connect("localhost", "user", "password");
$mysql_select_db("kmartShopper", $mysql_link) /* heh, use whatever database name you put the 2 tables under in place of kmartShopper */
?>
/* call functions like $cart->add_item and such, see the code. */
Cualquier cosa me cuentas
Almonato
Con Array:
La idea de este tutorial es ayudar un poco al post anterior de manejo de sesiones con php a través de un par de ejemplos. Más específicamente voy a demostrar cómo crear un sistema de autenticación y un carrito de compras y, los dos de una manera muy simple.
Sistema de autenticación:
Supongamos que tenemos una serie de usuarios guardados en una base de datos. El script login.php buscará el usuario ingresado por el usuario a través un formulario y, si el password ingresado coincide, incializará la sesión.
<?php
$Query = mysql_query("SELECT * FROM `usuarios` WHERE `username` = '$_POST[username]'");
if(mysql_num_rows($Query) != 0) {
$data = mysql_fetch_array($Query);
if($data['password'] = $_POST['password']) {
session_start();
$_SESSION['auth'] = true;
header("Location: pagina1.php");
} else {
$error = "El password ingresado es incorrecto";
}
} else {
$error = "El usuario ingresado no existe";
}
?>
Voy a tratar de explicar el script línea a línea para que lo puedan comprender fácilmente.
Para comenzar, buscamos la información del usuario en la base de datos y la guardamos en la variable $Query.
Luego comparamos que el usuario exista comprobando la cantidad de registros que obtuvimos de la base de datos. Mysql_num_rows($Query) debería ser igual a 1, de ser igual a 0 nos estaría indicando que el usuario no existe, y de ser mayor a 1, habría más de un usuario con el mismo nombre.
A continuación comparamos el password enviado por el usuario ($_POST['password']) con el que se encuentra guardado en la base de datos ($data['password']). De ser correcto, inicializar la sesión, crear una variable de sesión cualquiera ($_SESSION['auth']) y redireccionar al usuario a la siguiente página.
El resto sería crear un script que reanude la sesión (session_start()) y compruebe la existencia de la variable creada anteriormente. Ese script debería ir incluido en todas las páginas reservadas a los usuarios registrados.
<?php
session_start();
if(!$_SESSION['auth']) {
header("Location: login.php?error=true");
}
?>
Por último, un simple script para cerrar la sesión que llame a la función session_destroy().
Carrito de compras:
Si ya entendieron bien lo anterior, esto no debería ser una gran complicación por lo que voy a explicar este ejemplo brevemente.
Basta con un script que cree una variable de sesión en forma de array (matriz) en el que podemos guardar la lista de todos los productos que el usuario va agregando al carrito. Supongamos que contamos con una página que obtiene la lista de productos desde una base de datos y crea un link al carrito para cada producto pasando el id del producto por la URL. El script que agregue los productos al carrito podría ser algo similar a esto:
<?php
if($_GET['id']) {
session_start();
if(!$_SESSION['productos']) { $_SESSION['productos'] = array(); }
$_SESSION['productos'][] = $_GET['id'];
} else {
echo "Error: no se encuentra el id del producto.";
}
?>
Simple, ¿no? Ahora contamos con el array $_SESSION['productos'] que contiene todos los productos del carrito. El resto es cuestión de trabajar con ese array para manipular el pedido: enviarlo por e-mail, guardarlo en un archivo, en una base de datos, etc.
****************
Con Mysql:
Este script te permite tener en tu propia página web un Carrito de Compras, fácil y muy practico de instalar, que resulta toda una solución a la hora de ofrecer una caratula de productos para la venta en internet, utiliza Mysql .
Estructura de la tabla de Mysql
# Table structure for table 'inventory'
#
CREATE TABLE inventory (
product tinytext NOT NULL,
quantity tinytext NOT NULL,
id int(4) DEFAULT '0' NOT NULL auto_increment,
description tinytext NOT NULL,
price float(10,2) DEFAULT '0.00' NOT NULL,
category char(1) DEFAULT '' NOT NULL,
KEY id (id),
PRIMARY KEY (id),
KEY price (price)
);
#
# Table structure for table 'shopping'
#
CREATE TABLE shopping (
session tinytext NOT NULL,
product tinytext NOT NULL,
quantity tinytext NOT NULL,
card tinytext NOT NULL,
id int(4) DEFAULT '0' NOT NULL auto_increment,
KEY id (id),
PRIMARY KEY (id)
);
CREAREMOS EL ARCHIVO shoppingcart.php
<?
/* shoppingcart.php
*
*
*/
if(!$session && !$scid) {
$session = md5(uniqid(rand()));
SetCookie("scid", "$session", time() + 14400);
} /* last number is expiration time in seconds, 14400 sec = 4 hrs */
class Cart {
function check_item($table, $session, $product) {
$query = "SELECT * FROM $table WHERE session='$session' AND product='$product' ";
$result = mysql_query($query);
if(!$result) {
return 0;
}
$numRows = mysql_num_rows($result);
if($numRows == 0) {
return 0;
} else {
$row = mysql_fetch_object($result);
return $row->quantity;
}
}
function add_item($table, $session, $product, $quantity) {
$qty = $this->check_item($table, $session, $product);
if($qty == 0) {
$query = "INSERT INTO $table (session, product, quantity) VALUES ";
$query .= "('$session', '$product', '$quantity') ";
mysql_query($query);
} else {
$quantity += $qty;
$query = "UPDATE $table SET quantity='$quantity' WHERE session='$session' AND ";
$query .= "product='$product' ";
mysql_query($query);
}
}
function delete_item($table, $session, $product) {
$query = "DELETE FROM $table WHERE session='$session' AND product='$product' ";
mysql_query($query);
}
function modify_quantity($table, $session, $product, $quantity) {
$query = "UPDATE $table SET quantity='$quantity' WHERE session='$session' ";
$query .= "AND product='$product' ";
mysql_query($query);
}
function clear_cart($table, $session) {
$query = "DELETE FROM $table WHERE session='$session' ";
mysql_query($query);
}
function cart_total($table, $session) {
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0) {
while($row = mysql_fetch_object($result)) {
$query = "SELECT price FROM inventory WHERE product='$row->product' ";
$invResult = mysql_query($query);
$row_price = mysql_fetch_object($invResult);
$total += ($row_price->price * $row->quantity);
}
}
return $total;
}
function display_contents($table, $session) {
$count = 0;
$query = "SELECT * FROM $table WHERE session='$session' ORDER BY id ";
$result = mysql_query($query);
while($row = mysql_fetch_object($result)) {
$query = "SELECT * FROM inventory WHERE product='$row->product' ";
$result_inv = mysql_query($query);
$row_inventory = mysql_fetch_object($result_inv);
$contents["product"][$count] = $row_inventory->product;
$contents["price"][$count] = $row_inventory->price;
$contents["quantity"][$count] = $row->quantity;
$contents["total"][$count] = ($row_inventory->price * $row->quantity);
$contents["description"][$count] = $row_inventory->description;
$count++;
}
$total = $this->cart_total($table, $session);
$contents["final"] = $total;
return $contents;
}
function num_items($table, $session) {
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
return $num_rows;
}
function quant_items($table, $session) {
$quant = 0;
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
while($row = mysql_fetch_object($result)) {
$quant += $row->quantity;
}
return $quant;
}
}
?>
--------------------------------------------------------------------------------
Ejemplo:
<?
include("shoppingcart.php");
$cart = new Cart;
$mysql_link = mysql_connect("localhost", "user", "password");
$mysql_select_db("kmartShopper", $mysql_link) /* heh, use whatever database name you put the 2 tables under in place of kmartShopper */
?>
/* call functions like $cart->add_item and such, see the code. */
Cualquier cosa me cuentas
Almonato
- Compartir respuesta
- Anónimo
ahora mismo