
Frank K Hosaka
Membros-
Total de itens
1.532 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
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>
-
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>
-
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>
-
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.
-
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.
-
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.
-
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á!
-
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.
-
VALIDAÇÃO DE CAMPOS DA TABELA CASO ESTEJAM PREENCHIDOS
pergunta respondeu ao Lucimara Moquenco Canhiato de Frank K Hosaka em Tutoriais & Dicas - PHP
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> -
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>
-
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>
-
PHP JQuery cria 2 pastas profilePhoto para imagens
pergunta respondeu ao mbrainiac de Frank K Hosaka em PHP
Pela mensagens que você recebeu, quem não está chegando é o arquivo que foi selecionado. Para ajudar melhor, preciso do código load.php, login.php, e do formulário que chama profilePhoto.php -
Ontem eu vi pela internet o pregão 110/2024 no Diário Oficial de Diadema de 30/10/2024, é uma espécie de uma relação onde constam o nome de uma empresa (havia mais de uma empresa), o item, a quantidade e o preço unitário. Só que não havia o total de cada item e nem o total de tudo. Pedi ajuda para o PHP: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <div class="container mt-5"> <?php $arquivo="pregao_110_2024.txt"; $previa=fopen($arquivo,'r'); $pregao=fread($previa,filesize($arquivo)); fclose($previa); $itens=explode("Item",$pregao); $soma=0; foreach($itens as $item) { $partes=preg_split('/\. Qtd/',$item); preg_match('/Qtd\.: (\d+)\s*/', $item, $matchQtd); preg_match('/Vlr Unit\.: R\$ ([\d,]+)/', $item, $matchVlr); if(count($matchQtd)) { $qt=$matchQtd[1]; $preço=str_replace(['.',','],['','.'],$matchVlr[1]); echo "$partes[0] $qt x $preço = ".$qt*$preço."<br>" ; $soma +=$qt*$preço; } } echo "<br>Total Geral R$ " . number_format($soma,2,',','.') . "</div>";
-
arquivo index.php <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <title>Calendário Simples</title> <script src="https://cdn.jsdelivr.net/npm/fullcalendar/index.global.min.js"></script> </head> <body> <div id="calendar" class='container mt-5'></div> <script> document.addEventListener('DOMContentLoaded', function() { var calendarEl = document.getElementById('calendar'); var calendar = new FullCalendar.Calendar(calendarEl, { locale: 'pt-br', buttonText: {today:'hoje',month:'mês',week:'semana',day:'dia'}, contentHeight:500, initialView: 'dayGridMonth', events: 'getEvents.php' }); calendar.render(); }); </script> </body> </html> arquivo getEvents.php <?php // mysql atividades(id int,title varchar,start datetime,end datetime) // (1,Escovar dente,2024-10-29 19:15:00,2024-10-29 19:20:00) // (2,Lavar prato,2024-10-30 07:01:00,2024-10-30 07:01:00) $conn=new PDO("mysql:host=localhost;dbname=teste","root",""); $stm=$conn->prepare("SELECT * FROM atividades ORDER BY id"); $stm->execute(); echo json_encode($stm->fetchAll(PDO::FETCH_ASSOC)); ?>
-
Esse não foi o meu caso, encontrei nesse endereço um código CodeIgnitor que apresentou o mesmo tipo de erro: https://github.com/cploutarchou/codeIgniter-menu-manager Segui o conselho do Copilot, e fui colocando uma variável publica em cada arquivo que o PHP reclamava que estava depreciado. Foi um trabalho de quase 15 minutos, e finalmente depois de 5 anos é que eu consegui executar um código PHP do Github aqui no meu notebook. Obrigado!
-
Para saber exatamente o que está acontecendo, eu precisaria no mínimo a listagem dos arquivos Loader.php, Template.php, Client.php e index.php, mas tudo indica que você atualizou o PHP para uma nova versão e muitas vezes a nova versão não dá suporte ao comando que havia no projeto. Já o Copilot acredita que o problema é exatamente a atualização do PHP para a versão 8.2 e isso afetou o CodeIgniter. Ele aconselha a fazer o quanto segue:
-
Estou estudando JavaScript para iniciantes com a ajuda do monitor de 30 polegadas. Para botar o manual na tela, eu uso o navegador e o endereço ler.amazon.com.br. O JavaScript é bacana! Comecei a aprender a usar a função addEventListener. O autor tem razão, o único jeito de aprender alguma coisa é só fazendo os exercícios que o livro propõe. Agora estou estudando formulários. O problema é que o autor não usa CSS, pelo menos até onde eu li o manual. Assim, eu tomei a iniciativa de incluir o CDN do Bootstrap 5.3.3. Finalmente eu consegui criar uma moldura para o formulário! A classe form-control pode ser usado tanto no <input> bem como no próprio <form> Para tirar o formulário do canto esquerdo, basta usar um <div class="container">. Olha só que bacana: arquivo index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <title>Manipulando Campos</title> <script> document.addEventListener('DOMContentLoaded', function() { meuFormulario.addEventListener('submit',function(event) { mensagem="" event.preventDefault() if(nome.value=="") { mensagem='o Nome não pode estar vazio\n' } if(!email.value.includes('@') || !email.value.includes('.')) { mensagem=mensagem+'email inválido\n' } if(mensagem!=="") { alert(mensagem) } }) }) </script> </head> <body> <div class="container mt-5 w-25"> <form id="meuFormulario" class="form-control"> <label for="nome" class="form-label">Nome:</label> <input id="nome" name="nome" class="form-control"> <p></p> <label for="email" class="form-label">Email:</label> <input id="email" name="email" class="form-control"> <p></p> <input type="checkbox" id="meuCheckBox" name="meuCheckBox" class="form-check-input"> <label for="meuCheckBox" class="form-check-label">Aceito os termos</label> <p></p> <label for="meuSelect" class="form-label">Escolha uma opção:</label> <select id="meuSelect" name="meuSelect" class="form-select"> <option value="opcao1">Opção 1</option> <option value="opcao2">Opção 2</option> <option value="opcao3">Opção 3</option> </select> <p></p> <input type="submit" class="btn btn-primary"> </form> </div> </body> </html>
-
PHP JQuery cria 2 pastas profilePhoto para imagens
pergunta respondeu ao mbrainiac de Frank K Hosaka em PHP
Acho que você não está usando o meu código. O código que eu passei é auto-sustentável, ele não precisa de outros arquivos para funcionar. Caso você esteja tentando adaptar, eu posso ajudar mais se você me passar o código load.php e login.php. Se preferir, você pode zipar todo o projeto e mandar para o meu email frankhosaka@gmail.com -
PHP JQuery cria 2 pastas profilePhoto para imagens
pergunta respondeu ao mbrainiac de Frank K Hosaka em PHP
Eu modifiquei o profilePhoto2.php, ele usa vários comandos que foram definidos em load.php e login.php, mas você não listou esses códigos aqui. Assim, a minha saída foi improvisar e criei um código que nem precisa do Ajax: ** atenção, aqui eu defini o diretório da minha pasta Astudy, não usei a sua estrutura de arquivos. O objetivo aqui é apresentar o conceito. <?php class Login { static function isLoggedIn() { return 14; } } $userid = Login::isLoggedIn(); if(isset($_FILES['file'])) { $imgName = $_FILES['file']['name']; $file = $_FILES['file']; $upload_dir = $_SERVER['DOCUMENT_ROOT']."/Astudy/".$userid."/profilePhoto/"; if(!file_exists($upload_dir ) && !is_dir($upload_dir )) { mkdir($upload_dir , 0777, true); } $upload_file = $upload_dir . basename($file['name']); if (move_uploaded_file($file['tmp_name'], $upload_file)) { echo "Sucesso!"; } else { echo 'Erro ao salvar o arquivo.'; } } ?> <form method=post enctype=multipart/form-data> <input type="file" name="file"> <input type=submit> </form> -
PHP JQuery cria 2 pastas profilePhoto para imagens
pergunta respondeu ao mbrainiac de Frank K Hosaka em PHP
A imagem não está na raiz do user, ele está na pasta user/profilePhoto. Quanto ao id, vou estudar o seu novo código, e retorno em seguida. Se tiver segundo turno na sua cidade, aconselho a votar agora, senão você vai acabar esquecendo do candidato que você escolheu. Até daqui a pouco. -
PHP JQuery cria 2 pastas profilePhoto para imagens
pergunta respondeu ao mbrainiac de Frank K Hosaka em PHP
Eu sou novo no JavaScript, mesmo assim, eu acredito que o problema é lá no arquivo profilePhoto.php, deve ser ele que está duplicando os arquivos. Eu fiz um teste aqui, usando a pasta Astudy e dentro dele criei a pasta profilePhoto, usando um código HTML e outro PHP, ele não usa o código do usuário para renomear os arquivos, mas ele funciona. Espero que esses códigos ajudem você a montar o projeto do jeito que você espera: arquivo index.php <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Upload de Arquivo com AJAX</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <input type="file" id="file-upload"> <button id="upload-btn">Enviar Arquivo</button> <img id="uploaded-img" src="" alt="Imagem enviada"> <script> $(document).ready(function() { $('#upload-btn').click(function() { var file_data = $('#file-upload').prop('files')[0]; var form_data = new FormData(); form_data.append('file', file_data); $.ajax({ url: 'upload.php', // URL do script PHP para salvar o arquivo type: 'POST', data: form_data, contentType: false, processData: false, success: function(response) { $('#uploaded-img').attr('src', response); alert('Upload realizado com sucesso!'); }, error: function() { alert('Erro no upload do arquivo.'); } }); }); }); </script> </body> </html> arquivo upload.php <?php if (isset($_FILES['file'])) { $file = $_FILES['file']; $upload_dir = 'profilePhoto/'; $upload_file = $upload_dir . basename($file['name']); if (move_uploaded_file($file['tmp_name'], $upload_file)) { echo $upload_file; // Retorna o caminho da imagem salva } else { echo 'Erro ao salvar o arquivo.'; } } else { echo 'Nenhum arquivo enviado.'; } ?> -
É possível escurecer o cabeçalho de uma tabela em 2024? [Resolvido]
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Encontrei a solução. Ao invés de quebrar a cabeça com o <thead>, eu fui trabalhar no <th> e deu certo! <table class='table table-hover table-sm'> <tr> <th class='bg-dark text-white border border-white'>Data Cadastro <th class='bg-dark text-white border border-white'>Posto Emissor <th class='bg-dark text-white border border-white'>Tipo Especialidade <th class='bg-dark text-white border border-white'>Especialidade <th class='bg-dark text-white border border-white'>Peso <th class='bg-dark text-white border border-white'>Altura <th class='bg-dark text-white border border-white'>Urgente <th class='bg-dark text-white border border-white'>Ação </table> -
É possível escurecer o cabeçalho de uma tabela em 2024? [Resolvido]
uma questão postou Frank K Hosaka PHP
Durante muito tempo, o Bootstrat tinha uma classe "thead-dark" que escurecia o cabeçalho de uma tabela, até chegar o 5.3.3. Agora a classe "thead-dark" não funciona. O 5.3.3 disse que inventou um novo atributo data-bs-theme="dark", ele funciona para toda <table>, mas não funciona para o <thead>. O único jeito é usar o antigo CSS convencional, mas ele só funciona se você não usar o Bootstrap na <table>. Isso explica porque muitos desenvolvedores vivem tristes, a vida deles é só cinza e lágrimas: <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Exemplo de Tabela com Bootstrap</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"> </head> <body> <table class="table"> <thead data-bs-theme="dark"> <tr><th>Nome</th></tr> </thead> <tbody> <tr><td>João</td></tr> </tbody> </table> <table> <thead style="background-color: #343a40; color: white;"> <tr><th>Nome</th></tr> </thead> <tbody> <tr><td>João</td></tr> </tbody> </table> </body> </html> -
MOSTRAR CAMPO NOME BUSCADO NA VARIÁVEL $_GET['id']
pergunta respondeu ao Lucimara Moquenco Canhiato de Frank K Hosaka em Tutoriais & Dicas - PHP
Gostei desse trabalho! Eu aprendi bastante com ele. Pensei que era possível separar as consultas, mas não consegui o resultado desejado, as tabelas precisam ser ajuntadas mesmo. Gostaria de sugerir a seguinte nomenclatura nos campos das tabelas, ao invés de posto (id_posto,apelido_posto) o melhor é posto(id,apelido). Acrescentar um sufixo com o nome da tabela é redundante. Finalmente, a minha nova sugestão, preservando a sua estrutura de tabela: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <?php /* mysql guia (id_guia,dt_cadastro_guia,id_tipo,id_atend,id_paciente,peso_guia,alt_guia,urg_guia,id_posto) (1,2024-10-25,1,1,1,60,1.6,1,1)(2,2024-10-25,2,1,1,60,1.6,1,1)(3,2024-10-25,3,1,1,60,1.6,1,1) tipo_atend (id_tipo,nome_tipo)(1,Exame)(2,Consulta)(3,Procedimento) atend (id_atend,nome_atend)(1,Dr House) posto (id_posto,apelido_posto) (1,UBS Centro) paciente (id_paciente,nome_paciente)(1,Frank) */ $conn=new mysqli("localhost","root","","teste"); if(!isset($_GET['id'])) { ?> <div class='h-25'></div> <form class='form-control w-25 m-auto'> Digite o id do Paciente <p> <input name=id class=control> <p> <input type=submit class=control> </form> <?php exit; } $id = $_GET['id']; $previa=$conn->query("select * from guia g inner join paciente pac on pac.id_paciente = g.id_paciente inner join posto p on p.id_posto = g.id_posto inner join tipo_atend t on t.id_tipo = g.id_tipo inner join atend a on a.id_atend = g.id_atend where pac.id_paciente=$id"); if (!$previa->num_rows) { ?> <div class="w-50 m-auto"> <label class="mt-5 text-danger h3"> Nenhum paciente encontrado com o id <?=$id?>! </label> </div> <?php } else { $guia=$previa->fetch_all(MYSQLI_ASSOC); ?> <div class="container mt-5"> <div class="title"> <h3>Paciente <?=$guia[0]['id_paciente']." ".$guia[0]['nome_paciente']?></h3> </div> <table class='table table-hover table-sm'> <tr> <th class='bg-dark text-white border border-white'>Data Cadastro <th class='bg-dark text-white border border-white'>Posto Emissor <th class='bg-dark text-white border border-white'>Tipo Especialidade <th class='bg-dark text-white border border-white'>Especialidade <th class='bg-dark text-white border border-white'>Peso <th class='bg-dark text-white border border-white'>Altura <th class='bg-dark text-white border border-white'>Urgente <th class='bg-dark text-white border border-white'>Ação <?php foreach($guia as $guia): /* rotina a ser usada onde? $date = new DateTime($dt_cadastro=$linha['dt_cadastro_guia'] ); $interval = $date->diff( new DateTime( date('Y-m-d') ) ); */ ?> <tr> <td><?=$guia['dt_cadastro_guia']?> <td><?=$guia['apelido_posto']?> <td><?=$guia['nome_tipo']?> <td><?=$guia['nome_atend']?> <td><?=$guia['peso_guia']?> <td><?=$guia['alt_guia']?> <td><?=$guia['urg_guia']?> <td><a href="edtPaciente.php?id=<?=$guia['id_guia']?>">Editar</a> | <a href=pesqGuia.php>Guias</a> <?php endforeach; echo '</table></div>'; } ?> -
MOSTRAR CAMPO NOME BUSCADO NA VARIÁVEL $_GET['id']
pergunta respondeu ao Lucimara Moquenco Canhiato de Frank K Hosaka em Tutoriais & Dicas - PHP
Retirei o código alternativo daqui para evitar confusão.