Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.678
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. O comando para compartilhar o Laravel na rede local é php artisan serve --host=0.0.0.0 No celular você usa o IP da rede local na barra de endereço do navegador, o meu ficou assim: 192.168.0.5:8000 O problema é que eu estou usando o CSS Tailwinds no Laravel. Para o celular reconhecer o Tailwinds, você precisa abrir outro terminal, e executar mais esse comando: npm run build
  2. Em 2022 eu não era capaz de usar o CSS Tailwinds, eu achei ele para lá de complicado. Mas eu gostei do Laravel. Para estudar o Laravel, eu encontrei uma rotina para fazer login na internet e também encontrei um jeito de usar o Bootstrap. Com a chegada da Inteligência Artificial em 2024, ficou bem mais fácil estudar o Tailwinds. Graças a ele, eu consegui instalar o Breeze (esse é o módulo do login no Laravel), e pouco a pouco eu pedi para o Copilot converter o <table> Bootstrap em <div> Tailwinds. O problema foi na hora de esbarrar com um <details>, o Copilot não conseguiu fazer a conversão do jeito que eu queria. Eu fui obrigado a estudar o Bootstrap, e descobri que a mágica acontece quando ele usa a classe "table". Assim eu pedi para o Copilot simular a classe "table" nas <div> com o Tailwinds: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <table class=table> <tr><td>Codigo <td> <details> <summary>Produto</summary> <table> <tr><td>Unidade <tr><td>Embalagem </table> </details> <td>Venda </table> <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet"> <div class="flex"> <div>Codigo</div> <div> <details> <summary>Produto</summary> <div>Unidade</div> <div>Embalagem</div> </details> </div> <div>Venda</div> </div>
  3. Eu não consegui chamar uma caixa de texto como Text8(0). Como você conseguiu?
  4. Eu criei duas planilhas (estatistica e dados) um formulário (cadastro) com apenas duas caixas de texto (RGHC1) e (q1), e também um botão (Salvar). Através do botão Salvar, criei o seguinte código: Sub Salvar_Click() linha = 1 Do Until Sheets("dados").Cells(linha, 3) = "" linha = linha + 1 Loop Sheets("dados").Cells(linha, 3) = cadastro.RGHC1.Text Sheets("estatistica").Cells(linha, 5) = cadastro.q1.Text If Trim(Me.RGHC1.Value) = "" Then MsgBox "Por favor, preecha o RGHC,campo obrigatório.", vbExclamation, "Aviso" Me.RGHC1.SetFocus Exit Sub End If MsgBox "Paciente cadastrado com sucesso.", vb, "Aviso" Unload cadastro MsgBox "Olá mundo!" cadastro.Show End Sub Com o formulário em foco, usei o botão executar, e assim ele gravou na planilha dados o conteúdo da caixa RGHC1 na planilha dados e o conteúdo da caixa q1 na planilha estatistica. Continuei com o teste, e os valores seguintes foram gravadas nas mesmas planilhas só que na linha seguinte. Não sei onde está o problema, o único problema que eu encontrei é que o seu código trabalha com dezenas e dezenas de caixas no formulário, não sei como você montou o seu formulário, mas o meu que só tem duas caixas ficou assim:
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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)
  10. 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]) } }
  11. 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
  12. 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>
  13. 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 -->
  14. 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.
  15. 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>
  16. 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.
  17. 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!
  18. 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
  19. 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>
  20. 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>
  21. 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>
  22. 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.
  23. 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.
  24. 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.
  25. 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á!
×
×
  • Criar Novo...