رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چرا عکس و داده ها آپلود و ذخیره نمیشوند؟ (حل شد)
#1
سلام استاد

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

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'));
	}


متشکرم.
پاسخ
تشکر شده توسط:
#2
چه خطایی میده؟
کد فرم رو چک کن ببین این قسمت رو گذاشتی؟
'enctype' => 'multipart/form-data'
no pain, no gain
پاسخ
تشکر شده توسط: abdollah110110
#3
آره اون کد رو گذاشتم چون طبق آموزش جلو میرم.
تنها چیزی که اجرا نمیشه متد save هست که براش خطا هم تولید نمیشه.
پاسخ
تشکر شده توسط:
#4
(10-03-1394، 08:54 ب.ظ)abdollah110110 نوشته: آره اون کد رو گذاشتم چون طبق آموزش جلو میرم.
تنها چیزی که اجرا نمیشه متد save هست که براش خطا هم تولید نمیشه.
کد خطاتونو خوب بذارید
no pain, no gain
پاسخ
تشکر شده توسط:
#5
وقتی خطایی نمیگیرین ولی داده ها هم ذخیره نمیشن، با متد Tools::debug مقدار model->errors$ رو نمایش بدین ببینید مشکل از کجاست.
if($model->save()) {
    // ...
}
else {
    Tools::debug($model->errors, true);
}
پاسخ
تشکر شده توسط: abdollah110110
#6
برای متد save، پارامتر false رو فرستام و مشکل حل شد. بصورت زیر:
if($model->save(false)){
 Image::safeUpload($photo->tempName,$model->id);
 $this->redirect(array('index'));
}
پاسخ
تشکر شده توسط:
#7
وقتی false میفرستین، یعنی validation انجام نشه. الان شما صورت مسئله رو پاک کردین. بهتره ببینید چه خطاهایی دارین و درصورت نیاز Validation Rule ها رو اصلاح کنید.
پاسخ
تشکر شده توسط: abdollah110110
#8
این 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'),
		);
	}
نمیدونم ایرادی داره یا نه؟
پاسخ
تشکر شده توسط:
#9
خطایی که تولید میشه رو هم بگذارین ببینیم مشکل چیه. به همون روشی که گفتم خطا رو بگیرین از صفحه.
پاسخ
تشکر شده توسط:
#10
این دستورو دادم:
else{
 Tools::debug($model->errors,true);
 }
و خطا اینه:
array
(
    'id' => array
    (
        0 => 'ردیف نمی تواند خالی باشد.'
    )
)
پاسخ
تشکر شده توسط:
#11
لااقل کدگذاری رو روی utf-8 بگذارین بفهمیم خطا چیه. از منوی View گزینه Character Encoding رو روی Unicode یا UTF-8 بگذارین.
پاسخ
تشکر شده توسط:
#12
برای راحتی بیشتر توی متد debug از کلاس Tools این کد رو قبل از همه بگذارین:
echo '<meta charset="utf-8" />';
پاسخ
تشکر شده توسط: abdollah110110
#13
کد بالا رو هم دادم الان خطا اینو نشون میده:

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

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




کاربران در حال بازدید این موضوع: 1 مهمان