如何使用PHP编程语言创建商品多规格SKU功能

什么是商品多规格SKU功能

在电商网站中,商品不仅有一个单一属性,还可能存在多种特性,如不同颜色、不同尺寸等。这时候我们就需要使用商品多规格SKU功能。SKU是Stock Keeping Unit的缩写,中文意思为库存量单位,是商品管理系统中不可缺少的部分,其实就是给每一个商品设置一个标识。当商品拥有多种规格时,通过SKU来区分不同规格以及不同价格,方便用户在前台页面选择自己需要的商品规格。

实现商品多规格SKU功能的必要性

实现商品多规格SKU功能可以给用户提供更好的购物体验,如用户可以更方便地在页面上选择不同的SKU商品规格,避免到最后出现不符合预期的情况。并且在后台管理方面,我们可以更方便地对商品进行库存管理、价格管理等。

如何使用PHP编程语言创建商品多规格SKU功能

一、创建商品表以及规格表

首先我们需要创建两个表:商品表和规格表,这两个表的结构可以按照以下方式创建:

CREATE TABLE `goods` (

`goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品ID',

`goods_name` varchar(255) NOT NULL DEFAULT '' COMMENT '商品名称',

`goods_sn` varchar(60) NOT NULL DEFAULT '' COMMENT '商品编码',

`shop_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '销售价格',

`market_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '市场价格',

`goods_number` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '库存',

`goods_thumb` varchar(255) NOT NULL DEFAULT '',

`goods_desc` text NOT NULL COMMENT '商品描述',

`is_on_sale` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否上架,1表示上架,0表示下架',

`sort_order` smallint(4) unsigned NOT NULL DEFAULT '50',

`add_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间',

PRIMARY KEY (`goods_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='商品表';

CREATE TABLE `goods_spec` (

`spec_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '规格ID',

`spec_name` varchar(60) NOT NULL DEFAULT '' COMMENT '规格名称',

PRIMARY KEY (`spec_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='规格表';

二、创建商品规格值表和SKU表

接下来我们需要再创建两个表:商品规格值表和SKU表,这两个表的结构可以按照以下方式创建:

CREATE TABLE `goods_spec_value` (

`spec_value_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '规格值ID',

`spec_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '规格ID',

`spec_value` varchar(60) NOT NULL DEFAULT '' COMMENT '规格值',

PRIMARY KEY (`spec_value_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='商品规格值表';

CREATE TABLE `goods_sku` (

`sku_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'SKU ID',

`goods_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品ID',

`spec_name` varchar(60) NOT NULL DEFAULT '' COMMENT '规格名称',

`spec_value` varchar(60) NOT NULL DEFAULT '' COMMENT '规格值',

`sku_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '销售价格',

`sku_number` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '库存',

PRIMARY KEY (`sku_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='SKU表';

三、创建商品页面

我们可以在商品添加页面中添加一个可以选择多规格SKU的功能,代码如下:

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

<input type="text" name="goods_name" placeholder="商品名称">

<input type="number" name="shop_price" placeholder="销售价格">

<textarea name="goods_desc" placeholder="商品描述"></textarea>

<h3>商品规格</h3>

<table>

<thead>

<tr>

<th>规格名称</th>

<th>规格值</th>

</tr>

</thead>

<tbody id="goods_spec_table">

<tr>

<td><input type="text" name="spec_name[]" placeholder="规格名称"></td>

<td><input type="text" name="spec_value[]" placeholder="规格值"></td>

</tr>

</tbody>

</table>

<button type="button" onclick="add_spec_item()">添加规格项</button>

<input type="submit" value="添加商品">

</form>

<script>

function add_spec_item() {

var html = '<tr><td><input type="text" name="spec_name[]" placeholder="规格名称"></td>'+

'<td><input type="text" name="spec_value[]" placeholder="规格值"></td></tr>';

$("#goods_spec_table").append(html);

}

</script>

四、添加商品信息

在接收到商品数据后,我们需要对商品进行添加操作,具体操作步骤如下:

先添加商品基本信息到商品表中。

再取出规格名称和规格值,先将规格名称插入到规格表中,并返回规格ID。

再将规格值插入到商品规格值表中,一个规格值对应一个规格ID,用于后面的查询。

最后根据不同规格的组合来生成SKU并插入到SKU表中。

代码如下:

<?php

//接收数据

$goods_name = $_POST['goods_name'];

$shop_price = $_POST['shop_price'];

$goods_desc = $_POST['goods_desc'];

$spec_name = $_POST['spec_name'];

$spec_value = $_POST['spec_value'];

//先添加商品信息到商品表中

$sql = "INSERT INTO `goods`(`goods_name`, `shop_price`, `goods_desc`) VALUES ('$goods_name', '$shop_price', '$goods_desc')";

$res = mysqli_query($link, $sql);

$goods_id = mysqli_insert_id($link);

//遍历规格

foreach($spec_name as $k=>$v) {

$sql = "SELECT `spec_id` FROM `goods_spec` WHERE `spec_name`='$v'";

$res = mysqli_query($link, $sql);

$row = mysqli_fetch_assoc($res);

//如果规格名称不存在,则插入到规格表中

if(!$row) {

$sql = "INSERT INTO `goods_spec`(`spec_name`) VALUES ('$v')";

mysqli_query($link, $sql);

$spec_id = mysqli_insert_id($link);

} else {

$spec_id = $row['spec_id'];

}

//插入规格值到商品规格值表中

$sql = "INSERT INTO `goods_spec_value`(`spec_id`, `spec_value`) VALUES ('$spec_id', '$spec_value[$k]')";

mysqli_query($link, $sql);

}

//获取所有规格值

$sql = "SELECT `spec_value_id` FROM `goods_spec_value` WHERE `spec_id`='$spec_id'";

$res = mysqli_query($link, $sql);

while($row = mysqli_fetch_assoc($res)) {

$spec_value_id[] = $row['spec_value_id'];

}

//根据不同规格的组合来生成SKU并插入到SKU表中

foreach($spec_value_id as $k1=>$v1) {

foreach($spec_value_id as $k2=>$v2) {

if($v1 != $v2) {

$spec_value_str1 = $spec_value_id[$k1].":".$spec_value[$k1];

$spec_value_str2 = $spec_value_id[$k2].":".$spec_value[$k2];

$sku_value = $spec_value_str1.",".$spec_value_str2;

$sku_price = $shop_price + 10 * ($k1 + $k2); //价格自定义,这里只是举个例子

$sql = "INSERT INTO `goods_sku`(`goods_id`, `spec_name`, `spec_value`, `sku_price`, `sku_number`) VALUES ('$goods_id', '$spec_name[$k1], $spec_name[$k2]', '$sku_value', '$sku_price', '100')";

mysqli_query($link, $sql);

}

}

}

?>

总结

实现商品多规格SKU功能可以为用户提供更好的购物体验,并且可以更方便地对商品进行管理和控制,提高网站的效率和用户满意度。

后端开发标签