Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Salvando Imagens Boa Tarde Estou desenvolvendo um projeto e me deparei com uma situação onde necessito salvar imagens em um diretório e o nome da imagem no banco de dados, porem quando realizo o uploads das imagens se elas estiverem com o mesmo nome uma substitui a outra. Como resolvo o problema? existem exemplos para resolver esse problema? Grato...
PP
Salvando Imagens  
Boa Tarde

Estou desenvolvendo um projeto e me deparei com uma situação onde necessito salvar imagens em um diretório e o nome da imagem no banco de dados, porem quando realizo o uploads das imagens se elas estiverem com o mesmo nome uma substitui a outra. Como resolvo o problema? existem exemplos para resolver esse problema?


Grato

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 (3)


MG

Você deve renomear a imagem antes de movê-la da pasta tmp para a pasta destino final.

  1. <?php
  2.        if (isset($param['file'])) {
  3.                     $source_file   'tmp/'.$param['file'];
  4.                     $dt date('YmdH:m:s');
  5.                     $file_name $dt.'_'.param['file']); // acrescenta aaaammddhhmmss_<nome_arquivo>
  6.                     $target_file   'files/docs/' $file_name;
  7.                     
  8.                     if (file_exists($source_file))
  9.                     {
  10.                         // move to the target directory
  11.                         rename($source_file$target_file);
  12.                     }
  13.       }
  14. ?>
PP

