seregazolotaryow64
@seregazolotaryow64
Аутист и веб-разработчик

Как правильно реализовать технологию обновления новостей в зависимости от того, как админ загрузил титульное изображение?

Добрый вечер!
Хотел к вам обратиться с одной важной проблемой:
На данный момент дорабатываю сайт для одного благотворительного фонда.
На сайте применяется административная панель. В основном в этой панели работают страницы добавления новости и формы обновления новости в зависимости от выбранной новости.
Сама панель, как и весь сайт написаны на PHP, MySQL и Yii1.
Приведу отрывки из кода Yii1-контроллера административной панели:
<?php
class AdminController extends CController{
...
   public function actionCorporateFirst(){
         $this->pageTitle="Добавить новость//Панель администратора";
         Yii::app()->getClientScript()->registerScriptFile("/js/ckeditor/ckeditor.js");

         if(isset($_POST['newstitle'])){
             $title=trim($_POST['newstitle']);
             $image=$_FILES['newsimage'];
             $content=trim($_POST['newscontent']);

             //Механизм валидации полей срабатывается...

					//Если валидатор не заметил ошибок

          if(isset($image)){
           if(!file_exists("/media/images/news/uploads/". basename($image['name']))){
              $imagename="/media/images/news/uploads/". basename($image['name']);
           }
           else{
              $ilist=Yii::app()->db->CreateCommand();
              $ilist->select("image");
              $ilist->from("news");
              $ilist->order("date DESC");
              $imgs=$ilist->queryAll();

              foreach ($imgs as $im) {

                if($im['image'] == "/media/images/news/uploads/". basename($image['name'])){
                  $imagename=$im['image'];
                }
              }
           }

          }
          else{
            $imagename="";
          }

                    $cmd=Yii::app()->db->createCommand();//Производится создания объекта доступа к БД.

				   //Кодирует данные текущей даты и текущего времени.
                    $datetime=date('Y-m-d H:i:s');
					$date=date('Y-m') ."-01";
					$today=date('m-Y');

          $i=htmlentities(stripslashes(strip_tags(trim($imagename))),ENT_QUOTES,'UTF-8');

                   //И отправляет данные полей в базу данных для последующего добавления.
                    $cmd->insert("news",array(
                        "title"=>$title,
                        "date"=>$datetime,
                        "image"=>$i,
                        "content"=>$content,
						"archivedate"=>$date,
						"archivedatetoday"=>$today
                    ));

          if(isset($image)){
            if($image['tmp_name']){
              move_uploaded_file($image['tmp_name'],$_SERVER['DOCUMENT_ROOT'].$imagename);
            }
          }
					header("Location:/newsmaker/");








         }






         $this->render('corporatefirst');
     }
     public function actionNewsedit(){
       if(Yii::app()->session['staff']=="newsmaker"){
         $this->pageTitle="Редактировать новость//Управление новостями";
		      Yii::app()->getClientScript()->registerScriptFile("/js/ckeditor/ckeditor.js");

		 if(isset($_POST['newstitle'])){
				 $title=trim($_POST['newstitle']);
         $nd=trim($_POST['newdate']);
         $ad=trim($_POST['archivedate']);
         $atd=trim($_POST['archivedatetoday']);
         $image_update=$_FILES['newsimage'];
         $content=trim($_POST['newscontent']);
				 if(isset($_GET['id'])){
					 $id=trim($_GET['id']);
				 }



			  //Если валидатор не заметил ошибок
        //Первоначально производится удаление прежнего изображения из сайта.

      if(isset($image_update)){

            if(filter_var(trim($_POST['image']),FILTER_VALIDATE_URL)){
              if(!file_exists("/media/images/news/uploads/". basename($image_update['name']))){
                 $imagename="/media/images/news/uploads/". basename($image_update['name']);
              }
              else{
                 $ilist=Yii::app()->db->CreateCommand();
                 $ilist->select("image");
                 $ilist->from("news");
                 $ilist->order("date DESC");
                 $imgs=$ilist->queryAll();

                 foreach ($imgs as $im) {
                   if($im['image'] == "/media/images/news/uploads/". basename($image_update['name'])){
                     $imagename=$im['image'];
                   }
                 }
              }
            }
            else{
              $imagename="/media/images/news/uploads/". basename($image_update['name']);
            }
          }
      }
      else{
       if(!preg_match("/http:|https:/",trim($_POST['image']))){
         $pi=pathinfo(trim($_POST['image']));
         $imagename="/media/images/news/uploads/". $pi['filename'];
       }
       else{
        if(!file_exists("/media/images/news/uploads/". basename($image_update['name']))){
                 $imagename="/media/images/news/uploads/". basename($image_update['name']);
              }
              else{
                 $ilist=Yii::app()->db->CreateCommand();
                 $ilist->select("image");
                 $ilist->from("news");
                 $ilist->order("date DESC");
                 $imgs=$ilist->queryAll();

                 foreach ($imgs as $im) {
                   if($im['image'] == "/media/images/news/uploads/". basename($image_update['name'])){
                     $imagename=$im['image'];
                   }
                 }
              }
       }

      }
      if($nd!="" && $ad!="" && $atd!=""){
        $datetime=$nd ." ". date('H:i:s');
        $date=$ad;
        $today=$atd;
      }
      else{
        $datetime=date('Y-m-d H:i:s');
        $date=date('Y-m') ."-01";
        $today=date('m-Y');
      }
      $cmd=Yii::app()->db->createCommand();//Производится создания объекта доступа к БД.


        $image=htmlentities(stripslashes(strip_tags(trim($imagename))),ENT_QUOTES,'UTF-8');
				   //И отправляет данные новости в базу данных для последующего обновления.
                    $cmd->update("news",array(
                        "title"=>$title,
                        "date"=>$datetime,
                        "image"=>$image,
                        "content"=>$content,
						"archivedate"=>$date,
						"archivedatetoday"=>$today
                    ),"id='". $id ."'");
          if(isset($image_update)){
            if($image_update['tmp_name']){
              move_uploaded_file($image_update['tmp_name'],$_SERVER['DOCUMENT_ROOT'].$imagename);
            }
          }
				    if(isset($_GET['last_archive_month']) && isset($_GET['last_archive_year'])){
					 //Если открыта форма для редактирования через архив...
					 $month=trim($_GET['last_archive_month']);
					 $year=trim($_GET['last_archive_year']);
					 header("Location:/newsmaker/newsmanager/?archive_go_month=". $month ."&archive_go_year=". $year ."#lastreadnews" .$id);
				    }
				    else{
					  header("Location:/newsmaker/newsmanager/");
				    }



		 }
		 if(isset($_GET['id'])){
			 $id=trim($_GET['id']);

			 $newscont=Yii::app()->db->createCommand();
			 $newscont->select("title,image,date,content");
			 $newscont->from("news");
			 $newscont->where("id='". $id ."'");

		 }
     else{
         header("Location:/login/");
     }




       $this->render('newsedit',array("newscont"=>$newscont));
     }
...
}
?>

