Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.583
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. Esse é um trabalho bem difícil, mas o máximo que eu consegui foi assim usuário (nome,codempresa) ("zé",1) ("zé",3) empresas(codempresa,empresa) (1,"Bradesco") (3,"Itaú") E a consulta ficaria assim SELECT nome,GROUP_CONCAT(empresa) FROM usuario INNER JOIN empresas on usuario.codempresa = empresas.codempresa GROUP BY nome; #resultado: zé Bradesco,Itaú Ou seja, eu consigo chegar no mesmo resultado, desde que defina um código de empresa para cada usuário. No caso do zé, eu posso cadastrar um novo banco, entrando com o nome dele e o código do novo banco, que eu acho que é bem mais fácil do que ficar editando um campo de valores múltiplos.
  2. Eu fiz uma bela abreviação (preguiça de digitar): UPDATE cadmer, inv SET cadmer.nbm = inv.ncm WHERE cadmer.Codigo = inv.Codigo; Gostei desse código, não sabia que era possível atualizar uma tabela baseado no valor de outra tabela. Bacana!
  3. Eu nunca tive esse problema com o VS Code, mas navegando pela internet encontrei matéria que fala do problema da autenticação no MySQL: mysql - Authentication plugin 'caching_sha2_password' cannot be loaded - Stack Overflow
  4. Acredito que o arquivo .php inclui o recurso do <meta charset=utf-8>, já o arquivo .html requer esse comando para o texto aparecer "aportuguesado". O problema é que eu só tenho um notebook, e não consigo enxergar o lado do cliente e o lado do servidor. Agradeço pela sua observação no fechamento dos marcadores. Em matéria de HTML eu sou um péssimo exemplo.
  5. Olá, Anna, depois que você descobriu as mutretas da sua namorada, você continuou espionando o WhatsApp da moça? Espionar a vida de outras pessoas não vale a pena, a menos que alguém pague por esse serviço.
  6. // exibe produtos comprados pelo $docto echo "<div><table class='table table-sm table-striped'>"; echo "<script>divmenu.innerHTML='Detalhes do documento $docto'</script>"; $sql = "select tbhistprod.*, tbhistprod.docto, tbprod.prod, tbprod.un, tbpessoa.pessoa from (tbhistprod inner join tbprod on "; $sql .= "tbhistprod.codprod = tbprod.codprod) inner join tbpessoa on tbhistprod.codp = tbpessoa.codp where (((tbhistprod.docto)=$docto))"; $query = $mysqli->query($sql); if (mysqli_num_rows($query)>0) { $sum=0; echo "<tr><td>Cod<td>Descrição<td>Qt<td>Un<td>Total"; While ($linha = $query->fetch_assoc()) { $id = $linha['id']; $un = "<a href=?excluir=$id>".$linha['un']."</a>"; $codprod="<a href=?corrigeitem=$id>".$linha['codprod']."</a>"; echo "<tr><td align=right>$codprod<td>".$linha['prod']."<td>".dec($linha['qt'])."<td>$un</td><td align=right>".dec($linha['custototal']); $pessoa=$linha['pessoa']; $sum=$sum+$linha['custototal'];$dia=df($linha['dia']);} echo "<tr><td><td><form action='produto'><input type='submit' value='Produto'><td><td><td></form>"; echo "<tr><td colspan=2><b>$dia $pessoa<td><td><td align='right'><b>".number_format($sum,2,',','.')."</form>";} else {echo "<tr><td><td><form action='produto'><input type=submit value='Produto'></form>";} Esse é um trecho do meu projeto Diário, onde vinculei a compra dos produtos (tbhistprod) ao docto do tbdiario. Ao invés de trabalhar com tbclientes e tbfornecedores eu fiz apenas um cadastro para os dois, chamando de tbpessoa. Ou seja, primeiro eu faço o registro contábil e uso o número desse registro para cadastrar os produtos que foram comprados. Para fazer um quadro, isso requer conhecimento em CSS, e nisso eu sou péssimo.
  7. Eu usei a minha imaginação e criei o arquivo teste.txt com o poderoso Bloco de Notas do Windows assim: 123456789012312345678901 12202210222022102211 123456789012312345678901 12202210222022102211 123456789012312345678901 12202210222022102211 123456789012312345678901 12202210222022102211 123456789012312345678901 12202210222022102211 Depois criei uma tabela teste no MySQL assim: CREATE TABLE `teste` ( `chave` varchar(13) COLLATE utf8_swedish_ci DEFAULT NULL, `cf` varchar(11) COLLATE utf8_swedish_ci DEFAULT NULL, `vazio` varchar(13) COLLATE utf8_swedish_ci DEFAULT NULL, `reg` varchar(2) COLLATE utf8_swedish_ci DEFAULT NULL, `datacad` varchar(8) COLLATE utf8_swedish_ci DEFAULT NULL, `dataalt` varchar(8) COLLATE utf8_swedish_ci DEFAULT NULL, `status` varchar(1) COLLATE utf8_swedish_ci DEFAULT NULL, `indicador` varchar(1) COLLATE utf8_swedish_ci DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci # note que não tem nenhuma chave primária, pois os exemplos que eu trabalhei tem um monte de registros repetidos. Finalmente, pedi para o MySQL importar os dados do teste.txt na tabela teste, assim set global local_infile=1; LOAD DATA LOCAL INFILE '/wamp64/www/teste.txt' INTO TABLE teste (@row) set chave=trim(substr(@row,1,13)), cf=trim(substr(@row,14,11)), vazio=trim(substr(@row,25,13)), reg=trim(substr(@row,38,2)), datacad=trim(substr(@row,40,8)), dataalt=trim(substr(@row,48,8)), status=trim(substr(@row,56,1)), indicador=trim(substr(@row,57,1));
  8. # criando tabela teste DROP TABLE IF EXISTS Teste; CREATE TABLE Teste(id serial primary key,data_inicio date, data_fim date) engine=innoDB; # inserindo alguns dados INSERT INTO Teste(data_inicio,data_fim) VALUES ('1977-12-01', '1979-10-31'), ('1979-06-04', '1981-02-17'), ('1983-06-06', '1985-01-07'), ('1987-05-01', '1988-04-30'), ('1988-01-11', '1988-01-27'); # procurando dados inconsistentes, onde data_inicio do registro atual < data_fim do anterior set @anterior=null; SELECT id, data_inicio,case when data_inicio<@anterior then 'plobrema!' end as mens, (@anterior:=data_fim) as data_fim from teste
  9. O erro está no Create Table, você pede para criar um campo id serial, ou seja, você pede para o MySQL atribuir um número sequencial para cada registro que for incorporado. Mas na hora de inserir as informações você atribui um id diferente para cada registro. O nome disso é conflito de interesses: quem vai gerar o id do registro, você ou o MySQL? Se for o MySQL, a gramática do Insert seria assim: "insert to clientes (nome, cpf, etc) values ('emanuelly','9999999','etc'). Se for você, a sintaxe do create table deveria ser assim "id primary key".
  10. Frank K Hosaka

    Inserindo colunas.

    Eu fiz o teste no MySQL Workbench assim: alter table tbfrequencia add column COLUNA1 integer, add column COLUNA2 integer, add column COLUNA3 integer e o resultado ficou assim: CREATE TABLE `tbfrequencia` ( `id` int NOT NULL AUTO_INCREMENT, `data_comparecimento` datetime DEFAULT NULL, `idAluno` int DEFAULT NULL, `COLUNA1` int DEFAULT NULL, `COLUNA2` int DEFAULT NULL, `COLUNA3` int DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci
  11. Eu não consegui montar as tabelas, usando a sua consulta. Assim, eu montei uma tabela assim: CREATE TABLE `tbfrequencia` ( `id` int NOT NULL AUTO_INCREMENT, `data_comparecimento` datetime DEFAULT NULL, `idAluno` int DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci Nessa tabela tem centenas de alunos e milhares de frequências. O problema é encontrar a última frequência de cada aluno e calcular a diferença de dias entre a última frequencia e a data de hoje: SELECT idAluno, MAX(data_comparecimento), timestampdiff(day,max(data_comparecimento),now()) as ausencia FROM tbfrequencia GROUP BY idAluno ORDER BY ausencia desc;
  12. O código Laravel está correto. O problema está no MySQL, eu tive que refazer a consulta. O balancete - MySQL - Fórum Script Brasil
  13. Frank K Hosaka

    O balancete

    Para consertar as consultas, fiz o seguinte vw_bal1 separa apenas os registros da tbdiario que fazem parte da apuração vw_bal2 soma os débitos e créditos do vw_bal1 vw_bal3 calcula o saldo anterior à apuração vw_balanço ajunta vw_bal2 e vw_bal3 Acho que essa é a única solução em qualquer banco de dados, para cálculos complexos, o melhor é fazer em partes menores e ajuntar tudo lá no final. CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `diario`.`vw_bal1` AS SELECT `diario`.`tbdiario`.`dia` AS `dia`, `diario`.`tbdiario`.`docto` AS `docto`, `diario`.`tbdiario`.`conta` AS `conta`, `diario`.`tbdiario`.`debito` AS `debito`, `diario`.`tbdiario`.`credito` AS `credito`, `diario`.`tbdiario`.`hist` AS `hist` FROM (`diario`.`tbdiario` JOIN `diario`.`tbsupervariavel`) WHERE ((YEAR(`diario`.`tbdiario`.`dia`) = `diario`.`tbsupervariavel`.`anoapurado`) AND (MONTH(`diario`.`tbdiario`.`dia`) = `diario`.`tbsupervariavel`.`mesapurado`)) ORDER BY `diario`.`tbdiario`.`dia` , `diario`.`tbdiario`.`docto` CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `diario`.`vw_bal2` AS SELECT `diario`.`vw_bal1`.`conta` AS `conta`, SUM(`diario`.`vw_bal1`.`debito`) AS `debito`, SUM(`diario`.`vw_bal1`.`credito`) AS `credito` FROM `diario`.`vw_bal1` GROUP BY `diario`.`vw_bal1`.`conta` ORDER BY `diario`.`vw_bal1`.`conta` CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `diario`.`vw_bal3` AS SELECT `diario`.`tbdiario`.`conta` AS `conta`, `diario`.`tbconta`.`descricao` AS `descricao`, (SUM(COALESCE(`diario`.`tbdiario`.`debito`, 0)) - SUM(COALESCE(`diario`.`tbdiario`.`credito`, 0))) AS `saldo` FROM ((`diario`.`tbdiario` JOIN `diario`.`tbsupervariavel`) JOIN `diario`.`tbconta` ON ((`diario`.`tbdiario`.`conta` = `diario`.`tbconta`.`conta`))) WHERE (`diario`.`tbdiario`.`dia` < `diario`.`tbsupervariavel`.`primeirodia`) GROUP BY `diario`.`tbdiario`.`conta` ORDER BY `diario`.`tbdiario`.`conta` CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `diario`.`vw_balanco` AS SELECT `diario`.`vw_bal3`.`conta` AS `conta`, `diario`.`vw_bal3`.`descricao` AS `descricao`, `diario`.`vw_bal3`.`saldo` AS `saldo`, `diario`.`vw_bal2`.`debito` AS `debito`, `diario`.`vw_bal2`.`credito` AS `credito` FROM (`diario`.`vw_bal3` LEFT JOIN `diario`.`vw_bal2` ON ((`diario`.`vw_bal3`.`conta` = `diario`.`vw_bal2`.`conta`)))
  14. Eu encontrei na internet alguns exemplos de como usar o Eloquent para trabalhar com a soma de dois campos, mas o que eu precisava mesmo era somar a soma dos dois campos. Eu consegui fazer isso no PHP, mas não consegui adaptar no Eloquent. Usando o método da tentativa e erro, a minha saída foi montar o balancete no MySQL, coisa que eu não consegui no tempo do PHP. Ontem eu escrevi nesse fórum "o balancete" no tópico do MySQL, e hoje pedi para o Laravel usar o Eloquent e botar o balancete na apresentação. A apresentação deu certo, o problema são os valores, muitos deles são bem estranhos. Ou seja, vou ter que rastrear os valores desde o MySQL até chegar no Eloquent. Mesmo assim, aqui está o meu rascunho do Controller e do balancete.blade.php, dessa vez tudo parcial, apenas os trechos "operacionais": trecho do balancete.blade.php <div class=divteste> <table class='table table-striped linha'><tr><th><th align=left> <a >{{$mesextenso}} de {{$ano}}</a> </th><th align=right>Anterior<th align=right>Débito <th align=right>Crédito<th align=right>Saldo Atual @foreach($contas as $conta) <tr><td>{{{$conta->conta}}}<td nowrap>{{{$conta->descricao}}} <td align=right>{{{dec($conta->saldo)}}} <td align=right>{{{dec($conta->debito)}}} <td align=right>{{{dec($conta->credito)}}} <td align=right>{{{dec($conta->saldo + $conta->debito - $conta->credito)}}} @endforeach trecho do diarioController public function balancete(){ $apuracoes=vw_apuracao::all()->toArray(); $tudo=tbsupervariavel::all(); $mesextenso=$tudo->value('mesextenso'); $ano=$tudo->value('anoapurado'); $contas=vw_balanco::all(); return view('balancete',['menu'=>'Balancete','mesextenso'=>$mesextenso,'ano'=>$ano],compact('apuracoes','contas'));}
  15. Frank K Hosaka

    Consulta MySQL

    Como você não passou a estrutura da tabela, eu tive que improvisar uma: CREATE TABLE `tbdizimo` ( `id` int NOT NULL, `data` date DEFAULT NULL, `oferta` float DEFAULT NULL, `ovelha` varchar(45) COLLATE utf8_swedish_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci Para saber qual foi a menor oferta e a maior oferta de cada ovelho nesses últimos três meses, eu criei a seguinte consulta: CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `astudy`.`vw_dizimo` AS SELECT `astudy`.`tbdizimo`.`ovelha` AS `ovelha`, MIN(`astudy`.`tbdizimo`.`oferta`) AS `Min`, MAX(`astudy`.`tbdizimo`.`oferta`) AS `Max` FROM `astudy`.`tbdizimo` WHERE (`astudy`.`tbdizimo`.`data` BETWEEN '2022-08-01' AND '2022-10-30') GROUP BY `astudy`.`tbdizimo`.`ovelha`
  16. Frank K Hosaka

    O balancete

    Eu estou criando um balancete no Laravel, mas eu percebi que o Controller iria ficar bem grande e difícil de manusear. Assim decidi montar o balancete no MySQL para o Laravel já pegar quase tudo mastigado. Aqui as principais tabelas e views que eu criei: CREATE TABLE `tbsupervariavel` ( `codsuper` int NOT NULL, `docto` int DEFAULT NULL, `dia` date DEFAULT NULL, `codprod` int DEFAULT NULL, `anoapurado` int DEFAULT NULL, `mesapurado` int DEFAULT NULL, `mesextenso` varchar(10) CHARACTER SET utf8 COLLATE utf8_swedish_ci DEFAULT NULL, `primeirodia` date DEFAULT NULL, `end` varchar(45) CHARACTER SET utf8 COLLATE utf8_swedish_ci DEFAULT NULL, `senha` varchar(20) CHARACTER SET utf8 COLLATE utf8_swedish_ci DEFAULT NULL, `ped` mediumint DEFAULT NULL, `codp` mediumint DEFAULT NULL, `pessoa` varchar(100) CHARACTER SET utf8 COLLATE utf8_swedish_ci DEFAULT NULL, `criterio` varchar(100) CHARACTER SET utf8 COLLATE utf8_swedish_ci DEFAULT 'null', `updated_at` datetime DEFAULT NULL, PRIMARY KEY (`codsuper`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci CREATE TABLE `tbdiario` ( `docto` mediumint NOT NULL AUTO_INCREMENT, `dia` date DEFAULT NULL, `conta` mediumint DEFAULT NULL, `debito` decimal(13,2) DEFAULT NULL, `credito` decimal(13,2) DEFAULT NULL, `hist` varchar(100) CHARACTER SET utf8 COLLATE utf8_swedish_ci DEFAULT NULL, PRIMARY KEY (`docto`), KEY `Conta_idx` (`conta`), CONSTRAINT `Conta` FOREIGN KEY (`conta`) REFERENCES `tbconta` (`conta`) ) ENGINE=InnoDB AUTO_INCREMENT=14489 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci CREATE TABLE `tbconta` ( `conta` mediumint NOT NULL, `descricao` varchar(50) CHARACTER SET utf8 COLLATE utf8_swedish_ci DEFAULT NULL, `tipoconta` varchar(10) CHARACTER SET utf8 COLLATE utf8_swedish_ci DEFAULT NULL, `ordemconta` int DEFAULT NULL, PRIMARY KEY (`conta`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `diario`.`vw_movimento` AS SELECT `diario`.`tbdiario`.`conta` AS `conta`, SUM(`diario`.`tbdiario`.`debito`) AS `debito`, SUM(`diario`.`tbdiario`.`credito`) AS `credito` FROM ((`diario`.`tbconta` JOIN `diario`.`tbdiario`) JOIN `diario`.`tbsupervariavel`) WHERE ((YEAR(`diario`.`tbdiario`.`dia`) = `diario`.`tbsupervariavel`.`anoapurado`) AND (MONTH(`diario`.`tbdiario`.`dia`) = `diario`.`tbsupervariavel`.`mesapurado`)) GROUP BY `diario`.`tbdiario`.`conta` ORDER BY `diario`.`tbdiario`.`conta` CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `diario`.`vw_anterior` AS SELECT `diario`.`tbdiario`.`conta` AS `conta`, `diario`.`tbconta`.`descricao` AS `descricao`, (SUM(COALESCE(`diario`.`tbdiario`.`debito`, 0)) - SUM(COALESCE(`diario`.`tbdiario`.`credito`, 0))) AS `saldo` FROM ((`diario`.`tbdiario` JOIN `diario`.`tbsupervariavel`) JOIN `diario`.`tbconta` ON ((`diario`.`tbdiario`.`conta` = `diario`.`tbconta`.`conta`))) WHERE (`diario`.`tbdiario`.`dia` < `diario`.`tbsupervariavel`.`primeirodia`) GROUP BY `diario`.`tbdiario`.`conta` ORDER BY `diario`.`tbdiario`.`conta` CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `diario`.`vw_balanco` AS SELECT `diario`.`vw_anterior`.`conta` AS `conta`, `diario`.`vw_anterior`.`descricao` AS `descricao`, `diario`.`vw_anterior`.`saldo` AS `saldo`, `diario`.`vw_movimento`.`debito` AS `debito`, `diario`.`vw_movimento`.`credito` AS `credito` FROM (`diario`.`vw_anterior` LEFT JOIN `diario`.`vw_movimento` ON ((`diario`.`vw_anterior`.`conta` = `diario`.`vw_movimento`.`conta`)))
  17. Frank K Hosaka

    Poppy's

    Valeu, consegui! <?php $mysqli=new mysqli("localhost","root","","astudy"); $loja=$mysqli->real_escape_string("Poppy's"); // <-------------- $query=$mysqli->query("update tbl_aposta set historico = '$loja' where num_sorte=3"); $query2=$mysqli->query("select * from tbl_aposta where num_sorte=3"); $row2=$query2->fetch_assoc(); var_dump($row2); // deu certo!
  18. Frank K Hosaka

    Poppy's

    <?php /* CREATE TABLE `tbl_aposta` ( `num_sorte` int NOT NULL, `numeros_compra` int DEFAULT NULL, `historico` varchar(45) COLLATE utf8_swedish_ci DEFAULT NULL, PRIMARY KEY (`num_sorte`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci */ $mysqli=new mysqli("localhost","root","","astudy"); $loja="Poppy's"; $query=$mysqli->query("update tbl_aposta set historico = '$loja' where num_sorte=3"); $query2=$mysqli->query("select * from tbl_aposta where num_sorte=3"); $row2=$query2->fetch_assoc(); var_dump($row2); // resultado null // 2a. tentativa $mysqli->set_charset("utf8mb3"); $query=sprintf("update tbl_aposta set historico = '$loja' where num_sorte=3",$mysqli->real_escape_string($loja)); $query2=$mysqli->query("select * from tbl_aposta where num_sorte=3"); $row2=$query2->fetch_assoc(); var_dump($row2); // resultado null Não consegui. Tem jeito de consertar?
  19. Frank K Hosaka

    Poppy's

    Hoje estava fazendo um registro contábil onde coloquei no histórico Poppy's, só que o lançamento não foi confirmado. Eu imaginei que esqueci de apertar o botão confirmar. Tentei de novo. E novamente o lançamento não foi confirmado. A minha opção foi tirar a aspa. Mas fiquei imaginando, por que posso escrever Poppy's no Facebook mas não posso escrever no meu banco de dados? O comando no MySQL seria assim update tbdiario set hist = "Poppy's" Aqui tem aspas demais. Eu não tenho como escrever: $sql="update tbdiario set hist = "Poppy's"; no PHP. Certamente o PHP iria reclamar da sintaxe, ele não saberia onde começa uma frase e onde termina a outra. Mas se eu não consigo resolver esse problema, como é que o Facebook consegue?
  20. O fontawesome é um capítulo do CSS e não deveria ser comentado no tópico do PHP, mas, no meu caso, não tive outra escolha. O PHP é um conjunto de arquivos que fica debaixo do diretório C:/wamp64/www para quem usa o Windows, como é o meu caso. E dentro do diretório do PHP é que a gente coloca as pastas CSS e JS para dar suporte aos códigos do PHP. No tempo do Font Awesome 4.7.0, bastava usar o arquivo font-awesome.min.css no diretório CSS, com o seguinte código: <link rel="stylesheet" href="css/font-awesome.min.css"> <i class="fa fa-user"></i> <i class="fa fa-lock"></i> <i class="fa fa-rocket fa-4"></i> <span class="fa-stack fa-lg pull-left"><i class="fa fa-dashboard fa-stack-1x "></i></span> <span class="fa-stack fa-lg pull-left"><i class="fa fa fa-plus fa-stack-1x "></i></span> Mas eu pensei em atualizar o Awesome, e baixei o pacote 6.2.0. Tudo mudou. Ao invés de figuras, eu só encontrei retângulos. O nome do arquivo não é mais font-awesome.min.css e sim fontawesome.min.css, mas não adiantou nada atualizar o nome do arquivo. Eu li o manual do Awesome 6.2.0 e achei muito complicado, quando só preciso de algumas figuras. Assim, eu improvisei, usei o famoso método da tentativa e erro, mas precisei mudar o perfil do diretório do PHP. Eu tirei o arquivo fontawesome.min.css do subdiretório CSS do PHP e no lugar eu coloquei all.css (que vem no pacote do 6.2.0). Eu também copiei a pasta webfonts que veio no pacote, e agora a minha pasta PHP tem três subpastas, o CSS, o JS e o WEBFONTS. Claro que eu tentei colocar o webfonts dentro do css, mas o resultado foi um desastre. E também tive que mudar o código do link, assim <link rel="stylesheet" href="css/all.css"> O CSS é bacana, mas para usar, não é fácil não!
  21. Eu tenho uma aplicação chamada balancete.php e decidi converter em Laravel. Copiei o mesmo arquivo no diretório views com o nome de balancete.blade.php, bem como criei uma rota e um método no controlador para dar vida ao código. Para não gerar erro, eu comentei o código assim <!--, ou seja, o Laravel não vai exibir nada. O método balancete que eu criei no controlador ficou assim: public function balancete(){ $apuracao=vw_apuracao::all(); return view('balancete',['menu'=>'Balancete'],compact('apuracao'));} Ao invés do Laravel mostrar uma tela em branco, ele devolveu uma enorme mensagem de erro, aqui eu vou resumir: SQLSTATE[42000]: Syntax error - SELECT list is not in GROUP BY incompatible with only_full_group_by option Para resolver o problema, usei o método da tentativa e erro. O vw_apuração é a soma de duas tabelas, a tbdiario e a tbconta. Criei um model para cada tabela, supondo que o model vw_apuração não seria suficiente para o Laravel trabalhar. Mas isso não resolveu o problema. Deixei o método da tentativa e erro de lado, e usei "only_full_group_by option Laravel" no motor de busca do Google, e ele me ofereceu essa opção: if you want to disable this in Laravel you have to change the 'strict' value to false in your database configuration in config/database.php. 'connections' => [ ... 'mysql' => [ ... 'strict' => false, ... ], ] A sugestão do Google deu certo! O melhor jeito de aprender a usar o Laravel é a tentativa e erro, mas fazer o Laravel funcionar o método Google é bem melhor.
  22. Eu usei o tutorial Laravel 9 Create Custom Helper Function in Tutorial (onlinewebtutorblog.com) e consegui criar a minha primeira função personalizada. No diretório app, criei o arquivo helpers.php assim: <?php function dec($num){return number_format($num,2,',','.');} A seguir, eu alterei o parâmetro autoload do composer.json assim: "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" },"files":["app/helpers.php"] }, Finalmente fui no painel do terminal do Visual Studio Code, e digitei o comando composer dump-load Usei a função dec num controlador, e deu tudo certo. Só a primeira função personalizada é que precisa seguir esse ritual. As outras funções podem ser acrescentadas diretamente no arquivo helpers.php. Eu fiz o teste, acrescentei uma nova função no helpers.php e ele ficou assim: <?php function dec($num){return number_format($num,2,',','.');} function deca($num){if($num==intval($num)){return $num;} else {return dec($num);}} Note que a segunda função chama a primeira função. A função dec formata preço e valores monetários no padrão brasileiro (sem o cifrão). Já a função deca formata a quantidade, se for inteiro não muda nada, se tiver ponto flutuante ele trabalha com duas casas decimais, mas usando a vírgula como ponto flutuante.
  23. <?php $loteria=[null,null,null,null,null]; $final=[1,1,1,1,1]; While($loteria<>$final){ $sorteio=rand(0,4); if(!$loteria[$sorteio]){ echo "Número sorteado $sorteio <br>"; $loteria[$sorteio]=1; } } Estudei o seu algoritmo, e acho que o problema está nessa linha: $quer = "SELECT num_sorte FROM tbl_aposta"; o correto deveria ser: $quer="select * from tbl_aposta"; Não sei como o seu algoritmo funciona, mas ele funciona! Para eu testar o seu algoritmo, eu fiz essas modificações: <?php /* mysql CREATE TABLE `tbl_aposta` ( `num_sorte` int NOT NULL, `numeros_compra` int DEFAULT NULL, PRIMARY KEY (`num_sorte`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin Testando: num_sorte=3; numeros_compra=1 */ function lottery($maxn = "49", $maxb = "6"){ $conexao=new mysqli('localhost','root','','astudy'); $maxn = 60; $new_array = array(); $quer="select * from tbl_aposta"; $query = mysqli_query($conexao, $quer); while ($query_get = mysqli_fetch_array($query)) { $new_array[] = $query_get["numeros_compra"]; srand((float) microtime() * 1000000); while (1 > 0) { do { //Aqui gera os números mas não fil $lottery[] = rand(0, $maxn); $lottery = array_unique($lottery); $new_array = array_unique($new_array);} while (in_array($lottery, $new_array)); if (sizeof($lottery) == $maxb) break;} sort($lottery); return implode(", ", $lottery);} } $lotterynums = lottery(); echo $lotterynums; exit;
  24. Finalmente, depois de muitas tentativas e erros, consegui de terminar a tradução do orcamento.php em Laravel. Aprendi muita coisa, mas principalmente o que significa controlador. Eu imaginei que o controlador fosse uma só coisa, e assim eu decidi colocar a rotina da exclusão de um item do orçamento logo no começo do controlador, mas isso gerou um erro, ele disse que não conhecia a variável total do pedido. Ou seja, o controlador chama o visualizador, mas quando o visualizador volta para o controlador, ele não encontra o mesmo controlador que começou o processo. A seguir a listagem final do meu orçamento (só do controlador e do visualizador, o resto continua igual como acima) resources.views.orcamento.blade.php ----------------------------------------------------- @include('menu') <div><table class='table table-striped'> <td><form><input type='submit' value='anterior'><input type='hidden' name='anterior' value={{$ped}}></form> <td style=color:red>Pedido {{$ped}} de {{$diaped}} <td><form><input type='submit' value='novo'><input type='hidden' name='novo' value='novo'></form></table> <form> <div><table class='table table-striped linha2'><th>Produto<th style=text-align:right>Qt<th>Un<th>Preço<th>Total @foreach($histped as $item) <tr> <td nowrap>{{$item->prod}} <td align=right> @if($item->qt==intval($item->qt)) {{$item->qt}} @else {{number_format($item->qt,2,',','.')}} @endif <td><a href=?excluir={{$item->id}}&abater={{$item->subtotal}}>{{$item->un}}</a> <td align=right>{{number_format($item->unitario,2,',','.')}} <td align=right>{{number_format($item->subtotal,2,',','.')}} @endforeach <tr> @if(!isset($_GET['produto'])) <td><input list=lsproduto name=produto placeholder=produto onchange=qt.focus() size=40> <datalist id='lsproduto'> @foreach($prod as $pr) <option value='{{$pr->prod}}'> @endforeach </datalist> @else <td>{{$orcamento['produto']}} @endif @if(!isset($_GET['qt'])) <td><input id=qt name=qt onchange=submit() size=1 placeholder=qt> @endif <tr><td> @if(empty($codp)) <a href=pessoa>Selecione um cliente</a> @else <details> <summary>{{$pessoa}}</summary> Endereço {{$end}} <br> CNPJ {{$cnpj}} <br> Telefone {{$tel}} <br> Nota {{$nota}} <br> <a href=pessoa>Mudar cliente</a> <br> <a href=pessoa?codp={{$codp}}>Atualizar cliente</a> </details> @endif <td><td><td><td><b>{{$totalped}} </table> </div> app.Http.Controllers.diarioController.php ------------------------------------------------------- <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use App\Models\tbsupervariavel; use App\Models\tbpedido; use App\Models\tbpessoa; use App\Models\vw_histped; use App\Models\tbprod; use App\Models\tbhistped; Use helper; class diarioController extends Controller { public function index(request $request) { $senhadb=tbsupervariavel::where('codsuper',1)->value('senha'); $senha=$request->input('senha'); $menu="Menu"; if($senha==1045){$request->session()->put('senha','parcial');return view('menu',['menu'=>$menu]);} if($senha==$senhadb){$request->session()->put('senha','completa'); return view('menu',['menu'=>$menu]);} if(empty($senha)){$mensagem="";} else {$mensagem="Senha incorreta";} return view('index',['mensagem'=>$mensagem]); } public function orcamento(request $request){ $ped=tbsupervariavel::where('codsuper',1)->value('ped'); if($request->input('anterior')){ $ped=$request->input('anterior'); $ped--;if($ped==0){$ped=1;} tbsupervariavel::where('codsuper',1)->update(['ped'=>$ped]);} if($request->input('novo')){ $ultimo=tbpedido::select()->orderBy('ped','desc')->first()->toArray(); if($ultimo['total']){ $ped=$ultimo['total']+1; dd($ped); tbpedido::insert(['ped'=>$ped,'dia'=>now()]); tbsupervariavel::where('codsuper',1)->update(['ped'=>$ped]);} else {$ped=$ultimo['ped'];} } $collectionA=collect(['menu'=>'Orçamento','ped'=>$ped]); tbsupervariavel::where('codsuper',1)->update(['end'=>'orcamento']); $detalhe=tbpedido::where('ped',$ped)->get()->toArray(); $codp=$detalhe[0]['codp']; $diaped=date('d/m/Y',strtotime($detalhe[0]['dia'])); $totalped=$detalhe[0]['total'];$vwtotalped=number_format($totalped,2,',','.'); $collectionB=collect(['codp'=>$codp,'diaped'=>$diaped,'totalped'=>$vwtotalped]); if($request->input('excluir')){ $id=$request->input('excluir'); $abater=$request->input('abater'); tbhistped::find($id)->delete(); $totalped-=$abater; tbpedido::where('ped',$ped)->update(['total'=>$totalped]); return redirect('orcamento');return "id $id abater $abater"; } $pessoa=tbpessoa::where('codp',$codp)->get()->toArray(); $histped=vw_histped::where('ped',$ped)->get(); if($codp){$pessoa1=$pessoa[0];}else{$pessoa1=["falta"=>"definir"];} $collectionC=collect($pessoa1); $prod=tbprod::orderBy('prod')->get(); $merged=$collectionA->merge($collectionB)->merge($collectionC); $merged=$merged->all(); $produto=$request->input('produto'); $qt=$request->input('qt'); if($qt){ $qt=str_replace(',','.',$qt); $qt=round($qt,2); $precoa=tbprod::where('prod',$produto)->get()->toArray(); if(!$precoa){ return "<h2>O produto <i>$produto</i> não existe, por favor selecione o produto corretamente</h1> <p> <input type=button value=entendi onclick=location.replace('orcamento')>";} $preço=$precoa[0]['custo']; $un=$precoa[0]['un']; $codprod=$precoa[0]['codprod']; $total=round($preço*$qt,2); tbhistped::insert(['ped'=>$ped,'codprod'=>$codprod,'un'=>$un,'unitario'=>$preço,'subtotal'=>$total,'qt'=>$qt]); $totalped+=$total; tbpedido::where('ped',$ped)->update(['total'=>$totalped, 'dia'=>now()]); return redirect('orcamento'); } else { $preço=null; $total=null; $un=null; } $orcamento=['produto'=>$produto,'qt'=>$qt,'un'=>$un,'preço'=>$preço,'total'=>$total]; return view('orcamento',$merged,compact('histped','prod','orcamento'));} }
  25. Eu sou do tempo do Fortran, onde usávamos variáveis mnemônicas do tipo i e j, e assim dei o nome de tbprod para a tabela de produtos, mas o artigo está certo. Quanto melhor o nome que você dá aos bois mais fácil é identificar o boi que está tumultuando a entrada e saída do curral. "O problema é que idéias novas são fáceis de entender, o problema é esquecer as velhas" (John Maynard Keynes).
×
×
  • Criar Novo...