Obrigado pela ajuda Marcelo; Mas eu ja tentei realizar um procedimento parecido mas sem resultado. Estou postando meu código se puderes me ajudar.
  1. <?php
  2. /**
  3.  * EnsaioForm Master/Detail
  4.  * @author  <your name here>
  5.  */
  6. class EnsaioForm extends TPage
  7. {
  8.     protected $form// form
  9.     protected $formFields;
  10.     protected $detail_list;
  11.     
  12.     /**
  13.      * Page constructor
  14.      */
  15.     public function __construct()
  16.     {
  17.         parent::__construct();
  18.         
  19.         // creates the form
  20.         $this->form = new TForm('form_Ensaio');
  21.         $this->form->class 'tform'// CSS class
  22.         $this->form->style 'max-width:100%'// style
  23.         parent::include_css('app/resources/custom-frame.css');
  24.         
  25.         $table_master = new TTable;
  26.         $table_master->width '100%';
  27.         
  28.         $table_master->addRowSet( new TLabel('Cadastro de Ensaio'), '''')->class 'tformtitle';
  29.         
  30.         // add a table inside form
  31.         $table_general = new TTable;
  32.         $table_detail  = new TTable;
  33.         $table_general-> width '100%';
  34.         $table_detail-> width  '100%';
  35.         
  36.         $frame_general = new TFrame;
  37.         $frame_general->setLegend('Ensaio');
  38.         $frame_general->style 'background:whiteSmoke';
  39.         $frame_general->add($table_general);
  40.         
  41.         $table_master->addRow()->addCell$frame_general )->colspan=2;
  42.         $row $table_master->addRow();
  43.         $row->addCell$table_detail );
  44.         
  45.         $this->form->add($table_master);
  46.         
  47.         // master fields
  48.         $id = new TEntry('id');
  49.         $id_perfil = new TCombo('id_perfil');
  50.         $dtEnsaio = new TDate('dtEnsaio');
  51.         $descricao = new TText('descricao');
  52.         $indAtivo = new TCombo('indAtivo');
  53.         
  54.         //set sizes
  55.         $id_perfil->setSize('100%');
  56.         $dtEnsaio->setSize('100%');
  57.         $descricao->setSize('100%');
  58.         $indAtivo->setSize('100%');
  59.         
  60.         try 
  61.         {
  62.         // valores personalizados
  63.         $indAtivo->addItems(['1' => 'Sim''0' => 'Não']);
  64.         
  65.         TTransaction::open('sample'); // open transaction
  66.         $conn TTransaction::get(); // get PDO connection
  67.         $registro $conn->query('SELECT * FROM perfil INNER JOIN modelo ON modelo.id = perfil.id_modelo');
  68.         $itens = array();
  69.         foreach($registro as $registros){
  70.             $itens[$registros['id']]=$registros['nomeCompleto'];
  71.         }
  72.         $id_perfil->addItems($itens);
  73.         TTransaction::close();
  74.         }
  75.         catch (Exception $mens
  76.         { 
  77.             new TMessage('error'$mens->getMessage()); 
  78.         }         
  79.         
  80.         if (!empty($id))
  81.         {
  82.             $id->setEditable(FALSE);
  83.         }
  84.         
  85.         // detail fields
  86.         $detail_id = new THidden('detail_id');
  87.         $detail_indCapa = new TCombo('detail_indCapa');
  88.         $detail_arqFoto = new TFile('detail_arqFoto');
  89.         $detail_dtInclusao = new TDate('detail_dtInclusao');
  90.         // set sizes
  91.         $detail_indCapa->setSize('100%');
  92.         $detail_arqFoto->setSize('100%');
  93.         $detail_dtInclusao->setSize('100%');
  94.         // valores personalizados
  95.         $detail_indCapa->addItems(['1' => 'Sim''0' => 'Não']);  
  96.         /** samples
  97.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  98.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  99.          $fieldX->setSize( 100, 40 ); // set size
  100.          **/
  101.         
  102.         // master
  103.         $table_general->addRowSet( new TLabel('ID'), $id );
  104.         $table_general->addRowSet( new TLabel('Perfil'), $id_perfil );
  105.         $table_general->addRowSet( new TLabel('Data do Ensaio'), $dtEnsaio );
  106.         $table_general->addRowSet( new TLabel('Descrição'), $descricao );
  107.         $table_general->addRowSet( new TLabel('Ativo'), $indAtivo );
  108.         
  109.          // detail
  110.         $frame_details = new TFrame();
  111.         $frame_details->setLegend('Foto');
  112.         $row $table_detail->addRow();
  113.         $row->addCell($frame_details);
  114.         
  115.         $btn_save_detail = new TButton('btn_save_detail');
  116.         $btn_save_detail->setAction(new TAction(array($this'onSaveDetail')), 'Register');
  117.         $btn_save_detail->setImage('fa:save');
  118.         
  119.         $table_details = new TTable;
  120.         $frame_details->add($table_details);
  121.         
  122.         $table_details->addRowSet''$detail_id );
  123.         $table_details->addRowSet( new TLabel('Capa'), $detail_indCapa );
  124.         $table_details->addRowSet( new TLabel('Foto'), $detail_arqFoto );
  125.         $table_details->addRowSet( new TLabel('Data'), $detail_dtInclusao );
  126.         
  127.         $table_details->addRowSet$btn_save_detail );
  128.         
  129.         $this->detail_list = new TQuickGrid;
  130.         $this->detail_list->setHeight175 );
  131.         $this->detail_list->makeScrollable();
  132.         $this->detail_list->disableDefaultClick();
  133.         $this->detail_list->addQuickColumn('''edit''left'50);
  134.         $this->detail_list->addQuickColumn('''delete''left'50);
  135.         
  136.         // items
  137.         $this->detail_list->addQuickColumn('Capa''indCapa''left'100);
  138.         $this->detail_list->addQuickColumn('Foto''arqFoto''left'100);
  139.         $this->detail_list->addQuickColumn('Data''dtInclusao''left'100);
  140.         $this->detail_list->createModel();
  141.         
  142.         $row $table_detail->addRow();
  143.         $row->addCell($this->detail_list);
  144.         
  145.         // create an action button (save)
  146.         $save_button=new TButton('save');
  147.         $save_button->setAction(new TAction(array($this'onSave')), _t('Save'));
  148.         $save_button->setImage('ico_save.png');
  149.         // create an new button (edit with no parameters)
  150.         $new_button=new TButton('new');
  151.         $new_button->setAction(new TAction(array($this'onClear')), _t('New'));
  152.         $new_button->setImage('ico_new.png');
  153.         
  154.         // define form fields
  155.         $this->formFields   = array($id,$id_perfil,$dtEnsaio,$descricao,$indAtivo,$detail_indCapa,$detail_arqFoto,$detail_dtInclusao);
  156.         $this->formFields[] = $btn_save_detail;
  157.         $this->formFields[] = $save_button;
  158.         $this->formFields[] = $new_button;
  159.         $this->formFields[] = $detail_id;
  160.         $this->form->setFields$this->formFields );
  161.         
  162.         $table_master->addRowSet( array($save_button$new_button), '''')->class 'tformaction'// CSS class
  163.         
  164.         // create the page container
  165.         $container = new TVBox;
  166.         $container->style 'width: 100%';
  167.         $container->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  168.         $container->add($this->form);
  169.         parent::add($container);
  170.     }
  171.     
  172.     
  173.     /**
  174.      * Clear form
  175.      * @param $param URL parameters
  176.      */
  177.     public function onClear($param)
  178.     {
  179.         $this->form->clear(TRUE);
  180.         TSession::setValue(__CLASS__.'_items', array());
  181.         $this->onReload$param );
  182.     }
  183.     
  184.     /**
  185.      * Save an item from form to session list
  186.      * @param $param URL parameters
  187.      */
  188.     public function onSaveDetail$param )
  189.     {
  190.         try
  191.         {
  192.             TTransaction::open('sample');
  193.             $data $this->form->getData();
  194.             
  195.             /** validation sample
  196.             if (! $data->fieldX)
  197.                 throw new Exception('The field fieldX is required');
  198.             **/
  199.             
  200.             $items TSession::getValue(__CLASS__.'_items');
  201.             $key = empty($data->detail_id) ? 'X'.mt_rand(10000000001999999999) : $data->detail_id;
  202.             
  203.             $items$key ] = array();
  204.             $items$key ]['id'] = $key;
  205.             $items$key ]['indCapa'] = $data->detail_indCapa;
  206.             $items$key ]['arqFoto'] = $data->detail_arqFoto;
  207.             $items$key ]['dtInclusao'] = $data->detail_dtInclusao;
  208.             
  209.             TSession::setValue(__CLASS__.'_items'$items);
  210.             
  211.             // clear detail form fields
  212.             $data->detail_id '';
  213.             $data->detail_indCapa '';
  214.             $data->detail_arqFoto '';
  215.             $data->detail_dtInclusao '';
  216.             
  217.             TTransaction::close();
  218.             $this->form->setData($data);
  219.             
  220.             $this->onReload$param ); // reload the items
  221.         }
  222.         catch (Exception $e)
  223.         {
  224.             $this->form->setData$this->form->getData());
  225.             new TMessage('error'$e->getMessage());
  226.         }
  227.     }
  228.     
  229.     /**
  230.      * Load an item from session list to detail form
  231.      * @param $param URL parameters
  232.      */
  233.     public function onEditDetail$param )
  234.     {
  235.         $data $this->form->getData();
  236.         
  237.         // read session items
  238.         $items TSession::getValue(__CLASS__.'_items');
  239.         
  240.         // get the session item
  241.         $item $items$param['item_key'] ];
  242.         
  243.         $data->detail_id $item['id'];
  244.         $data->detail_indCapa $item['indCapa'];
  245.         $data->detail_arqFoto $item['arqFoto'];
  246.         $data->detail_dtInclusao $item['dtInclusao'];
  247.         // fill detail fields
  248.         $this->form->setData$data );
  249.     
  250.         $this->onReload$param );
  251.     }
  252.     
  253.     /**
  254.      * Delete an item from session list
  255.      * @param $param URL parameters
  256.      */
  257.     public function onDeleteDetail$param )
  258.     {
  259.         $data $this->form->getData();
  260.         
  261.         // reset items
  262.             $data->detail_indCapa '';
  263.             $data->detail_arqFoto '';
  264.             $data->detail_dtInclusao '';
  265.         
  266.         // clear form data
  267.         $this->form->setData$data );
  268.         
  269.         // read session items
  270.         $items TSession::getValue(__CLASS__.'_items');
  271.         
  272.         // delete the item from session
  273.         unset($items$param['item_key'] ] );
  274.         TSession::setValue(__CLASS__.'_items'$items);
  275.         
  276.         // reload items
  277.         $this->onReload$param );
  278.     }
  279.     
  280.     /**
  281.      * Load the items list from session
  282.      * @param $param URL parameters
  283.      */
  284.     public function onReload($param)
  285.     {
  286.         // read session items
  287.         $items TSession::getValue(__CLASS__.'_items');
  288.         
  289.         $this->detail_list->clear(); // clear detail list
  290.         $data $this->form->getData();
  291.         
  292.         if ($items)
  293.         {
  294.             $cont 1;
  295.             foreach ($items as $list_item_key => $list_item)
  296.             {
  297.                 $item_name 'prod_' $cont++;
  298.                 $item = new StdClass;
  299.                 
  300.                 // create action buttons
  301.                 $action_del = new TAction(array($this'onDeleteDetail'));
  302.                 $action_del->setParameter('item_key'$list_item_key);
  303.                 
  304.                 $action_edi = new TAction(array($this'onEditDetail'));
  305.                 $action_edi->setParameter('item_key'$list_item_key);
  306.                 
  307.                 $button_del = new TButton('delete_detail'.$cont);
  308.                 $button_del->class 'btn btn-default btn-sm';
  309.                 $button_del->setAction$action_del'' );
  310.                 $button_del->setImage('fa:trash-o red fa-lg');
  311.                 
  312.                 $button_edi = new TButton('edit_detail'.$cont);
  313.                 $button_edi->class 'btn btn-default btn-sm';
  314.                 $button_edi->setAction$action_edi'' );
  315.                 $button_edi->setImage('fa:edit blue fa-lg');
  316.                 
  317.                 $item->edit   $button_edi;
  318.                 $item->delete $button_del;
  319.                 
  320.                 $this->formFields$item_name.'_edit' ] = $item->edit;
  321.                 $this->formFields$item_name.'_delete' ] = $item->delete;
  322.                 
  323.                 // items
  324.                 $item->id $list_item['id'];
  325.                 $item->indCapa $list_item['indCapa'];
  326.                 $item->arqFoto $list_item['arqFoto'];
  327.                 $item->dtInclusao $list_item['dtInclusao'];
  328.                 
  329.                 $row $this->detail_list->addItem$item );
  330.                 $row->onmouseover='';
  331.                 $row->onmouseout='';
  332.             }
  333.             $this->form->setFields$this->formFields );
  334.         }
  335.         
  336.         $this->loaded TRUE;
  337.     }
  338.     
  339.     /**
  340.      * Load Master/Detail data from database to form/session
  341.      */
  342.     public function onEdit($param)
  343.     {
  344.         try
  345.         {
  346.             TTransaction::open('sample');
  347.             
  348.             if (isset($param['key']))
  349.             {
  350.                 $key $param['key'];
  351.                 
  352.                 $object = new Ensaio($key);
  353.                 $items  Foto::where('id_ensaio''='$key)->load();
  354.                 
  355.                 $session_items = array();
  356.                 foreach( $items as $item )
  357.                 {
  358.                     $item_key $item->id;
  359.                     $session_items[$item_key] = $item->toArray();
  360.                     $session_items[$item_key]['id'] = $item->id;
  361.                     $session_items[$item_key]['indCapa'] = $item->indCapa;
  362.                     $session_items[$item_key]['arqFoto'] = $item->arqFoto;
  363.                     $session_items[$item_key]['dtInclusao'] = $item->dtInclusao;
  364.                 }
  365.                 TSession::setValue(__CLASS__.'_items'$session_items);
  366.                 
  367.                 $this->form->setData($object); // fill the form with the active record data
  368.                 $this->onReload$param ); // reload items list
  369.                 TTransaction::close(); // close transaction
  370.             }
  371.             else
  372.             {
  373.                 $this->form->clear(TRUE);
  374.                 TSession::setValue(__CLASS__.'_items'null);
  375.                 $this->onReload$param );
  376.             }
  377.         }
  378.         catch (Exception $e// in case of exception
  379.         {
  380.             new TMessage('error'$e->getMessage());
  381.             TTransaction::rollback();
  382.         }
  383.     }
  384.     
  385.     /**
  386.      * Save the Master/Detail data from form/session to database
  387.      */
  388.     public function onSave()
  389.     {
  390.         try
  391.         {
  392.             // open a transaction with database
  393.             TTransaction::open('sample');
  394.             
  395.             $data $this->form->getData();
  396.             $master = new Ensaio;
  397.             $master->fromArray( (array) $data);
  398.             $this->form->validate(); // form validation
  399.             
  400.             $master->store(); // save master object
  401.             // delete details
  402.             $old_items Foto::where('id_ensaio''='$master->id)->load();
  403.             
  404.             $keep_items = array();
  405.             
  406.             // get session items
  407.             $items TSession::getValue(__CLASS__.'_items');
  408.             
  409.             if( $items )
  410.             {
  411.                 foreach( $items as $item )
  412.                 {
  413.                     if (substr($item['id'],0,1) == 'X' // new record
  414.                     {
  415.                         $detail = new Foto;
  416.                     }
  417.                     else
  418.                     {
  419.                         $detail Foto::find($item['id']);
  420.                     }
  421.                     $detail->indCapa  $item['indCapa'];
  422.                     $detail->arqFoto  $item['arqFoto'];
  423.                     $detail->dtInclusao  $item['dtInclusao'];
  424.                     $detail->id_ensaio $master->id;
  425.                     $detail->store();
  426.                     
  427.                     $keep_items[] = $detail->id;
  428.                 }
  429.             }
  430.             
  431.             if ($old_items)
  432.             {
  433.                 foreach ($old_items as $old_item)
  434.                 {
  435.                     if (!in_array$old_item->id$keep_items))
  436.                     {
  437.                         $old_item->delete();
  438.                     }
  439.                 }
  440.             }
  441.             TTransaction::close(); // close the transaction
  442.             
  443.             // reload form and session items
  444.             $this->onEdit(array('key'=>$master->id));
  445.             
  446.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  447.         }
  448.         catch (Exception $e// in case of exception
  449.         {
  450.             new TMessage('error'$e->getMessage());
  451.             $this->form->setData$this->form->getData() ); // keep form data
  452.             TTransaction::rollback();
  453.         }
  454.     }
  455.     
  456.     /**
  457.      * Show the page
  458.      */
  459.     public function show()
  460.     {
  461.         // check if the datagrid is already loaded
  462.         if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  463.         {
  464.             $this->onReloadfunc_get_arg(0) );
  465.         }
  466.         parent::show();
  467.     }
  468. }
  469. ?>

</your>
MG

Pablo
Você recebe o parâmetro em 2 lugares.
1) Linha 209 - você pode modificar o nome antes de atribuir à lista; ou
2) Linha 428 - quando você salva o arquivo que veio da lista.

Lembre-se de ajustar antes do "store".