
Frank K Hosaka
Membros-
Total de itens
1.623 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
listagem de diretório com link pra visualização ordenado.
pergunta respondeu ao alexandrefnit de Frank K Hosaka em PHP
Comigo esse código traz tudo em ordem alfábetica. -
Faz quase duas semanas que eu encontrei um valor nulo no banco de dados, onde eu não esperava. No PHP, eu tinha o seguinte código: $vendido=date('Y-m-d'); $horavenda=date('Y-m-d H:i'); $query=$mysqli("update tbpedido set vendido='$vendido', 'horavenda'=$horavenda" where ped=2023); Não há como passar um valor nulo nessas condições. Depois de duas semanas, é que eu lembrei que o meu irmão tem acesso ao meu projeto Laravel, que basicamente é um xerox do projeto PHP. Mas não é. No controller eu encontrei isso: $vendido=date('Y-m-d H:i'); tbpedido::where('ped',2023)->update(['vendido'=>$vendido]); Ou seja, no Laravel eu esqueci de definir o valor da hora da venda, e foi assim que o banco de dados ficou com o valor nulo. Outro erro bastante grave é o princípio da atomicidade. Data da venda e hora da venda é a mesma coisa no mundo do banco de dados, não há porque ter dois campos para mostrar o mesmo valor. Para separar data da hora, isso dá para fazer com o comando: data da venda = date('d/m/Y',strtotime($vendido)) e hora da venda = date('H:i',strtotime($vendido)). Mesmo assim, estou contente por ter encontrado um erro em apenas duas semanas. Geralmente eu gastava vários meses.
-
Ontem, eu recebi uma mensagem de erro nesse código: <?php $pedidos=[["id"=>1,"total"=>2.00,"data"=>"2023-07-27"], ["id"=>2,"total"=>10.00,"data"=>null], ["id"=>3,"total"=>5.00,"data"=>"2023-07-27"]]; echo "relatório de orçamentos <br><table><th>Pedido<th>Total<th>Data"; foreach($pedidos as $pedido){ echo "<tr><td>".$pedido['id']."<td>".$pedido['total']. "<td>".date('d/m/y',strtotime($pedido['data']));} // Deprecated: strtotime(): Passing null to parameter #1 ($datetime) // of type string is deprecated in C:\wamp64\www\astudy\index.php on line 8 Não descobri como apareceu o valor null na variável data. Para contornar o problema, eu tentei usar try {$dia=date('d/m/y',strtotime($pedido['data']));} catch (Exception $e){$dia="problema";} Não deu certo, a tela ficou com outras mensagens de erro. Assim, eu fiz outra gambiarra: <?php $pedidos=[["id"=>1,"total"=>2.00,"data"=>"2023-07-27"], ["id"=>2,"total"=>10.00,"data"=>null], ["id"=>3,"total"=>5.00,"data"=>"2023-07-27"]]; echo "relatório de orçamentos <br><table><th>Pedido<th>Total<th>Data"; foreach($pedidos as $pedido){ if($pedido['data']!==null){ $dia=date('d/m/y',strtotime($pedido['data']));} else { $dia="problema";} echo "<tr><td>".$pedido['id']."<td>".$pedido['total']. "<td>$dia";} e o relatório vai aparecer no final dessa mensagem. Ou seja, eu cai na segunda lei de Murphy, onde "a pressa é a inimiga da programação".
-
<?php $texto='{"parentesco":"mãe","apelido":"moça"}'; $jtexto=json_decode($texto); // só funciona se o json for válido echo $jtexto->parentesco."<br>"; // mãe echo $jtexto->apelido; // moça $novo_texto = preg_replace(array("/(á|à|ã|â|ä)/","/(Á|À|Ã|Â|Ä)/","/(é|è|ê|ë)/", "/(É|È|Ê|Ë)/","/(í|ì|î|ï)/","/(Í|Ì|Î|Ï)/","/(ó|ò|õ|ô|ö)/","/(Ó|Ò|Õ|Ô|Ö)/", "/(ú|ù|û|ü)/","/(Ú|Ù|Û|Ü)/","/(não)/","/(não)/"), explode(" ","a A e E i I o O u U n N"),$texto); echo $novo_texto; // {"parentesco":"mae","apelido":"moça"} Note que não foi tirado o cedilha da moça. Eu fiz isso de propósito, para você entender a função preg_replace do PHP
-
Hahahaha... eu li um pouco sobre API e tudo indica que esse recurso é para quem usa a hospedagem com o WordPress, onde você pode baixar o WP-CLI, e acessar os dados do site Word-Press, sem precisar usar o navegador. O meu plano é de pobre. Não dá para brincar com o Laravel e nem tem API nenhuma. O único jeito é rezar para você encontrar alguém aqui que ganha mais de R$ 1.320,00 por mês e que tenha experiência com Word Press e também tenha disposição para ajudá-lo. Milagre é difícil de acontecer, mas sempre existe uma possibilidade. Enquanto isso, use o seu domínio para compartilhar o PHP, pelo menos é isso que eu faço.
-
Hahahaha... agora, consegui ver onde está o problema. Eu nunca usei uma API no hospedeiro. Eu não tenho nenhuma experiência nessa área. Eu lembro que apanhei muito quando estudei JavaScript, foi quase um ano apanhando, até aprender a montar um código em PHP que devolvesse os dados em json para o JavaScript jogar na tela. Eu desconfio que o raciocínio é o mesmo. O problema é ver quem manda as informações para o API ou ver como ele chega lá, se é que chega.
-
Eu também sou novato na hospedagem. Eu queria usar o Laravel, mas eu não posso usar o comando npm na hospedagem tipo site do Hostinger. Quanto ao PHP, eu nunca tive problema. A minha sugestão agora é mudar o teste.php, assim: <?php $mysqli=new mysqli("localhost","userNameNoDominio","SenhaNoDominio","NomeDoBancoDeDadosNoDominio"); $query=$mysqli->query("select * from users"); $rows=$query->fetch_all(); var_dump($rows); e boa sorte, mas o mais importante é ver se você consegue abrir o banco de dados sem a ajuda do PHP, na rotina do gerenciador de banco de dados do hospedeiro.
-
Esse é o código do teste.blade.php, onde uso o dialeto do Blade (o botão Modal) e o dialeto do Tailwinds (o modal na forma do título do texto): @vite(['resources/css/app.css', 'resources/js/app.js']) <pre class="w-1/2 mx-auto my-20"> O embaixador da União Europeia no Brasil, Ignacio Ybañez, refuta a ideia apresentada pelo presidente Luiz Inácio Lula da Silva de que democracia seja um conceito relativo. Ele faz questão de criticar a ditadura da Venezuela, aliada do governo brasileiro. “Para nós, a democracia não é relativa. Democracia existe ou não existe. Na Venezuela, não existe democracia. No Brasil, existe”, afirma o diplomata em entrevista à Coluna. “Eleições e o respeito aos direitos humanos são elementos essenciais na democracia. E isso não é cumprido na Venezuela”. </pre> <x-primary-button class="absolute left-80 ml-6" onclick="modal.className='absolute top-10 left-80 ml-6 bg-blue-700'"> {{ __('Modal') }} </x-primary-button> <div id=modal class=hidden onclick="modal.className='hidden'"> <h1 class=text-3xl>Democracia relativa</h1> </div> Esse é um código que eu consegui na base da tentativa e erro, eu queria alinhar o título do texto com o texto, mas o máximo que o Tailwind permitia era deslocar o título a 80 pixels a partir da margem esquerda ("left-80"). Para conseguir mais pixels, eu fiz uma gambiarra, eu usei o recurso margem esquerda assim "ml-6". Mas para isso funcionar, eu preciso usar o comando npm run dev ou npm run build, o que eu consigo fazer aqui no meu computador local. Esse não é o caso lá no Hostinger, a hospedagem do site que aluguei por R$ 23,00 por mês não permite usar o comando npm. Logo, o máximo que eu consegui hospedar no Hostinger foi um Laravel bem básico, ou seja, ele não tem o Breeze, o Blade do Breeze e muito menos o projeto Chirp. O meu Laravel no Hostinger é basicamente um xerox do projeto que eu fiz no PHP. Eu coloquei o CDN do Bootstrap no arquivo menu.php e carrego esse arquivo nos outros códigos. Para resolver o meu problema, eu só preciso mudar de plano, mudar para a hospedagem VPS. Eu não tenho a menor ideia de como o VPS funciona. Uma coisa é digitar npm aqui no computador local e outra bem diferente é digitar o comando lá no servidor. Antes de mudar de plano, estou estudando o Tailwind por aqui, até eu me sentir 2% seguro com um novo dialeto do CSS.
-
Vamos por parte. Crie um arquivo chamado teste.php no diretório c:/wamp64/www, e escreva somente "olá mundo", e salve o arquivo se você não usar o VS Code. Vá no navegador, e escreva localhost/teste.php - você ainda vê error 500?
-
Relatório com totais das formas de pagamento
pergunta respondeu ao Nilson Alvarenga de Frank K Hosaka em Repositório de Scripts - PHP
Estudei o Codeigniter e para fazer a sua tarefa, comecei pelo MySQL, mudei ele assim: CREATE TABLE `vendas` ( `id` int NOT NULL AUTO_INCREMENT, `data` date DEFAULT NULL, `venda` float DEFAULT NULL, `forma_de_pagamento` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; INSERT INTO `vendas` VALUES (37,'2023-07-01',15,'Dinheiro'),(38,'2023-07-02',10,'Dinheiro'), (39,'2023-07-03',25,'Dinheiro'),(40,'2023-07-04',25,'Cartão de Débito'), (41,'2023-07-05',20,'Cartão de Débito'),(42,'2023-07-06',40,'Cartão de Débito'), (43,'2023-07-07',20,'Cartão de Crédito'),(44,'2023-07-07',20,'Cartão de Crédito'), (45,'2023-07-08',20,'Cartão de Crédito'); e o Codeigniter ficou assim: app > Config > Routes.php ... use App\Controllers\Vendas; $routes->get('vendas',[Vendas::class,'index']); app > Controllers > Vendas.php <?php namespace App\Controllers; use App\Models\venda_model; class Vendas extends BaseController { public function index(){ $model=model(venda_model::class); $data=['vendas'=>$model->getVendas('2023-07')]; return view('vendas',$data);} } app > Models > venda_model.php <?php namespace App\Models; use CodeIgniter\Model; class venda_model extends Model { protected $table='vendas'; public function getVendas($data_agora){ return $this->select('sum(venda) as somavenda') ->select('forma_de_pagamento') ->where('data >=', "$data_agora-01") ->where('data <=', "$data_agora-31") ->groupBy('forma_de_pagamento')->findAll();} } app > Views > vendas.php <h1>Relatório de Vendas</h1> <table><th>Forma de Pagamento<th>Venda <?php foreach($vendas as $venda){ ?> <tr><td><?=$venda['forma_de_pagamento']?><td><?=$venda['somavenda']?> <?php } ?> E ele ficou assim: -
Alguém aqui tem um celular dobrável com S Pen?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Eu pedi ajuda no Laracasts, e um rapaz me orientou a ler sobre Join no MySQL. Assim ao invés de fazer três consultas, dá para fazer tudo com apenas uma consulta, assim: select a.dia, a.lcto, a.contad, a.contac, a.valor, a.hist, b.descricao as descd, c.descricao as descc from tbdiario a join tbconta b on a.contad = b.conta join tbconta c on a.contac = c.conta order by docto limit 10 -
Eu estudei um pouco de HTML no w3schools, e lá aprendi que muitos elementos do HTML têm o atributo title, e com ele é possível ver uma notificação, quando você passa o mouse sobre o elemento; pensando nisso, eu criei o seguinte código em PHP: <meta name="viewport" content="width=device-width, initial-scale=1.0"> <?php // tbdiario (docto,lcto,dia,contad,contac,valor,hist) // tbconta (conta,descricao) $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select * from tbdiario limit 10"); $rows=$query->fetch_all(MYSQLI_ASSOC); echo "<table><th>Lcto<th>Débito<th>Crédito<th>Valor"; foreach($rows as $row){ $dia=$row['dia'];$lcto=$row['lcto'];$debito=$row['contad']; $credito=$row['contac'];$valor=$row['valor'];$hist=$row['hist']; $query2=$mysqli->query("select descricao from tbconta where conta=$debito"); $descD=$query2->fetch_assoc()['descricao']; $query3=$mysqli->query("select descricao from tbconta where conta=$credito"); $descC=$query3->fetch_assoc()['descricao']; echo "<tr><td title='$dia'>$lcto <td title='$descD'>$debito <td title='$descC'>$credito <td title='$hist'>$valor";} No notebook o programa funciona. Mas na hora de testar no celular, eu levei um susto, eu recebi a mensagem de que o Apache não permite o meu celular acessar a rede local. Eu fui lá no httpd-vhosts, e alterei a redação de 'Require local' para 'Require all granted'. Mesmo com acesso local, o meu S Pen do Note 10 (ele é um celular bem antigo e não é dobrável) não conseguiu fazer as notificações aparecerem. Eu encontrei um mouse com porta USB-C, mas as notificações não apareceram no celular. A Samsung está vendendo o ZFold4 por R$ 11.000,00 - já imaginou eu comprar um trem desse, e as notificações não aparecerem por lá? Mudando de assunto, note que no meu código tem três consultas no MySQL. Eu gosto do PHP devido a essa versatilidade, você não precisa se preocupar com "chave externa", "relacionamento" e "referência integral", ou seja, você pode fazer o que você quiser com o MySQL dentro do PHP. O problema é quando aparecer uma vaga na turma do MySQL e o examinador pedir para mostrar a conta devedora e a conta credora com as suas respectivas descrições. Eu não tenho a menor ideia de como fazer isso.
-
Que coisa boa! Encontrei um tópico no fórum Laracasts que me ensinou como usar o Collections do Laravel: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbdiario; use App\Models\tbsupervariavel; use Auth; class DiarioController extends Controller { public function extrato(Request $request) { if($request->input('dia')){ tbsupervariavel::where('codsuper',Auth::id())->update(['dia'=>$request->input('dia')]);} $dia=tbsupervariavel::where('codsuper',Auth::id())->value('dia'); $extrato=tbdiario::where('dia',$dia)->get(); $somad=$extrato->sum(function($ext){if($ext->contad){return $ext->valor;}}); $somac=$extrato->sum(function($ext){if($ext->contac){return $ext->valor;}}); return view('diario',compact('extrato'),['somad'=>$somad,'somac'=>$somac]);} }
-
Em 2020 comecei a estudar o PHP, e lá eu conheci o mysqli que o PHP usa para trabalhar com o banco de dados do MySQL. Em 2022 comecei a estudar o Laravel, e lá eu conheci o Eloquent, ele faz a mesma coisa que o mysqli do PHP mas usa uma gramática bem mais robusta, uma verdadeira obra de arte. O problema é: quantas vezes eu posso usar o mysqli ou o Eloquent? Como eu apanho muito para trabalhar com vetores, eu pedi para o mysqli ou o Eloquent olhar três vezes o banco de dados, uma vez para consultar os lançamentos do dia, outra vez para somar os débitos daquele dia e mais uma vez para consultar a soma dos créditos daquele dia. Eu acordei de madrugada, e decidi estudar os vetores do PHP, e lá vi array_sum, array_filter, array_column. Foram várias tentativas e erros e nenhuma deu certo, mas finalmente consegui achar uma solução: <?php // tbdiario (docto,lcto,dia,contad,contac,valor,historico) // docto : auto_increment, primary_key $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select * from tbdiario where dia='2023-07-22'"); $extrato=$query->fetch_all(MYSQLI_ASSOC); $debito=[]; $credito=[]; foreach($extrato as $key=>$sub){ if($sub['contad']){$debito[]=$sub['valor'];} if($sub['contac']){$credito[]=$sub['valor'];}} var_dump(array_sum($debito),array_sum($credito)); E no Laravel, ficou assim: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbdiario; use App\Models\tbsupervariavel; use Auth; class DiarioController extends Controller { public function extrato(Request $request) { if($request->input('dia')){ tbsupervariavel::where('codsuper',Auth::id())->update(['dia'=>$request->input('dia')]);} $dia=tbsupervariavel::where('codsuper',Auth::id())->value('dia'); $extrato=tbdiario::where('dia',$dia)->get(); $debito=[]; $credito=[]; foreach($extrato->toArray() as $key=>$sub){ if($sub['contad']){$debito[]=$sub['valor'];} if($sub['contac']){$credito[]=$sub['valor'];}} $somad=array_sum($debito); $somac=array_sum($credito); return view('diario',compact('extrato'),['somad'=>$somad,'somac'=>$somac]);} } Se alguém sugerir usar a função soma no Collections do Laravel, eu tentei por dois anos e não consegui.
-
Dessa vez deu certo! Consegui colocar o Teste3 debaixo da barra de navegação, o código completo do Teste3 segue adiante, o nome do arquivo é diario.blade.php, onde também consegui encontrar a classe "ps-5" do dialeto TailwindCSS, e com ele consegui afastar a coluna Valor da coluna Histórico que estava muito grudada um do outro. <x-app-layout> <script>mensagem.innerHTML="Lançamentos do dia {{$extrato[0]->dia}}"</script> <table class="w-1/2 mx-auto"> <th class="text-left">Lçto<th colspan=2 class=text-left>Contas <th>Valor<th class="text-left ps-5">Histórico @foreach($extrato as $lcto) <tr class="even:bg-white"><td>{{$lcto->lcto}} <td>{{$lcto->contad}}<td>{{$lcto->contac}} <td class="text-right">{{$lcto->valor}} <td class=ps-5>{{$lcto->hist}} @endforeach </table> </x-app-layout>
-
O meu primeiro teste não deu certo. O meu erro é que eu não vi que haviam dois itens na primeira linha. Tive que fazer a conversão Laravel -> PHP e consegui esse código: <script src="https://cdn.tailwindcss.com"></script> <div class="min-h-screen bg-gray-100"> <nav class="w-1/2 h-10 mx-auto bg-white border-b border-gray-100"> <div class="flex justify-between h-10"> <div>Teste1a</div> <div>Teste1b</div> </div> <div id=mensagem class="bg-gray-300">Teste2</div> </nav> Teste3 </div> Para colocar o Teste3 debaixo do Teste2, tirei o "h-10" do TailwindCSS do <nav>. Vamos ver se dessa vez vai dar certo lá no Laravel.
-
O portal do Laravel oferece o projeto Chirps com dois dialetos, o Blade e o Inertia. O Inertia é para quem domina o JavaScript com o dialeto do Vue ou React, e o Blade é para quem não domina nada, esse é o meu caso. Eu montei um código onde escrevi Teste1, Teste2 e Teste3. Eu esperava que um viesse debaixo do outro, mas no final o Teste3 ficou na mesma altura do Teste2. A pergunta mais óbvia é: como compartilhar o meu problema com o Script Brasil? A minha única saída foi transformar os arquivos layouts>app.blade.php e layouts>navigation.blade.php e transformar o meu problema em socorro.php: <script src="https://cdn.tailwindcss.com"></script> <div class="min-h-screen bg-gray-100"> <nav class="w-1/2 h-10 mx-auto bg-white border-b border-gray-100"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div class="flex justify-between h-10"> Teste1 </div> </div> <div id=mensagem class="bg-gray-300">Teste2</div> </nav> Teste3 Consegui reduzir o problema em apenas dois: o HTML e o dialeto TailwindCSS. Como eu não domino nenhum dos dois, usei o famoso método da tentativa e erro, ou seja, eu tirei o marcador <div> mais próximo do Teste1. E assim consegui colocar o Teste3 debaixo do Teste2, isso no PHP. Espero conseguir o mesmo resultado lá no Laravel.
-
Ajuda em algoritmo e chartjs - página php
pergunta respondeu ao alternativo em de Frank K Hosaka em Tutoriais & Dicas - PHP
Eu coloquei os seguintes dados na master_table (id,tipo_peca,valor_defeito,tipo_defeito,classifica): (1,1,1,1),(2,2,2,2),(3,3,3,3) e o nível de defeito deu -178%,5% e 225%, e o JavaScript desenhou um monte de triângulos. O primeiro problema é a tabela. Vamos supor que a fábrica produz 1000 parafusos redondos e 1000 parafusos quadrados, e o pessoal do Controle e Qualidade encontrou 999 parafusos redondos com defeito mais 999 parafusos quadrados com defeitos, e eles classificaram 998 parafusos redondos como inúteis e 997 parafusos quadrados como inúteis, 1 parafuso redondo como recuperável e 2 parafusos quadrados como recuperáveis. Como colocar essa informação na tabela? Mesmo com tantos parafusos com tantos defeitos, o maior nível de defeito é 100%, logo essa equação tem problema: $defeitoLevel = (($row['nc_count']) / $row['total'] - $row['na_count']) * 0.025 + (($row['pc_count']) / $row['total'] - $row['na_count']) * 0.75 + (($row['fc_count']) / $row['total'] - $row['na_count']) * 1; $defeitoColor = ''; if ($defeitoLevel >= 0 && $defeitoLevel <= 0.3) {$defeitoColor = '#f5b7b1';} elseif ($defeitoLevel > 0.3 && $defeitoLevel <= 0.6) {$defeitoColor = ' #f7dc6f';} elseif ($defeitoLevel > 0.6 && $defeitoLevel <= 0.85) {$defeitoColor = '#58d68d';} elseif ($defeitoLevel > 0.85 && $defeitoLevel <= 1) {$defeitoColor = '#5dade2';} Tem um erro de digitação nesse código, você escreveu $defeitoNivel ao invés de $defeitoColor logo na primeira linha. Essa equação também é utilizada para alimentar os dados no JavaScript. Para testar o seu código, eu fiz algumas simplificações: <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <?php $conn=new mysqli("localhost","root","","laravel"); $sql="SELECT tipo_peca, COUNT(valor_defeito) AS total, SUM(CASE WHEN classifica = 1 THEN valor_defeito ELSE 0 END) AS na_count, SUM(CASE WHEN classifica = 2 THEN valor_defeito ELSE 0 END) AS nc_count, SUM(CASE WHEN classifica = 3 THEN valor_defeito ELSE 0 END) AS pc_count, SUM(CASE WHEN classifica = 4 THEN valor_defeito ELSE 0 END) AS fc_count FROM master_table GROUP BY tipo_defeito"; $result = $conn->query($sql); ?> <main> <h1>Dashboard</h1> <?php if ($result->num_rows > 0) { echo "<table> <th>Tipo_peca<th>Total<th>NaoAplica<th>Minimo<th>Grande<th>Inutilizável<th>Nível-%"; while ($row = $result->fetch_assoc()) { $defeitoLevel = (($row['nc_count']) / $row['total'] - $row['na_count']) * 0.025 + (($row['pc_count']) / $row['total'] - $row['na_count']) * 0.75 + (($row['fc_count']) / $row['total'] - $row['na_count']) * 1; $defeitoColor = ''; if ($defeitoLevel >= 0 && $defeitoLevel <= 0.3) {$defeitoColor = '#f5b7b1';} elseif ($defeitoLevel > 0.3 && $defeitoLevel <= 0.6) {$defeitoColor = ' #f7dc6f';} elseif ($defeitoLevel > 0.6 && $defeitoLevel <= 0.85) {$defeitoColor = '#58d68d';} elseif ($defeitoLevel > 0.85 && $defeitoLevel <= 1) {$defeitoColor = '#5dade2';} $defeitoLevel = round($defeitoLevel * 100); echo "<tr><td>" . $row['tipo_peca'] . " <td>" . $row['total'] . " <td>" . $row['na_count'] . " <td>" . $row['nc_count'] . " <td>" . $row['pc_count'] . " <td>" . $row['fc_count'] . " <td style='background-color: $defeitoColor; text-align: center;'>" . $defeitoLevel . "%";} echo "</table>";} else {echo "Nenhum registro encontrado";} $conn->close();?> <canvas id="radarChart"></canvas> <script> labels = [ <?php $result->data_seek(0); while ($row = $result->fetch_assoc()) { echo "'" . $row['tipo_peca'] . "',";} ?> ]; data = {labels: labels, datasets: [{label: 'Defeito Level', data: [ <?php $result->data_seek(0); while ($row = $result->fetch_assoc()) { $complianceLevel = (($row['nc_count']) / $row['total'] - $row['na_count']) * 0.025 + (($row['pc_count']) / $row['total'] - $row['na_count']) * 0.75 + (($row['fc_count']) / $row['total'] - $row['na_count']) * 1; echo $defeitoLevel . ",";} ?> ], backgroundColor: 'rgba(179, 181, 198, 0.2)', borderColor: 'rgba(179, 181, 198, 1)', pointBackgroundColor: 'rgba(179, 181, 198, 1)', pointBorderColor: "#fff", pointHoverBackgroundColor: "#fff", borderWidth: 8}]}; options = {scale: {angleLines: {color: 'black'}, ticks: {display: true,beginAtZero: true,min: 0,max: 100}}, plugins: {title: {display: true,text: 'Defeito Level', font: {size: 18}}}} ctx = document.getElementById('radarChart').getContext('2d'); new Chart(ctx, {type: 'radar',data: data,options: options}); </script> -
-
No ano passado, eu desisti de usar o <input list>. Ele é um dos recursos mais bacanas do HTML, mas eu não sabia como diferenciar a opção do que foi escolhido com o que foi digitado. Vamos supor que no banco de dados eu tenho limao e limão, mas o safado do usuário colocava laranja. Todo o meu código ficava travado, tudo porque a laranja não estava previsto no banco de dados, e assim não havia como fazer o orçamento. Hoje eu tive a brilhante ideia de como contornar o safado do usuário, eu coloquei um espaço na lista de opções. Agora eu sei quando o usuário escolheu uma opção ou inventou coisa que não foi previsto: <script> function ver(value){ escolhido.value="";digitado.value="" if(value[0]==" "){escolhido.value=value} else {digitado.value=value} ipfruta.value=""} </script> <?php $bd=["limão"=>2,"limao"=>1]; ?> <input list=fruta id=ipfruta onchange=ver(value)> <datalist id=fruta> <?php foreach($bd as $key=>$value){ echo "<option value=' $key $value'>";} ?> </datalist> <p>Escolhido<input id=escolhido></p> <p>Digitado<input id=digitado></p>
-
Eu não consigo capturar a tela do Windows, eu queria mostrar todas as extensões necessárias para o PHP abrir o banco de dados, pelo menos eu sei que o pdo-mysql e o mysqli tem que estar selecionado. No Wampserve eu clico no ícone, vou em PHP, e de lá vejo as extensões. Ah lembrei que eu tenho um celular:
-
Eu uso WampServe. Para acessar o banco de dados MySQL, eu uso MySQL Workbench ou o PhpMyAdmin. Você não consegue acessar nem pelo PhpMyAdmin?
-
Hoje eu pedi ajuda para o Bard para escrever 'olá mundo' pelo CodeIgniter, mas o exemplo que ele apresentou apresenta uma nova classe com uma nova gramática que não tenho no projeto atual. Ainda não conheço nenhum dialeto do CodeIgniter. O mesmo problema enfrentei com o Laravel, até a semana passada eu só conhecia o dialeto blade. Nessa semana eu conheci o dialeto Inertia. O código que Bard mostrou para mim foi esse <?php if (!defined('BASEPATH')) { exit('No direct script access allowed');} class Home extends CI_Controller { public function index() { $this->load->view('welcome_message');} } Esse código não funciona no meu projeto do CodeIgniter, pois eu não tenho a classe CI_Controller, mas eu achei bacana a redação "$this->load->view()". A minha esperança é um dia escrever um código semelhante, o máximo que eu consegui até agora é escrever "return 'olá mundo'";
-
Foi no fórum DevMedia é que vi um comentário sobre o Codeigniter (CodeIgniter4 User Guide — CodeIgniter 4.3.6 documentation) e assim descobri que em 2020 foi criado um novo framework para o PHP. Enquanto o Laravel ocupa 115 mb, já o CodeIgniter só ocupa 17 mb. É um framework ultraleve. Mas o tutorial é pouco amigável. Eu usei o pouco que eu sei de PHP e Laravel para testar o CodeIgniter. Eu fui na pasta C:/wamp64/www e lá executei o comando composer create-project codeigniter4/appstarter codeigniter. Para testar no navegador, eu usei esse comando localhost/codeigniter/public - isso vai forçar o WampServe abrir o arquivo index.php que está nessa pasta.
-
Ontem eu vi o projeto Chirp do Laravel, mas dessa vez eu usei o caminho do Inertia/Vue, ele é completamente diferente do Blade, mas ambos terminam com a sofisticada rotina de notificação. O Chirp tem muita coisa para ensinar, e o máximo que eu consegui aprender é pegar as informações do <form> e mandar direto para o banco de dados para acrescentar ou editar. O Chirp tenta ensinar a autenticar e validar os dados, isso eu ainda não aprendi, mas o projeto Chirp é muito bacana, onde só você pode acrescentar, editar ou deletar as mensagens que são suas. A dos outros, você não pode fazer nada disso. Eu não consegui testar a rotina de notificação, pois ele pede para conectar o PHP no serviço de email, e isso eu ainda não sei fazer. O máximo que eu consegui com o PHP foi colocar o orçamento na tela do navegador. Agora estou pensando em pedir para o PHP transformar as informações da tela do navegador em pdf, pegar o número do celular do cliente e o mandar o pdf pelo WhatsApp. Alguém aqui já viu alguém tentando fazer essa mágica com o PHP ou Laravel?