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;

创建项目的目录具体文件

  1. add.php商品添加页面
  2. edit.php商品信息编辑表单页
  3. index.php商品信息浏览页
  4. action.php执行商品信息添加和修改及删除等操作
  5. dbconfig.php公共配置文件
  6. menu.php导航栏
  7. uploads上传图片的存放目录
  8. 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="添加"/>&nbsp;&nbsp;&nbsp;
                        <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="修改"/>&nbsp;&nbsp;&nbsp;
                        <input type="reset" value="重置"/>
                    </td>
                </tr>
                <tr>
                    <td align="right" valign="top">&nbsp;</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;
}