头像上传数据库处理

文件上传后数据库怎么处理比较好?
收集文件地址比较好.

PS.已经尝试了上传许多文件后,个人认为在数据库中直接放二进制的图片数据会显得很混乱.
有可能因为截断问题把图片搞的很不完整.所以存放路径成为比较理想的方案.

PS.图像地址存放,这个字段的类型选择BLOB原因是便于存放多个文件地址;
加入地址的时候,使用特殊符号分割加入;
提取时候就可以获取多个文件地址了;

先总汇一下这次的任务
任务内容:上传修改用户头像

步骤:
1.user_portrait.php 负责收集用户需要的头像的表单,
  如果已经设置过头像那么显示当前的头像.

2.do_user_portrait.php 负责上传至服务器的文件系统中,
  并且将文件的相对路径存放到数据库.
  通过SESSION保存好传送中发生的问题和数据库写入发生的问题.或者是传送成功的信息.

3.反馈SESSION保存的执行结果到达user_portrait.php.
  反馈完毕后 清理相关SESSION值.

第一步:
  显示当前的头像.这个头像需要通过检索数据库,找到头像地址,找到这个文件,
  选择好HTTP传送格式;
  然后再进行绘制打印,
  为了便于使用所以写成了函数;

function read_image($file_name,$type)
{  
    //绘制打印一个图片文件,
    //$file_name完整的相对路径,$type格式扩展名.gif,.jpg,.png

    if($type==".jpg")
    {
        $image=ImageCreateFromJPEG($file_name);
        header("Content-Type: image/jpeg");
        ImageJPEG($image);
    }
    elseif($type==".png")
    {
        $image=ImageCreateFromPNG($file_name);
        header("Content-Type: image/png");
        ImagePNG($image);
    }
    elseif($type==".gif")
    {
        $image=ImageCreateFromGIF($file_name);
            header("Content-Type: image/gif");
        ImageGIF($image);
    }
    
    return $image;
}


因为要显示在指定的页面,
所以插入这样的语句就可以显示

<img src="show_img_db.php?user_id=$user_id">

 
show_img_db.php 这个页面负责的是 :检索数据库,找到头像地址,找到这个文件,分析出文件扩展名;

调用read_image($file_name,$type)来执行打印当前的头像;

那么扩展名可以用这样的函数来获取:

function get_file_name($str)
{ 
   //获得文件的格式扩展名$str为原来的扩展名;
    $pos= strrpos($str, ".");
    if  ($pos !== false)
    {  
        $len=strlen($str)-$pos;
        $file_name=substr($str,$pos,$len);
        return $file_name;
    }
}

 
show_img_db.php中调用显示图像方法可以这么写;

//检索数据库省略;
$row=mysql_fetch_array($result);

//获取文件格式名
$type_name=get_file_name($row["user_img"]);

//调用图片文件的绘制打印函数
read_image($row["user_img"],$type_name);

 
第二步:
判断好文件的大小,格式,再执行写入服务器;
由于是头像文件.所以务必设置的小一些,否则会很奇怪.
对于各种问题设定错误信息;反馈到前面一页

//上传图片格式文件到达$save_dir指定目录,$form_elem是文件控件名

$allow_type=array("image/jpeg","image/pjpeg","image/x-png","image/png","image/gif");
$save_dir="user_img"."/";
$max_size=5000;
    if(isset($_FILES[$form_elem]))
    { 
        if($_FILES[$form_elem]['size']<=$max_size)
        {//长度正确
        if(in_array($_FILES[$form_elem]['type'],$allow_type))
        { 
            if($_FILES[$form_elem]['error']==0)
            {     //获得图像格式后缀名;例如".gif"
                    $file_type_name=get_file_name($_FILES[$form_elem]['name']);
                  //用户头像地址规则:user_img/时间戳_用户名.文件扩展名
                    $thefile=$save_dir.time()."_".$username.$file_type_name;

                if(!move_uploaded_file($_FILES[$form_elem]['tmp_name'],$thefile))
                {
                    //上传失败
                        $_SESSION['error']['UPDATE_IMG_ERROR']="upload file faild!";
                        header("Location: user_portrait.php");
                        exit();
                }
                 else     
                 {
                     //上传成功
                    //取出文件地址
                    $user_img=$thefile;
                    
                    //传入数据库
                    if(!$conn=@mysql_connect("localhost","root","1"))
                    {
                        die("Could not connect db!");
                    }
                    
                    if(!@mysql_select_db("mini_bbs"))
                    {
                        show_error();    
                    }
                    //获取用户编号
                    $user_id=(int)(get_user_id_from_username($username));
                    
                    
                    $query="update user 
                                    set user_img='$user_img'
                                    where user_id=$user_id";
                    
                    
                    //执行写入
                    if(!$result=@mysql_query($query))
                    {   //写入失败设定UPDATE_IMG_ERROR信息
                         $_SESSION['error']['UPDATE_IMG_ERROR'].="<br />upload file to db 

error!";
                            header("Location: user_portrait.php");
                            exit();
                    }
                    else
                    {  //写入成功设定UPDATE_IMG_SUCCESS信息
                        $_SESSION['error']['UPDATE_IMG_SUCCESS']="update image ok!";
                        //记录格式扩展名.jpg,.gif,.png
                        $_SESSION['image']['type']=substr($file_type_name,1,strlen

($file_type_name)-1);
                        header("Location: user_portrait.php");
                        exit();
                    }
                 
                 }
                   
            }
        }
        else
        {  //格式不正确
            $_SESSION['error']['UPDATE_IMG_SUCCESS']="ERROR:file type must be:jpeg,gif,png!";
            header("Location: user_portrait.php");
                        exit();
        }
    }
    else
    {
        //长度太大
        $_SESSION['error']['UPDATE_IMG_SUCCESS']="ERROR:the file is too big!";
        header("Location: user_portrait.php");
                        exit();
    }
  }

总结:
选择数据库来保存地址是有目的的.
因为一个时间用户只能由一个头像地址,也可能希望从自己拥有的头像中选中以前上传过的头像,
也就是服务器端拥有很多用户头像.数据库只要记录下一枚最新修改的头像地址就好了;所以
还是需要数据库来记录这个消息的;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值