PHP基础示例--PHP_MySQL商品信息管理系统
PHP基础示例--PHP_MySQL商品信息管理系统
- 目标:商品信息的增删改查(图片信息的操作)
- 技术:文件的上传,图片的缩放,数据库的基本操作
商品信息的表结构
序号 | 字段名 | 名称 | 类型 | 是否为null | 其他约束 |
---|---|---|---|---|---|
1 | id | 编号 | int | not null | 无负号,自增、主键 |
2 | name | 商品名称 | varchar(64) | not null | 无负号 |
3 | typeid | 商品类型 | int | not null | 无负号 |
4 | price | 商品价格 | double(6,2) | null | 无负号 |
5 | total | 库存量 | int | not null | 无负号 |
6 | pic | 商品图片 | varcha(32) | null | - |
7 | note | 商品描述 | text | null | - |
8 | addtime | 发布时间 | int | not null | 无负号 |
创建数据库
mysql -u root -p -h 192.168.1.1
CREATE DATABASE demodb;
DROP DATABASE demodb;
USE demodb;
CREATE TABLE goods(
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(64) NOT NULL,
`typeid` INT UNSIGNED NOT NULL,
`price` DOUBLE(6,2) UNSIGNED NOT NULL,
`total` INT UNSIGNED NOT NULL,
`pic` VARCHAR(32) NOT NULL,
`note` TEXT,
`addtime` INT UNSIGNED NOT NULL);
DESC goods;
SHOW CREATE TABLE goods \G;
创建项目的目录具体文件
- add.php商品添加页面
- edit.php商品信息编辑表单页
- index.php商品信息浏览页
- action.php执行商品信息添加和修改及删除等操作
- dbconfig.php公共配置文件
- menu.php导航栏
- uploads上传图片的存放目录
- functions.php 公共函数库文件:图片信息的上传、等比缩放等处理函数
dbconfig.php
//数据库信息配
define("HOST","localhost"); //主机名
define("USER","root"); //用户名
define("PASS","root"); //密码
define("DBNAME","demodb"); //数据库名
//商品类型列表信息
$typelist=array(1=>"服装",2=>"数码",3=>"食品");
action.php
//执行商品信息的增、删、改的操作
//一、导入配置文件和函数库文件
require("dbconfig.php");
require("functions.php");
//二、连接MySQL,选择数据库
$link = mysql_connect(HOST,USER,PASS) or die("数据库失败!");
mysql_select_db(DBNAME,$link);
//三、获取action参数的值,并做对应的操作
switch($_GET["action"]){
case "add": //添加
//1. 获取添加信息
$name = $_POST["name"];
$typeid = $_POST["typeid"];
$price = $_POST["price"];
$total = $_POST["total"];
$note = $_POST["note"];
$addtime = time();
//2. 验证()省略
if(empty($name)){
die("商品名称必须有值");
}
//3. 执行图片上传
$upinfo = uploadFile("pic","./uploads/");
if($upinfo["error"]===false){
die("图片信息上传失败:".$upinfo["info"]);
}else{
//上传成功
$pic = $upinfo[info];// 获取上传成功的图片名
}
//4. 执行图片缩放
imageUpdateSize('./uploads/'.$pic,50,50);
//5. 拼装sql语句,并执行添加
$sql = "insert into goods values(null,'{$name}','{$typeid}',{$price},{$total},'{$pic}','{$note}',{$addtime})";
//echo $sql;
mysql_query($sql,$link);
//6. 判断并输出结果
if(mysql_insert_id($link)>0){
echo "商品发布成功!";
}else{
echo "商品发布失败!".mysql_error();
}
echo "<br/> <a href='index.php'>查看商品信息<a>";
break;
case "del": //删除
//获取要删除的id号并拼装删除sql,执行
$sql = "delete from goods where id={$_GET['id']}";
mysql_query($sql,$link);
//执行图片删除
if(mysql_affected_rows($link)>0){
@unlink("./uploads/".$_GET['picname']);
@unlink("./uploads/s_".$_GET['picname']);
}
//跳转到浏览界面
header("Location:index.php");
break;
case "update": //修改
//1. 获取要修改的信息
$name = $_POST["name"];
$typeid = $_POST["typeid"];
$price = $_POST["price"];
$total = $_POST["total"];
$note = $_POST["note"];
$id = $_POST['id'];
$pic = $_POST['oldpic'];
//2. 数据验证
if(empty($name)){
die("商品名称必须有值");
}
//3. 判断有无图片上传
if($_FILES['pic']['error']!=4){
//执行上传
$upinfo = uploadFile("pic","./uploads/");
if($upinfo["error"]===false){
die("图片信息上传失败:".$upinfo["info"]);
}else{
//上传成功
$pic = $upinfo[info];// 获取上传成功的图片名
//4. 有图片上传,执行缩放
imageUpdateSize('./uploads/'.$pic,50,50);
}
}
//5. 执行修改
$sql = "update goods set name='{$name}',typeid={$typeid},price={$price},total={$total},note='{$note}',pic='{$pic}' where id={$id}";
//echo $sql;
mysql_query($sql,$link);
//6. 判断是否修改成功
if(mysql_affected_rows($link)>0){
//若有图片上传,就删除老图片
if($_FILES['pic']['error']!=4){
@unlink("./uploads/".$_POST['oldpic']);
@unlink("./uploads/s_".$_POST['oldpic']);
}
echo "修改成功";
}else{
echo "修改失败".mysql_error();
}
echo "<br/> <a href='index.php'>查看商品信息<a>";
break;
}
//四、关闭数据库
mysql_close($link);
add.php
<html>
<head>
<title>商品信息管理</title>
</head>
<body>
<center>
<?php include("menu.php"); //导入导航栏 ?>
<h3>发布商品信息<h3>
<form action="action.php?action=add" enctype="multipart/form-data" method="post">
<table border="0" width="300">
<tr>
<td align="right">名称:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td align="right">类型:</td>
<td>
<select name="typeid">
<?php
include("dbconfig.php");
foreach($typelist as $k=>$v){
echo "<option value='{$k}'>{$v}</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td align="right">单价:</td>
<td><input type="text" name="price"/></td>
</tr>
<tr>
<td align="right">库存:</td>
<td><input type="text" name="total"/></td>
</tr>
<tr>
<td align="right">图片:</td>
<td><input type="file" name="pic"/></td>
</tr>
<tr>
<td align="right" valign="top">描述:</td>
<td><textarea rows="5" cols="20" name="note"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="添加"/>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
edit.php
<html>
<head>
<title>商品信息管理</title>
</head>
<body>
<center>
<?php
include("menu.php"); //导入导航栏
//1.导入配置文件
require("dbconfig.php");
//2. 连接数据库,并选择数据库
$link = @mysql_connect(HOST,USER,PASS)or die("数据库连接失败");
mysql_select_db(DBNAME,$link);
//3. 获取要修改的商品信息
$sql = "select * from goods where id={$_GET['id']}";
$result = mysql_query($sql,$link);
//4. 判断是否获取到要编辑的商品信息
if($result && mysql_num_rows($result)>0){
$shop = mysql_fetch_assoc($result);//解析出要修改的商品信息
}else{
die("没有找到要修改的商品信息");
}
?>
<h3>编辑商品信息<h3>
<form action="action.php?action=update" enctype="multipart/form-data" method="post">
<input type="hidden" name="id" value="<?php echo $shop['id']; ?>"/>
<input type="hidden" name="oldpic" value="<?php echo $shop['pic']; ?>"/>
<table border="0" width="300">
<tr>
<td align="right">名称:</td>
<td><input type="text" name="name" value="<?php echo $shop['name']; ?>"/></td>
</tr>
<tr>
<td align="right">类型:</td>
<td>
<select name="typeid">
<?php
include("dbconfig.php");
foreach($typelist as $k=>$v){
$sd = ($shop['typeid']==$k)?"selected":"";//是否是当前的类型
echo "<option value='{$k}' {$sd}>{$v}</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td align="right">单价:</td>
<td><input type="text" name="price" value="<?php echo $shop['price']; ?>"/></td>
</tr>
<tr>
<td align="right">库存:</td>
<td><input type="text" name="total" value="<?php echo $shop['total']; ?>"/></td>
</tr>
<tr>
<td align="right">图片:</td>
<td><input type="file" name="pic"/></td>
</tr>
<tr>
<td align="right" valign="top">描述:</td>
<td><textarea rows="5" cols="20" name="note"><?php echo $shop['note']; ?></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="修改"/>
<input type="reset" value="重置"/>
</td>
</tr>
<tr>
<td align="right" valign="top"> </td>
<td><img src="./uploads/<?php echo $shop['pic']; ?>"/></td>
</tr>
</table>
</form>
</center>
</body>
</html>
index.php
<html>
<head>
<title>商品信息管理</title>
</head>
<body>
<center>
<?php include("menu.php"); //导入导航栏 ?>
<h3>浏览商品信息<h3>
<table border="1" width="700">
<tr>
<th>商品编号</th>
<th>商品名称</th>
<th>商品图片</th>
<th>单价</th>
<th>库存量</th>
<th>添加时间</th>
<th>操作</th>
</tr>
<?php
//从数据库中读取信息并输出到浏览器表格中
//1.导入配置文件
require("dbconfig.php");
//2. 连接数据库,并选择数据库
$link = @mysql_connect(HOST,USER,PASS)or die("数据库连接失败");
mysql_select_db(DBNAME,$link);
//3. 执行商品信息查询
$sql = "select * from goods";
$result = mysql_query($sql,$link);
//4. 解析商品信息(解析结果集)
while($row = mysql_fetch_assoc($result)){
echo "<tr>";
echo "<td>{$row['id']}</td>";
echo "<td>{$row['name']}</td>";
echo "<td><img src='./uploads/s_{$row['pic']}'/></td>";
echo "<td>{$row['price']}</td>";
echo "<td>{$row['total']}</td>";
echo "<td>".date("Y-m-d H:i:s",$row['addtime'])."</td>";
echo "<td>
<a href='action.php?action=del&id={$row['id']}&picname={$row['pic']}'>删除</a>
<a href='edit.php?id={$row['id']}'>修改</a></td>";
echo "</tr>";
}
//5. 释放结果集,关闭数据库
?>
</table>
</center>
</body>
</html>
menu.php
<h2>商品信息管理</h2>
<a href="index.php">浏览商品</a> |
<a href="add.php">添加商品</a>
<hr width="80%"/>
function.php
//公共函数库
/**
* 文件上传处理函数
* @param string filename 要上传的文件表单项名
* @param string $path 上传文件的保存路径
* @param array 允许的文件类型
* @return array 二个单元:["error"] false:失败,true:成功
* ["info"] 存放失败原因或成功的文件名
*/
function uploadFile($filename,$path,$typelist=null){
//1. 获取上传文件的名字
$upfile = $_FILES[$filename];
if(empty($typelist)){
$typelist=array("image/gif","image/jpg","image/jpeg","image/png");//允许的文件类型
}
//$path="upload3"; //指定上传文件的保存路径(相对的)
$res=array("error"=>false);//存放返回的结果
//2.过滤上传文件件的错误号
if($upfile["error"]>0){
switch($upfile["error"]){
case 1:
$res["info"]="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制";
break;
case 2:
$res["info"]="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项";
break;
case 3:
$res["info"]="文件只有部分被上传";
break;
case 4:
$res["info"]="没有文件被上传";
break;
case 6:
$res["info"]="找不到临时文件夹。";
break;
case 7:
$res["info"]="文件写入失败";
break;
default:
$res["info"]="未知错误!";
break;
}
return $res;
}
//3.本次文件大小的限制
if($upfile["size"]>100000){
$res["info"]="上传文件过大!";
return $res;
}
//4. 过滤类型
if(!in_array($upfile["type"],$typelist)){
$res["info"]="上传类型不符!".$upfile["type"];
return $res;
}
//5. 初始化下信息(为图片产生一个随机的名字)
$fileinfo = pathinfo($upfile["name"]);
do{
$newfile = date("YmdHis").rand(1000,9999).".".$fileinfo["extension"];//随机产生一个的文件名
}while(file_exists($newfile));
//6. 执行上传处理
if(is_uploaded_file($upfile["tmp_name"])){
if(move_uploaded_file($upfile["tmp_name"],$path."/".$newfile)){
//将上传成功后的文件名赋给返回数组
$res["info"]=$newfile;
$res["error"]=true;
return $res;
}else{
$res["info"]="上传文件失败!";
}
}else{
$res["info"]="不是一个上传的文件!";
}
return $res;
}
//========================================================================================
/**
* 等比缩放函数(以保存的方式实现)
* @param string $picname 被缩放的处理图片源
* @param int $maxx 缩放后图片的最大宽度
* @param int $maxy 缩放后图片的最大高度
* @param string $pre 缩放后图片名的前缀名
* @return String 返回后的图片名称(带路径),如a.jpg=>s_a.jpg
*/
function imageUpdateSize($picname,$maxx=100,$maxy=100,$pre="s_"){
$info = getimageSize($picname); //获取图片的基本信息
$w = $info[0];//获取宽度
$h = $info[1];//获取高度
//获取图片的类型并为此创建对应图片资源
switch($info[2]){
case 1: //gif
$im = imagecreatefromgif($picname);
break;
case 2: //jpg
$im = imagecreatefromjpeg($picname);
break;
case 3: //png
$im = imagecreatefrompng($picname);
break;
default:
die("图片类型错误!");
}
//计算缩放比例
if(($maxx/$w)>($maxy/$h)){
$b = $maxy/$h;
}else{
$b = $maxx/$w;
}
//计算出缩放后的尺寸
$nw = floor($w*$b);
$nh = floor($h*$b);
//创建一个新的图像源(目标图像)
$nim = imagecreatetruecolor($nw,$nh);
//执行等比缩放
imagecopyresampled($nim,$im,0,0,0,0,$nw,$nh,$w,$h);
//输出图像(根据源图像的类型,输出为对应的类型)
$picinfo = pathinfo($picname);//解析源图像的名字和路径信息
$newpicname= $picinfo["dirname"]."/".$pre.$picinfo["basename"];
switch($info[2]){
case 1:
imagegif($nim,$newpicname);
break;
case 2:
imagejpeg($nim,$newpicname);
break;
case 3:
imagepng($nim,$newpicname);
break;
}
//释放图片资源
imagedestroy($im);
imagedestroy($nim);
//返回结果
return $newpicname;
}
//========================================================================================
/**
* 为一张图片添加上一个logo图片水印(以保存的方式实现)
* @param string $picname 被处理图片源
* @param string $logo 水印图片
* @param string $pre 处理后图片名的前缀名
* @return String 返回后的图片名称(带路径),如a.jpg=>n_a.jpg
*/
function imageUpdateLogo($picname,$logo,$pre="n_"){
$picnameinfo = getimageSize($picname); //获取图片源的基本信息
$logoinfo = getimageSize($logo); //获取logo图片的基本信息
//var_dump($logoinfo);
//根据图片类型创建出对应的图片源
switch($picnameinfo[2]){
case 1: //gif
$im = imagecreatefromgif($picname);
break;
case 2: //jpg
$im = imagecreatefromjpeg($picname);
break;
case 3: //png
$im = imagecreatefrompng($picname);
break;
default:
die("图片类型错误!");
}
//根据logo图片类型创建出对应的图片源
switch($logoinfo[2]){
case 1: //gif
$logoim = imagecreatefromgif($logo);
break;
case 2: //jpg
$logoim = imagecreatefromjpeg($logo);
break;
case 3: //png
$logoim = imagecreatefrompng($logo);
break;
default:
die("logo图片类型错误!");
}
//执行图片水印处理
imagecopyresampled($im,$logoim,$picnameinfo[0]-$logoinfo[0],$picnameinfo[1]-$logoinfo[1],0,0,$logoinfo[0],$logoinfo[1],$logoinfo[0],$logoinfo[1]);
//输出图像(根据源图像的类型,输出为对应的类型)
$picinfo = pathinfo($picname);//解析源图像的名字和路径信息
$newpicname= $picinfo["dirname"]."/".$pre.$picinfo["basename"];
switch($picnameinfo[2]){
case 1:
imagegif($im,$newpicname);
break;
case 2:
imagejpeg($im,$newpicname);
break;
case 3:
imagepng($im,$newpicname);
break;
}
//释放图片资源
imagedestroy($im);
imagedestroy($logoim);
//返回结果
return $newpicname;
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。