Salvar imagem com nome personalizado Boa tarde, estou com um problema em uma das minhas páginas, quero salvar uma imagem em uma pasta personalizada e o caminho no banco de dados, em outra página minha isso já está funcionando, porém nessa, se deixo a linha que supostamente faz esse processo, ele dá erro de conexão com o banco, mesmo estando tudo certo (nome da tabela e campo) ...
MJ
Salvar imagem com nome personalizado  
Boa tarde, estou com um problema em uma das minhas páginas, quero salvar uma imagem em uma pasta personalizada e o caminho no banco de dados, em outra página minha isso já está funcionando, porém nessa, se deixo a linha que supostamente faz esse processo, ele dá erro de conexão com o banco, mesmo estando tudo certo (nome da tabela e campo)

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (4)


MJ

 
  1. <?php
  2. /**
  3. * QuestoesForm Master/Detail
  4. * @author <your name here>
  5. */
  6. class QuestoesAlternativasForm extends TPage
  7. {
  8. protected $form; // form
  9. protected $detail_list;
  10. /**
  11. * Page constructor
  12. */
  13. public function __construct()
  14. {
  15. parent::__construct();
  16. // creates the form
  17. $this->form = new BootstrapFormBuilder('form_Questoes');
  18. $this->form->setFormTitle('Questões');
  19. // master fields
  20. $questao = new TText('questao');
  21. $disciplinas_idDisciplinas = new TDBCombo('disciplinas_idDisciplinas', 'conexao', 'disciplinas', 'idDisciplinas', 'nome');
  22. $tags = new TEntry('tags');
  23. $video_midia = new TFile('nome_video_blob');
  24. $audio_midia = new TFile('nome_audio_blob');
  25. $imagem_midia = new TFile('nome_imagem_blob');
  26. $caminhoimagem = new TFile('caminhoimagem');
  27. $Dificuldade_idDificuldade = new TDBCombo('Dificuldade_idDificuldade', 'conexao', 'Dificuldade', 'idDificuldade', 'dificuldade');
  28. $Tipodequestao_idTipodequestao = new TDBCombo('Tipodequestao_idTipodequestao', 'conexao', 'Tipodequestao', 'idTipodequestao', 'nometipo');
  29. $caminho_imagem = new TFile('caminho_imagem');
  30. $imagem_midia->enableFileHandling();
  31. $audio_midia->enableFileHandling();
  32. $video_midia->enableFileHandling();
  33. $caminho_imagem->enableFileHandling();
  34. $imagem_midia->setAllowedExtensions( [ 'png', 'jpg', 'jpeg' ]);
  35. $audio_midia->setAllowedExtensions( [ 'mp3', 'wma' ]);
  36. $video_midia->setAllowedExtensions( [ 'avi', 'mkv', 'mp4' ]);
  37. $caminho_imagem->setAllowedExtensions( [ 'png', 'jpg', 'jpeg' ]);
  38. // detail fields
  39. $detail_idAlternativas = new THidden('detail_idAlternativas');
  40. $detail_alternativas = new TText('detail_alternativas', 'conexao', 'Alternativas', 'idAlternativas', 'alternativas');
  41. $detail_correta = new TRadioGroup('detail_correta', 'conexao', 'Alternativas', 'idAlternativas', 'correta');
  42. $detail_nome_audio_blob = new TFile('detail_nome_audio_blob', 'conexao', 'Alternativas', 'idAlternativas', 'nome_audio_blob');
  43. $detail_nome_video_blob = new TFile('detail_nome_video_blob', 'conexao', 'Alternativas', 'idAlternativas', 'nome_video_blob');
  44. $detail_nome_imagem_blob = new TFile('detail_nome_imagem_blob', 'conexao', 'Alternativas', 'idAlternativas', 'nome_imagem_blob');
  45. if (!empty($idQuestoes))
  46. {
  47. $idQuestoes->setEditable(FALSE);
  48. }
  49. // master fields
  50. $this->form->addFields( [new TLabel('Questão')], [$questao] );
  51. $this->form->addFields( [new TLabel('Tags')], [$tags] );
  52. $this->form->addFields( [new TLabel('Disciplina')], [$disciplinas_idDisciplinas] );
  53. $this->form->addFields( [new TLabel('Imagem')], [$imagem_midia] );
  54. $this->form->addFields( [new TLabel('Áudio')], [$audio_midia] );
  55. $this->form->addFields( [new TLabel('Vídeo')], [$video_midia] );
  56. $this->form->addFields( [new TLabel('Caminho da Imagem')], [$caminho_imagem] );
  57. $this->form->addFields( [new TLabel('Dificuldade')], [$Dificuldade_idDificuldade] );
  58. $this->form->addFields( [new TLabel('Tipo de Questão')], [$Tipodequestao_idTipodequestao] );
  59. // detail fields
  60. $this->form->addContent( ['<h4>Alternativas</h4><hr>'] );
  61. $this->form->addFields( [$detail_idAlternativas] );
  62. $this->form->addFields( [new TLabel('Alternativa')], [$detail_alternativas] );
  63. $this->form->addFields( [new TLabel('Áudio')], [$detail_nome_audio_blob] );
  64. $this->form->addFields( [new TLabel('Vídeo')], [$detail_nome_video_blob] );
  65. $this->form->addFields( [new TLabel('Imagem')], [$detail_nome_imagem_blob] );
  66. $this->form->addFields( [new TLabel('Correta')], [$detail_correta] );
  67. $add = TButton::create('add', [$this, 'onSaveDetail'], 'Register', 'fa:save');
  68. $this->form->addFields( [], [$add] )->style = 'background: whitesmoke; padding: 5px; margin: 1px;';
  69. $detail_correta->addItems ( ['0' => 'Não', '1' => 'Sim'] );
  70. $detail_correta->setLayout('horizontal');
  71. $detail_nome_audio_blob->enableFileHandling();
  72. $detail_nome_video_blob->enableFileHandling();
  73. $detail_nome_imagem_blob->enableFileHandling();
  74. $detail_nome_audio_blob->setAllowedExtensions( [ 'mp3', 'wma' ]);
  75. $detail_nome_video_blob->setAllowedExtensions( [ 'avi', 'mkv', 'mp4' ]);
  76. $detail_nome_imagem_blob->setAllowedExtensions( [ 'png', 'jpg', 'jpeg' ]);
  77. $this->detail_list = new BootstrapDatagridWrapper(new TQuickGrid);
  78. $this->detail_list->style = "min-width: 700px; width:100%;margin-bottom: 10px";
  79. $this->detail_list->setId('Questoes_list');
  80. // items
  81. $this->detail_list->addQuickColumn('Alternativas', 'alternativas', 'center', 100);
  82. $this->detail_list->addQuickColumn('Correta', 'correta', 'center', 100);
  83. // detail actions
  84. $this->detail_list->addQuickAction( 'Edit', new TDataGridAction([$this, 'onEditDetail']), 'idAlternativas', 'fa:edit blue');
  85. $this->detail_list->addQuickAction( 'Delete', new TDataGridAction([$this, 'onDeleteDetail']), 'idAlternativas', 'fa:trash red');
  86. $this->detail_list->createModel();
  87. $panel = new TPanelGroup;
  88. $panel->add($this->detail_list);
  89. $panel->getBody()->style = 'overflow-x:auto';
  90. $this->form->addContent( [$panel] );
  91. $btn = $this->form->addAction( _t('Save'), new TAction([$this, 'onSave']), 'fa:save');
  92. $btn->class = 'btn btn-sm btn-primary';
  93. $this->form->addAction(_t('Cancel'),new TAction(array('QuestoesList','onReload')),'fa:times-circle-o red');
  94. // create the page container
  95. $container = new TVBox;
  96. $container->style = 'width: 90%';
  97. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  98. $container->add($this->form);
  99. parent::add($container);
  100. }
  101. /**
  102. * Clear form
  103. * @param $param URL parameters
  104. */
  105. public function onClear($param)
  106. {
  107. $this->form->clear(TRUE);
  108. TSession::setValue(__CLASS__.'_items', array());
  109. $this->onReload( $param );
  110. }
  111. /**
  112. * Save an item from form to session list
  113. * @param $param URL parameters
  114. */
  115. public function onSaveDetail( $param )
  116. {
  117. try
  118. {
  119. TTransaction::open('conexao');
  120. $data = $this->form->getData();
  121. /** validation sample
  122. if (empty($data->fieldX))
  123. {
  124. throw new Exception('The field fieldX is required');
  125. }
  126. **/
  127. $items = TSession::getValue(__CLASS__.'_items');
  128. $key = empty($data->detail_idAlternativas) ? 'X'.mt_rand(1000000000, 1999999999) : $data->detail_idAlternativas;
  129. $items[ $key ] = array();
  130. $items[ $key ]['idAlternativas'] = $key;
  131. $items[ $key ]['alternativas'] = $data->detail_alternativas;
  132. $items[ $key ]['nome_audio_blob'] = $data->detail_nome_audio_blob;
  133. $items[ $key ]['nome_video_blob'] = $data->detail_nome_video_blob;
  134. $items[ $key ]['nome_imagem_blob'] = $data->detail_nome_imagem_blob;
  135. $items[ $key ]['correta'] = $data->detail_correta;
  136. TSession::setValue(__CLASS__.'_items', $items);
  137. // clear detail form fields
  138. $data->detail_idAlternativas = '';
  139. $data->detail_alternativas = '';
  140. $data->detail_nome_audio_blob = '';
  141. $data->detail_nome_video_blob = '';
  142. $data->detail_nome_imagem_blob = '';
  143. $data->detail_correta = '';
  144. TTransaction::close();
  145. $this->form->setData($data);
  146. $this->onReload( $param ); // reload the items
  147. }
  148. catch (Exception $e)
  149. {
  150. $this->form->setData( $this->form->getData());
  151. new TMessage('error', $e->getMessage());
  152. }
  153. }
  154. /**
  155. * Load an item from session list to detail form
  156. * @param $param URL parameters
  157. */
  158. public static function onEditDetail( $param )
  159. {
  160. // read session items
  161. $items = TSession::getValue(__CLASS__.'_items');
  162. // get the session item
  163. $item = $items[ $param['key'] ];
  164. $data = new stdClass;
  165. $data->detail_idAlternativas = $item['idAlternativas'];
  166. $data->detail_alternativas = $item['alternativas'];
  167. $data->detail_nome_audio_blob = $item['nome_audio_blob'];
  168. $data->detail_nome_video_blob = $item['nome_video_blob'];
  169. $data->detail_nome_imagem_blob = $item['nome_imagem_blob'];
  170. $data->detail_correta = $item['correta'];
  171. // fill detail fields
  172. TForm::sendData( 'form_Questoes', $data );
  173. }
  174. /**
  175. * Delete an item from session list
  176. * @param $param URL parameters
  177. */
  178. public static function onDeleteDetail( $param )
  179. {
  180. // reset items
  181. $data = new stdClass;
  182. $data->detail_alternativas = '';
  183. $data->detail_nome_audio_blob = '';
  184. $data->detail_nome_video_blob = '';
  185. $data->detail_nome_imagem_blob = '';
  186. $data->detail_correta = '';
  187. // clear form data
  188. TForm::sendData('form_Questoes', $data );
  189. // read session items
  190. $items = TSession::getValue(__CLASS__.'_items');
  191. // get detail id
  192. $detail_id = $param['key'];
  193. // delete the item from session
  194. unset($items[ $detail_id ] );
  195. // rewrite session items
  196. TSession::setValue(__CLASS__.'_items', $items);
  197. // delete item from screen
  198. TScript::create("ttable_remove_row_by_id('Questoes_list', '{$detail_id}')");
  199. }
  200. /**
  201. * Load the items list from session
  202. * @param $param URL parameters
  203. */
  204. public function onReload($param)
  205. {
  206. // read session items
  207. $items = TSession::getValue(__CLASS__.'_items');
  208. $this->detail_list->clear(); // clear detail list
  209. if ($items)
  210. {
  211. foreach ($items as $list_item)
  212. {
  213. $item = (object) $list_item;
  214. $row = $this->detail_list->addItem( $item );
  215. $row->id = $list_item['idAlternativas'];
  216. }
  217. }
  218. $this->loaded = TRUE;
  219. }
  220. /**
  221. * Load Master/Detail data from database to form/session
  222. */
  223. public function onEdit($param)
  224. {
  225. try
  226. {
  227. TTransaction::open('conexao');
  228. if (isset($param['key']))
  229. {
  230. $key = $param['key'];
  231. $object = new Questoes($key);
  232. $items = Alternativas::where('Questoes_idQuestoes', '=', $key)->load();
  233. $session_items = array();
  234. foreach( $items as $item )
  235. {
  236. $item_key = $item->idAlternativas;
  237. $session_items[$item_key] = $item->toArray();
  238. $session_items[$item_key]['idAlternativas'] = $item->idAlternativas;
  239. $session_items[$item_key]['alternativas'] = $item->alternativas;
  240. $session_items[$item_key]['nome_video_blob'] = $item->nome_video_blob;
  241. $session_items[$item_key]['nome_audio_blob'] = $item->nome_audio_blob;
  242. $session_items[$item_key]['nome_imagem_blob'] = $item->nome_imagem_blob;
  243. $session_items[$item_key]['correta'] = $item->correta;
  244. }
  245. TSession::setValue(__CLASS__.'_items', $session_items);
  246. $this->form->setData($object); // fill the form with the active record data
  247. $this->onReload( $param ); // reload items list
  248. TTransaction::close(); // close transaction
  249. }
  250. else
  251. {
  252. $this->form->clear(TRUE);
  253. TSession::setValue(__CLASS__.'_items', null);
  254. $this->onReload( $param );
  255. }
  256. }
  257. catch (Exception $e) // in case of exception
  258. {
  259. new TMessage('error', $e->getMessage());
  260. TTransaction::rollback();
  261. }
  262. }
  263. /**
  264. * Save the Master/Detail data from form/session to database
  265. */
  266. public function onSave()
  267. {
  268. try
  269. {
  270. // open a transaction with database
  271. TTransaction::open('conexao');
  272. $this->form->validate(); // form validation
  273. $data = $this->form->getData();
  274. $master = new Questoes;
  275. $master->fromArray( (array) $data);
  276. $master->store(); // save master object
  277. $this->saveFile($master, $data, 'caminhoimagem', 'app/images');
  278. $data_questao = date_create;
  279. $old_items = Alternativas::where('Questoes_idQuestoes', '=', $master->idQuestoes)->load();
  280. $keep_items = array();
  281. // get session items
  282. $items = TSession::getValue(__CLASS__.'_items');
  283. if( $items )
  284. {
  285. foreach( $items as $item )
  286. {
  287. if (substr($item['idAlternativas'],0,1) == 'X' ) // new record
  288. {
  289. $detail = new Alternativas;
  290. }
  291. else
  292. {
  293. $detail = Alternativas::find($item['idAlternativas']);
  294. }
  295. $detail->alternativas = $item['alternativas'];
  296. $detail->nome_video_blob = $item['nome_video_blob'];
  297. $detail->nome_audio_blob = $item['nome_audio_blob'];
  298. $detail->nome_imagem_blob = $item['nome_imagem_blob'];
  299. $detail->correta = $item['correta'];
  300. $detail->Questoes_idQuestoes = $master->idQuestoes;
  301. $detail->store();
  302. $keep_items[] = $detail->idAlternativas;
  303. }
  304. }
  305. if ($old_items)
  306. {
  307. foreach ($old_items as $old_item)
  308. {
  309. if (!in_array( $old_item->idAlternativas, $keep_items))
  310. {
  311. $old_item->delete();
  312. }
  313. }
  314. }
  315. TTransaction::close(); // close the transaction
  316. // reload form and session items
  317. $this->onEdit(array('key'=>$master->idQuestoes));
  318. $pos_action = new TAction(["QuestoesList", 'onReload']);
  319. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'), $pos_action);
  320. }
  321. catch (Exception $e) // in case of exception
  322. {
  323. new TMessage('error', $e->getMessage());
  324. $this->form->setData( $this->form->getData() ); // keep form data
  325. TTransaction::rollback();
  326. }
  327. }
  328. /**
  329. * Show the page
  330. */
  331. public function show()
  332. {
  333. // check if the datagrid is already loaded
  334. if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  335. {
  336. $this->onReload( func_get_arg(0) );
  337. }
  338. parent::show();
  339. }
  340. }
  341. </your>
MJ

Na outra página, o comando que supostamente faz o processo que preciso é o que está na linha 333
NR

Não sei se tem relação, mas você criou 2 vezes "caminho_imagem", uma vez sem o "_":
 
  1. <?php
  2. // construct
  3. $caminhoimagem = new TFile('caminhoimagem'); // primeira vez, esse campo não é adicionado ao form
  4. ...
  5. $caminho_imagem = new TFile('caminho_imagem'); // segunda vez, esse é o campo que está sendo adicionado ao form
  6. // onSave
  7. $this->saveFile($master, $data, 'caminhoimagem', 'app/images'); // aqui você está considerando o "caminhoimagem", mas acredito que deveria ser "caminho_imagem"
  8. ?>
MJ

Boa tarde, eu reparei nisso, consertei e continua não funcionando