Перейти к содержанию
Официальный форум поддержки Simpla

Прикрепление файла к форме обратной связи


Перейти к решению Решено mishanya,

Рекомендуемые сообщения

Коллеги, нужен совет/пинок. Не понимаю в чем затык.

Как можно отследить (вывести дебаг) выполнения запросов?

 

1. В Апи добавил f.image в оба запроса.

2. В FeedbackView.php - добавлен блок загрузки файла, обозначены форматы

3. В шаблоне темы добавлен инпут для загрузки файла.

4. В конфиге прописан путь для хранения файлов + создана соответствующая директория.

 

Нигде никаких ошибок не выводится, запись в базу добавляется, но поле image остается пустым.

 

Что я мог забыть?

 

Вот так прописал в FeedbackView.php (удаление специально пока закоментировано):

 

			else
			{
				$this->design->assign('message_sent', true);
				
				// Удаление изображения
			/*	if($this->request->post('delete_image'))
				{
					$this->feedbacks->delete_image($feedback->id);
				}
			*/	// Загрузка изображения
				$image = $this->request->files('image');
				if(!empty($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions))
				{
					//$this->feedbacks->delete_image($feedback->id);   	    			
					move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->feedbacks_images_dir.$image['name']);
					$this->feedbacks->update_feedback($feedback->id, array('image'=>$image['name']));
				}

				$feedback->ip = $_SERVER['REMOTE_ADDR'];
				$feedback_id = $this->feedbacks->add_feedback($feedback);
				
				// Отправляем email
				$this->notify->email_feedback_admin($feedback_id);				
				
				// Приберем сохраненную капчу, иначе можно отключить загрузку рисунков и постить старую
				//unset($_SESSION['captcha_code']);
								
			}

 

Ссылка на сообщение
Поделиться на другие сайты

:) возможно потому что вы загружаете картинку и обновляете название картинки по АЙДИ фидбека перед тем как добавляете в базу сам фидбек.  соответственно делайте выводы.

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

 

 (удаление специально пока закоментировано):

 

не понятно что значит пока? у вас каждый пользователь будет грузить свою картинку и вызывать тут удаление чего-то не уместно.

Ссылка на сообщение
Поделиться на другие сайты

:) возможно потому что вы загружаете картинку и обновляете название картинки по АЙДИ фидбека перед тем как добавляете в базу сам фидбек.  соответственно делайте выводы.

 

Честно говоря пробовал по-разному "грузить" изображение в базу после $feedback_id = $this->feedbacks->add_feedback($feedback);

и даже "с горя" пробовал выносить за условие "иначе".

Результат тот же.

 

var_dump также никак не помог

Ссылка на сообщение
Поделиться на другие сайты

не понятно что значит пока? у вас каждый пользователь будет грузить свою картинку и вызывать тут удаление чего-то не уместно.

Имел ввиду, что лишнее закоментировано, но потом еще добавлю удаление картинки вместе с удалением фидбека :)

некорретно выразился

Ссылка на сообщение
Поделиться на другие сайты

Даже если упростить функцию апдейта записи в базе, ничего не изменится:

	public function update_feedback($id, $feedback)
	{
		$query = $this->db->placehold("UPDATE __feedbacks SET ?% WHERE id=? LIMIT 1", $feedback, intval($id));
		$this->db->query($query);
		return $id;
	}
Ссылка на сообщение
Поделиться на другие сайты

вы переделали тот участок кода что в первом посте?

 

Сейчас вот так (там в том числе поменял $feedback->id на $feedback_id):

class FeedbackView extends View
{
	private $allowed_image_extentions = array('png', 'gif', 'jpg', 'jpeg', 'ico');

	function fetch()
	{
		$feedback = new stdClass;
		if($this->request->method('post') && $this->request->post('feedback'))
		{
			$feedback->name         = $this->request->post('name');
			$feedback->email        = $this->request->post('email');
			$feedback->message      = $this->request->post('message');
			//$captcha_code           = $this->request->post('captcha_code');
			
			$this->design->assign('name',  $feedback->name);
			$this->design->assign('email', $feedback->email);
			$this->design->assign('message', $feedback->message);
			$this->design->assign('scroll', true);
			
			if(empty($feedback->name))
				$this->design->assign('error', 'empty_name');
			elseif(empty($feedback->email))
				$this->design->assign('error', 'empty_email');
			elseif(empty($feedback->message))
				$this->design->assign('error', 'empty_text');
			//elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))
			//{
			//	$this->design->assign('error', 'captcha');
			//}
			else
			{
				$this->design->assign('message_sent', true);
				
				// Загрузка изображения
				$feedback->ip = $_SERVER['REMOTE_ADDR'];
				$feedback_id = $this->feedbacks->add_feedback($feedback);
								
				$image = $this->request->files('image');
				var_dump($image);
				if(!empty($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions))
				{
					move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->feedbacks_images_dir.$image['name']);
					$this->feedbacks->update_feedback($feedback_id, array('image'=>$image['name']));
				}
				
				// Отправляем email
				$this->notify->email_feedback_admin($feedback_id);				
				
				// Приберем сохраненную капчу, иначе можно отключить загрузку рисунков и постить старую
				//unset($_SESSION['captcha_code']);
								
			}
		}

