Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.622
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. Eu simplifiquei o seu código assim: Sub Novo_RDO() ActiveSheet.Name = Format(CInt(ActiveSheet.Name) + 1, "00") Range("A1:A1").ClearContents End Sub Quanto às imagens, eu deixaria tudo lá, e iria atualizar cada uma com o botão direito > alterar imagem.
  2. Recebi nessa semana a mensagem de que há uma nova versão do WampServe. Como não é possível instalar a nova versão em cima da velha, precisei desinstalar o anterior (incluindo todos os códigos que eu criei, mas trouxe de volta com a ajuda da Hostinger). Antes de instalar a nova versão, ele pede para instalar várias atualizações do Visual C++. A nova versão é bem melhor, não tem mais aquelas janelas escuras que aparecem, quando você ativa o WampServe pela primeira vez. Ele traz o MySQL 9.9.1 e o PHP 8.4.0. O MySQL Workbench reclamou que o MySQL 9.9.1 não é totalmente compatível, mesmo assim estou conseguindo trabalhar. O Workbench amostra grátis só dá suporte até o MySQL 8.0. Já o VS Code disparou um monte de mensagens, eu tive que até mexer no arquivo php.ini (o VS Code não conseguia carregar o arquivo Xdebug, ele estava buscando no diretório E:, o meu é C:, mas na hora de editar, ele não funcionou. Usei o método da tentativa e erro, e mudei para c : e deu certo). Os meus códigos em PHP não apresentaram nenhum problema, já o código Laravel, eu tive que mexer num arquivo dentro do labirinto do Vendor, é claro, com a ajuda do Copilot. O VS Code funciona, só não tenho certeza se eu consertei corretamente o arquivo do Laravel, só agora é que me dei conta que o correto era usar o comando composer update.
  3. O seu código trabalha com duas classes, e eu simplifiquei numa só classe: arquivo conexao.php <?php $mysqli=new mysqli("localhost","root","","diario"); arquivo index.php <?php include('conexao.php'); class Capa { function pegaCapa($cliente){ global $mysqli; return $mysqli->query("select pessoa from tbpessoa where pessoa like '%$cliente%' limit 1") ->fetch_assoc()['pessoa']; } function pegaItem($codigo){ global $mysqli; return $mysqli->query("select codp from tbpessoa where codp=$codigo") ->fetch_assoc()['codp']; } } function calculaItem($item,$cliente){ $ret_capa=(new Capa)->pegaCapa($cliente); $ret_item=(new Capa)->pegaItem($item); return "ret_capa $ret_capa ret_item $ret_item"; } echo calculaItem(1,"Frank"); O include funciona do mesmo jeito desde o PHP 5.6 até o PHP 8.1.2, e aqui testei no PHP 8.4.0. O problema do PHP 8.1.2 é que ele não dá mais suporte para o motor mysql - no lugar temos dois novos motores: o mysqli e o PDO. Desconfio que o problema é o motor que você está tentando usar no PHP 8.1.2.
  4. No Laravel, estou migrando do Bootstrap para o Tailwinds, com a ajuda do Copilot. Basicamente estou tentando fazer com as <div> o mesmo que eu fiz com os <td>. No notebook, tudo funciona a mil maravilhas. Já no celular, tudo é um tumulto generalizado, uma <div> fica em cima da outra. Por ora, decidi esquecer a responsividade, decidi que a tela do celular vai ser espelho do notebook. Claro que isso é impossível, mas achei um denominador comum: o tamanho do <body>, decidi definir assim: <style> @media (min-width: 768px) { body {width: 500px; margin: auto} } @media (max-width: 767px) { body {width: 500px } } </style> Ou seja, o celular vai mostrar o que puder e o notebook vai colocar tudo no meio da tela. A responsividade é bacana, mas isso vou deixar lá para frente.
  5. Eu sou novo no Phyton, tentei fazer o seu código funcionar, o máximo que eu consegui foi até aqui: from datetime import datetime # pip install flask from flask import Flask, jsonify, request app=Flask(__name__) @app.route('/adicionar_coluna/<int:painel_id>', methods=['POST']) def get_db_connection(): import mysql.connector # pip install mysql-connector-python # Conectar ao banco de dados conexao = mysql.connector.connect( host="localhost", user="root", password="", database="teste" ) return conexao def configurar_colunas(painel_id): with get_db_connection() as connection: cursor = connection.cursor() # Buscar o SQL do painel criado cursor.execute("select * from hp_painel where nr_sequencia=%s",(painel_id,)) painel = cursor.fetchone() breakpoint() #testando painel_id=1 configurar_colunas(painel_id)
  6. Com a ajuda do Copilot, descobri que a linguagem desse programa é Portogol. Baixei a versão para a versão desktop, mas ele trabalha com fontes muito pequenas, não dá para trabalhar. Mas achei a versão web que é bem mais fácil de enxergar: http://portugol.professorisidro.com.br:3000/ide Mas eu tive que mudar todo o seu código para alguma coisa funcionar: programa { cadeia cliente[5][5] funcao inicio() { cliente[0][0]="nome" cliente[0][1]="pacote" inteiro opcao escreva("Turismo Legal\n") escreva("1. Cadastrar cliente\n") escreva("2. Listagem Geral\n") escreva("0. Sair\n") escreva("Informe a opção desejada: ") leia(opcao) escolha(opcao) { caso 1: cadastraCliente() pare caso 2: listaCliente() pare caso 0: pare caso contrario: escreva("Opção inválida!") } } funcao cadastraCliente(){ escreva("nome: ") leia(cliente[1][0]) cliente[1][1] = calculePacote() inicio() } funcao cadeia calculePacote() { retorne "100" } funcao listaCliente() { escreva(cliente[0][0]) escreva(cliente[0][1]) escreva("\n") escreva(cliente[1][0]) escreva(cliente[1][1]) } }
  7. Sub VerificarTipoPlaca() Dim placa As String Dim resultado As String placa = InputBox("Digite a placa do carro:") If IsPlacaAntiga(placa) Then resultado = "Antiga" ElseIf IsPlacaNova(placa) Then resultado = "Nova" Else resultado = "Formato Desconhecido" End If MsgBox "A placa " & placa & " é do tipo: " & resultado, vbInformation, "Tipo de Placa" End Sub Function IsPlacaAntiga(placa As String) As Boolean ' Verifica se a placa segue o formato AAA-0000 If placa Like "AAA-####" Then IsPlacaAntiga = True Else IsPlacaAntiga = False End If End Function Function IsPlacaNova(placa As String) As Boolean ' Verifica se a placa segue o formato AAA0A00 If placa Like "AAA#A##" Then IsPlacaNova = True Else IsPlacaNova = False End Function End``` ### Explicação do Código: 1. **Sub VerificarTipoPlaca**: - Solicita ao usuário que digite a placa do carro usando `InputBox`. - Verifica o tipo de placa usando as funções `IsPlacaAntiga` e `IsPlacaNova`. - Exibe uma mensagem com o tipo de placa usando `MsgBox`. 2. **Funções IsPlacaAntiga e IsPlacaNova**: - Verificam se a placa corresponde aos formatos `AAA-0000` e `AAA0A00`, respectivamente. ### Como Usar: 1. **Abra o VBA Editor**: Pressione `Alt + F11` no Access. 2. **Inserir um Módulo**: Clique com o botão direito no seu projeto VBA > Inserir > Módulo. 3. **Copiar e Colar o Código**: Cole o código fornecido no módulo. 4. **Executar a Macro**: No editor VBA, selecione a macro `VerificarTipoPlaca` e clique em `Run`. crédito: copilot.microsoft.com
  8. Quando comecei a estudar o Laravel eu usei o Bootstrap. Com o surgimento da inteligência artificial em 2024, ficou bem mais fácil usar o Tailwinds. Hoje fiz uma experiência para saber se dava para usar os dois ao mesmo tempo, e deu certo: arquivo testeView.blade.php <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> @vite(['resources/css/app.css', 'resources/js/app.js']) <table class='m-0 m-auto'> <tr class=bg-secondary> <td>{{'limão'}}<td> <td><form class=m-0 style=height:10px> @csrf <input value=1 size=1 class="form-control text-end bg-transparent border-0" style=height:10px> </form> <td>{{'x 1'}} <td>{{'='}} <td>{{1}} </table> <div class=h-1></div> <div class="flex bg-secondary m-0 m-auto w-[160]"> <div>{{'limão'}}</div> <div> <form class="m-0 h-[10px]"> @csrf <input value=1 size=1 class="text-right bg-transparent border-none h-[10px] mt-1"> </form> </div> <div>{{'x 1'}}</div> <div>{{'='}}</div> <div>{{1}}</div> </div>
  9. arquivo testeView.blade.php @include('appView') @php $class='class="text-red-500"' @endphp <span <?=$class?>>Teste</span> <!--funciona--> <span {{$class}}>Teste</span> <!-- não --> <span {{{$class}}}>Teste</span> <!-- não --> <span {!! $class !!}>Teste</span> <!-- modo blade de usar caracteres HTML sem escapar -->
  10. Eu não tenho VBA, mas eu tenho Excel. Criei uma nova planilha, e na planilha Plan1 eu escrevi teste na célula a1, a2 e a3. Eu fui no painel de programação do Excel e com a ajuda do Copilot, eu ajustei o seu código: Sub Gerar_Pdf() Dim criarpasta As String, caminho_arquivo As String Dim ws As Worksheet 'Define a planilha explicitamente Set ws = ThisWorkbook.Sheets("Plan1") criarpasta = ThisWorkbook.Path & "\Formularios" If Dir(criarpasta, vbDirectory) = "" Then MkDir criarpasta End If With ws .Activate caminho_arquivo = ThisWorkbook.Path & "\Formularios\" & .Range("A3").Value & ".PDF" .Range("A1:A2").ExportAsFixedFormat Type:=xlTypePDF, Filename:=caminho_arquivo End With End Sub Na Janela Imediata, eu escrevi Gerar_Pdf e deu certo. Se não der certo, veja em Ferramentas > Referências se estão marcados as seguintes: Visual Basic for Applications Microsoft Excel 16.0 Object Libray OLE Automation Microsoft Office 16.0 Object Library Se você estiver trabalhando com o VBA puro, sugiro procurar os comandos equivalentes.
  11. Estou estudando Tailwinds com o Copilot, estou aprendendo a usar o marcador <div>. Para colocar uma <div> em cima da outra, você não precisa fazer nada. Para colocar uma <div> do lado da outra, aí você precisa usar <div class="flex">. Para colocar diferentes números de <div> em cada linha, aí você precisa usar <div class="flex flex-wrap">. O problema é alinhar as colunas. O Tailwinds tem ótimas ferramentas para fazer ajustes, do tipo margem negativa. Isso é uma grande maravilha, desde que a linha não seja sombreada. O Copilot ofereceu uma sugestão, mas o código iria ficar enorme. Eu resolvi apelar para a velha gambiarra do &nbsp. Mas eu tive que usar 7 &nbsp. Na internet encontrei a sugestão do &ensp, ele é maior que o &nbsp: arquivo outrosView.blade.php @include('menuView') <script> btmenu.innerHTML = 'Outros'; document.title = "Outros"; </script> <div class="px-2 bg-gray-200"><a href="estoqueBaixar">Baixar Estoque</a></div> <div class=px-2><a href="balanceteTBW">Criar tbw</a></div> <div class="px-2 bg-gray-200"><a href="produtoDescontinuar">Descontinuar Produto</a></div> <div class=px-2><a href="estoqueDiferenca">Diferença no Estoque</a></div> <div class="px-2 bg-gray-200"><a href="blingDiferenca">Diferença na Bling</a></div> <div class=px-2><a href="estoqueEntrada">Entrada de Produtos</a></div> <div class="px-2 bg-gray-200"><a href="outrosMegaSena">Mega-Sena</a></div> <div class=px-2><a href="estoqueNota">Nota do Fornecedor</a></div> <div class="px-2 bg-gray-200"><a href="blingFalta">Nota Faltante</a></div> <div class="flex flex-wrap"> <div class="w-1/2 px-2">session('codp')</div> <div class="w-1/2">{{$sessao['codp']}}</div> <div class="w-1/2 px-2 bg-gray-200">session('pessoa')</div> <div class="w-1/2 bg-gray-200">{{$sessao['pessoa']}}</div> <div class="w-1/2 px-2">session('criterio')</div> <div class="w-1/2">{{$sessao['criterio']}}</div> <div class="w-1/2 px-2 bg-gray-200">session('criterioPessoa')</div> <div class="w-1/2 bg-gray-200">{{$sessao['criterioPessoa']}}</div> <div class="w-1/2 px-2">session('dia')</div> <div class="w-1/2">{{dbr($sessao['dia'])}}</div> <div class="w-1/2 px-2 bg-gray-200">session('end')</div> <div class="w-1/2 bg-gray-200">{{$sessao['end']}}</div> <div class="w-1/2 px-2">session('id')</div> <div class="w-1/2">{{$sessao['id']}}</div> <div class="w-1/2 px-2 bg-gray-200">session('lcto')</div> <div class="w-1/2 bg-gray-200">{{$sessao['lcto']}}</div> <div class="w-1/3 px-2">env('lctoBaixaEstoque')</div> <div class="w-1/3 text-center ml-4">{{$baixa}}</div> <div class="w-1/3 text-right text-red-500 -ml-4"> {{dec($valorBaixa)}}</div> <div class="w-1/3 px-2 bg-gray-200">env('lctoAcertoMais')</div> <div class="w-1/3 text-center bg-gray-200">&ensp;&ensp;&ensp;&nbsp;{{$mais}}</div> <div class="w-1/3 text-right text-red-500 bg-gray-200">{{dec($valorMais)}}</div> <div class="w-1/3 px-2 ">env('lctoAcertoMenos')</div> <div class="w-1/3 text-center ml-4">{{$menos}}</div> <div class="w-1/3 text-right text-red-500 -ml-4">{{dec($valorMenos)}}</div> <div class="w-1/2 px-2 bg-gray-200">env('diaAcerto')</div> <div class="w-1/2 bg-gray-200">{{dbr($diaAcerto)}}</div> </div>
  12. 10 gb ou 21 gb é muita coisa! Desconfio que tem muito vídeo dentro do WhatsApp. Aconselho a entrar em configurações, Armazenamento e dados, Gerenciar Armazenamento, espere um pouco, e o WhatsApp vai apontar todos os arquivos maiores que 5 mb. Analise com calma, se você não precisar, elime. Sugiro fazer o mesmo no aplicativo Galeria, elimine os vídeos que não são necessários.
  13. Gastei dois dias para transformar um arquivo com o CSS Bootstrap para o Tailwinds, tive que trocar um monte de <td> por um monte de <div>: arquivo balanceteView.blade.php @include('menuView') <script>btMenu.innerHTML="Balancete";document.title="Balancete"</script> <div class="flex bg-gray-200"> <div style=width:350px><a href='balanceteApura'>{{$apuracao->apuracao}}</a></div> <div style=width:200px class=text-right>Anterior</div> <div style=width:200px class=text-right>Débito</div> <div style=width:200px class=text-right>Crédito</div> <div style=width:200px class=text-right>Saldo</div> </div> @foreach($balancete as $conta) <div class="flex bg-gray-200 odd:bg-white even:bg-gray-200"> <div style=width:50px><a href="balanceteRazao?conta={{$conta->conta}}">{{$conta->conta}}</a></div> <div style=width:300px>{{$conta->descricao}}</div> <div style=width:200px class=text-right>{{dec($conta->inicio)}}</div> <div style=width:200px class=text-right>{{dec($conta->debito)}}</div> <div style=width:200px class=text-right>{{dec($conta->credito)}}</div> <div style=width:200px class=text-right>{{dec($conta->fim)}}</div> </div> @if($conta->conta==304) <div class="flex bg-white"> <div style=width:950px class="text-right font-semibold">Receita</div> <div style=width:200px class="text-right font-semibold">{{dec($receita)}}</div> </div> @endif </div> @endforeach <div class="flex bg-white"> <div style=width:950px class="text-right font-semibold">Despesa</div> <div style=width:200px class="text-right font-semibold">{{dec($despesa)}}</div> </div> <div class="flex bg-gray-200"> <div style=width:550px class="text-right font-semibold">{{dec($anterior)}}</div> <div style=width:400px class="text-right font-semibold">{{$nota}}</div> <div style=width:200px class="text-right font-semibold">{{dec($resultado)}}</div> </div> e apenas alguns segundos para acabar com a lentidão da minha função balancete: arquivo Balancete.php (listagem parcial) <?php // ... function inicio (Request $request) { $previa=$this->balancete(); $balancete=$previa->balancete; $apuracao=$previa->apuracao; $anterior=$previa->anterior; $receita=$previa->receita; $despesa=$previa->despesa; $resultado=$previa->resultado; $nota=$previa->nota; return view('balanceteView',['balancete'=>$balancete, 'apuracao'=>$apuracao,'anterior'=>$anterior,'despesa'=>$despesa, 'receita'=>$receita,'resultado'=>$resultado,'nota'=>$nota]); } function balancete() { $receita = 0; $despesa = 0; $anterior = 0; $balancete = []; $contas = tbconta::all(); if (!session()->has('dia')) { session(['dia' => date('Y-m-d')]); } $apuracao = apuracao(session('dia')); $primeiroDia = $apuracao->primeiroDia; $ultimoDia = $apuracao->ultimoDia; // Agregações para melhorar a performance $debitosAnteriores = tbdiario::where('dia', '<', $primeiroDia) ->select('contad', \DB::raw('SUM(valor) as debito_anterior')) ->groupBy('contad') ->pluck('debito_anterior', 'contad')->all(); $creditosAnteriores = tbdiario::where('dia', '<', $primeiroDia) ->select('contac', \DB::raw('SUM(valor) as credito_anterior')) ->groupBy('contac') ->pluck('credito_anterior', 'contac')->all(); $debitos = tbdiario::whereBetween('dia', [$primeiroDia, $ultimoDia]) ->select('contad', \DB::raw('SUM(valor) as debito')) ->groupBy('contad') ->pluck('debito', 'contad')->all(); $creditos = tbdiario::whereBetween('dia', [$primeiroDia, $ultimoDia]) ->select('contac', \DB::raw('SUM(valor) as credito')) ->groupBy('contac') ->pluck('credito', 'contac')->all(); $debitosFinais = tbdiario::where('dia', '<=', $ultimoDia) ->select('contad', \DB::raw('SUM(valor) as debito_fim')) ->groupBy('contad') ->pluck('debito_fim', 'contad')->all(); $creditosFinais = tbdiario::where('dia', '<=', $ultimoDia) ->select('contac', \DB::raw('SUM(valor) as credito_fim')) ->groupBy('contac') ->pluck('credito_fim', 'contac')->all(); foreach ($contas as $conta) { $debitoAnterior = isset($debitosAnteriores[$conta->conta]) ? $debitosAnteriores[$conta->conta] : 0; $creditoAnterior = isset($creditosAnteriores[$conta->conta]) ? $creditosAnteriores[$conta->conta] : 0; $inicio = $debitoAnterior - $creditoAnterior; $anterior += $inicio; $debito = isset($debitos[$conta->conta]) ? $debitos[$conta->conta] : 0; $credito = isset($creditos[$conta->conta]) ? $creditos[$conta->conta] : 0; $debitoFim = isset($debitosFinais[$conta->conta]) ? $debitosFinais[$conta->conta] : 0; $creditoFim = isset($creditosFinais[$conta->conta]) ? $creditosFinais[$conta->conta] : 0; $fim = $debitoFim - $creditoFim; if ($conta->conta >= 301 && $conta->conta <= 304) { $receita += $fim; } if ($conta->conta > 304) { $despesa += $fim; } $balancete[] = [ 'conta' => $conta->conta, 'descricao' => $conta->descricao, 'inicio' => $inicio, 'debito' => $debito, 'credito' => $credito, 'fim' => $fim, ]; } $resultado = $receita + $despesa; $nota = ($resultado < 0) ? "Lucro" : "Prejuízo"; $balancete = json_decode(json_encode($balancete)); return json_decode(json_encode([ 'balancete' => $balancete, 'apuracao' => $apuracao, 'anterior' => $anterior, 'despesa' => $despesa, 'receita' => $receita, 'resultado' => $resultado, 'nota' => $nota, ])); } Esse Copilot é fora de série!
  14. Eu uso o VBA for Aplications do Microsoft Access, mas acredito que a solução seja válida no VBA. Ao invés de usar três rotinas, a minha sugestão é usar apenas duas, assim: Option Compare Database Private Sub ListBox1_DblClick(Cancel As Integer) Me.txt_data = ListBox1.Value Call txt_data_Exit(Cancel) End Sub Private Sub txt_data_Exit(Cancel As Integer) If IsDate(txt_data.Value) Then Me.txt_mes.Value = Format(txt_data.Value, "mmmm") Me.txt_ano.Value = Format(txt_data.Value, "yyyy") Else MsgBox "Por favor, insira uma data válida.", vbExclamation Me.txt_mes.Value = "" Me.txt_ano.Value = "" Me.txt_data.Value = "" End If End Sub
  15. Depois de criar o meu projeto, criar o meu API_KEY, ativar o recurso do Google Maps, finalmente eu consegui pegar o valor do place.formatted_address. Isso não é lá grande coisa. Pelo que eu entendi, para obter as informações mais detalhadas do place, é preciso fazer outra solicitação, primeiro você tem que ter o place.id, depois você faz a solicitação do place details. Mas eu estou contente, esse é o meu primeiro código com o Google Maps: <!DOCTYPE html> <html> <head> <title>Maps and Places Autocomplete</title> <script> async function init() { await customElements.whenDefined('gmp-map'); const map = document.querySelector('gmp-map'); const marker = document.querySelector('gmp-advanced-marker'); const placePicker = document.querySelector('gmpx-place-picker'); const infowindow = new google.maps.InfoWindow(); map.innerMap.setOptions({ mapTypeControl: false }); placePicker.addEventListener('gmpx-placechange', () => { const place = placePicker.value; if (!place.location) { window.alert("No details available for input: '" + place.name + "'"); infowindow.close(); marker.position = null; return; } if (place.viewport) { map.innerMap.fitBounds(place.viewport); } else { map.center = place.location; map.zoom = 17; } marker.position = place.location; infowindow.setContent( `<strong>${place.displayName}</strong><br> <span>${place.formattedAddress}</span>` ); infowindow.open(map.innerMap, marker); conteudo.value = place.formattedAddress; }); map.innerMap.addListener('click', function(event) { const lat = event.latLng.lat(); const lng = event.latLng.lng(); const geocoder = new google.maps.Geocoder(); geocoder.geocode({ 'location': { lat: lat, lng: lng } }, function(results, status) { if (status === 'OK' && results[0]) { const place = results[0]; const formattedAddress = place.formatted_address; infowindow.setContent(`<div><strong>${formattedAddress}</strong></div>`); infowindow.setPosition(event.latLng); infowindow.open(map.innerMap); conteudo.value= formattedAddress; } else { console.error('Nenhum resultado encontrado: ' + status); } }); }); } document.addEventListener('DOMContentLoaded', init); </script> <script type="module" src="https://unpkg.com/@googlemaps/extended-component-library@0.6"></script> <style> html, body { height: 90%; margin: 0; padding: 0; } .place-picker-container { padding: 20px; } </style> </head> <body> <gmpx-api-loader key="YOUR_API_KEY" solution-channel="GMP_GE_mapsandplacesautocomplete_v1"></gmpx-api-loader> <gmp-map center="40.749933,-73.98633" zoom="13" map-id="DEMO_MAP_ID"> <div slot="control-block-start-inline-start" class="place-picker-container"> <gmpx-place-picker placeholder="Enter an address"></gmpx-place-picker> </div> <gmp-advanced-marker></gmp-advanced-marker> </gmp-map> <div style="width:500px; margin-left:50px; margin-top:50px"> <form action="cadastro.php" method="post"> Conteudo <input id="conteudo" name="conteudo" size="80"> <input type="submit"> </form> </div> </body> </html>
  16. Eu não consegui trabalhar com o API do Places, mas se você conseguiu a informação na forma de texto, aqui segue a sugestão: <!DOCTYPE html> <html> <head> <title>Obter Conteúdo dos Spans de uma Variável</title> </head> <body> <div id="output"></div> <script> // Suponha que esta seja a string contendo o HTML const htmlString = ` <span class="street-address">Av. Paulista, 302</span> - <span class="extended-address">Bela Vista</span>, <span class="locality">São Paulo</span> - <span class="region">SP</span>, <span class="postal-code">01310-904</span>, <span class="country-name">Brasil</span> `; // Parsear a string HTML para um documento DOM const parser = new DOMParser(); const doc = parser.parseFromString(htmlString, 'text/html'); // Função para obter o conteúdo de um span com uma classe específica function getContentByClass(className) { return doc.querySelector(`.${className}`).textContent; } // Obter o conteúdo de cada span const streetAddress = getContentByClass('street-address'); const extendedAddress = getContentByClass('extended-address'); const locality = getContentByClass('locality'); const region = getContentByClass('region'); const postalCode = getContentByClass('postal-code'); const countryName = getContentByClass('country-name'); // Exibir o conteúdo obtido const outputDiv = document.getElementById('output'); outputDiv.innerHTML = ` <p><strong>Endereço:</strong> ${streetAddress}</p> <p><strong>Endereço Extendido:</strong> ${extendedAddress}</p> <p><strong>Cidade:</strong> ${locality}</p> <p><strong>Estado:</strong> ${region}</p> <p><strong>CEP:</strong> ${postalCode}</p> <p><strong>País:</strong> ${countryName}</p> `; </script> </body> </html>
  17. Usando o PHP, hoje eu aprendi como desenhar o logotipo do Laravel no HTML e também na guia do navegador: arquivo index.html <link rel="icon" type="image/svg+xml" href="favicon.svg"> <div style="height:50px;width:50px"> <embed src="favicon.svg" type="image/svg+xml" /> </div> arquivo favicon.svg <svg viewBox="0 0 316 316" xmlns="http://www.w3.org/2000/svg"> <path d="M305.8 81.125C305.77 80.995 305.69 80.885 305.65 80.755C305.56 80.525 305.49 80.285 305.37 80.075C305.29 79.935 305.17 79.815 305.07 79.685C304.94 79.515 304.83 79.325 304.68 79.175C304.55 79.045 304.39 78.955 304.25 78.845C304.09 78.715 303.95 78.575 303.77 78.475L251.32 48.275C249.97 47.495 248.31 47.495 246.96 48.275L194.51 78.475C194.33 78.575 194.19 78.725 194.03 78.845C193.89 78.955 193.73 79.045 193.6 79.175C193.45 79.325 193.34 79.515 193.21 79.685C193.11 79.815 192.99 79.935 192.91 80.075C192.79 80.285 192.71 80.525 192.63 80.755C192.58 80.875 192.51 80.995 192.48 81.125C192.38 81.495 192.33 81.875 192.33 82.265V139.625L148.62 164.795V52.575C148.62 52.185 148.57 51.805 148.47 51.435C148.44 51.305 148.36 51.195 148.32 51.065C148.23 50.835 148.16 50.595 148.04 50.385C147.96 50.245 147.84 50.125 147.74 49.995C147.61 49.825 147.5 49.635 147.35 49.485C147.22 49.355 147.06 49.265 146.92 49.155C146.76 49.025 146.62 48.885 146.44 48.785L93.99 18.585C92.64 17.805 90.98 17.805 89.63 18.585L37.18 48.785C37 48.885 36.86 49.035 36.7 49.155C36.56 49.265 36.4 49.355 36.27 49.485C36.12 49.635 36.01 49.825 35.88 49.995C35.78 50.125 35.66 50.245 35.58 50.385C35.46 50.595 35.38 50.835 35.3 51.065C35.25 51.185 35.18 51.305 35.15 51.435C35.05 51.805 35 52.185 35 52.575V232.235C35 233.795 35.84 235.245 37.19 236.025L142.1 296.425C142.33 296.555 142.58 296.635 142.82 296.725C142.93 296.765 143.04 296.835 143.16 296.865C143.53 296.965 143.9 297.015 144.28 297.015C144.66 297.015 145.03 296.965 145.4 296.865C145.5 296.835 145.59 296.775 145.69 296.745C145.95 296.655 146.21 296.565 146.45 296.435L251.36 236.035C252.72 235.255 253.55 233.815 253.55 232.245V174.885L303.81 145.945C305.17 145.165 306 143.725 306 142.155V82.265C305.95 81.875 305.89 81.495 305.8 81.125ZM144.2 227.205L100.57 202.515L146.39 176.135L196.66 147.195L240.33 172.335L208.29 190.625L144.2 227.205ZM244.75 114.995V164.795L226.39 154.225L201.03 139.625V89.825L219.39 100.395L244.75 114.995ZM249.12 57.105L292.81 82.265L249.12 107.425L205.43 82.265L249.12 57.105ZM114.49 184.425L96.13 194.995V85.305L121.49 70.705L139.85 60.135V169.815L114.49 184.425ZM91.76 27.425L135.45 52.585L91.76 77.745L48.07 52.585L91.76 27.425ZM43.67 60.135L62.03 70.705L87.39 85.305V202.545V202.555V202.565C87.39 202.735 87.44 202.895 87.46 203.055C87.49 203.265 87.49 203.485 87.55 203.695V203.705C87.6 203.875 87.69 204.035 87.76 204.195C87.84 204.375 87.89 204.575 87.99 204.745C87.99 204.745 87.99 204.755 88 204.755C88.09 204.905 88.22 205.035 88.33 205.175C88.45 205.335 88.55 205.495 88.69 205.635L88.7 205.645C88.82 205.765 88.98 205.855 89.12 205.965C89.28 206.085 89.42 206.225 89.59 206.325C89.6 206.325 89.6 206.325 89.61 206.335C89.62 206.335 89.62 206.345 89.63 206.345L139.87 234.775V285.065L43.67 229.705V60.135ZM244.75 229.705L148.58 285.075V234.775L219.8 194.115L244.75 179.875V229.705ZM297.2 139.625L253.49 164.795V114.995L278.85 100.395L297.21 89.825V139.625H297.2Z"/> </svg>
  18. Eu não sei o que é franquia, assim vou imaginar que você quer vender pastel em São Paulo e em Curitiba. O primeiro problema é você ser dono de um domínio tipo pastel.com.br, se você conseguir comprar esse domínio, lá você pode hospedar o seu banco de dados, o seu código e suas imagens. No caso das imagens, eu acredito que ele vai ficar no endereço pastel.com.br/imagens. Mesmo que você fabrique pastel em Curitiba, não vejo nenhum motivo para criar um novo site. O usuário digita "pastel.com.br", digita "3 pastel de carne", digita o endereço "Manaus", paga o pastel, mas é o código que vai decidir de onde vai sair o pastel, se de São Paulo ou de Curitiba. Mas se você acha que é negócio ter um site para cada fábrica de pastel, acredito que o primeiro seria coisa do tipo saopaulo.pastel.com.br e o segundo curitiba.pastel.com.br, você pode hospedar um banco de dados para cada site, ou usar o mesmo banco de dados para os dois, mas as imagens, cada um deve ter o seu conjunto, mesmo que sejam iguais.
  19. O meu banco de dados Diario tem muitas tabelas como cache e sessions que foram criadas quando instalei o recurso do Breezer que é usado para fazer login. O problema é que não tem nada nessas tabelas. Outro problema é que não existe nenhum Model para cada uma das tabelas que o Breezer criou. O Copilot me informou que o Laravel consegue acessar diretamente a tabela no MySQL sem precisar criar um Model para a tabela. Então, joguei fora todas as tabelas que não tinham nada. Resultado: não consegui logar no Laravel. Conclusão: mesmo que as tabelas não tenham nada, elas servem para logar no Laravel.
  20. Frank K Hosaka

    Problema

    arquivo grupoA.txt elemento1:senha elemento2:senha arquivo grupoB.txt elemento elemento1 elemento2 arquivo index.php <?php class config // isso eu improvisei { public $passwd = 'grupoA.txt'; public $users = 'grupoB.txt'; public $advanced_users = 'grupoB.txt'; public $semi_admins_proxy = 'grupoB.txt'; public $admins_proxy = 'grupoB.txt'; static function proxy(){ } } function global_no_assoc() { $config = new config(); $config->proxy(); $array = file($config->passwd); $pass = array(); for($i=0; $i<count($array); $i++) { $narray = explode(':',$array[$i]); array_push($pass,$narray[0]); // alterei aqui e acrescentei nova regra no comando file } $array_users = file($config->users, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $array_advanced_users = file($config->advanced_users, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $array_semi_admins_proxy = file($config->semi_admins_proxy, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $array_admins_proxy = file($config->admins_proxy, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $result = array_diff($pass,$array_users,$array_advanced_users, $array_admins_proxy,$array_semi_admins_proxy); return $result; } var_dump(global_no_assoc()); // o resultado é um array vazio, pois coloquei // o elemento1 e elemento2 no grupoB.txt // gostei desse trabalho, não sabia que era possível montar um // array com um arquivo de texto, o problema é que // o espaço e o pulo da linha altera o tamanho dos elementos // e isso provoca uma baita diferença no comando array_diff.
  21. O Copilot alertou várias vezes para não mexer no id da tabela, mesmo assim ele me ensinou e criei esse código: <?php // ... (new conn)->update("tbdiario set valor=0 where lcto=$lcto"); (new conn)->delete("tbhistprod where lcto=$lcto"); $idPosterior=(new conn)->select("id from tbhistprod order by id desc")[0]->id; $idPosterior++; (new conn)->exec("alter table tbhistprod auto_increment = $idPosterior"); Comigo funcionou, mas que dá medo, isso dá!
  22. O cálculo vetorial do Copilot é muito inteligente, o problema é que levei um tempão para entender, mas eu consegui: Se o vetor do código não existir, então crie o vetor. Se ele existir, então atualize o vetor se a data for mais recente. Depois de entender, fica bem mais fácil memorizar.
  23. Quando você usa o atributo required no <select> ou no <input>, o formulário não será submetido se o usuário não preencher. Quando você usa <input type="number"> o usuário não poderá usar letras. Para testar o seu código, tive que comentar vários trechos, mas acredito que você conseguirá testar no seu terminal do que jeito que escrevi: <?php $conn=new PDO("mysql:host=localhost;dbname=teste","root",""); // desconsidera date_default_timezone_set('America/Sao_Paulo'); setlocale(LC_NUMERIC, 'pt_BR'); $id = 1; // desconsidera if (count($_POST) > 0) { $data_hora_formatada = date('Y-m-d H:i:s'); $dt_cadastro = date('Y-m-d H:i:s'); $posto = $_POST['posto']; $status = $_POST['status']; $paciente = $_POST['paciente'] ?? null; $tipo_atend = $_POST['tipo_atend']; // $atend = $_POST['atend']; --> $peso = str_replace(',', '.', $_POST['peso']); $alt = str_replace(',', '.', $_POST['alt']); $urg = isset($_POST['urg']) ? 1 : 0; $esp = $_POST['esp']; $erros = []; // Verifica se o paciente existe $stmt = $conn->prepare("SELECT * FROM paciente WHERE id_paciente = :id"); $stmt->bindParam(':id', $id); $stmt->execute(); $pac = $stmt->fetch(PDO::FETCH_ASSOC); /* Calcular a idade do paciente $dt_nascto = $pac['dt_nascto_paciente']; $idade = date_diff(date_create($dt_nascto), date_create('now'))->y; if (!empty($tipo_atend) && !empty($atend)) { // Buscar os limites de idade da especialidade $stmt = $conn->prepare("SELECT idade_ini_atend, idade_fim_atend FROM atend WHERE id_atend = :id_atend"); $stmt->bindParam(':id_atend', $atend); $stmt->execute(); $atend_data = $stmt->fetch(PDO::FETCH_ASSOC); // Verifica se a especialidade foi encontrada if ($atend_data) { $idade_ini = $atend_data['idade_ini_atend']; $idade_fim = $atend_data['idade_fim_atend']; // Verifica se os limites de idade estão definidos if (!is_null($idade_ini) && !is_null($idade_fim) && $idade_ini !== '' && $idade_fim !== '') { $idade_ini = (int)$idade_ini; $idade_fim = (int)$idade_fim; // Verifica se a idade do paciente está dentro dos limites if ($idade < $idade_ini || $idade > $idade_fim) { $erros[] = "A idade do paciente não está dentro dos limites permitidos para esta especialidade!"; } } } else { $erros[] = "Especialidade não encontrada!"; } } */ if ($peso <= 0) { $erros[] = "Peso deve ser um número positivo!"; } if ($alt <= 0) { $erros[] = "Altura deve ser um número positivo!"; } if (!empty($erros)) { echo "<script>alert('ATENÇÃO! " . implode("\\n", $erros) . "');</script>"; } /* else { $sql_code = "INSERT INTO guia(id_posto, status_guia, id_paciente, id_tipo, id_atend, peso_guia, alt_guia, urg_guia, dt_cadastro_guia, id_esp) VALUES(:posto, :status, :paciente, :tipo_atend, :atend, :peso, :alt, :urg, :dt_cadastro, :esp)"; $stmt = $conn->prepare($sql_code); $stmt->bindParam(':posto', $posto); $stmt->bindParam(':status', $status); $stmt->bindParam(':paciente', $id); $stmt->bindParam(':tipo_atend', $tipo_atend); $stmt->bindParam(':atend', $atend); $stmt->bindParam(':peso', $peso); $stmt->bindParam(':alt', $alt); $stmt->bindParam(':urg', $urg); $stmt->bindParam(':dt_cadastro', $data_hora_formatada); $stmt->bindParam(':esp', $esp); $deu_certo = $stmt->execute(); if ($deu_certo) { echo "<script> alert('Guia cadastrada com sucesso!!'); window.location.href = 'buscaGuias.php?id_paciente=" . htmlspecialchars($id) . "'; </script>"; unset($_POST); } } */ } $query = $conn->query("SELECT * FROM paciente WHERE id_paciente = $id"); $pac=$query->fetch(PDO::FETCH_OBJ)->nome_paciente; $query = $conn->query("SELECT id_posto, apelido_posto FROM posto ORDER BY apelido_posto ASC"); $postos = $query->fetchAll(PDO::FETCH_OBJ); $query = $conn->query("SELECT id_esp, nome_esp FROM especialista ORDER BY nome_esp ASC"); $especialistas = $query->fetchAll(PDO::FETCH_OBJ); $query = $conn->query("SELECT * FROM tipo_atend ORDER BY nome_tipo ASC"); $tipos = $query->fetchAll(PDO::FETCH_OBJ); ?> <!DOCTYPE html> <html> <head> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"><!-- desconsidera --> <title>Cadastro de Guias</title> </head> <body> <div class="container" id="contcadGuia"> <br> <div class="row"> <h3><?=$pac?></h3> <div class="form col-sm-2" id="btnVoltar"> <a href="buscaGuias.php?id_paciente=<?php echo htmlspecialchars($id); ?>" class="form-control btn btn-primary">Voltar</a> </div> </div> <form class="form-control-sm" method="post" id="form_addGuia" name="form_addGuia"> <br> <div class="row"> <div hidden class="form col-sm-2" id="divStatus"> <label>Status<span class="destaque">*</span></label> <input class="form-control form-control-sm inputs" name="status" id="status" type="hidden" maxlength="10" value="Ativa" readonly> </div> <div class="form col-sm-2" id="divPosto"> <label>Posto Solicitante <input type="hidden" name="id" maxlength="150" value="<?php echo $id;?>"> <select name="posto" id="posto" required> <option value="">Selecione..</option> <?php foreach($postos as $option):?> <option value="<?=$option->id_posto?>"><?=$option->apelido_posto?></option> <?php endforeach; ?> </select> </div> <div class="form col-sm-2" id="divEsp"> <label>Especialista Solicitante <select name="esp" id="esp" required> <option value="">Selecione..</option> <?php foreach($especialistas as $option): ?> <option value="<?=$option->id_esp?>"><?=$option->nome_esp?></option> <?php endforeach; ?> </select> </div> <div class="form col-sm-2" id="divTipo"> <label class=label-form>Tipo de Especialidade <select name="tipo_atend" id="tipo_atend" required> <option value="">Selecione..</option> <?php foreach($tipos as $option): ?> <option value="<?=$option->id_tipo?>"><?=$option->nome_tipo?></option> <?php endforeach; ?> </select> </div> <!--div class="form col-sm-2" id="divAtend"> <label>Especialidade <select name="atend" id="atend" required> <option value="">Selecione..</option> </select> </div --> <div class="form col-sm-1" id="divPeso"> <label>Peso <input class="form-control form-control-sm inputs" name="peso" id="peso" type="number" step=0.01 required> </div> <div class="form col-sm-1" id="divAlt"> <label>Altura <input class="form-control form-control-sm inputs" name="alt" id="alt" type="number" step=0.01 required> </div> <div class="form col-sm-1" id="contUrg"> <div class="form-check" id="divUrg"> <input type="checkbox" name="urg" id="urg" class="form-check-input"> <label class="form-check-label" for="urg">Urgente</label> </div> </div> <div class="form col-sm-1" id="divBtnInserir"> <input class="form-control btn btn-primary" id="btnInserir" name="salvar" type="submit" value="Inserir"> </div> </div> </form> </div> </body> </html>
  24. Eu tenho um projeto chamado Orçamento, e dentro dele eu tenho uma rotina chamada baixa de estoque, mas ele é lento no PHP e mais ainda no Laravel. Passei o dia todo pensando numa nova rotina, agora com a ajuda do copilot.microsoft.com Talvez seja possível obter a última entrada de cada item pelo MySQL, mas eu pedi para o Copilot desistir da ideia. Eu montei uma consulta de todos itens que entraram no mês. A partir daí pedi para o Copilot montar um vetor que pegasse a última entrada de cada item. A rotina do Copilot começa com $ultimo=[ ] e pega todo o ciclo do foreach($previa as $prod). Ele é muito bacana, parece que funciona, só não sei ainda como conferir, mas é bem mais rápido que a rotina que inventei antes do Copilot aparecer: <?php $pdo=new PDO("mysql:host=localhost;dbname=teste","root",""); $inicio=date('2024-10-01'); $fim=date('2024-10-31'); $previa=$pdo->query("SELECT * FROM tbhistprod WHERE custototal > 0 And dia BETWEEN '$inicio' and '$fim' order by dia desc")->fetchAll(PDO::FETCH_ASSOC); $ultimo = []; foreach ($previa as $prod) { if (!isset($ultimo[$prod['codprod']]) || $prod['dia'] > $ultimo[$prod['codprod']]['dia']) { $ultimo[$prod['codprod']] = $prod; } } ?> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <table class='container mt-5 table table-striped table-sm'> <th class=text-end>CodProd <th>Descrição <th class=text-end>Lcto <th class=text-end>Qt <th class=text-end>Custo <th class=text-end>Estoque <th class=text-end>Total <th>História <?php foreach ($ultimo as $prod): $detalhe=$pdo->query("select * from tbprod where codprod=".$prod['codprod']) ->fetch(PDO::FETCH_OBJ); $hist=$pdo->query("select * from tbdiario where lcto=".$prod['lcto']) ->fetch(PDO::FETCH_OBJ); $total=$pdo->query("select sum(custototal) as soma from tbhistprod where codprod=".$prod['codprod']) ->fetch(PDO::FETCH_OBJ)->soma; ?> <tr><td class=text-end><?=$prod['codprod']?> <td><?=$detalhe->prod?> <td class=text-end><?=$prod['lcto']?> <td class=text-end><?=$prod['qt']?> <td class=text-end><?=$prod['custototal']?> <td class=text-end><?=$detalhe->estoque?> <td class=text-end><?=$total?> <td><?=$hist->hist?> <?php endforeach; ?> </table>
  25. O código que segue soma a idade de cinco pessoas, usando o JavaScript. Isso parece exercício básico para quem está iniciando o JavaScript, mas a ideia aqui é exibir na tela do navegador o que está sendo digitado. Eu tentei usar o comando for( ), mas não deu certo. Com a ajuda do copilot.microsoft.com, cheguei nesse código: <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="utf-8"> <title>Soma idade de 5 pessoas</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script> window.onload = function() { i = 1; soma=0; function perguntarIdade() { if (i <= 5) { idade = prompt(`Idade da ${i}ª pessoa`) soma += parseInt(idade,10) span = document.createElement('span') if(i==1) { span.textContent=idade } else { span.textContent=` + ${idade}` } body.appendChild(span); i++; setTimeout(perguntarIdade, 100); // Aguarda antes de perguntar novamente } else { p = document.createElement('span'); p.textContent = ' = ' + soma; body.appendChild(p); } } perguntarIdade() } </script> </head> <body id="body" class="container w-50" style="margin-top: 200px;"> </body> </html>
×
×
  • Criar Novo...