Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.586
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. arquivo index.php <?php if(!isset($_POST['id'])) { goto Formulario; } $mysqli=new mysqli("localhost","root","","teste"); if($_POST['id']) { $id=$_POST['id']; $sql="select * from clientes where id=$id"; $query=$mysqli->query($sql); if($query->num_rows>0) { echo "O cliente com o id $id é: " . $query->fetch_assoc()['nome']; } else { echo "Não existe cliente com id $id"; } } if($_POST['nome']) { $nome=str_replace(" ","%",$_POST['nome']); $sql="select * from clientes where nome like '%$nome%' order by nome limit 50"; $query=$mysqli->query($sql); $clientes=$query->fetch_all(MYSQLI_ASSOC); ?> <table><th>id<th>Nome <?php foreach($clientes as $cliente) { ?> <tr><td><?=$cliente['id']?><td><?=$cliente['nome']?><p> <?php } ?> </table> <?php } Formulario: ?> <hr> <p> Consulta cliente por id e/ou nome <form method=post> <table> <tr><td>Id do Cliente<td><input name=id> <tr><td>Nome do Cliente<td><input name=nome> <tr><td><td><input type=submit> </table> </form>
  2. arquivo index.php <?php $conn=mysqli_connect("localhost","root","","teste"); if(isset($_POST['email'])) { $email=$_POST['email']; $sql="insert into usuarios (email) values ('$email')"; mysqli_query($conn,$sql); if(mysqli_insert_id($conn)) { $ultimoId=mysqli_insert_id($conn); echo "o novo cadastro recebeu o id $ultimoId"; } else { echo "Não deu certo"; } } ?> <hr> Formulário para cadastrar novo usuário <form method=post> <table> <tr><td>Email<td><input type=email name=email required> <tr><td><td><input type=submit> </table> </form>
  3. arquivo index.php <style> td, th {font-size:20px;border:double;text-align:center} table,div {width:500px;margin:0 auto} div {margin-top:50px;font-size:20px;border:double;color:red;text-align:center} </style> <table><th>Nível 1<th>Nível 2<th>Nível 3 <?php for($i=65;$i<=79;$i += 3) { ?> <tr><td onclick="mensagem.innerHTML='<?=chr($i)?> Nivel <?= $i % 3 - 1?>'"><?=chr($i)?> <td onclick="mensagem.innerHTML='<?=chr($i+1)?> Nível <?= ($i + 1) % 3 + 2?>'"><?=chr($i+1)?> <td onclick="mensagem.innerHTML='<?=chr($i+2)?> Nível <?= ($i + 2) % 3 + 2?> '"><?=chr($i+2)?> <?php } ?> </table> <div id=mensagem></div>
  4. <?php if(isset($_POST['email'])) { $email=$_POST['email']; $senhaHash=password_hash($_POST['senha'],PASSWORD_DEFAULT); $mysqli=new mysqli("localhost","root","","teste"); $query=$mysqli->query("select * from usuarios where email='$email'"); if($query->num_rows>0) { ?> O email <?=$email?> já está cadastrado <?php } else { $mysqli->query("insert into usuarios (email,senhahash) values ('$email','$senhaHash')"); } } ?> <hr> Formulário para cadastrar novo usuario <form method=post> <table> <tr><td>Email<td><input type=email name=email required> <tr><td>Senha<td><input type=password name=senha required> <tr><td><td><input type=submit> </table> </form>
  5. O MySQL só usa o formato Y-m-d, logo você só pode gravar ou resgatar nesse formato mas na hora de exibir a data você pode usar o PHP para apresentar a data de forma mais nativa. A gramática select sum(*) as caminhoes está errada, o correto é select sum(caminhoes) as caminhoes, a primeira sintaxe vai somar todos os campos numéricos da tabela, quando o que você deseja é somar os caminhões utilizados numa obra num período de tempo: <?php // dosagem_usina (id,data,caminhoes,obra)(1,'2024-06-21',1,"triplex") // (2,'2024-06-22',1,"triplex")(3,'2024-06-23',1,"triplex") $con=new mysqli("localhost","root","","teste"); if(isset($_POST['dataInicio'])) { $dataInicio = $_POST['dataInicio']; $dataFim = $_POST['dataFim']; $obra = $_POST['obra']; $procura = mysqli_query($con,"select * from dosagem_usina where data between '$dataInicio' and '$dataFim' and obra = '$obra' group by id order by id desc "); $caminhoes=$procura->fetch_all(MYSQLI_ASSOC); ?> <table><th>Id<th>Data<th>Caminhões<th>Obra <?php foreach($caminhoes as $caminhao): ?> <tr><td><?=$caminhao['id']?> <td><?=date('d/m/Y',strtotime($caminhao['data']))?> <td style="text-align:center"><?=$caminhao['caminhoes']?> <td><?=$caminhao['obra']?> <?php endforeach; $procura = mysqli_query($con,"select sum(caminhoes) as soma from dosagem_usina where data between '$dataInicio' and '$dataFim' and obra='$obra'"); $totalCaminhoes = ($procura) ? $procura->fetch_assoc()['soma'] : 0; ?> </table> O total de caminhões utilizado nessa obra foram <?=$totalCaminhoes?><hr> <?php } ?> Formulário para pesquisar total de caminhões utilizado numa obra<p> (para esse exemplo utilize apenas as datas entre 21/06/2024 a 23/06/2024)<p> <form method=post> <table> <tr><td>Data Inicio<td><input type=date name=dataInicio> <tr><td>Data Fim<td><input type=date name=dataFim> <tr><td>Obra<td><input name=obra value="triplex"> <tr><td><td><input type=submit> </table> </form>
  6. O filter_input(INPUT_GET,'valor1') não funciona mesmo. O formulário não mandou nenhum valor com a chave 'valor1', logo o PHP deveria disparar um erro reclamando que não encontrou a chave. Ao invés de usar o filter_input o melhor é usar $_GET: <?php if(filter_input(INPUT_GET,"id")=="") { goto Formulario; } echo filter_input (INPUT_GET, "valor1"); // não dispara mensagem de erro echo $_GET["valor1"]; // dispara mensagem de erro exit; Formulario: $id=1; $descricao="Compra pela internet"; $tipo="Receita"; $data='2020-04-20'; $valor=111.12; $conta=31; ?> <form> <input type="hidden" name="id" value="<?=$id?>"> <table> <tr><td>Descrição: <input name="descricao" value="<?=$descricao?>"> <tr><td>Tipo: <input name="tipo" value="<?=$tipo?>"> <tr><td>Data: <input name="data" value="<?=$data?>"> <tr><td>Valor: <input name="valor2" value="<?=$valor?>"> <tr><td>Conta: <input name="conta" value="<?=$conta?>"> <tr><td><input type=submit> </table> </form>
  7. Apesar da mensagem ser de 2018, dá para ver porque o código dele não funcionava: há muitos erros na gramática do MySQL. O truque é tentar fazer o código dele funcionar: <?php session_start(); $conexao=new mysqli("localhost","root","","teste"); $_SESSION['usuario']="Frank K Hosaka"; if(!isset($_POST['Questao'])) { goto Formulario; } $questao = mysqli_real_escape_string($conexao, $_POST['Questao']); $alternativa1 = mysqli_real_escape_string($conexao, $_POST['Alternativa1']); $user = $_SESSION['usuario']; if(empty($_POST['Questao'])) { goto Formulario; } $query = "select * from usuario where name = '$user'"; // aonde estava 'where usuario' coloquei 'where name' $result = mysqli_query($conexao, $query); $tester = mysqli_num_rows($result); if ($tester == 0) { echo "Você não está cadastrado"; // isso não faz sentido, como um usuário logado não está cadastrado? exit; } else { $rowi = mysqli_fetch_assoc($result); // $insert = "INSERT INTO '$rowi' (questao, alternativa1) VALUES ('$questao', '$alternativa1')"; // $rowi é um vetor e não o nome de uma tabela $idUsuario=$rowi['id']; $insert="insert into tabela_questoes (idUsuario,questao,alternativa1) "; $insert=$insert." values ($idUsuario,'$questao','$alternativa1')"; if($valida = mysqli_query($conexao, $insert)) { echo "Parabéns, você conseguiu inserir os dados"; exit; } } Formulario: ?> <form method=post> <input name=Questao value="Você é programador?"> <input name=Alternativa1 value="Não"> <input type=submit> </form>
  8. Esse é um debate de 2018, nele aprendi um novo conceito chamado interface e um novo método chamado implements, é um conceito de OOP de alto nível. Como o meu conhecimento em OOP é precário, só uso o método extends. As classes são um péssimo lugar para guardar informações, o melhor lugar é o banco de dados. Mas se o projeto não tem banco de dados, aonde guardar as informações? Eu usei o HTML ou seja eu mandei todas as informações no $_POST, e joguei tudo de volta nos <input>: <?php interface Controle { public function arvoresArepor($volume); public function pagar($arvores); } class ControleReflorestamento implements Controle { public function arvoresArepor($volume) { return $volume*6; } public function pagar($arvores) { return $arvores*1.75; } } $ano=(isset($_POST['ano'])) ? $_POST['ano'] : 2024; $estado=(isset($_POST['estado'])) ? $_POST['estado'] : "SP"; $arvoreCortada=(isset($_POST['arvoreCortada'])) ? $_POST['arvoreCortada'] : 10; $volume=(isset($_POST['volume'])) ? $_POST['volume'] : 1; ?> <table style="width:500px;margin:0 auto;border: 2px double" > <tr> <td colspan=6 style="text-align:center"> Calculadora Ambiental <tr> <td style="border:2px double">Ano <td style="border:2px double">Estado <td style="border:2px double">No. Árvores Cortadas <td style="border:2px double">Volume m3 <td style="border:2px double">Árvores a Repor <td style="border:2px double">Pagar <tr> <td style="border:2px double"><?=$ano?> <td style="border:2px double;text-align:center"><?=$estado?> <td style="border:2px double;text-align:center"><?=$arvoreCortada?> <td style="border:2px double;text-align:center"><?=$volume?> <td style="border:2px double;text-align:center"><?=(new ControleReflorestamento)->arvoresArepor($volume)?> <td style="border:2px double;text-align:center;color:red"><?=(new ControleReflorestamento)->pagar($volume)?> </table> <p> <form method=post style="width:500px;margin:0 auto"> Formulário para alterar dados <table> <tr><td>Ano<td><input name=ano value=<?=$ano?>> <tr><td>Estado<td><input name=estado value=<?=$estado?>> <tr><td>No. Árvores Cortadas<td><input name=arvoreCortada value=<?=$arvoreCortada?>> <tr><td>Volume<td><input name=volume value=<?=$volume?>> <tr><td><td><input type=submit> </table> </form>
  9. Lá em 2008 o Serra tinha um monte de campos e sobrava pouco espaço para exibir os comandos alterar e excluir, assim ele teve a ideia de usar uma caixa de seleção. O problema da caixa de seleção é que ele não diz quem deve ser alterado ou excluído Eu consegui colocar o id da empresa dentro da caixa de seleção: <form style="width:500px;margin:0 auto"> <?php if (isset($_GET["ListBox"])) { $comando=explode(" ",$_GET["ListBox"]); $id=$comando[1]; switch ($comando[0]) { case "Alterar" : echo "alterar a empresa com o id $id"; exit; case "Excluir" : echo "excluir a empresa com o id $id"; exit; } } // CREATE TABLE `empresas` (`id` int NOT NULL AUTO_INCREMENT, // `nome` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) // ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ?> <table><tr><th>Empresa<th>Comando <?php $mysqli=new mysqli("localhost","root","","teste"); $query=$mysqli->query("select * from empresas order by nome"); $empresas=$query->fetch_all(MYSQLI_ASSOC); foreach($empresas as $empresa): ?> <tr><td><?=$empresa["nome"]?> <td><select name=ListBox onchange=submit()> <option value="">Escolha uma opção <option value="Alterar <?=$empresa['id']?>">Alterar <option value="Excluir <?=$empresa['id']?>">Excluir </select> <?php endforeach; ?> </table> </form>
  10. Frank K Hosaka

    Problemas com INSERT

    Em 2008, acredito que o comando mysql_query trabalhava com dois argumentos, e só foi fornecido a consulta sql, precisava incluir a conexão no comando. Aqui em 2024, o PHP não trabalha mais com o motor mysql, agora é PDO ou mysqli. O mysqli não permite usar palavras reservadas como table ou desc como nome de tabela e nome de campo. Atualizando o código para a gramática do mysqli, ele ficaria assim: <?php $nome = "Frank"; $assunto = "PHP"; $desc = "O motor mysqli"; $mysqli = new mysqli("localhost","root","","teste"); $sql = $mysqli->query("INSERT INTO tabela (nome, assunto, descricao) VALUES ('$nome','$assunto','$desc')"); if ($sql) { echo "ok"; } else { echo mysqli_error($mysqli); } ?>
  11. <table style="width:500px;margin:0 auto"> <?php // CREATE TABLE `cadastro` (`id` int NOT NULL AUTO_INCREMENT, // `nome` varchar(45) DEFAULT NULL,`idade` int DEFAULT NULL, // `cidade` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) // ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci $mysqli=new mysqli("localhost","root","","teste"); if(isset($_GET['excluir'])) { $id=$_GET['excluir']; $mysqli->query("delete from cadastro where id=$id"); } $query=$mysqli->query("select * from cadastro order by nome"); $todos=$query->fetch_all(MYSQLI_ASSOC); foreach($todos as $cadaum): ?> <tr><td><?=$cadaum['nome']?><td><a href=?excluir=<?=$cadaum['id']?>>Excluir</a> <?php endforeach; ?> </table>
  12. Frank K Hosaka

    Download arquivos

    O Durub tem razão, o PHP não tem como fazer mais nada quando você usa o comando head(), nem adianta fazer o comando echo antes dele usar esses comandos. O PHP também não tem uma instrução direta para ver se o arquivo chegou no destino. Mas dá para jogar o serviço na costa do usuário: <form style="width:500px;margin:0 auto"> <?php if(isset($_GET['download'])) { $fname="index.php"; header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$fname); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0",false); header("Pragma: no-cache"); header("Content-Transfer-Encoding: binary\n"); readfile($fname); } ?> <input type=submit value="Fazer download" onclick="mensagem.innerHTML='Por favor, verifique se o arquivo chegou na pasta Downloads'"> <input type=hidden name=download value=download> <div id=mensagem></div> </form>
  13. <form style="width:500px;margin:0 auto;margin-top:100px"> <?php // CREATE TABLE `cadastro` (`id` int NOT NULL AUTO_INCREMENT, `nome` varchar(45) DEFAULT NULL, // `idade` int DEFAULT NULL, `cidade` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) // ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci $mysqli=new mysqli("localhost","root","","teste"); if(isset($_GET['nome'])) { $nome=$_GET['nome']; $idade=$_GET['idade']; $cidade=$_GET['cidade']; $mysqli->query("insert into cadastro (nome,idade,cidade) values ('$nome',$idade,'$cidade')"); $query=$mysqli->query("select * from cadastro order by id desc"); $ultimoRegistro=$query->fetch_assoc(); var_dump($ultimoRegistro); } ?> Cadastro Teste <table> <tr><td>Nome:<td><input name=nome required> <tr><td>Idade:<td><input name=idade required> <tr><td>Cidade:<td> <select name=cidade> <option>Londrina <option selected>Curitiba </select> <tr><td><td><input type=submit> </table> </form>
  14. A minha sugestão é atualizar a tela, depois de enviar a nova mensagem, assim: <?php // CREATE TABLE `chat` (`id` int NOT NULL AUTO_INCREMENT, `msg` varchar(40) DEFAULT NULL, // PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci $mysqli=new mysqli("localhost","root","","teste"); if(isset($_GET['novaMsg'])) { $novaMsg=$_GET['novaMsg']; $mysqli->query("insert into chat (msg) values ('$novaMsg')"); } $query=$mysqli->query("select * from (select * from chat order by id desc limit 3) as t1 order by t1.id"); ?> <div style="border:1px solid"> <?php while($row=$query->fetch_assoc()) { echo $row['msg']."<p>"; } ?> </div> <p> <form> <textarea name="novaMsg" rows="5" cols="100" autofocus></textarea> <input type=submit> </form> Apesar da questão ser de 2008, nesse código apresento a sugestão de exibir as três últimas mensagens do chat mas em ordem crescente.
  15. A minha experiência com projeto multiusuário é precária. O meu projeto só suporta dois usuários. Eu não sei se o meu irmão está conectado, mas olhando o histórico do orçamento, eu sei que ele estava conectado às 10:02 hs de hoje. No meu caso, eu não preciso de um gerenciador de usuário, quando o meu irmão não consegue conectar, ele liga no meu WhatsApp e eu tenho que correr para saber onde está o problema. A minha sugestão é buscar outras alternativas além do LDAP ou fazer uma rotina para gerenciar o usuário através da rotina de login, contar as janelas que eles abrem e pedir para o JavaScript fazer a rotina de logout na tabela de usuários assim que todas as janelas do navegador forem fechadas, ou seja, pesquisar nas tabelas existentes o que os usuários andaram registrando. No meu caso, a tabela orçamento não tem o id do usuário, mas eu sei quando aconteceu o último registro.
  16. A tabela do diário contábil tem cinco colunas: lançamento, contaDevedora, contaCredora, Valor e Histórico. Isso é bem fácil de mostrar num notebook de 14 polegadas, mas não é o caso do celular de 7 polegadas. Pensei em ocultar a coluna do histórico, e a Gemini sugeriu esse código: <table class="table table-responsive"> <thead> <tr> <th>Coluna 1</th> <th>Coluna 2</th> <th>Coluna 3</th> <th>Coluna 4</th> <th class="d-none d-sm-table-cell">Coluna 5</th> </tr> </thead> <tbody> <tr> <td>Dado 1</td> <td>Dado 2</td> <td>Dado 3</td> <td>Dado 4</td> <td class="d-none d-sm-table-cell">Dado 5</td> </tr> </tbody> </table> Eu testei, e funcionou. Para ver a coluna do histórico, basta mudar o celular para o modo paisagem.
  17. Frank K Hosaka

    O código HTML

    Eu peguei um exemplo de modal no Bootstrap, e ele funcionou no meu projeto Orçamento que fiz em PHP. Também tenho um outro projeto que faz a mesma coisa, mas usa a linguagem das classes. O modal funcionou por alguns segundos e desapareceu. Eu presumi que eu fiz coisa errada que afetou o código HTML. Usei o comando de visualizar o código do navegador, e eu vi que o código saiu bem diferente entre a versão PHP e o PHP-classes. Peguei a versão PHP e eliminei o comando echo, e no lugar dele tentei separar o que é PHP e o que é HTML, e mesmo assim eu não consegui colocar o marcador <tr> no canto esquerdo da tela. Mostrei o código para a Gemini e ela explicou que o meu erro é colocar o marcador <form> dentro de um marcador <td>. E assim eu perdi todo o feriado de ontem para aprender que eu não sei nada do código HTML. Desesperado, eu abandonei a Gemini e usei o antigo motor de busca do Google, procurando por alguém que estava passando na mesma situação que eu. Por sorte, eu achei alguém já no final da madrugada. O erro dele é exatamente igual ao meu. No meu projeto PHP-classes, eu escrevi assim <a href="" onclick=bling()>. A função bling() chama o modal, mas a função href="" manda atualizar o navegador. Esse é um erro brutal de lógica, e não há como encontrá-lo no código HTML. Para consertar isso, eu escrevi assim <a onclick=bling()>. O modal funciona, mas o link não. O nome disso é gambiarra, e eu tenho que dar o braço a torcer para a Gemini quando ela repete várias vezes: a gambiarra não compensa.
  18. O <input autofocus> não funciona no modal do Bootstrap, para contornar o problema usei o JavaScript abrir(modalSignin) variavel.focus() arquivo modal.php // esse código pressupõe que o Bootstrap já foi carregado <script> //... function bling(pedido,vendido) { if(!vendido) { mensagemModalSheet.innerHTML="<h1>Não dá para criar pedido Bling quando ainda não foi vendido</h1>" abrir(modalSheet) } else { btnVariavel.addEventListener('click',function(event) { window.location.href=`bling.php?pedido=${pedido}&pBling=${variavel.value}` fechar(modalSignin) setTimeout(()=>{location.replace("orcamento.php")},1000) // atualizar a tela após 10 segundos }) abrir(modalSignin) variavel.focus() // colocando o foco no <input id=variavel> } } </script> <!-- modalSignin --> <div class="modal d-none" tabindex="-1" role="dialog" id="modalSignin"> <div class="modal-dialog" role="document"> <div class="modal-content rounded-4 shadow"> <div class="modal-header p-5 pb-4 border-bottom-0"> <h5 class="fw-semibold mb-0 fs-2">Número do pedido Bling</h5> <button type="button" class="btn-close" onclick=fechar(modalSignin) aria-label="Close"></button> </div> <div class="modal-body p-5 pt-0"> <div class="form-floating mb-3"> <input type=text class="form-control rounded-3 fs-2" id="variavel"> </div> <button class="w-100 mb-2 btn btn-lg rounded-3 btn-primary" type="submit" id=btnVariavel>Enviar</button> </div> </div> </div> </div>
  19. O próximo código presume que o Bootstrap já foi carregado. Usei o modal para substituir as funções prompt(), confirm() e alert() do JavaScript. A grande diferença entre essas funções e o modal é que as funções param a execução do código, enquanto as funções não forem concluídas. Para simular algo parecido, eu fiz uma gambiarra, criando um temporizdor de 10 segundos: arquivo modal.php <script> function abrir(abrirModal) { abrirModal.classList.remove('d-none') abrirModal.classList.add('d-block') } function fechar(fecharModal) { fecharModal.classList.remove('d-block') fecharModal.classList.add('d-none') } function bling(pedido,vendido) { if(!vendido) { mensagemModalSheet.innerHTML="<h1>Não dá para criar pedido Bling quando ainda não foi vendido</h1>" abrir(modalSheet) } else { btnVariavel.addEventListener('click',function(event) { window.location.href=`bling.php?pedido=${pedido}&pBling=${variavel.value}` fechar(modalSignin) setTimeout(()=>{location.replace("orcamento.php")},1000) // atualizar a tela após 10 segundos }) abrir(modalSignin) } } function apagarBling(pedido) { mensagemModalChoice.innerHTML=`Você quer apagar o pedido Bling do pedido ${pedido} ?` btnChoice.addEventListener('click',function(event){window.location.href=`orcamento.php?apagarBling=${pedido}`}) abrir(modalChoice) } </script> <!-- modalSheet --> <div class="modal d-none p-4 py-md-5" tabindex="-1" role="dialog" id="modalSheet"> <div class="modal-dialog" role="document"> <div class="modal-content rounded-4 shadow"> <div class="modal-header border-bottom-0 opacity-1"> <h1 class="modal-title fs-5">Mensagem</h1> <button type="button" class="btn-close" onclick=fechar(modalSheet) aria-label="Close"></button> </div> <div class="modal-body py-0"> <p id=mensagemModalSheet></p> </div> </div> </div> </div> <!-- modalSignin --> <div class="modal d-none" tabindex="-1" role="dialog" id="modalSignin"> <div class="modal-dialog" role="document"> <div class="modal-content rounded-4 shadow"> <div class="modal-header p-5 pb-4 border-bottom-0"> <h5 class="fw-semibold mb-0 fs-2">Digite o número do pedido Bling</h5> <button type="button" class="btn-close" onclick=fechar(modalSignin) aria-label="Close"></button> </div> <div class="modal-body p-5 pt-0"> <div class="form-floating mb-3"> <input class="form-control rounded-3" id=variavel autofocus> <label for="floatingInput">Número do Pedido Bling</label> <button class="w-100 mb-2 btn btn-lg rounded-3 btn-primary" type="submit" id=btnVariavel>Enviar</button> </div> </div> </div> </div> </div> <!-- modalChoice --> <div class="modal d-none p-4 py-md-5" tabindex="-1" role="dialog" id="modalChoice"> <div class="modal-dialog" role="document"> <div class="modal-content rounded-3 shadow"> <div class="modal-body p-4 text-center"> <h4 class="mb-0" id=mensagemModalChoice></h4> </div> <div class="modal-footer flex-nowrap p-0"> <button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 py-3 m-0 rounded-0 border-end" id=btnChoice><strong>Sim, eu quero</strong></button> <button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 py-3 m-0 rounded-0" onclick=fechar(modalChoice)>Não, apertei por engano</button> </div> </div> </div> </div>
  20. Existem vários tipos de modal, tem um para dar um alerta, aguardar confirmação e outro para coletar informação. O código seguinte sugere colocar tudo que é tipo de modal dentro de um arquivo: arquivo index.php <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> <?php require 'modal.php' ?> <script> function fechar(fecharModal) { fecharModal.classList.remove('d-block') fecharModal.classList.add('d-none') } function abrir(abrirModal) { abrirModal.classList.remove('d-none') abrirModal.classList.add('d-block') } </script> <div class=h-25></div> <table class='table table-striped w-25'> <tr class=fw-semibold><td>Exemplos do Bootstrap <tr><td onclick=abrir(modalSheet)>modalSheet <tr><td onclick=abrir(modalChoice)>modalChoice <tr><td onclick=abrir(modalTour)>modalTour <tr><td onclick=abrir(modalSignin)>modalSigin </table> arquivo modal.php <!-- modalSheet --> <div class="modal opacity-75 d-none bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalSheet"> <div class="modal-dialog" role="document"> <div class="modal-content rounded-4 shadow"> <div class="modal-header border-bottom-0"> <h1 class="modal-title fs-5">Modal title</h1> <button type="button" class="btn-close" onclick=fechar(modalSheet) aria-label="Close"></button> </div> <div class="modal-body py-0"> <p>This is a modal sheet, a variation of the modal that docs itself to the bottom of the viewport like the newer share sheets in iOS.</p> </div> <div class="modal-footer flex-column align-items-stretch w-100 gap-2 pb-3 border-top-0"> <button type="button" class="btn btn-lg btn-primary">Save changes</button> <button type="button" class="btn btn-lg btn-secondary" data-bs-dismiss="modal">Close</button> </div> </div> </div> </div> <!-- modalChoice --> <div class="modal opacity-75 d-none bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalChoice"> <div class="modal-dialog" role="document"> <div class="modal-content rounded-3 shadow"> <div class="modal-body p-4 text-center"> <h5 class="mb-0">Enable this setting?</h5> <p class="mb-0">You can always change your mind in your account settings.</p> </div> <div class="modal-footer flex-nowrap p-0"> <button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 py-3 m-0 rounded-0 border-end"><strong>Yes, enable</strong></button> <button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 py-3 m-0 rounded-0" onclick=fechar(modalChoice)>No thanks</button> </div> </div> </div> </div> <!-- modalTour --> <div class="modal opacity-75 d-none bg-body-secondary" tabindex="-1" role="dialog" id="modalTour"> <div class="modal-dialog" role="document"> <div class="modal-content rounded-4 shadow"> <div class="modal-body p-5"> <h2 class="fw-bold mb-0">What's new</h2> <ul class="d-grid gap-4 my-5 list-unstyled small"> <li class="d-flex gap-4"> <svg class="bi text-body-secondary flex-shrink-0" width="48" height="48"><use xlink:href="#grid-fill"/></svg> <div> <h5 class="mb-0">Grid view</h5> Not into lists? Try the new grid view. </div> </li> <li class="d-flex gap-4"> <svg class="bi text-warning flex-shrink-0" width="48" height="48"><use xlink:href="#bookmark-star"/></svg> <div> <h5 class="mb-0">Bookmarks</h5> Save items you love for easy access later. </div> </li> <li class="d-flex gap-4"> <svg class="bi text-primary flex-shrink-0" width="48" height="48"><use xlink:href="#film"/></svg> <div> <h5 class="mb-0">Video embeds</h5> Share videos wherever you go. </div> </li> </ul> <button type="button" class="btn btn-lg btn-primary mt-5 w-100" onclick=fechar(modalTour)>Great, thanks!</button> </div> </div> </div> </div> <!-- modalSignin --> <div class="modal opacity-75 d-none bg-body-secondary" tabindex="-1" role="dialog" id="modalSignin"> <div class="modal-dialog" role="document"> <div class="modal-content rounded-4 shadow"> <div class="modal-header p-5 pb-4 border-bottom-0"> <h1 class="fw-bold mb-0 fs-2">Sign up for free</h1> <button type="button" class="btn-close" onclick=fechar(modalSignin) aria-label="Close"></button> </div> <div class="modal-body p-5 pt-0"> <form class=""> <div class="form-floating mb-3"> <input type="email" class="form-control rounded-3" id="floatingInput" placeholder="name@example.com"> <label for="floatingInput">Email address</label> </div> <div class="form-floating mb-3"> <input type="password" class="form-control rounded-3" id="floatingPassword" placeholder="Password"> <label for="floatingPassword">Password</label> </div> <button class="w-100 mb-2 btn btn-lg rounded-3 btn-primary" type="submit">Sign up</button> <small class="text-body-secondary">By clicking Sign up, you agree to the terms of use.</small> <hr class="my-4"> <h2 class="fs-5 fw-bold mb-3">Or use a third-party</h2> <button class="w-100 py-2 mb-2 btn btn-outline-secondary rounded-3" type="submit"> <svg class="bi me-1" width="16" height="16"><use xlink:href="#twitter"/></svg> Sign up with Twitter </button> <button class="w-100 py-2 mb-2 btn btn-outline-primary rounded-3" type="submit"> <svg class="bi me-1" width="16" height="16"><use xlink:href="#facebook"/></svg> Sign up with Facebook </button> <button class="w-100 py-2 mb-2 btn btn-outline-secondary rounded-3" type="submit"> <svg class="bi me-1" width="16" height="16"><use xlink:href="#github"/></svg> Sign up with GitHub </button> </form> </div> </div> </div> </div>
  21. Eu sempre quis colocar um modal no meu projeto PHP. O problema é que eu não sabia como chamar o modal através do JavaScript. A sintaxe (new bootstrap.Modal(myModal)).show() só funciona com o Bootstrap 5.2 para cima, e ela vai ser útil quando você precisar deixar uma mensagem para o usuário, quando ele solicitar um serviço que não está disponível ou faltarem mais dados. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"> </script> <button data-bs-toggle="modal" data-bs-target="#myModal"> versão clássica </button> <p> <button onclick="(new bootstrap.Modal(myModal)).show()"> versão java script </button> <!-- Modal --> <div class="modal fade" id="myModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> Teste <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> </div> </div> </div>
  22. O seguinte código coloca todos os arquivos no diretório raiz, as definições e a conexão foram colocadas no arquivo Controle, e foi utilizado o prefixo v para todos os arquivos que contém os formulários em HTML. arquivo /Astudy/Controle.php <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <div style=height:20px></div> <?php date_default_timezone_set('America/Sao_Paulo'); defined('HOST') || define('HOST', 'localhost'); defined('DBNAME') || define('DBNAME', 'teste'); defined('USER') || define('USER','root'); defined('PASSWORD') || define('PASSWORD',''); spl_autoload_register( function ($classe) { $arquivo = $classe . '.php'; if (file_exists($arquivo)) { require_once $arquivo; return; } throw new Exception("Erro ao carregar a classe '{$classe}'. Arquivo não encontrado.$arquivo"); } ); function dec($value) { if($value==null) { return null; } return number_format($value,2,',','.'); } function deca($num) { $value=str_replace(".","",$num); return str_replace(",",".",$value); } function fmt($date) { return date('d/m/y',strtotime($date)); } function pvenda($custo,$margem) { $calculo=intval($custo*(1+$margem/100)*100)/100; $fracao=$calculo-intval($calculo); if ($fracao < 0.09) { $pvenda=intval($calculo); } else { if ($fracao <= 0.59) { $pvenda=intval($calculo)+0.5; } else { $pvenda=intval($calculo)+1; } } return dec($pvenda); } function view($arquivo, $array = null) { if (!is_null($array)) { foreach ($array as $var => $value) { ${$var} = $value; } } ob_start(); include $arquivo . ".php"; ob_flush(); } class Controle { private static $pdo; public static function instancia() { if(!self::$pdo) { self::$pdo=new PDO("mysql:host=".HOST.";dbname=".DBNAME,USER,PASSWORD); } return self::$pdo; } function select($sql) { $stmt=$this->instancia()->query("select $sql"); return $stmt->fetchAll(PDO::FETCH_OBJ); } function insert($sql) { return $this->instancia()->query("insert into $sql"); } function delete($sql) { return $this->instancia()->query("delete $sql"); } function update($sql) { return $this->instancia()->query("update $sql"); } } arquivo /Astudy/ControleOrcamento.php <?php class ControleOrcamento extends Controle { public function alteraQt() { $qt=$_POST['alteraQt']; $id=$_POST['id']; $ped=$_POST['ped']; $unitario=$_POST['unitario']; $subtotal=$qt*$unitario; $this->update("tbhistped set qt=$qt, subtotal=$subtotal where id=$id"); $total=$this->select("sum(subtotal) as total from tbhistped where ped=$ped")[0]->total; $this->update("tbpedido set total=$total where ped=$ped"); return $this->inicio($ped); } public function excluir($id) { $pedido=$_GET['pedido']; $this->delete("from tbhistped where id=$id"); $total=$this->select("sum(subtotal) as total from tbhistped where ped=$pedido")[0]->total; $this->update("tbpedido set total=$total where ped=$pedido"); return $this->inicio($pedido); } public function historico($hist = null) { $where=""; if($hist) { $ped=$_GET['referencia']+$hist; $where="where ped <= $ped"; } $pedidos=$this->select("* from tbpedido $where order by ped desc limit 15"); return view('vHistorico',['pedidos'=>$pedidos]); } public function incluirProduto($codprod) { $pedido=$_GET['pedido']; return $this->inicio($pedido,$codprod); } public function incluirQt() { $qt=deca($_POST['qt']); $ped=$_POST['ped']; $codprod=$_POST['codprod']; $unitario=str_replace(",",".",$_POST['venda']); $un=$_POST['un']; $subtotal=$qt*$unitario; $this->insert("tbhistped (ped,codprod,un,unitario,subtotal,qt) values ($ped,$codprod,'$un',$unitario,$subtotal,$qt)"); $total=$this->select("sum(subtotal) as total from tbhistped where ped=$ped")[0]->total; $this->update("tbpedido set total=$total where ped=$ped"); return $this->inicio($ped); } public function inicio($pedido = null, $codprod = null) { if($pedido) { $pedido=$this->select("* from tbpedido where ped=$pedido")[0]; } else { $ultimo=$this->select("max(ped) as ultimo from tbpedido")[0]->ultimo; $pedido=$this->select("* from tbpedido where ped=$ultimo")[0]; } if($codprod) { $vr['codprod']=$codprod; $produto=$this->select("* from tbprod where codprod=$codprod")[0]; $vr['prod']=$produto->prod; $vr['venda']=$produto->venda; $vr['un']=$produto->un; } else { $vr['codprod']=null; $vr['prod']=null; $vr['venda']=null; $vr['un']=null; } $vr['ped']=$pedido->ped; $vr['diaped'] = $pedido->dia; $vr['total'] = $pedido->total; $vr=json_decode(json_encode($vr)); $histped=$this->select("* from tbhistped join tbprod on tbprod.codprod = tbhistped.codprod where ped=$vr->ped"); return view('vOrcamento',['vr'=>$vr,'histped'=>$histped]); } public function novoPedido() { $pedido=$this->select("* from tbpedido order by ped desc")[0]; $ped=$pedido->ped; $total=$pedido->total; if($total!==null) { $ped++; $dia=date('Y-m-d'); $this->insert("tbpedido (ped,dia) values ($ped,'$dia')"); } return $this->inicio($ped); } public function produto() { $pedido=$_POST['pedido']; $produtos=$this->select("* from tbprod order by prod limit 15"); return view('vProduto',['produtos'=>$produtos,'pedido'=>$pedido]); } } arquivo /Astudy/ControleProduto.php <?php class ControleProduto extends Controle { public function procurarProduto() { $procura=$_POST['procura']; $pedido=$_POST['pedido']; $criterio=str_replace(" ","%",$procura); $produtos=$this->select("* from tbprod where prod like '%$criterio%' order by prod"); return view('vProduto',['produtos'=>$produtos,'pedido'=>$pedido]); } public function selecionado($codprod) { $pedido=$_GET['pedido']; return header("location:?ControleOrcamento.incluirProduto.$codprod&pedido=$pedido"); } } arquivo /Astudy/index.php <?php require('Controle.php'); $rota='ControleOrcamento_inicio'; if($_GET) { if(strpos(key($_GET),"_")==0) { exit; } $rota=isset($_GET) ? key($_GET) : $rota; } $segmentos=explode('_',$rota); $nomeControle=$segmentos[0] ?? 'ControleOrcamento'; $metodo=$segmentos[1] ?? 'inicio'; $parametro=$segmentos[2] ?? null; $controle=new $nomeControle(); $controle->$metodo($parametro); arquivo /Astudy/mysql.txt CREATE TABLE `tbhistped` ( `ped` int DEFAULT NULL, `codprod` int DEFAULT NULL, `un` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `unitario` float DEFAULT NULL, `subtotal` float DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, `qt` float DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13063 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CREATE TABLE `tbpedido` ( `ped` int NOT NULL AUTO_INCREMENT, `total` float DEFAULT NULL, `dia` date DEFAULT NULL, `codp` mediumint DEFAULT NULL, `horavenda` datetime DEFAULT NULL, `vendido` date DEFAULT NULL, `dinheiro` float DEFAULT NULL, `troco` float DEFAULT NULL, `cartao` tinyint DEFAULT NULL, `pix` tinyint DEFAULT NULL, `bling` int DEFAULT NULL, PRIMARY KEY (`ped`) ) ENGINE=InnoDB AUTO_INCREMENT=5825 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CREATE TABLE `tbprod` ( `codprod` mediumint NOT NULL AUTO_INCREMENT, `un` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'un', `prod` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `custo` decimal(13,2) DEFAULT NULL, `marg` decimal(5,2) DEFAULT NULL, `codbar` varchar(29) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `loc` varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '""', `emb` float DEFAULT NULL, `cf` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `codforn` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `estoque` float DEFAULT NULL, `origem` int NOT NULL DEFAULT '0', `vazio` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `venda` decimal(13,2) DEFAULT NULL, PRIMARY KEY (`codprod`) ) ENGINE=InnoDB AUTO_INCREMENT=2288 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci arquivo /Astudy/vHistorico.php <?php $referencia = $pedidos[0]->ped; ?> <table class='table table-striped table-sm w-25 m-auto'> <th style=width:20px>Dia <th style=width:40px> <div style="display:flex;width:30px;margin-right:15px"> <a href="?ControleOrcamento.historico.-14&referencia=<?=$referencia?>"><</a>&nbsp; <a href="?ControleOrcamento.inicio">Ped</a>&nbsp; <a href="?ControleOrcamento.historico.14&referencia=<?=$referencia?>" >></a> </div> <th class=text-end>Total <?php foreach($pedidos as $ped) : ?> <tr><td><?=date('d/m/y',strtotime($ped->dia))?> <td class=text-end><a href=?ControleOrcamento.inicio.<?=$ped->ped?>><?=$ped->ped?></a> <td class=text-end><?=dec($ped->total)?> <?php endforeach; ?> arquivo /Astudy/vOrcamento.php <table class='table table-striped table-sm w-50 m-auto pt-3'> <tr class="fw-semibold align-middle" style=height:40px> <td>Produto <a href=?ControleOrcamento.historico>Historico</a> <a href="?ControleOrcamento.novoPedido">Novo</a> <spam class=text-danger>Pedido <?=$vr->ped?> de <?=fmt($vr->diaped)?></spam> <td class=text-end>Qt<td>Un<td>Preço<td class=text-end>Total <?php foreach($histped as $item): ?> <tr> <td><?=$item->prod?> <td class=text-end> <form class='m-0' action=?ControleOrcamento.alteraQt method=post> <?php if($item->qt==intval($item->qt)): ?> <input name=alteraQt value='<?=$item->qt?>' onchange=submit() size=1 style=text-align:right;border:none;background:transparent> <?php else: ?> <input name=alteraqQt value='<?=dec($item->qt)?>' onchange=submit() size=1 style=text-align:right;border:none;background:transparent> <?php endif; ?> <input type=hidden name=id value=<?=$item->id?>> <input type=hidden name=ped value=<?=$item->ped?>> <input type=hidden name=unitario value=<?=$item->unitario?>> </form> <td><a href=?ControleOrcamento.excluir.<?=$item->id?>&pedido=<?=$item->ped?>><?=$item->un?></a> <td class=text-end><?=dec($item->unitario)?> <td class=text-end><?=dec($item->subtotal)?> <?php endforeach; ?> <tr > <?php if($vr->prod==""):?> <td> <form action=?ControleOrcamento.produto method=post class=m-0> <input type=submit value="Selecione um produto" autofocus> <input type=hidden name=pedido value=<?=$vr->ped?>> </form> <?php else: ?> <td><?=$vr->prod?> <?php endif; ?> <?php if(isset($_GET['pedido'])): ?> <td class=text-end> <form action=?ControleOrcamento.incluirQt method=post class=m-0> <input id=qt name=qt onchange=submit() size=1 placeholder=qt autofocus> <input type=hidden name=ped value="<?=$vr->ped?>"> <input type=hidden name=codprod value="<?=$vr->codprod?>"> <input type=hidden name=venda value="<?=$vr->venda?>"> <input type=hidden name=un value="<?=$vr->un?>"> </form> <td><?=$vr->un?><td class=text-end><?=$vr->venda?><td> <?php else: ?> <td><td><td><td> <?php endif; ?> <tr class=fw-semibold><td><td><td><td>Total<td class=text-end><?=dec($vr->total)?> </table>> arquivo /Astudy/vProduto.php <table class='table table-striped table-sm w-50 m-auto'> <tr><td><td> <form action="?ControleProduto.procurarProduto" method=post class=m-0> <input name=procura size=40 onchange=submit() autofocus> <input type=hidden name=pedido value=<?=$pedido?>> </form> <td> <tr class=fw-semibold><td>Cód<td>Descrição dos Produtos<td>Venda <?php foreach($produtos as $prod): ?> <tr><td class=text-end> <a href='?ControleProduto.selecionado.<?=$prod->codprod?>&pedido=<?=$pedido?>'> <?=$prod->codprod?></a> <td><?=$prod->prod?> <td class=text-end><?=pvenda($prod->custo,$prod->marg)?> <?php endforeach; ?>
  23. arquivo resources > views > notaFornecedor.blade.php <x-app-layout> <script>btmenu.innerHTML='Nota do Fornecedor';document.title="Nota do Fornecedor"</script> <form class="text-center" action="processaNF" method=post enctype="multipart/form-data"> @csrf <input type=file name=arquivo onchange=submit()> </form> @if($jatriz) <div class="container"> <table class="mx-auto border border-separate border-collapse"> <tr class="text-center font-medium"><td>CodForn<td>Cod<td>Produto<td>Qtdade<td>Total @foreach($jatriz as $vetor) <tr class="odd:bg-white even:bg-gray"><td class="px-4 py-2">{{$vetor->codforn}} <td class="text-right px-4 py-2"><?=$vetor->codprod?> <td class="px-4 py-2">{{$vetor->produto}} <td class="text-right px-4 py-2">{{intval($vetor->qt)}} <td class="text-right px-4 py-2">{{dec($vetor->subtotal)}} @endforeach </table> </div> @endif </x-app-layout>
  24. Escrevi um comentário, afirmando que o marcador do Blade {{ }} é diferente do <?= ?>, mas eu estava enganado. O meu erro era de digitação, assim apaguei o comentário anterior: arquivo teste.blade.php @php $parametro="Olá mundo"; @endphp <div id=div1></div> <div id=div2></div> <script> div1.innerHTML='{{$parametro}}' div2.innerHTML='<?=$parametro?>' </script>
  25. O seguinte código importa um arquivo xml, calcula o valor do produto como a soma do seu valor com o ICMS-ST, IPI e diferença de alíquota do ICMS, se houverem. Se ele não encontrar o código do produto correspondente ao do fornecedor, ele dispara um alerta 'Verificar'. Se houver diferença entre o custo anterior com o custo atual, ele avermelha o total do item, por onde o usuário pode atualizar o custo do produto, se assim desejar. Finalmente, o programa pede um número de lançamento para que ele possa encaminhar tudo para o banco de dados. Como esse programa é gratuito, não aceito reclamações. Mas se funcionar, eu aceito qualquer valor pelo pix frankhosaka@gmail.com. arquivo nota_bd.php <?php $mysqli=new mysqli("localhost","root","","diario"); if(isset($_POST['custoAtual'])){ $custoAtual=$_POST['custoAtual']; $codprod=$_POST['codprod']; $mysqli->query("update tbprod set custo=$custoAtual where codprod = $codprod"); } if(isset($_POST['lcto'])){ $lcto=$_POST['lcto']; $matriz=json_decode($_POST['matriz']); echo "aqui fica a rotina do lançamento $lcto que vai incluir os dados: "; var_dump($matriz); } arquivo notaDoFornecedor.php <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <script> function atualizar(custoAtual,custoAnterior,codprod){ confirma=confirm("Atualizar?\ncusto atual: "+custoAtual+"\ncusto anterior: "+custoAnterior) if(confirma){ xmlhttp=new XMLHttpRequest() url = "nota_bd.php" formData = new FormData() formData.append('custoAtual',custoAtual) formData.append('codprod',codprod) xmlhttp.open("POST",url,true) xmlhttp.send(formData) location.reload() } } </script> <form method=post class="w-50 m-auto" enctype="multipart/form-data"> <label for=arquivo>Escolha o arquivo XML</label> <input type=file name=arquivo required> <input type=submit> </form> <?php if(!isset($_FILES['arquivo'])){exit;} $notaFornecedor=$_FILES['arquivo']['tmp_name']; function dec($value) { return ($value) ? number_format($value,2,',','.') : null; } $mysqli=new mysqli("localhost","root","","diario"); // Carregar o arquivo XML $dom = new DOMDocument(); $dom->load($notaFornecedor); // Acessar os itens $nfe = $dom->documentElement; $itens = $nfe->getElementsByTagName('det'); // Calcula diferença de alíquota do ICMS $difAliqICMS=0; $aliquotaInterna=0.18; foreach($itens as $item){ if($item->getElementsByTagName('CFOP')->item(0)->textContent==6102){ $vBC=$item->getElementsByTagName('vBC')->item(0)->textContent; $vICMS=$item->getElementsByTagName('vICMS')->item(0)->textContent; $difAliqICMS += intval(($vBC*$aliquotaInterna - $vICMS)*100)/100; } } echo "<table class='table table-striped table-sm w-50 m-auto'>"; $vNF=$nfe->getElementsByTagName('vNF')->item(0)->textContent; $nNF=$nfe->getElementsByTagName('nNF')->item(0)->textContent; $xNome=$nfe->getElementsByTagName('xNome')->item(0)->textContent; echo "<tr class=fw-semibold><td><td><td>NF $nNF ". substr($xNome,0,4). "<td><td class=text-end>". dec($vNF); if($difAliqICMS!==0){ echo "<tr class=fw-semibold><td><td><td>Diferença de Alíquota de ICMS<td><td class=text-end>" .dec($difAliqICMS); echo "<tr class=fw-semibold><td><td><td>Total a conferir<td><td class=text-end>" .dec($difAliqICMS+$vNF); } echo "<tr class=fw-semibold><td>CodForn<td>CodProd<td>Produto<td>Qt<td class=text-end>Total"; $soma=0; $matriz=[]; foreach ($itens as $item) { // no campo codforn uso a primeira letra para identificar o fornecedor $codforn = $xNome[0] . $item->getElementsByTagName('cProd')->item(0)->textContent; $consulta=$mysqli->query("select codprod from tbprod where codforn like '%$codforn%' "); $codprod='<spam class=text-danger>Verificar</spam>'; if ($consulta->num_rows==1) { $codprod=$consulta->fetch_assoc()['codprod']; } $produto = $item->getElementsByTagName('xProd')->item(0)->textContent; $quantidade=$item->getElementsByTagName('qCom')->item(0)->textContent; if(is_numeric($codprod)){ $produtoDobrado = [510]; if(in_array($codprod,$produtoDobrado)){ $quantidade = 2 * $quantidade; } } $vICMSST = ($item->getElementsByTagName('vICMSST')->item(0)) ? $item->getElementsByTagName('vICMSST')->item(0)->textContent : null; $difAliqICMS=0; if($item->getElementsByTagName('CFOP')->item(0)->textContent==6102){ $vBC=$item->getElementsByTagName('vBC')->item(0)->textContent; $vICMS=$item->getElementsByTagName('vICMS')->item(0)->textContent; $difAliqICMS = intval(($vBC*$aliquotaInterna - $vICMS)*100)/100; } $vIPI=0; if($item->getElementsByTagName('vIPI')->item(0)){ $vIPI=$item->getElementsByTagName('vIPI')->item(0)->textContent; } $vProd = $item->getElementsByTagName('vProd')->item(0)->textContent; $valorTotal=$vProd+$vICMSST+$difAliqICMS+$vIPI; $soma += $valorTotal; $class="class='text-end'"; if(is_numeric($codprod)){ $custoAtual=intval($valorTotal/$quantidade*100)/100; $consulta=$mysqli->query("select custo from tbprod where codprod=$codprod"); $custoAnterior=$consulta->fetch_assoc()['custo']; if(abs($custoAnterior-$custoAtual)>0.02){ $class="class='text-end text-danger' onclick='atualizar($custoAtual,$custoAnterior,$codprod)'"; } } echo "<tr><td>" . $codforn; echo "<td>" . $codprod; echo "<td>" . substr($produto,0,25); echo "<td>" . intval($quantidade); echo "<td $class>" . dec($valorTotal); $matriz[]=['codpprod'=>$codprod,'qt'=>$quantidade,'subtotal'=>$valorTotal]; } ?> <tr class=fw-semibold><td><td><td>Total dos itens<td><td class=text-end><?=dec($soma)?> </table> <div class="w-50 m-auto"> Enviar tudo para o banco de dados <form action=nota_bd method=post> <input name=lcto placeholder="Número do Lançamento" required> <input type=hidden name=matriz value=<?=json_encode($matriz)?>> <input type=submit> </form> </div>
×
×
  • Criar Novo...