Arquivado
Este tópico foi arquivado e está fechado para novas respostas.
Recommended Posts
-
Conteúdo Similar
-
Por Air-Gear
Olá, na parte de enviar eu conseguir, mas manter até terminar o cadastro eu não conseguir. Eu vou contar toda a história para ficar mais claro possível.
Eu precisei implementar um Upload de qualquer imagem ou PDF na página de solicitar compras. O site utiliza AngularJS, a primeira versão do Angular. Eu tentei fazer sem depender de PHP, mas na internet achava só a parte de Front-End e ninguém sabia fazer no Back-End. Então eu resolvi fazer com PHP mesmo.
Nó código PHP, ele aceita todos as extensões de imagens mais o PDF e é possível envia-los todos de uma vez na quantidade que quiser. Todos os arquivos serão renomeados, contendo no nome o ID do usuário logado pego pela função javascript, o dia do mês, o mês, o ano, o dia da semana, a hora, o minuto, o segundo, se é AM ou PM e uma numeração aleatório. O arquivo PDF vai continuar sendo PDF e todas as imagens serão JPG. No final, todos serão enviados para uma pasta chamada upload.
Só que agora eu preciso jogar de volta para página para salvar os novos nomes dos arquivos para continuar o cadastro da solicitação de compras. Como AngularJS utiliza Javascript, eu tentei usa-lo dentro do PHP utilizando EOF, mas não tive resultado. Eu só consigo com HTML com as diretivas do AngularJS. Na parte do API, nos atributos, eu declarei "nomeArquivo: []," , para salvar os nomes dos arquivos.
Seguem o código.
<div class="row"> <div class="col-sm-12 col-md-6 "> <div class="upload_form_cont"> <form id="upload_form" enctype="multipart/form-data" method="post" action="/profile-upload"> <div> <div><label for="image_file">Selecione o arquivo de imagem</label></div> <div><input type="file" name="image_file" id="image_file" accept="image/*" onchange="fileSelected();" /></div> </div> <div> <input type="button" value="Upload" onclick="startUploading()" /> </div> <div id="fileinfo"> <div id="filename"></div> <div id="filesize"></div> <div id="filetype"></div> <div id="filedim"></div> </div> <div id="error">Você deve selecionar apenas arquivos de imagem válidos!</div> <div id="error2">Ocorreu um erro ao enviar o arquivo</div> <div id="abort">O upload foi cancelado pelo usuário ou o navegador interrompeu a conexão</div> <div id="warnsize">Seu arquivo é muito grande. Não podemos aceitar isso. Selecione arquivos pequenos</div> <div id="progress_info"> <div id="progress"></div> <div id="progress_percent"> </div> <div class="clear_both"></div> <div> <div id="speed"> </div> <div id="remaining"> </div> <div id="b_transfered"> </div> <div class="clear_both"></div> </div> <div id="upload_response"></div> </div> </form> </div> </div> </div> upload.php
<?php function bytesToSize1024($bytes, $precision = 2) { $unit = array('B','KB','MB'); return @round($bytes / pow(1024, ($i = floor(log($bytes, 1024)))), $precision).' '.$unit[$i]; } //Pega o id do usuário logado $id_url = $_GET['id']; // Numero de campos de upload $numeroCampos = count($_FILES['image_file']['name']); // Tamanho máximo do arquivo (em bytes) $tamanhoMaximo = 1024*1024*2; // Extensões aceitas $extensoes = array(".jpg", "jpeg", ".gif", ".png", ".pdf", ".bmp", ".pdf", ".tiff"); //Local da pasta $_UP['pasta'] = '../upload/'; $substituir = false; for ($i = 0; $i < $numeroCampos; $i++) { // Informações do arquivo enviado $sFileName = $_FILES['image_file']['name'][$i]; $sSize = $_FILES['image_file']['size'][$i]; $sFileSize = bytesToSize1024($sSize, 1); $nomeTemporario = $_FILES['image_file']['tmp_name'][$i]; // Verifica se o arquivo foi colocado no campo if (!empty($sFileName)) { $erro = false; // Verifica se o tamanho do arquivo é maior que o permitido if ($sSize > $tamanhoMaximo) { $erro = "O arquivo " . $sFileName . " não deve ultrapassar " . $tamanhoMaximo. " bytes"; } // Verifica se a extensão está entre as aceitas elseif (!in_array(strrchr($sFileName, "."), $extensoes)) { $erro = "A extensão do arquivo <b>" . $sFileName . "</b> não é válida"; } // Verifica se o arquivo existe e se é para substituir elseif (file_exists($_UP['pasta'] . $sFileName) and !$substituir) { $erro = "O arquivo <b>" . $sFileName . "</b> já existe"; } else{ //Pega a extensão do arquivo $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION); // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta // Primeiro verifica se deve trocar o nome do arquivo $unixTime = time(); $timeZone = new \DateTimeZone('America/Sao_Paulo'); $time = new \DateTime(); $time->setTimestamp($unixTime)->setTimezone($timeZone); $formattedTime = $time->format('d-m-Y_l_h-i-s-a'); $aleatorio = rand(); if($TipoExtensao == 'pdf'){ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.pdf'; }else{ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.jpg'; } // Depois verifica se é possível mover o arquivo para a pasta escolhida if (move_uploaded_file($nomeTemporario, $_UP['pasta'] . $nome_final)) { // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo echo "Upload do arquivo ".$sFileName." foi efetuado com sucesso!"; echo "</br>"; echo<<<EOF <p>Eu tentei implementar o retorno da página aqui!</p> <p></br></p> <p></br></p> EOF; } else { // Não foi possível fazer o upload, provavelmente a pasta está incorreta echo "Não foi possível enviar o arquivo, tente novamente"; echo "</br>"; } } } else { echo "Selecione algum arquivo de imagem ou PDF para fazero upload."; } } ?>
-
Por edivancastro
Pessoal, em anexo segue meu modelo de banco de dados (duas tabelas). Estou utilizando doctrine. Este é um modelo resumido para eu tentar explicar o que estou passando.
As minhas classes Banner e Menu extendem de classes diferentes (ClasseX e ClasseY) e estas classes Banner e Menu, como voces podem ver possuem um Link que pode ser para uma categoria, artigo ou linkexterno (http://outrosite.com). Dai surgiu essa necessidade de min criar uma classe Link. Porem na minha opiniao é inviavel eu criar uma tabela no banco de dados para armazenar link, ou seja, a classe link não chega ser uma entidade concreta (tabela), seria apenas coluna no BD e para cada tipo de Link há uma estrategia para gerar o seu respectivo LinkURL, conforme pode ser observado na classe Link.
Pensei em fazer class Menu extends Link e class Banner extends Link, porem as classes banner e menu ja extendem de outras classes e como o PHP não aceita herança multipla não tem como.
enfim, como faço para mapear a classe Link para este modelo de banco de dados meu?
<?php /** * @ORM\Entity */ class Banner extends ClasseX{ /** * @ORM\Id */ private $id; /** * @ORM\Column('type=string') */ private $descricao; private $link; protected setLink(Link $link){ $this->link = $link; } protected getLink(){ return $this->link; } }
<?php /** * @ORM\Entity */ class Menu extends ClasseY{ /** * @ORM\Id */ protected $id; /** * @ORM\Column(type="string") */ protected $descricao; protected $link; protected setLink(Link $link){ $this->link = $link; } protected getLink(){ return $this->link; } }
<?php class Link{ const TIPO_ARTIGO=1; const TIPO_CATEGORIA=2; const TIPO_LINKEXTERNO=3 protected $tipo_link; protected $categoria; protected $artigo; proctected $linkexterno; public function setLink($link){ if(is_object($link)){ switch(get_class($link)){ case Artigo::class: $this->tipo = self::TIPO_ARTIGO; $this->artigo = $link; break; case Categoria::class: $this->tipo = self::TIPO_CATEGORIA; $this->categoria = $link; break; } }else{ $this->tipo = self::TIPO_LINKEXTERNO; $this->linkexterno = $link; } } public function getLinkUrl(){ switch($this->tipo_link){ case self::TIPO_ARTIGO; return $this->makeUrlToArtigo(); break; case self::TIPO_CATEGORIA; return $this->makeUrlToCategoria(); break; case self::TIPO_LINKEXTERNO; return $this->linkexterno; } } }
-
Por edivancastro
Pessoal minha aplicacao zf tem varios modulos e em todos estes modulos preciso executar uma operacao de log. geralmente eu faço isso na classe Module . nestas classes eu executo o metodo onBootstrap().
O problema é que eu tenho que em todos os modulos tenho que colocar essa mesma função de log, uma vez que cada modulo tem seu boostrap, ficando repetitivo. Como faço no zend para executar em todos modulos um unico bootstrap sem ter que ficar setando isso por modulo?
-
Por edivancastro
Pessoal, estou com um problema meio f*** aqui. estou desenvolvendo um projeto em zend framework e notei que ele so aceita charset UTF8. por mais que eu mude o charset no arquivo layout.phtml (meta charset="iso-8859-1") o framework continua enviando header utf8.
O manual do zend framework explica que por padrao o zend trabalha com charset utf8 e caso queira mudar teria que criar um view renderr conforme explica na pagina.
https://framework.zend.com/manual/2.3/en/modules/zend.view.helpers.head-style.html
realizei o procedimento e criei um view renderer porem continua trabalhando com charset utf-8. Gostaria de saber aqui quem trabalha com esse framework poderia me ajudar a mudar o charset para o iso-8859-1
-
Por gust.php
Bom dia senhores.
Estou tentando agrupar uma consulta por data no Doctrine se sucesso .... Alguém pode ajudar?
$em = $this->getEntityManager(); $qb = $em->createQueryBuilder(); $qb->select('u'); $qb->from('Servico\Model\Servico', 'u'); $qb->where('u.STATUS IN (:status)'); $qb->setParameter('status', ['2', '3', '4', '6']); if ($cliente) { $qb->andWhere('u.CLIENTE = :cliente'); $qb->setParameter('cliente', $cliente); } if ($fornecedor) { $qb->andWhere('u.FORNECEDOR = :fornecedor'); $qb->setParameter('fornecedor', $fornecedor); } if ($motorista) { $qb->andWhere('u.MOTORISTA = :motorista'); $qb->setParameter('motorista', $motorista); } if ($fileCliente) { $qb->andWhere('u.FILE = :file_cliente'); $qb->setParameter('file_cliente', $fileCliente); } if ($inicio AND $fim) { $qb->andWhere('u.DATA_INICIO BETWEEN :inicio AND :fim'); $qb->setParameter('inicio', $inicio); $qb->setParameter('fim', $fim); } $qb->orderBy('u.DATA_INICIO', 'ASC'); $qb->addOrderBy('u.HORA_INICIO', 'ASC'); //$qb->groupBy('u.DATA_INICIO'); ---> Isso não funciona $query = $qb->getQuery(); return $query->getResult();
-