تالار گفتمان nCIS.ir

نسخه‌ی کامل: چرا عکس و داده ها آپلود و ذخیره نمیشوند؟ (حل شد)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام استاد

چرا عکس آپلود نمیشود و چرا داده ها در دیتابیس ذخیره نمیشوند؟
هیچ خطایی نشان نمیدهد.

public function actionCreate() {
		$model= new Photos;
		$model->confirm=1;
		$photo=  CUploadedFile::getInstance($model,'photo');
		if(isset($_POST['Photos']) && $photo->error==0 && $photo->size<=150000 && $photo->type=='image/jpeg'){
			$model->attributes=$_POST['Photos'];
			$model->likes=0;
			$model->dislikes=0;
			$model->visits=0;
			Image::safeUpload($photo->tempName,$model->id);
			if($model->save()){
				$this->redirect(array('index'));
			}
		}
		$this->render('create', compact('model'));
	}


متشکرم.
چه خطایی میده؟
کد فرم رو چک کن ببین این قسمت رو گذاشتی؟
'enctype' => 'multipart/form-data'
آره اون کد رو گذاشتم چون طبق آموزش جلو میرم.
تنها چیزی که اجرا نمیشه متد save هست که براش خطا هم تولید نمیشه.
(10-03-1394، 08:54 ب.ظ)abdollah110110 نوشته: [ -> ]آره اون کد رو گذاشتم چون طبق آموزش جلو میرم.
تنها چیزی که اجرا نمیشه متد save هست که براش خطا هم تولید نمیشه.
کد خطاتونو خوب بذارید
وقتی خطایی نمیگیرین ولی داده ها هم ذخیره نمیشن، با متد Tools::debug مقدار model->errors$ رو نمایش بدین ببینید مشکل از کجاست.
if($model->save()) {
    // ...
}
else {
    Tools::debug($model->errors, true);
}
برای متد save، پارامتر false رو فرستام و مشکل حل شد. بصورت زیر:
if($model->save(false)){
 Image::safeUpload($photo->tempName,$model->id);
 $this->redirect(array('index'));
}
وقتی false میفرستین، یعنی validation انجام نشه. الان شما صورت مسئله رو پاک کردین. بهتره ببینید چه خطاهایی دارین و درصورت نیاز Validation Rule ها رو اصلاح کنید.
این rule های تعریف شده برا مدل Photos هست:
/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('id, category_id, title, description', 'required'),
			array('id, category_id, likes, dislikes, visits, confirm', 'numerical', 'integerOnly'=>true),
			array('title', 'length', 'max'=>255),
			array('likes, dislikes, visits, confirm', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('id, category_id, title, description, likes, dislikes, visits, confirm', 'safe', 'on'=>'search'),
		);
	}
نمیدونم ایرادی داره یا نه؟
خطایی که تولید میشه رو هم بگذارین ببینیم مشکل چیه. به همون روشی که گفتم خطا رو بگیرین از صفحه.
این دستورو دادم:
else{
 Tools::debug($model->errors,true);
 }
و خطا اینه:
array
(
    'id' => array
    (
        0 => 'ردیف نمی تواند خالی باشد.'
    )
)
لااقل کدگذاری رو روی utf-8 بگذارین بفهمیم خطا چیه. از منوی View گزینه Character Encoding رو روی Unicode یا UTF-8 بگذارین.
برای راحتی بیشتر توی متد debug از کلاس Tools این کد رو قبل از همه بگذارین:
echo '<meta charset="utf-8" />';
کد بالا رو هم دادم الان خطا اینو نشون میده:

array
(
    'id' => array
    (
        0 => 'ردیف نمی تواند خالی باشد.'
    )
)

id رو از حالت required خارج کردم. مشکل حل شد. بصورت زیر:
    public function rules()
    {
        return array(
            array('category_id, title, description', 'required'),
          ....
 );
    } 
مشکل توی تیم ویور مشخص شد. بخاطر required ست شدن id بود که اونهم بخاطر این بود که موقع ساخت مدل با Gii فیلد id روی auto_increment ست نشده بود.