Где Corporateirst-это действие страницы формы добавления новости. Код работает полноценно.
А где Newsedit-это действие страницы формы обновления новости, выбранной администратором. Код работает неполноценно и есть проблемная фишка.
При открытии страницы формы обновления новости Yii вывела вот такую ошибку:

Internal Server Error
Undefined index: image

An internal error occurred while the Web server was processing your request. Please contact the webmaster to report this problem.

Сама проблема заключается в алгоритме управления изображениями при отправке обновленной версии новости, используемом при отправке новой новости.
И перед этим вылезали не раз такие ошибки. Поправлял лишние разы, чтобы лучше работало и такая же проблема светится в форме обновления выбранной новости.
Сама обновленная новость отправляется после редактирования в зависимости от того, как админ обновил титульное фото или если обновил только текст, загружается только в базу фотография по умолчанию, используя данные из скрытой формы об используемом в новости изображении
Мне нужно решить эту проблему! Помогите мне, пожалуйста с исправлением глобальной ошибки!
Буду рад вашей помощи и заранее вам спасибо!
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
glaphire
@glaphire
PHP developer
Не вижу этого явно в коде, но логично, что где-то при открытии шаблона обновления новости зашита инфа, что image всегда должен быть, а это не так, поэтому и undefined index 'image'. Подебажьте xdebug-ом или var_dump+die все группы данных, которые у Вас загружаются при отображении этой страницы и сможете это проверить. UPD. Желательно включить йиишную дебаг панель, правда не знаю, существует ли она для первой, для второй йии точно была.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы