Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.590
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. As duas tabelas não respeitam o princípio da atomicidade, cada tabela deveria guardar apenas um tipo de informação. Ninguém é capaz de dizer qual a diferença do depart_cod da tabela user do depart_cod da tabela regras. O nome disso é ambiguidade, duas tabelas diferentes apresentam informações diferentes, e assim fica difícil fazer o banco de dados funcionar. Para fazer as tabelas funcionarem no mundo do banco de dados é preciso informar qual a relação que existe entre as tabelas. O que a tabela user tem a ver com a tabela regras? Geralmente a chave primária de uma tabela é a chave de referência em outra tabela, e assim é possível impor a intregridade referencial. Sendo assim, não dá para tirar nada dessas tabelas senão informações que você não quer tipo: select idview, coduser from user, regras where user.depart_cod=regras.depart_cod; 26 1 27 30 select idview, coduser from user, regras where user.cargos_cod=regras.cargos_cod; 28 30 27 30 30 40 30 44 select idview, coduser from user, regras where user.funcoes_cod=regras.funcoes_cod 28 30 No nosso mundo, usuário é uma coisa, regra é outra coisa. O usuário tem nome, documento de identidade e endereço eletrônico. Regra é uma imposição, tipo "só quem tem mais de 18 anos pode ver Netflix". Nesse caso, é possível consultar o banco de dados, verificar o documento de identidade, e listar todos os usuários que nasceram antes de 2004. No seu caso, apenas uma tabela basta, o user, além do nome, documento de identidade, endereço eletrônico, você pode acrescentar uma credencial, que vai de 1 até 3. As regras são definidas fora do banco de dados, do tipo PHP <?php $idusuario=$_GET['idusuario']; $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select idusuario, credencial from tbusuario where idusuario=$idusuario"); $credencial=$query->fetch_assoc( )['credencial']; if($credencial==1){echo "você pode ver Sessão da Tarde";} if($credencial==2){echo "você pode ver Vale a Pena Ver de Novo";} if($credencial==3){echo "você pode ver Netflix";}
  2. Encontrei matéria do skip-grant-tables nesse endereço: privileges - How to start MySQL with --skip-grant-tables? - Stack Overflow mas, pelo visto, você não tem problema em acessar o MySQL. Eu uso o WampServe e com o PHP consigo compartilhar o MySQL na rede local e a internet. Agora compartilhar o MySQL através da rede, isso é novidade para mim. A pergunta é como as pessoas acessavam o banco de dados na rede anterior. Eu sinceramente só sei usar o navegador e o PHP para acessar o MysQL, ou seja, tudo é controlado pelo WampServe.
  3. Eu tentei procurar a diferença nos lançamentos contábeis através dessa consulta: select dia, (sum(case when contad>0 then valor else 0 end) - sum(case when contac>0 then valor else 0 end)) as diferença from tbdiario group by dia E ele me retornou uma tabela com um monte de datas quase todas com a diferença zero. Eu precisava mesmo só das datas onde a soma dos débitos não bate com a soma dos créditos. Tentei colocar a clásula "where diferença != 0", e o MySQL reclamou que não conhecia a coluna diferença. Então montei uma consulta da consulta assim: select dia, diferença from (select dia, (sum(case when contad>0 then valor else 0 end) - sum(case when contac>0 then valor else 0 end)) as diferença from tbdiario group by dia) where diferença != 0 E assim eu recebi a mensagem 1248. Consultando o Google, tudo o que deveria fazer é criar um apelido para a sub-consulta, assim: select dia, diferença from (select dia, (sum(case when contad>0 then valor else 0 end) - sum(case when contac>0 then valor else 0 end)) as diferença from tbdiario group by dia) as QueCoisa where diferença != 0
  4. Eu nunca usei o textarea. Hoje foi a minha primeira vez: <?php if(isset($_GET['teste'])){ $texto=$_GET['teste']; echo $texto;} ?> <form> <label for="teste">O que você acha do fórum?</label><p> <textarea id="teste" name="teste" rows="5" cols="83"> </textarea> <input type=submit> </form>
  5. Eu consegui montar os checkbox e destacar num painel à parte o que foi escolhido. Para salvar o que foi escolhido em outra tabela, precisava de mais informação. Isso vai parecer um orçamento e o checkbox vai atrapalhar ao invés de ajudar. O orçamento vai contemplar o que foi escolhido bem como a quantidade do que foi escolhido (nesse caso, ao invés de trabalhar com checkbox é mais negócio trabalhar com datalist). <?php /* mysql -> TABLE `tbprato` (`idprato` int NOT NULL AUTO_INCREMENT, `nome` varchar(45), PRIMARY KEY (`idprato`)) ENGINE=InnoDB AUTO_INCREMENT=1 (arroz, feijão, ovo) */ $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select * from tbprato"); echo "escolha as opçoes <br>"; while($rows=$query->fetch_assoc()){ $prato=$rows['nome']; echo "<input type=checkbox name='prato[]' value=$prato onchange=ver()>$prato</input><br>";} ?> <script> function ver(){ escolhidos=document.getElementsByName('prato[]') tamanho=escolhidos.length painel.innerHTML="Os pratos escolhidos foram <p>" for(i=0;i<=tamanho;i++){ if(escolhidos[i].checked){ painel.innerHTML+=escolhidos[i].value+"<p>"}}} </script> <div id=painel style=position:fixed;left:200;margin:2px;top:0;background:lightgray;padding:20;border-style:ridge></div>
  6. [Resolvido] Peguei um monitor que estava encostado, conectei no notebook com um multi adaptador HDMI-USB-USB C - USB C, configurei o Windows para Estender estes vídeos, inclusive acertei a posição dos monitores (o monitor na esquerda e o notebook na direita), e assim uso o monitor para o Visual Studio Code e o notebook para o MySQL Workbench. Não preciso mais do papel e caneta!
  7. Já faz três meses que estou tentando consertar o banco de dados que inventei em 1990. Já mudei o método três vezes mas com resultados bem ruins, e eu gastei e gasto muito papel e caneta. Apesar do trabalho ser improdutivo e bem chato, vou aprendendo a lidar com as gambiarras da lógica. Por exemplo, o lançamento contábil não pode ter valor nulo, mas como o banco de dados é meu, o que me impede de criar um lançamento contábil de valor nulo? No MySQL posso escrever algo do tipo "update tbdiario set valor=$valor", o probema é que o MySQL não consegue executar esse comando se a variável $valor não for definida ou se for nulo. Para contornar esse problema, eu uso a gramática do PHP, onde posso atribuir um texto para uma variável numérica, tipo "if(is_null($valor)){$valor='null';}" - isso não faz o menor sentido, mas o MySQL aceita essa aberração. Já o problema do papel e caneta, isso eu não tenho a menor ideia de como resolver. Eu uso dois programas: o Visual Studio Code e o MySQL Workbench. Eu preciso do papel e da caneta porque eu simplesmente não consigo colocar os dois programas lado a lado. Hoje eu lembrei que tenho quatro cursores (flecha para direita, flecha para esquerda, flecha para cima e flecha para baixo). Sempre tentei usar {Windows}+{flecha para direita}, e hoje tentei usar {Windows}+{flecha para baixo}, mas não deu certo: o MySQL Workbench não é compatível com o Windows. Existe outra maneira de ver o banco de dados, ele usa o navegador, o nome do programa é PhpMyAdmin. Ele é perfeitamente compatível com o Windows, mas a janela para montar a consulta é tão pequena e ilegível que é mais negócio usar papel e caneta e se conformar com o MySQL Workbench.
  8. Como eu não entendo nada de futebol, eu criei duas tabelas: CREATE TABLE `tbjogos` ( `idjogo` int NOT NULL AUTO_INCREMENT, `time_a` varchar(45) COLLATE utf8_swedish_ci DEFAULT NULL, `time_b` varchar(45) COLLATE utf8_swedish_ci DEFAULT NULL, `gols_a` int DEFAULT NULL, `gols_b` int DEFAULT NULL, PRIMARY KEY (`idjogo`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci dados utilizados: 1,Remo,CDMI,1,1 2,Paysandu,CDMI,1,4 3,Remo,Paysandu,2,0 ---------------------------------------------------------------------------------- CREATE TABLE `tbtimes` ( `idtime` varchar(45) COLLATE utf8_swedish_ci NOT NULL, PRIMARY KEY (`idtime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci dados utilizados: CDMI Paysandu Remo Para ver todo o campeonato, usando cada time como referência, usei o view vw_placar CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `vw_placar` AS SELECT `tbtimes`.`idtime` AS `idtime`, `tbjogos`.`time_a` AS `time_a`, `tbjogos`.`time_b` AS `time_b`, `tbjogos`.`gols_a` AS `gols_a`, `tbjogos`.`gols_b` AS `gols_b`, POSICAO(`tbtimes`.`idtime`, `tbjogos`.`time_a`, `tbjogos`.`time_b`, `tbjogos`.`gols_a`, `tbjogos`.`gols_b`) AS `status` FROM (`tbtimes` JOIN `tbjogos`) WHERE ((`tbtimes`.`idtime` = `tbjogos`.`time_a`) OR (`tbtimes`.`idtime` = `tbjogos`.`time_b`)) ORDER BY `tbtimes`.`idtime` resultado: CDMI Remo CDMI 1 1 e CDMI Paysandu CDMI 1 4 v Paysandu Paysandu CDMI 1 4 d Paysandu Remo Paysandu 2 0 d Remo Remo CDMI 1 1 e Remo Remo Paysandu 2 0 v Finalmente, para ver a posição de cada time, usei o view vw_posição CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `vw_posicao` AS SELECT `vw_placar`.`idtime` AS `idtime`, COUNT(`vw_placar`.`idtime`) AS `jogos`, SUM(IF((`vw_placar`.`status` = 'v'), 1, 0)) AS `vitoria`, SUM(IF((`vw_placar`.`status` = 'd'), 1, 0)) AS `derrota`, SUM(IF((`vw_placar`.`status` = 'e'), 1, 0)) AS `empate` FROM `vw_placar` GROUP BY `vw_placar`.`idtime` resultado: CDMI 2 1 0 1 Paysandu 2 0 2 0 Remo 2 1 0 1 Ao invés de fazer update de uma tabela eu achei melhor fazer um view. Esqueci, para tudo isso funcionar, eu precisei criar a função posição: CREATE DEFINER=`root`@`localhost` FUNCTION `posicao`(itime varchar(45), time_a varchar(45), time_b varchar(45), gols_a int, gols_b int) RETURNS char(1) CHARSET utf8mb3 COLLATE utf8_swedish_ci BEGIN if gols_a = gols_b then return 'e'; elseif gols_a > gols_b and itime = time_a then return 'v'; elseif gols_a > gols_b and itime = time_b then return 'd'; elseif gols_a < gols_b and itime = time_a then return 'd'; elseif gols_a < gols_b and itime = time_b then return 'v'; end if; END
  9. Excelente solução, no final não foi usado nenhuma procedure e nem o function, mesmo assim a sintaxe é bem difícil. Eu apelo tudo para o PHP.
  10. Ok, entendi. Como eu não sei qual é a chave primária das tabelas, eu não tenho como lhe ajudar. Sinto muito.
  11. Esse banco de dados está comprometido, ele não respeita o princípio da atomização, e assim não há como obter nenhuma informação dele. O princípio da atomização reza que cada tabela deve conter um tipo de informação. A tabela Docs informa que existem 3 idDocs, a 100, 101 e 102. A tabela Regras informa que existem 9 idDocs, a 100 do Departamento 0, a 100 do Departamento 1, a 100 do Departamento 2, a 101 do Departamento 0, a 101 do Departamento 1, a 101 do Departamento 2, a 102 do Departamento 0, a 102 do Departamento 1 e a 102 do Departamento 2. Ou seja, as tabelas Docs e Regras estão em conflito, um dos dois está errado, ou os dois estão errados. Para impor qualquer tipo de regra no banco de dados, você precisa respeitar as regras do banco de dados, do tipo respeitar o princípio da atomização, sem falar da chave primária da tabela bem como o tipo de dados que eles usam.
  12. É como eu disse, eu não sou bom nessa área, eu mudei a função para CREATE DEFINER=`root`@`localhost` FUNCTION `classi_res`(P1 int, P2 int) RETURNS varchar(1) CHARSET utf8mb3 COLLATE utf8_swedish_ci DETERMINISTIC BEGIN IF P1 > P2 THEN RETURN 'v'; ELSEIF P1 < P2 THEN RETURN 'd'; ELSEIF P1 = P2 THEN RETURN 'e'; END IF; END Para testar a função, eu executei esse comando: update tab_sub07 set RES=classi_res(P1,P2) O resultado deu certo, mas eu recebi a advertência de que estou usando um character set deprecated. Isso eu ainda não sei como resolver.
  13. Eu não sou bom com functions e procedures do MySQL. Eu usei o método da tentativa e erro até criar a função no painel dos objetos, assim: DELIMITER // CREATE FUNCTION classi_res (P1 INT,P2 INT, RES CHAR(1)) RETURNS char(1) CHARSET utf8mb4 DETERMINISTIC BEGIN SET P1= (SELECT P1 FROM tab_sub07); SET P2 = (SELECT P2 FROM tab_sub07); IF P1 > P2 THEN UPDATE tab_sub07 SET RES = 'v'; ELSEIF P1 < P2 THEN UPDATE tab_sub07 SET RES = 'd'; ELSEIF P1 = P2 THEN UPDATE tab_sub07 SET RES = 'e'; END IF; RETURN (0); END// DELIMITER ; Pelo que eu vi no Google, a função é utilizada dentro de um select. Boa sorte.
  14. Eu fiz o teste por aqui com o PHP e o Laravel e os dois só conseguem enxergar a pasta definida pelo Apache, no meu caso, o que estiver dentro de C:\wamp64\www\. A seguir a configuração do Apache: # Virtual Hosts httpd-vhosts.conf <VirtualHost *:80> ServerName localhost ServerAlias localhost DocumentRoot "${INSTALL_DIR}/www" <Directory "${INSTALL_DIR}/www/"> Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride All Require local Require ip 192.168.0 </Directory> </VirtualHost>
  15. CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `vw_bal1` AS SELECT `tbconta`.`conta` AS `conta`, COALESCE((SUM((CASE WHEN (`tbdiario`.`contad` = `tbconta`.`conta`) THEN `tbdiario`.`valor` ELSE 0 END)) - SUM((CASE WHEN (`tbdiario`.`contac` = `tbconta`.`conta`) THEN `tbdiario`.`valor` ELSE 0 END))), 0) AS `saldo` FROM ((`diario`.`tbsupervariavel` JOIN `tbconta`) LEFT JOIN `tbdiario` ON (((`tbconta`.`conta` = `tbdiario`.`contad`) AND (`tbdiario`.`dia` < `diario`.`tbsupervariavel`.`primeirodia`)))) GROUP BY `tbconta`.`conta` ORDER BY `tbconta`.`conta` Eu levei o dia inteiro para montar esse view, ele dá o saldo inicial do balancete. Ele funciona para todos os períodos de apuração, menos para o primeiro período de apuração. Eu pensei que o LEFT JOIN já resolvia o problema, mas não resolve não. Com a ajuda do Google, consegui encontrar a dica de como fazer o LEFT JOIN funcionar. Ele disse que para tirar a cláusula WHERE e no lugar colocar a cláusula AND como está no código acima.
  16. Encontrei uma solução bem complicada nesse endereço: Como fazer um download de arquivo para o servidor com php Laravel - Stack Overflow em Português A minha sugestão é tentar fazer o download usando o PHP e depois incorporar no Laravel.
  17. Desde 1990 o meu conhecimento em SQL é precário. Naquela época, eu sabia que o lançamento contábil era formado pelos campos (contad, contac, valor), mas eu não tinha a menor ideia de como transformar o valor em débito e crédito. Então, eu apelei para a gambiarra. Mudei a estrutura do lançamento para (conta,debito,credito). Só em 2022 é que eu tive a coragem de fazer a coisa certa. Agora, o problema é como separar o valor em débito e crédito. Hoje eu consegui encontrar um tutorial de como fazer um balancete nesse endereço: MySQL, Banco de Dados | SALDO DE DEBITO E CREDITO NO MESMO REGISTRO - MYSQL - Fórum DevMedia, tentei adaptar aqui no meu projeto, mas eu não consegui. Eu sou péssimo em SQL, mas usando o terminal do MySQL Workbench, finalmente eu consegui separar o valor do débito e crédito, graças a Deus: select contad, contac, (case when contad>0 then valor end) debito, (case when contac>0 then valor end) credito from tbdiario; Em 1990, eu não teria a menor chance de criar um código desses. Nem em 2022. Tudo depende da sorte de encontrar o tutorial e entendê-lo.
  18. Hahahahahaha... muito obrigado mesmo, eu pensei que estava usando um editor imprestável.
  19. Eu recebi muitas mensagens de erro de sintaxe no VS Code na hora que fui testar o seu primeiro Array. Ele ficou assim: <?php $array=Array ( [0] => Array ( "estab" => 2, "serie" => "OC", "numero" => 56834, "seqItem" => 1, "item" => 56834, "descricao" => "MOSAIC - 20.00.20", "qtd" => 12, "grupo" => 24002, "descricaoGrupo" => "FERTILIZANTES CONVENCIONAIS", "dataProgramada" => "10-11-22", "dataInclusao" => "01-11-22", "obs" => null) ); As chaves são aspadas, as chaves e os valores são separados por vírgulas, a chave e o valor sempre vem em par (nunca vem sozinho como acontece com [obs] do seu exemplo). Que editor de texto você usa?
  20. Eu encontrei uma resposta afirmando que o Brasil tem 5.570 cidades em 2016, outra afirma que o Brasil tem 5.565 cidades em 2022, e no Wikipedia eu encontrei 5568 cidades. Todas elas estão aqui: <?php // fonte: https://pt.wikipedia.org/wiki/Lista_de_munic%C3%ADpios_do_Brasil // salvei no diretorio c:\wamp64\www\astudy\municipios.html $municipios=file_get_contents("municipios.html"); $pos0=0; for($i=1;$i<=5568;$i++){ $pos1=strpos($municipios,"<li>",$pos0); $pos1a=strpos($municipios,"title",$pos1); $pos1b=strpos($municipios,">",$pos1a)+1; $pos1c=strpos($municipios,"<",$pos1b); $pos2=strpos($municipios,"</li>",$pos1); echo substr($municipios,$pos1b,$pos1c-$pos1b); echo " => "; echo substr($municipios,$pos1c+6,2); echo "<br>"; $pos0=$pos2;}
  21. Achei a solução: <?php $text = "Afonso Cláudio"; echo utf8_decode($text);
  22. Encontrei na internet uma lista com todas as cidades do Brasil nesse endereço: https://gist.githubusercontent.com/zerobugs-oficial/53d692e5bec98d4b805dc5501dd5b157/raw/b9c4d0f538a83d5abf2d07d901055059fd20f442/cidades_estados_brasil.sql Mas ao invés de Maranhão, encontrei Maranhão. Tentei usar o editor de texto para tentar salvar como UTF-8 ou ANSI, mas nada mudou. Tentei usar o comando PHP htmlspecialchars_decode("Maranhão"); mas nada mudou. Alguém tem algum truque legal que transforme texto estranho em menos estranho?
  23. astudy.php -------------------------------------------------- <?php function tentativa($texto){ $tamanhopadrao=strlen("2020-05-26"); $tamanho=strlen($texto); $texto=substr($texto,0,$tamanho-$tamanhopadrao); $novotamanho=strlen($texto); if(strpos($texto,"Palavras")==35) {return substr($texto,43,$novotamanho);} if(strpos($texto,"coisa")==43) {return substr($texto,48,$novotamanho);} } $texto1="Qualquer texto de qualquer tamanho.Palavras65.00002020-05-26"; $texto2="Qualquer texto de qualquer tamanho.Qualquercoisa127.00002020-05-26"; $teste1=tentativa($texto1); $teste2=tentativa($texto2); echo "$teste1 $teste2";
  24. O que eu consegui entender é que se trata de um orçamento. No meu projeto, tenho o seguinte código: <?php $menu="Orçamento"; require 'menu.php'; echo "<script>document.title='Orçamento'</script>"; // abrir o pedido pela tbsupervariavel echo "<div><table class='table table-striped'>"; $query=$mysqli->query("select ped from tbsupervariavel"); $row=$query->fetch_assoc(); $ped = $row['ped']; echo "<td><form method='post'><input type='submit' value='anterior'><input type='hidden' name='anterior' value=$ped></form>"; echo "<td><font color=red>Pedido $ped "; $query=$mysqli->query("update tbsupervariavel set end='orcamento.php'"); $query=$mysqli->query("select * from tbpedido where ped=$ped"); $row=$query->fetch_assoc(); $diaped = df($row['dia']); $total = dec($row['total']); $codp = $row['codp']; echo "de $diaped"; echo "<td><form method='post'><input type='submit' value='novo'><input type='hidden' name='novo' value=$ped></form></table></div>"; if (empty($codp)) { $java='<a onclick=location.replace("pessoa.php")>Mudar de Cliente</a>'; $dados = "<a href='pessoa.php'>Selecione um cliente</a>"; $pessoa = $dados; echo "<script>pessoadiv.innerHTML='$java'</script>"; } else { $query=$mysqli->query("select * from tbpessoa where codp=$codp"); $row=$query->fetch_assoc(); $pessoa=$row['pessoa']; $end=$row['end']; $cnpj=$row['cnpj']; $tel=$row['tel']; $nota=$row['nota']; $java1='location.replace("pessoa.php")'; $java2='inpg.value='.$codp.';inpg.name="detalhe";frmg.action="pessoa.php";frmg.submit()'; $dados="<details><summary><b>$pessoa</b></summary>Endereço:<b> $end</b>" ."<br>CNPJ CPF: <b>$cnpj</b><br>Telefone:<b> $tel</b><br>Nota:<b> $nota</b>" ."<br><font color=red><a onclick=$java1>Mudar de Cliente</a>" ."<br><font color=red><a onclick=$java2>Atualizar Cliente</a>" ."</details>";} // atualizar produto selecionado if (isset($_GET['atualizar'])){ $codprod = $_GET['atualizar']; $query=$mysqli->query("update tbsupervariavel set codprod=$codprod"); header("location:detalheproduto.php");} //pedido novo if (isset($_POST['novo'])) { $query=$mysqli->query("select * from tbpedido order by ped desc"); $row = $query->fetch_assoc(); $ultped = $row['ped']; $query=$mysqli->query("update tbsupervariavel set ped = $ultped"); $total = $row['total']; if ($total>0){ $dia=date('Y-m-d'); $ultped = $ultped + 1; $query=$mysqli->query("insert into tbpedido (ped,dia) values ($ultped,'$dia')"); $query=$mysqli->query("update tbsupervariavel set ped = $ultped");} echo "<script>location.replace('orcamento.php');</script>";} //pedido anterior if (isset($_POST['anterior'])){ if ($ped > 1) { $ped=$ped-1; $query=$mysqli->query("update tbsupervariavel set ped=$ped"); echo "<script>location.replace('orcamento.php');</script>";}} //rotina para excluir item do pedido if (isset($_POST['excluir'])) { $id = $_POST['excluir']; $query=$mysqli->query("delete from tbhistped where id=$id"); $query=$mysqli->query("select sum(subtotal) as total from tbhistped where ped = $ped"); $total = $query->fetch_assoc()['total']; if (empty($total)) {$total=0;} else {$total=round($total,2);} $query=$mysqli->query("update tbpedido set total = $total, dia = '".date('Y-m-d')."' where ped = $ped"); echo "<script>location.replace('orcamento.php')</script>";} //detalhes do pedido atual echo "<div><table class='table table-striped linha2'><th>Produto<th>Qt<th>Un<th>Preço<th>Total"; $sql="select tbhistped.id,tbhistped.ped, tbhistped.codprod, tbhistped.qt as qt, tbhistped.unitario as unitario, tbhistped.subtotal,"; $sql.="tbprod.prod as prod, tbprod.un as un "; $sql.="from tbhistped inner join tbprod on tbhistped.codprod = tbprod.codprod and tbhistped.ped = $ped order by tbhistped.id"; $query = $mysqli->query($sql); while ($row = $query->fetch_assoc()) { $un = $row['un']; $id = $row['id']; $un = "<a href='#' onclick='excluir($id)'>$un</a>"; echo "<tr><td>".$row['prod']."<td align=right>".dec($row['qt'])."<td>$un<td align=right>".dec($row['unitario']); echo "<td align=right>".dec($row['subtotal']); } //incluir item no pedido (frontend) if (isset($_POST['inclusao'])) { $prod=$_POST['inclusao']; $query = $mysqli->query("select * from tbprod where prod='$prod'"); if($query==false){header('orcamento.php');} $row=$query->fetch_assoc(); $codprod=$row['codprod']; $custo = $row['custo']; $margem = $row['marg']; $custo = pvenda($custo,$margem); // calculo do preço de venda echo "<tr><td>".$row['prod']."</td><td>"; echo "<form method='post'><input name='qt' autocomplete=off id='inpqt' size='2' >"; echo "<input type='hidden' name='codprod' value=$codprod>"; echo "<input type='hidden' name='unitario' value=$custo>"; echo "<input type='hidden' name='ped' value=$ped></td><td>".$row['un'].""; echo "</td><td align=right>$custo</td></td>"; echo "<tr><td>$dados</form></table></div>"; echo "<script>inpqt.focus()</script>";} else { $query1=$mysqli->query("select prod from tbprod order by prod"); $java="inpg.name='inclusao';inpg.value=value;frmg.submit()"; echo "<tr><td><input type=text id=inproduto list=produto onchange=$java placeholder=produto autofocus>"; echo "<datalist id='produto'>"; while($row1=$query1->fetch_assoc()) { $prod=$row1['prod']; echo "<option>$prod</option>";} echo "</datalist><tr><td>"; echo "$dados"; echo "<td><td><td><td><b>".$total.'</table></div>';} //incluir item no pedido (backend) if (isset($_POST['qt'])) { $qt=deca($_POST['qt']); $codprod = $_POST['codprod']; $unitario = deca($_POST['unitario']); $subtotal = round($qt * $unitario,2); $ped = $_POST['ped']; $query=$mysqli->query("insert into tbhistped (ped,qt,codprod,unitario,subtotal) values ($ped,$qt,$codprod,$unitario,$subtotal)"); $query=$mysqli->query("select sum(subtotal) as total from tbhistped where ped = $ped"); $total = $query->fetch_assoc()['total'];$total=round($total,2); $query=$mysqli->query("update tbpedido set total = $total, dia = '".date('Y-m-d')."' where ped = $ped"); echo "<script>location.replace('orcamento.php')</script>";} ?>
  25. Foi em 2020 que comecei a estudar o PHP. Naquela época usava o Notepad+ para editar o código PHP e o navegador para testar o código. Em 2022, comecei a estudar o Laravel (é um novo tipo de PHP, com nova gramática, e força você codificar em pelo menos três partes separadas, o controlador, o visualizador e o roteador). O Laravel mudou tudo, a começar pelo editor de código, substitui o Notepad+ pelo Visual Studio Code. Tem muita coisa que eu consegui fazer no PHP mas não consegui fazer no Laravel. Para resolver isso, eu tive que melhorar o banco de dados. Na hora que eu tentei otimizar o banco de dados é que eu percebi que ele tem um gigantesco erro de lógica, ele não respeita a definição de lançamento contábil. Então, decidi deixar o Laravel de lado e comecei a consertar o banco de dados, com a ajuda de uma caneta, um papel e uma calculadora. Percebi que estava escrevendo a mesma coisa e fazendo o mesmo tipo de cálculo, então eu comecei a codificar em PHP. Para testar o PHP, eu usei o navegador. E o meu notebook ficou com três janelas abertas, um no MySQL, outro no PHP (Visual Studio) e outro no navegador, isso é janela demais! Eu pensei: que bom seria se eu pudesse trabalhar em apenas uma janela! Hoje eu decidi usar o comando Executar > Executar sem depuração, e eu recebi a resposta do código PHP na janela Console de Depuração do Visual Studio. Para deixar o MySQL de lado, só preciso melhorar o código PHP para que o PHP olhe para mim o que acontece lá no banco de dados. Esse Visual Studio Code é bom demais!
×
×
  • Criar Novo...