2013-12-19 179 views
0

問題是如果我想更新其他字段而不是圖像。它通過驗證並且不更新任何字段。不更新圖像不更新記錄

但是,如果我更新圖像和其他領域更新。或者,如果我更新它更新的圖像。

查看:

<?php echo $form->labelEx($model,'pimg'); ?> 
<?php echo $form->fileField($model, 'pimg',array('id'=>'imgInput',)); ?>  
<?php echo $form->error($model,'pimg'); ?> 

控制器:

public function actionEdit($id) 
{ 
    $model=$this->loadModel($id); 
    if(isset($_POST['Product'])) 
    { 
     $model->pimg=CUploadedFile::getInstance($model,'pimg'); 
     $fileName=$model->pimg; 
     $model->attributes=$_POST['Product']; 
     if($model->save()) 
      $model->pimg->saveAs('images/'.$fileName); 
      $this->redirect(array('display','id'=>$model->productid)); 
     } 
     $this->render('edit',array('model'=>$model,)); 
    } 

型號規則:

array('name, category, model, brand, description, price', 'required'), 
array('pimg', 'file','types'=>'jpg','on'=>'create', 'allowEmpty'=>false), 
array('pimg', 'file','types'=>'jpg','on'=>'update', 'allowEmpty'=>true), 

我認爲這個問題是與控制器。我不斷收到錯誤:

Fatal error: Call to a member function saveAs() on a non-object in D:\wamp\www\testfolder\protected\controllers\ProductController.php on line 147 

line 147: $model->pimg->saveAs('images/'.$fileName); 

影像出現,但隨後從數據庫映像名稱不旁邊的選擇文件按鈕渲染說明沒有文件選擇出現。

請注意,我是Yii的新手,並且堅持這一點。

回答

2

的問題是在你actionEdit即這裏

$model->pimg=CUploadedFile::getInstance($model,'pimg');  
     $fileName=$model->pimg; 
      $model->attributes=$_POST['Product']; 
     if($model->save()) 
     $model->pimg->saveAs('images/'.$fileName); 

在這裏,你應該檢查是否圖像已被上傳或不。會發生什麼是yii無法執行此行$model->pimg->saveAs('images/'.$fileName);,因爲沒有圖像上傳。所以你需要用它的條件內即

if(!empty($model->pimg)) 
{ 
$model->pimg->saveAs('images/'.$fileName); 
} 

所以你最終代碼應該是這樣的

$model->attributes=$_POST['Product']; 
$model->pimg=CUploadedFile::getInstance($model,'pimg');  
    if(!empty($model->pimg)) 
    { 
    $fileName=$model->pimg->name; 
       $model->pimg->saveAs('images/'.$fileName); 
    } 
if($model->save()) 
//render here 

更新1 的東西,如果你想上更新空不宜存儲在您的數據庫中,那麼你可以做到這一點

$model=$this->loadModel($id); 
$prevImage=$model->pimg; //add this line 

然後whe重新您使用此

if(!empty($model->pimg)) 
{ 
$model->pimg->saveAs('images/'.$fileName); 
} 
else{ 
$model->pimg=$prevIMage; 
} 

添加此其他代碼

+0

感謝名單:)雅千真萬確的......我做了......但上面的代碼需要更多的變體N什麼,如果圖像沒有更新它不會保存現有的圖像....結果空存儲在分貝...如果(圖像存在&&沒有上傳){//保存代碼}其他{///保存上傳的圖像} ......那就是它 – hir

+0

更新了我的答案 –

+0

雅好一個........ – hir