Ir ao conteúdo
  • Cadastre-se

Air-Gear

Membro Pleno
  • Posts

    311
  • Cadastrado em

  • Última visita

  1. Obrigado pela ajuda! Foi erro do site, agora funcionou!
  2. Olá pessoal! Eu estou tentando resolver um código de um desafio, mas não consigo achar o erro que impede de imprimir a saída. Aponta que minha implementação encerrou com um retorno inválido. Segue a Descrição Agora, vamos combinar vários conceitos de lógica de programação, como manipulação de strings, operações matemáticas, controle de fluxo e expressões regulares, aplicados para o desenvolvimento de uma solução de correção para a equipe de administração de uma empresa bancária. Eles precisam de uma solução para a validação de números de contas com base em regras específicas. O programa solicitará ao usuário que insira um número de conta e verificará se ele atende aos critérios predefinidos de validação. Além disso, você pode adicionar a capacidade de informar ao usuário qual regra específica não foi cumprida caso a validação falhe. Regras de Validação: O número de conta deve ter exatamente 6 dígitos. O primeiro dígito deve ser maior que zero, ou seja, estar no intervalo de 1 a 9. A soma dos dígitos do número de conta não deve ser maior do que 30. Entrada O programa deve solicitar as seguintes informações: Número de conta (uma sequência de 6 dígitos). Saída O programa deverá fornecer uma mensagem que informa se o número de conta é válido ou inválido, indicando se o número de conta atende às regras de validação. Caso o número de conta seja inválido, o programa deve informar qual regra específica não foi cumprida. Exemplos A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis. Entrada: 634100 Saída: Numero de conta valido. Entrada: 023699 Saída: Numero de conta invalido: O primeiro digito deve ser maior que zero. Entrada: 989899 Saída: Numero de conta invalido: A soma dos dígitos e maior que 30. O código feito por mim: //Desafios JavaScript na DIO têm funções "gets" e "print" acessíveis globalmente: //- "gets" : lê UMA linha com dado(s) de entrada (inputs) do usuário; //- "print": imprime um texto de saída (output), pulando linha. //Saiba mais sobre Expressões Regulares: //https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Regular_expressions // O gets() receberá um número de conta como entrada: const numeroConta = gets(); // Verifica se o número de conta consiste em exatamente 6 dígitos usando uma expressão regular: if (/^\d{6}$/.test(numeroConta)) { const numArray = numeroConta.split('').map(Number); // Calcula a soma dos dígitos no número de conta const sum = numArray.reduce((a, b) => a + b, 0); // Verifica se o primeiro dígito é maior que zero e a soma dos dígitos é menor ou igual a 30 if (numArray[0] > 0 && sum <= 30) { // Se a condição acima for verdadeira, imprime a mensagem de número de conta válido: print('Numero de conta valido.'); } else { // Verifica se o numArray[0] referente ao primeiro dígito é igual a zero : if (numArray[0] === 0) { // Se o primeiro dígito for igual a zero, imprime a mensagem de número de conta inválido por causa do primeiro dígito: print('Numero de conta invalido: O primeiro digito deve ser maior que zero.'); } else { // Caso contrário, imprime a mensagem de número de conta inválido devido à soma dos dígitos ser maior que 30: print('Numero de conta invalido: A soma dos digitos e maior que 30.'); } } } else { // Se o número de conta não tiver exatamente 6 dígitos, imprime uma mensagem de erro: print('Numero de conta invalido: Deve conter exatamente 6 digitos.'); } Alguém sabe onde estou errando?
  3. Olá pessoal! Eu estou vendo videoaulas sobre Spring Boot e no projeto utiliza o Swagger para a interface, porém a versão do Swagger que está no site para colocar manualmente não aceita versões do Spring acima do 3.0. Eu tentei gerar com uma versão mais próxima que o professor utilizava e não conseguir colocar nem do site e nem a versão do curso, dava erro de vulnerabilidade. Eu percebi que os vídeos foram gravados dois anos atrás e com isso muita coisa mudou. Eu queria saber se tem alguma versão mais nova do Swagger ou algum substituto dele para colocar no meu projeto?
  4. Eu fiz isso e cheguei até as Variáveis de Ambiente e adicionei o C:\wamp64\bin\php\php5.6.40\php.exe Não funcionou, ainda fica laranja.
  5. Olá pessoal! Eu desinstalei o WampServer antigo para instalar a versão 3.2.6 para usar o PHP 8. Quando iniciei, ele não fica verde e apresenta essa mensagem: Warning: There is Wampserver path (c:/wamp64) into Windows PATH environnement variable: (C:\wamp64\bin\php\php5.6.40) Warning: It seems that a PHP installation is declared in the environment variable PATH C:\wamp64\bin\php\php5.6.40 Wampserver does not use, modify or require the PATH environment variable. Using a PATH on Wampserver or PHP version may be detrimental to the proper functioning of Wampserver. Alguém pode me ajudar?
  6. Eu conseguir evoluir com o o código, os dados já são enviados para o banco de dados. Agora só falta retornar todos os dados de cada posição ao invés do ultimo. Segue o novo código: public class clUpload { #region insert internal static tbUploadSCP novoUpload(objUpload obj) { tbUploadSCP uploadA = new tbUploadSCP(); using (TransactionScope ts = new TransactionScope()) { using (Repository<tbUploadSCP> repSol = new Repositoryupload()) { for (int i = 0; i < obj.arq.Count; i++) { uploadA = new tbUploadSCP { url = obj.arq[i].url, userId = obj.arq[i].userId, upIdAcao = obj.arq[i].upIdAcao, upTipo = obj.arq[i].upTipo, upData = obj.arq[i].upData, }; repSol.Add(uploadA); } } ts.Complete(); return uploadA; } } }
  7. Bom, como não fiquei parado, eu continuei tentando e acabei que optando o for no lugar do foreach. Segue o novo código: public class clUpload { #region insert internal static bool novoUpload(tbUploadSCP obj) { tbUploadSCP uploadA = new tbUploadSCP(); using (TransactionScope ts = new TransactionScope()) { using (Repository<tbUploadSCP> repSol = new Repositoryupload()) { string[] end = { }; for (int i = 0; i < obj.url.Length; i++) { end[i] = obj.url[i].ToString(); obj.url = end[i]; } uploadA = new tbUploadSCP { url = obj.url, userId = obj.userId, upIdAcao = obj.upIdAcao, upTipo = obj.upTipo, upData = obj.upData, }; repSol.Add(uploadA); //var upMetaPeriodo = UpMetaPeriodo(obj); } ts.Complete(); return true; } } //Resto do código que não tem haver com o problema } Visual Studio não deu erro no código, mas não executou como devia. Eu tentei colocar "url = end;", mas apontou erro. Eu estou mais ou menos no caminho.
  8. Olá pessoal! Entregaram um código já montando e preciso fazer uma modificação na parte do campo url, já que ele é uma array de string com tamanho variado. Antes de mexer no código, já funcionava, mas o campo url pegava só a primeira posição. No Front-End que utiliza Javascript eu conseguir resolver, o Back-End que utiliza C# estou pegando agora. Eu preciso implementar um foreach no campo, mas o campo está dentro de uma concatenação. Eu até tentei colocar o Foreach dentro, mas o Visual Studio aponta erro. Então coloquei antes para depois jogar dentro, mas estou agarrando e não estou achando um tutorial especifico para esse foreach. Alguém pode me ajudar? Segue o código. public class clUpload { #region insert internal static bool novoUpload(tbUploadSCP obj) { tbUploadSCP uploadA = new tbUploadSCP(); using (TransactionScope ts = new TransactionScope()) { using (Repository<tbUploadSCP> repSol = new Repositoryupload()) { string[] end = obj.url.Length; foreach (var i in end) { obj.url[i] = end[i]; } uploadA = new tbUploadSCP { url = obj.url, userId = obj.userId, upIdAcao = obj.upIdAcao, upTipo = obj.upTipo, upData = obj.upData, }; repSol.Add(uploadA); //var upMetaPeriodo = UpMetaPeriodo(obj); } ts.Complete(); return true; } } //Resto do código que não tem haver co o problema }
  9. Valeu @GabrielSennaMs! Enquanto isso eu trabalhei no novoUpload e finalmente conseguir imprimir o novo nome do arquivo que esta na primeira posição. Agora eu estou trabalhando numa array para imprimir todos os nomes, mas imprime só o primeiro nome. Segue o código. echo<<<EOF <p></p> <p>Nome: {$sFileName}</p> <p>Tamanho: {$sFileSize}</p> <input class="arrayFoto" id="impu" type="text" ng-model="sp.nomeFoto[{$i}]" name="nomeFoto[{$i}]" disabled value={$nome_final}> <p></br></p> EOF; function novoUpload(impu) { data = new Date(); debugger dia = String(data.getDate()).padStart(2, '0'); mes = String(data.getMonth() + 1).padStart(2, '0'); ano = data.getFullYear(); dataAtual = dia + '/' + mes + '/' + ano; debugger var lista = document.getElementsByClassName("arrayFoto"); for (i=0; i < lista.length; i++){ end = "app/upload/"+document.getElementById("impu").value; document.getElementById("demo").innerHTML = end; //Essa linha é usado pra impressão de teste //ext = path.split('.').pop(); } debugger id = $rootScope.usuario.id; url = arq.end; userId = arq.id; upIdAcao = arq.nome; upTipo = 1; upData = arq.dataAtual; //upArray = arq. return arq; }
  10. Tem algum material que faz upload de foto em Angular ou algum framework em Javascript que você recomenda?
  11. @GabrielSennaMs Bom, eu tentei fazer o esquema de salvar fotos sem depender de PHP, mas não conseguir. Só para ter uma ideia do caminho, no HTML com Angular tem um campo input para escolher as fotos. Em seguida, clicando no botão vai ativar uma função Javascript que verifica se os arquivos são validos e vai chamar upload.php com ID do usuário. Dentro do PHP, vai analisar os arquivos e fazer o esquema de renomear-los para jogar de volta no HTML. Sim, essa lista vai ser carregada no Front-End. Vai exibir a mensagem que o arquivo foi salvo e vai jogar input invisível com o novo nome década arquivo de foto. E também quero jogar esses novos nomes dentro de uma função Javascript.
  12. Olá pessoal! O sistema já tem um código que salva todos os campos no Banco Dados, eu simplesmente preciso implementar o upload de fotos. Bom, eu já conseguir fazer upload das fotos com os novos nomes deles em código PHP, mas precisei jogar de volta na página para salvar os dados das fotos junto com outros dados de cadastro. Na parte de jogar de volta eu fiz assim. //Código do Upload acima echo<<<EOF <p></p> <p>Nome: {$sFileName}</p> <p>Tamanho: {$sFileSize}</p> <input id="impu" type="hidden" ng-model="sp.nomeFoto[{$i}]" name="nomeFoto[{$i}]" disabled value={$nome_final}> <p></br></p> EOF; //Resto do código e fechamento do PHP Neste código, eu jogo todo o novo nome das fotos dentro deum input invisível. Após jogar de volta na página eu mando salvar junto com outros dados. O novoNome é um array, pois salvo várias fotos. O problema que na inspeção do código, não envia o novo e outros dados das fotos. O código para adicionar os dados são esses. function addItem() { if (validaAddItem()) { var objadd = { //Somente o nomeFoto para exemplificar melhor o código. "nomeFoto": $(novoUpload(impu)).value } debugger loadingItensAdicionados = true; $timeout(function () { arrayItensAdicionados.push(objadd); limparItem(); loadingItensAdicionados = false; }, 200); } } function montarSalvar() { debugger var params = { //Parte do código fica aqui no lugar do comentário. }; arrayItensAdicionados.forEach(element => { params.itens.push( { //Parte do código fica aqui no lugar do comentário. "sciNomeFoto": element.nomeFoto } ); }); return params; } E foi necessário criar uma nova função, novoUpload. Segue o código. function novoUpload(impu) { data = new Date(); debugger dia = String(data.getDate()).padStart(2, '0'); mes = String(data.getMonth() + 1).padStart(2, '0'); ano = data.getFullYear(); debugger end = "app/upload/"+impu.HTMLCollection.nomeFoto[0].namedItem(defaultValue); ext = path.split('.').pop(); dataAtual = dia + '/' + mes + '/' + ano; debugger id = $rootScope.usuario.id; url = arq.end; userId = arq.id; upIdAcao = arq.nome; upTipo = 1; upData = arq.dataAtual; //upArray = arq. return arq; } Inspecionei o código e foi necessário implementar o HTMLCollection5, mas nunca usei e não sei se é assim, pois não mostrou o erro no Console da Inspeção do Código. Onde estou errando?
  13. Bom no final eu conseguir fazer e utilizei o EOF pra achar os erros e ter noção do que o código faz, além de claro conseguir salvar varias imagens de formatos diferentes mais PDF ao mesmo tempo. No código renomeia todos os arquivos mantendo o formato PDF e colocando todas as imagens em JPG. Código pronto e concluído. <?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!"; } 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 <<<EOF <p></p> <p>Nome: {$sFileName} Tamanho: {$sFileSize}</p> <p>{$erro}</p> <p></br></p> <p>Posição: {$i}</p> <p>Algum erro?: {$erro}</p> <p>Nome Inicial: {$sFileName}</p> <p>Nome Temporário: {$nomeTemporario}</p> <p>Nome Final: {$nome_final}</p> <p>Tamanho: {$sFileSize}</p> <p></br></p> EOF; }else{ echo "Selecione algum arquivo de imagem ou PDF para fazero upload."; } } echo <<<EOF <p></p> <p>Número de arquivos adicionados no upload: {$numeroCampos}</p> EOF;
  14. Bom, eu não fiquei parado e acabei utilizando PHP para fazer isso porque não achei outra solução melhor. Segue o código: upload.php <?php $id_url = $_GET['id']; function bytesToSize1024($bytes, $precision = 2) { $unit = array('B','KB','MB'); return @round($bytes / pow(1024, ($i = floor(log($bytes, 1024)))), $precision).' '.$unit[$i]; } $sFileName = $_FILES['image_file']['name']; $sFileType = $_FILES['image_file']['type']; $sFileSize = bytesToSize1024($_FILES['image_file']['size'], 1); $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION); //Local da pasta $_UP['pasta'] = '../upload/'; if ($_FILES['image_file']['error'] != 0) { die("Não foi possível fazer o upload, erro:" . $_UP['erros'][$_FILES['image_file']['error']]); exit; // Para a execução do script } // 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($_FILES['image_file']['tmp_name'], $_UP['pasta'] . $nome_final)) { // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo echo "Upload efetuado com sucesso!"; } 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"; } //Fim do novo código echo <<<EOF <p></p> <p>Tipo: {$sFileType}</p> <p>Tamanho: {$sFileSize}</p> EOF; O $id_url = $_GET['id']; do upload.php pega o id do usuário no qual é lido no oXHR.open('POST', 'app/views/upload.php?id='+buscarID); que está no arquivo upload-foto.js. O id vai ser utilizado pra renomear o arquivo. O $_UP['pasta'] = '../upload/'; especifica o local onde a imagem vai ser salva. Acrescentei salvar PDF também e vai ser salvo como PDF enquanto todas as imagens vão ser salvas como JPG. O $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION); pega o tipo de extensão do arquivo e é utilizado no if($TipoExtensao == 'pdf'){ No mais, resolvido a questão do upload da foto e salvar na pasta upload. Agora eu preciso que salve não uma, mas varias fotos e PDFs de uma vez.
  15. Bom, como disse anteriormente, não fiquei parado, mas estou atrasado pra mostrar a solução que achei. function tableToPDF() { var pegar_dados = document.getElementById('testTable').innerHTML; var janela = window.open('','',width=800,height=800); janela.document.write('<html><head>'); janela.document.write('<title>PDF</title>'); janela.document.write('<link rel="stylesheet" href="vendor/pivottable/dist/pivot.css">'); janela.document.write('<link rel="stylesheet" href="app/css/app.css">'); janela.document.write('<link rel="stylesheet" href="app/css/style.css">'); janela.document.write('</head>'); janela.document.write('<body>'); janela.document.write('<input type="button" onclick="window.print()"value="Salva PDF">'); janela.document.write('<table class="pvtTable">'); janela.document.write(pegar_dados); janela.document.write('<thead>'); janela.document.write('<tr>'); janela.document.write('<th>'); janela.document.write('</th>'); janela.document.write('</tr>'); janela.document.write('</thead>'); janela.document.write('</table>'); janela.document.write('</body></html>'); janela.document.close(); } Como o html2canvas estava criando uma imagem pra depois criar um PDF e estava cortando quase toda a planilha, eu desistir dele e fiz um esquema de optar pra imprimir em PDF. Como abrir no automático não mostrava a planilha com as linhas divisórias, eu optei pra abrir uma nova janela primeiro com a formatação necessárias com um botão Salvar que vai exibira opção de imprimir e o usuário vai escolher a opção Imprimir em PDF pra pra criar o PDF com a planilha com divisórias. É isso! Problema resolvido!

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...