		if($this->page)
		{
			$this->design->assign('meta_title', $this->page->meta_title);
			$this->design->assign('meta_keywords', $this->page->meta_keywords);
			$this->design->assign('meta_description', $this->page->meta_description);
		}

		$body = $this->design->fetch('feedback.tpl');
		
		return $body;
	}
}

Ссылка на сообщение
Поделиться на другие сайты
  • Решение

Не работает скорее всего все же из-за того, что var_dump($image); возвращает NULL

 

теперь то да, раньше у вас не правильно было через айди и еще форма должна быть

<form method=post enctype="multipart/form-data">

 

также можно обойтись вообще без update_feedback и не делать 2 запроса. просто добавьте 

 

$feedback->image      = $image['name'];

и ниже уже

$feedback_id = $this->feedbacks->add_feedback($feedback);
Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

Возможно, в шаблоне у Вас не хватает  у формы enctype="multipart/form-data"

 

 

 

теперь то да, раньше у вас не правильно было через айди и еще форма должна быть

<form method=post enctype="multipart/form-data">

 

также можно обойтись вообще без update_feedback и не делать 2 запроса. просто добавьте 

 

$feedback->image      = $image['name'];

и ниже уже

$feedback_id = $this->feedbacks->add_feedback($feedback);

 

Спасибо! с entype все работает)

вар_дамп все что надо показывает, изображение сохраняется!

Ссылка на сообщение
Поделиться на другие сайты

Спасибо! с entype все работает)

вар_дамп все что надо показывает, изображение сохраняется!

 

вообще поставьте еще какое-то ограничение на размер, если на сервере не стоит а то забъют все.

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

вообще поставьте еще какое-то ограничение на размер, если на сервере не стоит а то забъют все.

Да, обязательно. Пока все в формате теста делаю. Спасибо еще раз вам и Корсу

Ссылка на сообщение
Поделиться на другие сайты
  • 2 года спустя...

Да, обязательно. Пока все в формате теста делаю. Спасибо еще раз вам и Корсу

На Simpla хорошо работает, под Okaycms чуть-чуть дополнил удаление, а вот с мультизагрузкой файлов вышел затык. Не подскажите как реализовать загрузку сразу нескольких файлов?

Ссылка на сообщение
Поделиться на другие сайты

На Simpla хорошо работает, под Okaycms чуть-чуть дополнил удаление, а вот с мультизагрузкой файлов вышел затык. Не подскажите как реализовать загрузку сразу нескольких файлов?

Идите на форум вашей CMS и там задавайте вопросы, здесь не приветствуется саппорт кастом (убогих) CMS.
Ссылка на сообщение
Поделиться на другие сайты

Идите на форум вашей CMS и там задавайте вопросы, здесь не приветствуется саппорт кастом (убогих) CMS.

Вообще-то в основном я работаю на Modx Revo, но иногда заказчики сами выбирают CMS, но если это Ваш личный форум, то пожалуй буду обходить его стороной - не люблю общаться с закомплексованными. 

Ссылка на сообщение
Поделиться на другие сайты

Вообще-то в основном я работаю на Modx Revo, но иногда заказчики сами выбирают CMS, но если это Ваш личный форум, то пожалуй буду обходить его стороной - не люблю общаться с закомплексованными.

Это не мой личный форум (боже упаси), я не понимаю вашей логики, пришли на форум поддержки Simpla CMS и задаёте вопросы касаемо совсем другой системы.

На что вы рассчитываете?

Ссылка на сообщение
Поделиться на другие сайты

На Simpla хорошо работает, под Okaycms чуть-чуть дополнил удаление, а вот с мультизагрузкой файлов вышел затык. Не подскажите как реализовать загрузку сразу нескольких файлов?

 

Смотрите, как сделано в Simpla в админке на странице товара, и действуйте аналогично.

Ссылка на сообщение
Поделиться на другие сайты

Это не мой личный форум (боже упаси), я не понимаю вашей логики, пришли на форум поддержки Simpla CMS и задаёте вопросы касаемо совсем другой системы.

На что вы рассчитываете?

Я рассчитывал именно на то, что мне помогут с мультизагрузкой по Simpla  и если бы я знал, что для некоторых упоминание Okaycms как красная тряпка для быка, то не стал бы ее упоминать.

Ссылка на сообщение
Поделиться на другие сайты

Я рассчитывал именно на то, что мне помогут с мультизагрузкой по Simpla и если бы я знал, что для некоторых упоминание Okaycms как красная тряпка для быка, то не стал бы ее упоминать.

Рассчитывал на одно - написал другое...

Кто вам лекарь?

P.S. Прежде чем что-либо писать в сети, подумайте что и как вы НАнапишите.

Изменено пользователем Noxter
Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

Здравствуйте! Необходимо вставить модуль обратной связи на главную страницу и добавить возможность загрузки файла до 50мб. Сообщение должно приходить администратору сайта на почту со ссылкой на этот файл. Готов купить эту доработку. Пожалуйста в личку.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...