2013-12-16 17:40:18 7046次浏览 1条回答 0 悬赏 20 金钱

写了一个yii上传功能,测试不成功,来请教下:

模型里面是这样写的:

public function rules()
    {
        return array(
            array('image','file','types'=>'jpg,gif,png'),
        );
    }


actionCreate和actionUpdate控制器里面都是这样写的:

        $model=new Message;

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['Message']))
        {
            $model->attributes=$_POST['Message'];
            $file=CUploadedFile::getInstance($model,'image'); //获取表单名为filename的上传信息                                                                
            $model->image=$filename;  //数据库中要存放文件名                                               
            $model->image = $file;
            if($model->image)
            {
                $newName = time().'.'.$model->image->extensionName;
                $model->image = $newName;
            }
            
            if ($file != null) {
                $file->saveAs(Yii::app()->basePath . '/../uplode_img/' . $newName); //图片上传路径
            }

                if($model->save())
                $this->redirect(array('view','id'=>$model->main_id));
        }

视图里面这样写的:

    <div class="row">
        <?php echo $form->labelEx($model,'image'); ?>
        <?php echo CHtml::activeFileField($model,'image'); ?>
        <?php echo $form->error($model,'image'); ?>
    </div>


想请教下,现在新增没有问题,不过在点击修改的时候,如果用户已经提交过图片,那就使用 用户之前提交的,除非用户更换图片,初学YII还不熟悉,请各位前辈帮忙看看了谢了

我update修改成这样了:

        $model=$this->loadModel($id);

        $image = $model->image;//变量
        if(isset($_POST['Message']))
        {
            $model->attributes=$_POST['Message'];
            $file=CUploadedFile::getInstance($model,'image'); //获取表单名为filename的上传信息
            $model->image=$filename;  //数据库中要存放文件名
            $model->image = $file;
            if($model->image)
            {
                $newName = time().'.'.$model->image->extensionName;
                $model->image = $newName;
                $file->saveAs(Yii::app()->basePath . '/../uplode_img/' . $newName);
            }
            else
            {
                $newName = $image;
                $file->saveAs(Yii::app()->basePath . '/../uplode_img/' . $newName);
            }
            if($model->save())
                $this->redirect(array('view','id'=>$model->main_id));
        }

不过这样的话$file就是空值,saveAs()会报错。

  • 回答于 2013-12-17 11:38 举报

    http://hi.baidu.com/ttyangz/item/cd50833c940044c21b9696fc 参考一下,顺便看看yii的wiki.你

    if ($uploadedFile != null) { //不空或者不为默认的就为原来名称

    //这里保存图片名称到数据库image字段
    if (!empty($fileName))
    $model->image = $fileName;

    要用empty函数做一下判断,是否传上来了图片或者名字是否为空.上传个空的当然会出错.

    2 条回复
    回复于 2013-12-17 14:34 回复

    自己弄好了,不过还是谢谢了

    回复于 2015-07-29 17:36 回复

    能告诉我一下您 是如何解决的吗?我也遇到这个问题了。谢谢

您需要登录后才可以回答。登录 | 立即注册
leo007ok
助理

leo007ok

注册时间:2013-12-03
最后登录:2015-01-16
在线时长:11小时12分
  • 粉丝1
  • 金钱0
  • 威望0
  • 积分110

热门问题