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 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.
  2. 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>
  3. 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>
  4. 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>
  5. 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
  6. 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>";
  7. 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)); ?>
  8. Frank K Hosaka

    erro

    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!
  9. Frank K Hosaka

    erro

    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:
  10. 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>
  11. 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
  12. 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>
  13. 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.
  14. 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.'; } ?>
  15. 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>
  16. 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>
  17. 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>'; } ?>
  18. Raramente eu usei a função getElementById nos meus códigos de JavaScript, mas encontrei um caso particular em que ele é necessário: <!DOCTYPE html> <html> <head> <title>Exemplo DOM</title> <script> document.addEventListener('DOMContentLoaded',function() { let heading=document.getElementById('main-heading') heading.textContent="Olá mundo" }) </script> </head> <body> <h1 id="main-heading">Título Principal</h1> </body> </html> Se não fosse pelo hífen no id do marcador <h1> dava para dispensar a função getElementById.
  19. O problema está justamente no momento em que você pegou o nome do paciente no primeiro registro, restando apenas as outras guias para serem listadas. Para resolver isso, defini o $nome como o conjunto de todos os registros. Para pegar o nome do paciente, usei $nome[0]['nome_paciente'], onde [0] é o primeiro registro. Olhando o resultado final, eu senti uma falta danada do número da guia na relação. Ao invés de usar while, eu usei foreach: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <?php $conn=new mysqli("localhost","root","","teste"); if(!isset($_GET['id'])) { ?> <form> Digite o id do Paciente <input name=id> <input type=submit> </form> <?php exit; } $id = $_GET['id']; $result_guias = "SELECT pac.id_paciente, p.id_posto, t.id_tipo, a.id_atend, g.id_guia, pac.nome_paciente, p.apelido_posto, t.nome_tipo, a.nome_atend, g.dt_cadastro_guia, g.peso_guia, g.alt_guia, g.urg_guia 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'"; $resultado_guias = mysqli_query($conn, $result_guias); $nome = $resultado_guias->fetch_all(MYSQLI_ASSOC); if (mysqli_num_rows($resultado_guias) == 0){ echo "<div class='form col-sm-4 offset-1'> <label style='padding-left:100px; margin-top:20px; color:red; font-size:20px'>Nenhuma guia encontrada!</label> </div>"; }else{ echo ' <div class="container" id="contcadPaciente"> <div class="title" id="divTitulo"> <h3>'.$_GET['id'].'</h3> <br> <h3>'.$nome[0]['nome_paciente'].'</h3> <br> </div> <div class="container"> <table class="table table-hover table-sm" id="tabela"> <thead class="thead-dark"> <tr> <th scope="col-sm-1" style="text-align: center; width:30px; color:#003893; font-size:12px">Data Cadastro</th> <th scope="col-sm-2" style="text-align: center; width:80px; color:#003893; font-size:12px">Posto Emissor</th> <th scope="col-sm-3" style="text-align: center; width:100px; width:100px; color:#003893; font-size:12px">Tipo Especialidade</th> <th scope="col-sm-3" style="text-align: center; width:100px; width:50px; color:#003893; font-size:12px">Especialidade</th> <th scope="col-sm-1" style="text-align: center; width:20px; color:#003893; font-size:12px">Peso</th> <th scope="col-sm-1" style="text-align: center; width:20px; color:#003893; font-size:12px">Altura</th> <th scope="col-sm-1" style="text-align: center; width:20px; color:#003893; font-size:12px">Urgente</th> <th scope="col-sm-1" style="text-align: center; color:#003893; font-size:12px">Ação</th> </tr> </thead>'; foreach($nome as $linha){ $date = new DateTime($dt_cadastro=$linha['dt_cadastro_guia'] ); $interval = $date->diff( new DateTime( date('Y-m-d') ) ); echo' <tbody class="" id="tbl_guia"> <tr> <td scope="row" style="text-align: center; width:30px; font-size:10px; color:#003893">'. $dt_cadastro = $linha['dt_cadastro_guia'].'</td> <td scope="row" style="text-align: center; width:80px; font-size:10px; color:#003893">'.$id_posto = $linha['apelido_posto'].'</td> <td scope="row" style="text-align: center; text-transform:uppercase; width:100px; font-size:10px; color:#003893">'.$id_tipo = $linha['nome_tipo'].'</td> <td scope="row" style="text-align: center; text-transform:uppercase; width:50px; font-size:10px; color:#003893">'.$id_atend = $linha['nome_atend'].'</td> <td scope="row" style="text-align: center; text-transform:uppercase; width:20px; font-size:10px; color:#003893">'.$peso = $linha['peso_guia'].'</td> <td scope="row" style="text-align: center; text-transform:uppercase; width:20px; font-size:10px; color:#003893">'.$alt = $linha['alt_guia'].'</td> <td scope="row" style="text-align: center; text-transform:uppercase; width:50px; font-size:10px; color:#003893">'.$urg = $linha['urg_guia'].'</td> <td width="15%" style="text-align: center; color:#003893; font-size:10px"><a href=edtPaciente.php?id='.$linha['id_guia'].'>Editar</a> | <a href=pesqGuia.php?id='.$linha['id_guia'].'>Guias</a> </tr> </tbody>'; } echo '</table>'; } ?>
  20. Depois que terminei de publicar a mensagem abaixo é que eu vi o erro, o problema é esse código: $estado=(isset($_GET['e'])) ? $_GET['e'] : "SP"; Eu escrevi "SP" e você escreveu "". Você precisa dar um jeito de definir o estado que você quer paginar através desse código: <li><a href="?pagina=<?=$pagina?>&e=<?=$estado?>"><?=$pagina?></a> Ou seja, não basta solicitar a página seguinte, você precisa informar ao PHP qual o estado com que você está trabalhando. ==================== Desconsiderar o código abaixo, ele está 100% errado == Testei o seu código, ele funciona. Eu não conhecia os métodos do mysqli que você usou, eu pensei que fosse PDO. Para testar o seu código, eu simplifiquei assim: <?php // mysql cidades(id int pk nn ai,nome varchar,uf varchar) // (1,Diadema,SP)(2,São Paulo,SP)(3,S Bernardo do Campo,SP) // (4,Mauá,SP)(5,Campinas,SP)(6,Jundiaí,SP) $conn=new mysqli("localhost","root","","teste"); $estado=(isset($_GET['e'])) ? $_GET['e'] : "SP"; $stmt=$conn->prepare("select * from cidades where uf=?"); $stmt->bind_Param("i",$estado); $stmt->execute(); $result=$stmt->get_result(); $porPagina=3; $totalRegistros= mysqli_num_rows($result); $totalPaginas = ceil($totalRegistros / $porPagina); $paginaAtual = isset($_GET['pagina']) ? $_GET['pagina'] : 1; $indicePrimeiroRegistro = ($paginaAtual - 1) * $porPagina; $resultadosPaginados = "SELECT * FROM cidades WHERE uf = ? ORDER BY nome ASC LIMIT $indicePrimeiroRegistro, $porPagina"; $stmt = $conn->prepare($resultadosPaginados); $stmt->bind_param('i', $estado); $stmt->execute(); $cidades = $stmt->get_result(); ?> <table> <tr><th>ID<th>Cidade do Estado de <?=$estado?><th>Opções <?php foreach($cidades as $cidade): ?> <tr><td><?=$cidade['id']?> <td><?=$cidade['nome']?> <td><a href=explodir.php>Explodir</a> <?php endforeach; ?> </table> <ul> <?php for ($pagina = 1; $pagina <= $totalPaginas; $pagina++) : ?> <li><a href="?pagina=<?=$pagina?>"><?=$pagina?></a> <?php endfor; ?> </ul>
  21. Usar JavaScript com PHP é uma coisa, mas com o Laravel é bem diferente. Precisei trabalhar com um marcador diferente para a rotina funcionar: <meta name="csrf-token" content="{{ csrf_token() }}"> os principais códigos são esses: arquivo resources > views > teste.blade.php @include('menuView') <meta name="csrf-token" content="{{ csrf_token() }}"> <script> function teste(codprod,custoAtual) { let csrfToken = document.querySelector('meta[name="csrf-token"]'). getAttribute('content'); let xmlhttp = new XMLHttpRequest(); let url = "estoqueTeste"; let formData = new FormData(); formData.append('codprod', codprod); formData.append('custoAtual',custoAtual); xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader('X-CSRF-TOKEN', csrfToken); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { alert("custo atual é " + xmlhttp.responseText); } else if (xmlhttp.readyState == 4) { console.error("Erro: " + xmlhttp.statusText); } }; xmlhttp.send(formData); } </script> <p> Código do Produto <input id=codprod value=74> <p> Custo Atual <input id=custoAtual value=20> <p><input type=submit onclick=teste(codprod.value,custoAtual.value)> arquivo routes > web.php <?php Route::post('estoqueTeste',[Estoque::class,'teste']); Route::view('teste','teste'); arquivo app > Http > Controllers > Estoque.php <?php Class Estoque { function teste(Request $request) { tbprod::where('codprod',$request->codprod)->update(['custo'=>$request->custoAtual]); return tbprod::where('codprod',$request->codprod)->value('custo'); } }
  22. Estudando o JavaScript para iniciantes, percebi que usei errado o código nos últimos cinco anos. O JavaScript usa a palavra var ou let dentro de uma função para tornar a variável local, mas graças à minha preguiça de digitar eu sempre acabei criando uma variável global. Isso tem sérias implicações: <?php function variavel() { global $a, $b; $a=1; $b=2; } variavel(); echo $a; echo $b; ?> <script> function variable() { a=1 b=2 } variable() alert(a) alert(b) </script>
  23. Terminei o terceiro capítulo, ele fala de funções, de escopo e de ciclo. O código do escopo deveria apresentar erro, mas não apresentou. O código do ciclo deveria dar certo, mas não deu, enfim o JavaScript é como o PHP e o Laravel, ele funciona quando a temperatura externa está acima de 20o. C. function escopo (num) { if(true) { teste=12 } console.log(teste) } escopo(12) alert(teste) function ciclo() { for(i=1;i=10;i++) { console.log(i) } }
  24. Comprei o livro do Matheu Battist no Amazon.com.br e os dois primeiros capítulos já compensaram os R$ 8,90 que eu investi. Eu aprendi que não preciso criar um código JavaScript para testá-lo. O console do navegador foi inventado para esse propósito. O livro tenta ensinar a separar os códigos por arquivo, e eu achei muito curioso o autor colocar a conexão com o JavaScript na seção <head>. Eu fiz isso, e ele não funcionou. Eu tive que mudar a posição dele, assim: arquivo index.html <!DOCTYPE html> <html> <head> <meta charset="utf8"> <title>Teste JavaScript</title> </head> <body> <button id="myButton">Me Clique</button> </body> <script src="main.js"></script> </html> arquivo main.js myButton.addEventListener('click',function() { alert('Olá mundo!') }) O comando getElementById não funciona se a conexão ou o código JavaScript estiver no topo do HTML, enfim a posição do JavaScript é importante. Nos últimos cinco anos, eu sempre coloquei o código no topo da lista, mas ao invés de usar a função addEventListener, usava outra função. Mas enfim, o que eu mais gostei é que o livro consertou o meu VS Code. Eu fiz tanta baderna com as extensões do PHP e do Laravel que acabei tirando todas as extensões, agora consegui recuperar a facilidade de fazer o código HTML com a extensão IntelliCode (o livro chama erroneamente de Visual Studio IntelliCode). Os dois primeiros capítulos já valem os R$ 8,90 que a Amazon pede.
×
×
  • Criar Novo...