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.

Сама проблема заключается в алгоритме управления изображениями при отправке обновленной версии новости, используемом при отправке новой новости.
И перед этим вылезали не раз такие ошибки. Поправлял лишние разы, чтобы лучше работало и такая же проблема светится в форме обновления выбранной новости.
Сама обновленная новость отправляется после редактирования в зависимости от того, как админ обновил титульное фото или если обновил только текст, загружается только в базу фотография по умолчанию, используя данные из скрытой формы об используемом в новости изображении
Мне нужно решить эту проблему! Помогите мне, пожалуйста с исправлением глобальной ошибки!
Буду рад вашей помощи и заранее вам спасибо!
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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