Добрый вечер!
Хотел к вам обратиться с одной важной проблемой:
На данный момент дорабатываю сайт для одного благотворительного фонда.
На сайте применяется административная панель. В основном в этой панели работают страницы добавления новости и формы обновления новости в зависимости от выбранной новости.
Сама панель, как и весь сайт написаны на 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.
Сама проблема заключается в алгоритме управления изображениями при отправке обновленной версии новости, используемом при отправке новой новости.
И перед этим вылезали не раз такие ошибки. Поправлял лишние разы, чтобы лучше работало и такая же проблема светится в форме обновления выбранной новости.
Сама обновленная новость отправляется после редактирования в зависимости от того, как админ обновил титульное фото или если обновил только текст, загружается только в базу фотография по умолчанию, используя данные из скрытой формы об используемом в новости изображении
Мне нужно решить эту проблему! Помогите мне, пожалуйста с исправлением глобальной ошибки!
Буду рад вашей помощи и заранее вам спасибо!