
Frank K Hosaka
Membros-
Total de itens
1.674 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
O projeto portaria - Google Drive contém vírus. Sem ele não dá apresentar o meu projeto alternativo, onde tentei achar uma solução para o problema do relatório da portaria. É uma pena.
-
O meu irmão mandou um WhatsApp reclamando que não conseguia entrar no projeto PHP pelo tablet e nem pelo celular, disse que recebeu a mensagem 403. Entrei no portal da Hostinger, e fui até a pasta public_HTML, e a única coisa que eu achei de estranho é o arquivo .htacess, fiz uma cópia de segurança no meu notebook, e deletei. O projeto PHP voltou no ar. Eu fui testar o projeto em Laravel, um se chama laravel e outro teste, ambos estavam acessíveis. Ainda não sei o que é esse .htacess, o que encontrei dentro dele foi isso: RewriteEngine On RewriteRule ^$ http://127.0.0.1:80/ [P,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://127.0.0.1:80/$1 [P,L]
-
Finalmente, eu consegui terminar a tradução do meu projeto em PHP para Laravel. Tudo o que eu precisava era criar uma classe no Laravel. O Laravel não permite criar uma classe dentro de outra classe. Eu tentei colocar num arquivo chamado Helpers.php, mas o Laravel não aceitou. O único jeito foi criar um controller, assim: php artisan make:controller vr Eu queria chamar a minha classe de var, mas o Laravel também não deixa. A seguir a listagem da classe vr, o controller do orçamento e seu respectivo blade: vr.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class vr extends Controller { public $ped; public $diaped; public $totalped; public $codp; public $pessoa; public $end; public $cnpj; public $tel; public $nota; public $codprod; public $prod; public $un; public $preço; public function getPed(){return $this->ped;} public function getDiaped(){return $this->diaped;} public function getTotalPed(){return $this->totalped;} public function getCodp(){return $this->codp;} public function getPessoa(){return $this->pessoa;} public function getEnd(){return $this->end;} public function getCNPJ(){return $this->cnpj;} public function getTel(){return $this->tel;} public function getNota(){return $this->nota;} public function getCodprod(){return $this->codprod;} public function getProd(){return $this->prod;} public function getUn(){return $this->un;} public function getPreco(){return $this->preço;} } ------------------------------------------------------------------ OrcamentoController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; 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 Auth; class OrcamentoController extends Controller { public function orcamento(request $request){ $vr=new vr(); if($request->input('qt')){ $qt=$request->input('qt'); if($qt!=0){ $qt=fmt($qt); $texto=$request->input('texto'); $vetor=explode(",",$texto); $preço=$vetor[0]; $codprod=tbsupervariavel::where('codsuper',Auth::id())->value('codprod'); $ped=$vetor[1]; $un=$vetor[2]; $subtotal=$qt*$preço; tbhistped::create(['ped'=>$ped,'codprod'=>$codprod,'un'=>$un,'unitario'=>$preço,'subtotal'=>$subtotal,'qt'=>$qt]); $total=tbhistped::where('ped',$ped)->sum('subtotal'); tbpedido::where('ped',$ped)->update(['total'=>$total]);}} if($request->input('excluir')){ $id=$request->input('excluir'); $ped=$request->input('pedido'); tbhistped::destroy($id); $total=tbhistped::where('ped',$ped)->sum('subtotal'); tbpedido::where('ped',$ped)->update(['total'=>$total]);} if($request->input('produto')){ $produto=$request->input('produto'); $tamanho=strlen($produto); $posicao=strpos($produto,":"); $vr->codprod=substr($produto,$posicao+1,$tamanho-$posicao); tbsupervariavel::where('codsuper',Auth::id())->update(['codprod'=>$vr->codprod]); $produto=tbprod::where('codprod',$vr->codprod)->first(); $vr->prod=$produto->prod; $vr->un=$produto->un; $vr->preço=pvenda($produto->custo,$produto->marg);} if($request->input('anterior')){ $ped=$request->input('anterior'); if($ped>0){$ped--;} tbsupervariavel::where('codsuper',Auth::id())->update(['ped'=>$ped]);} if($request->input('novo')){ $pedido=tbpedido::orderBy('ped','desc')->first(); if($pedido->total!=0){ $pedido->ped++; tbpedido::create(['ped'=>$pedido->ped,'dia'=>now()]);} tbsupervariavel::where('codsuper',Auth::id())->update(['ped'=>$pedido->ped]);} tbsupervariavel::where('codsuper',Auth::id())->update(['end'=>'orcamento']); $vr->ped=tbsupervariavel::where('codsuper',Auth::id())->value('ped'); $vr->diaped=tbpedido::where('ped',$vr->ped)->value('dia'); $vr->totalped=tbpedido::where('ped',$vr->ped)->value('total'); $vr->codp=tbpedido::where('ped',$vr->ped)->value('codp'); if($vr->codp){ $pessoa=tbpessoa::where('codp',$vr->codp)->first(); $vr->pessoa=$pessoa->pessoa; $vr->end=$pessoa->end; $vr->cnpj=$pessoa->cnpj; $vr->tel=$pessoa->tel; $vr->nota=$pessoa->nota;} $histped=vw_histped::where('ped',$vr->ped)->get(); $prod=tbprod::orderBy('prod')->get(); return view('orcamento',compact('vr','histped','prod'));} } --------------------------------------------------------------------------------- orcamento.blade.php @include('menu') <script>document.title="Orçamento" btmenu.innerHTML='Barraca do Frank<br>Esquina da Magazine Luiza' </script> <div><table class='table table-striped'> <td><form><input type='submit' value='anterior'><input type='hidden' name='anterior' value={{$vr->ped}}></form> <td style=color:red>Pedido {{$vr->ped}} de {{dbr($vr->diaped)}} <td><form><input type='submit' value='novo'><input type='hidden' name='novo' value='novo'></form></table> <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 {{dec($item->qt)}} @endif <td><a href=?excluir={{$item->id}}&pedido={{$item->ped}}>{{$item->un}}</a> <td align=right>{{dec($item->unitario)}} <td align=right>{{dec($item->subtotal)}} @endforeach <tr> @if(!isset($_GET['produto'])) <td> <form> <input list=lsproduto name=produto placeholder=produto onchange=submit() size=40> <datalist id='lsproduto'> @foreach($prod as $pr) <option value='{{$pr->prod}} :{{$pr->codprod}}'> @endforeach </datalist> </form> @else <td>{{$vr->prod}} @endif @if(!isset($_GET['qt'])) <td align=right> <form> <input id=qt name=qt onchange=submit() size=1 placeholder=qt autofocus> <input type=hidden name=texto value="{{fmt($vr->preço)}},{{$vr->ped}},{{$vr->un}}"> </form> <td>{{$vr->un}}<td>{{$vr->preço}} @endif <tr><td> @if(empty($vr->codp)) <a href=pessoa>Selecione um cliente</a> @else <details> <summary><b>{{$vr->pessoa}}</b></summary> Endereço <b>{{$vr->end}}</b> <br> CNPJ <b>{{$vr->cnpj}}</b> <br> Telefone <b>{{$vr->tel}}</b> <br> Nota <b>{{$vr->nota}}</b> <br> <a href=pessoa>Mudar cliente</a> <br> <a href="pessoa?busca={{$vr->pessoa}}">Atualizar cliente</a> </details> @endif <td><td><td><td><b>{{dec($vr->totalped)}} </table> </div> O único problema desse código é que ele usa o método GET, o que deixa um monte de comandos na barra de navegação. Ou seja, se você atualizar o navegador, ele vai incluir o mesmo produto tantas vezes quanto você atualizar a tela do navegador. Para contornar isso, o pessoal recomenda usar o método POST, mas aí você não consegue enxergar coisa alguma na barra de navegação. Isso é um dilema difícil de resolver.
-
Hoje eu encontrei uma dica nessa página php - Laravel filter a value in all columns - Stack Overflow, e eu criei esse método na classe PessoaController: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbpessoa; use Schema; class PessoaController extends Controller{ public function pessoa(Request $request){ if($request->input('busca')){ if(($request->input('busca'))[0]=="@"){ $busca=$request->input('busca'); $tamanho=strlen($busca); $busca=substr($busca,1,$tamanho-1); $query=tbpessoa::query(); $columns=Schema::getColumnListing('tbpessoa'); foreach($columns as $column){ $query->orWhere($column,'like','%'.$busca.'%');} $pessoas=$query->get(); return view('pessoa',compact('pessoas'));}} }
-
Eu gosto bastante do Hostinger, ele me cobra R$ 23,00 por mês e assim consigo hospedar nele o meu banco de dados e 14 códigos em PHP. A conexão é estável, bem melhor que o meu notebook, que não é um servidor e usa o ngrok e a Claro, e só funciona quando não preciso. Mas ontem eu queria me aventurar mais, eu queria ver se era possível instalar o Laravel 10. O projeto inicial do Laravel vem com 9.000 arquivos e para arrumar tudo isso são necessários dois programas: o Composer e npm. Não é fácil usar esses programas no notebook, e muito menos na hospedagem. Apanhei muito para instalar o Composer no Hostinger. Já o npm foi bem mais difícil, mas no final do dia eu encontrei um tutorial: How to host a Node.js app on shared host | by Mayomi Ayandiran | Medium. Tentei ver os vídeos do YouTube bem como eu vi o manual do Laravel, mas eu não consegui aprender nada. Assim, usei o famoso método da tentativa e erro. Primeiro, eu zipei um Laravel 10 que tinha no meu notebook, e mandei o zip para o Hostinger, e lá descompactei. Na hora de entrar no projeto, eu recebi a mensagem 403, ou seja, eu não tenho autorização para entrar. Para resolver esse problema, eu fiquei imaginando se o PHP e o Laravel não é a mesma coisa. Então eu criei um arquivo chamado index.php com o comando echo "olá mundo!", e assim consegui entrar na pasta onde estava o Laravel, mas essa gambiarra não funcionou para entrar no Laravel. Então, eu decidi jogar o projeto fora, como eu faço no meu notebook. Mas no Hostinger, as coisas são diferentes. O Hostinger perguntou se eu tinha certeza que eu queria jogar o projeto fora, eu respondi sim, mas para a minha surpresa o Hostinger também jogou fora o banco de dados que estava vinculado no projeto. Esse é o grande problema do método da tentativa e erro, a gente só aprende depois de muita surra.
-
Ah, consegui achar o erro. Esqueci de fazer a prova dos nove! <?php for($i=1000;$i<=9999;$i++){ $j=intval($i/100); $k=intval(($i/100-$j)*100); $l=($j+$k)**2; if($l==$i){echo "$i => $j $k => ( $j + $k)**2= $l <br>";} if($l>$i){$i=(intval($i/100)+1)*100;if($i>9999){exit;}} } // resultado: 2025 => 20 25 => ( 20 + 25)**2= 2025 3025 => 30 25 => ( 30 + 25)**2= 3025 9801 => 98 1 => ( 98 + 1)**2= 9801
-
No fórum do DevMedia surgiu uma questão que queria todos os números dentro do intervalo 1000 a 9999 que pudesse satisfazer essa equação: AABB = (AA + BB)**2 O meu conhecimento em matemática é precário, o máximo que consegui resolver foi equação do 2o. grau com uma incógnita e mesmo assim quase repeti de ano. Então, usei o PHP e achei três soluções: <?php for($i=1000;$i<=9999;$i++){ $i=intval($i); $j=intval($i/100); $k=intval(($i/100-$j)*100); $l=($j+$k)**2; if($l==$i){echo "$i => $j $k => ( $j + $k)**2= $l <br>";} } // resultado: 2025 => 20 25 => ( 20 + 25)**2= 2025 3025 => 30 25 => ( 30 + 25)**2= 3025 9801 => 98 1 => ( 98 + 1)**2= 9801 Mas o rapaz disse que existe um outro método chamado tuning. Pesquisei no Google, e eu vi que tem algo a ver com a lentidão no banco de dados. Ou seja, eu preciso otimizar o programa para evitar o superaquecimento do processador. Então, fiz uma pequena alteração no programa, mas, para o meu azar, o novo programa encontrou 9 resultados. <?php for($i=1000;$i<=9999;$i++){ $j=intval($i/100); $k=intval(($i/100-$j)*100); $l=($j+$k)**2; if($l>$i){$i=(intval($i/100)+1)*100;if($i>9999){exit;}} if($l==$i){echo "$i => $j $k => ( $j + $k)**2= $l <br>";} } // resultado: 1600 => 15 25 => ( 15 + 25)**2= 1600 2025 => 20 25 => ( 20 + 25)**2= 2025 2500 => 24 26 => ( 24 + 26)**2= 2500 3025 => 30 25 => ( 30 + 25)**2= 3025 3600 => 35 25 => ( 35 + 25)**2= 3600 4900 => 48 22 => ( 48 + 22)**2= 4900 6400 => 63 17 => ( 63 + 17)**2= 6400 8100 => 80 10 => ( 80 + 10)**2= 8100 9801 => 98 1 => ( 98 + 1)**2= 9801 O algorítimo é o mesmo, a única diferença é que no segundo programa o processador trabalha menos, e isso não faz o menor sentido. Ou eu fiz uma tremenda besteira que não estou conseguindo enxergar?
-
Encontrei o Biehl no fórum iMasters, e ele queria saber como salvar a ordem dos menus. Eu não sabia que era possível alterar a posição dos menus, mas o Biehl deixou o código JavaScript que faz essa mágica. Como eu tenho mais conhecimento na área de banco de dados, eu decidi ajudá-lo: <?php // tab_menu (menu_id, menu_nome, menu_order) $ggCon=new mysqli("localhost","root","","astudy"); if(!isset($_POST['recordsArray'])){goto inicio;} else { $VGT_posicoes=$_POST['recordsArray']; foreach ($VGT_posicoes as $menu_order => $menu_nome) { mysqli_query($ggCon, "update tab_menu set menu_order=$menu_order where menu_nome='$menu_nome'");}} inicio:?> <form method=post> <table id=table style=border:1> <?php $sqlVF = mysqli_query($ggCon, "SELECT * FROM tab_menu ORDER BY menu_order ASC"); while($linha = mysqli_fetch_array($sqlVF)){ $menu_id= $linha['menu_id']; $menu_nome= $linha['menu_nome']; $menu_order= $linha['menu_order']; echo "<tr><td><input id='recordsArray_$menu_id' name=recordsArray[] value='$menu_nome' onclick=getSelectedRow()>";} ?> </table> <input type=submit value=Salvar> </form> <button onclick="upNdown('up');">↑</button> <script> function getSelectedRow(){ for(var i = 1; i < table.rows.length; i++){ table.rows[i].onclick = function(){ if(typeof index !== "undefined"){ table.rows[index].classList.toggle("selected");} index = this.rowIndex; this.classList.toggle("selected");};}} function upNdown(direction){ rows = table.rows parent = rows[index].parentNode if(direction === "up"){ if(index!=0){parent.insertBefore(rows[index],rows[index - 1]);index--;}}} </script>
-
Problemas com tabela quando passa codigo CSS para exibir imagem na escrita quebra a mesma!!!
pergunta respondeu ao ssj4bq de Frank K Hosaka em PHP
CSS ainda é coisa nova para mim, eu estou no nível básico, ou seja, vou usando na base da tentativa e erro. -
Depois de três anos, finalmente consegui fazer um orçamento em JavaScript. O programa está incompleto, ele busca o produto pelo código, quando o correto é pela descrição. Ele não calcula o total do item e nem o total do orçamento. É um programa bem incompleto, mas pelo menos eu consegui fazer a metade do programa. A minha estimativa é que vou ter 100% do programa em 2026. <?php // tbprod (codprod,un,prod,custo,marg,codbar,loc,emb,cf,codforn,updated_at,created_at) $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select * from tbprod"); $rows=$query->fetch_all(MYSQLI_ASSOC); $jrows=json_encode($rows); ?> <script> produtos=<?=$jrows?>; function ver(codprod){ prod=produtos.filter(function(produtos){return produtos.codprod == codprod}); inptcod.value=prod[0].prod preço.value=prod[0].custo qt.focus()} function fim(){ texto="<tr><td>"+inptcod.value+"<td>"+qt.value+"<td>"+preço.value linha.insertAdjacentHTML('beforebegin',texto) inptcod.value="" qt.value="" preço.value="" inptcod.focus()} </script> <table><th>Produto<th>Qt<th>Preço <tr id=linha><td><input id=inptcod onchange=ver(inptcod.value) placeholder="codigo do produto"> <td><input id=qt onchange=fim()> <td><input id=preço>
-
Problemas com tabela quando passa codigo CSS para exibir imagem na escrita quebra a mesma!!!
pergunta respondeu ao ssj4bq de Frank K Hosaka em PHP
Obrigado pela sirene. O site é bem grande, lamento por não poder ajudar. O css que trabalha com o webkit afeta muita coisa, e eu não tenho nenhuma ideia de como isolar, só posso desejar sorte e persevarança. -
<?php // no diretório /wamp64/www/astudy, usei o comando composer require mpdf/mpdf require_once __DIR__.'/vendor/autoload.php'; $mpdf=new \Mpdf\Mpdf(); $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select * from tbprod limit 5"); $mpdf->WriteHTML('<table>'); while($row=$query->fetch_assoc()){ $mpdf->WriteHTML('<tr><td>'.$row['prod']); $mpdf->WriteHTML('<td align=right>'.$row['custo']);} $mpdf->WriteHTML('</table>'); $mpdf->Output(); Tentei usar o Bootstrap, mas não consegui.
-
Foi por puro acidente que descobri que é possível usar a tela de consulta como a tela de atualização. Tudo que é preciso é de um formulário com um input. O problema é que a tela de consulta sempre apresentava os primeiros cinco itens da tabela de produtos. Eu precisava dar um jeito de manter o mesmo critério da consulta. Por exemplo, se eu estou atualizando o endereço do bacalhau na Geladeira n. 12 (abreviado em g12), eu gostaria que a consulta apresentasse o bacalhau novamente, agora com o endereço correto. Para resolver esse problema, eu usei a variável global $_SESSION, assim: <style> form{margin:0} .camufla {border:0;background:transparent} </style> <?php session_start(); $mysqli=new mysqli("localhost","root","","astudy"); if(isset($_GET['procurar'])){ $filtro="where prod like '%".$_GET['procurar']."%'"; $_SESSION['filtro']=$filtro;} else {$filtro="limit 5";} if(isset($_GET['local'])){ $local=$_GET['local']; $codprod=$_GET['codprod']; $query2=$mysqli->query("update tbprod set loc='$local' where codprod=$codprod"); $filtro=$_SESSION['filtro'];} $query=$mysqli->query("select * from tbprod $filtro"); echo "<form><input name=procurar></form>"; echo "<table><th>Produto<th>Local"; while($row=$query->fetch_assoc()){ echo "<form>"; echo "<tr><td>".$row['prod']."<td>"; echo "<input type=hidden name=codprod value=".$row['codprod'].">"; echo "<input size=2 name=local class=camufla value='".$row['loc']."'>"; echo "</form>";}
-
Falei besteira no final da mensagem anterior. Eu disse que o route do tutorial estava mais legível, mas não está não. Eu tentei colocar o view('theme') depois do Auth::routes( ); mas isso não mudou em nada. Não sei exatamente para que serve a instrução Auth::routes( ). Para bloquear o acesso ao view('theme') eu tive que mudar o route e criar um controller para essa função, assim: routes/web.php <?php use Illuminate\Support\Facades\Route; Auth::routes(); Route::get('/', [App\Http\Controllers\TesteController::class,'theme']); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); app/Http/Controllers/TesteController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TesteController extends Controller { public function __construct(){$this->middleware('auth');} public function theme(){return view('theme');}} Hoje, eu aprendi como barrar o usuário. Tudo indica que a function __construct( ) tem prioridade maior do que a função que foi originalmente chamada, se ele estiver dentro da mesma classe.
-
Usando str_replace na base da tentativa e erro
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Hoje, encontrei uma dica no Google, que me ensinou a usar o MySQL. É possível editar a descrição diretamente no MySQL através do comando: update tabela set descricao=replace(descricao,"stringvelha","stringnova"); Isso é bem mais fácil que apelar para o PHP ou o Laravel. -
como deixo responsivo um slide
pergunta respondeu ao adrsublimacao de Frank K Hosaka em Tutoriais & Dicas - PHP
Ah, desculpe, entendi tudo errado. Acabei de fazer a pesquisa no Google e aprendi que responsivo é adequar o código HTML que seja legível na tela de um PC, de um tablete, de um smartphone. Eu acabei atrapalhando você, peço desculpas. Por enquanto, só sei usar o CSS estático. O Bootstrap tem recursos bem avançados que calculam a dimensão da tela do cliente e usa o cálculo para melhor apresentar a informação de acordo com a dimensão. Eu ainda não cheguei lá. No momento, só estou montando um projeto que se adapte na tela do celular, mas não estou conseguindo. -
O manual oficial do Laravel 10 começa apresentando o projeto Chirps ou o Kit Start, ambos instalam o Breeze no projeto, ele é um "facilitador" que loga, valida, cadastra novo usuário ou exclui o usuário. O problema é entender a gramática do blade.php, ele usa o estilo da Tailwind, e como eu não estou familiarizado com esse estilo, não sei o que posso mexer. Estou mais familiarizado com o estilo do Bootstrap. Por exemplo, para azular um texto eu faço assim <td class=text-primary>, pelo menos eu acho bem fácil consultar o Bootstrap na internet. Para usar o Bootstrap no meu projeto, eu criei um link dentro do menu.blade.php que é usado em todo o projeto. Ontem, no entanto, eu encontrei um tutorial, ensinando a instalar o Bootstrap no Laravel 9. O endereço dele é esse: https://www.itsolutionstuff.com/post/how-to-install-bootstrap-in-laravelexample.html Esse tutorial não funciona no Laravel 10. Eu criei um projeto chamado laravel no diretório downloads, esses foram os comandos que eu usei: cd downloads composer create-project laravel/laravel cd laravel composer require laravel/ui php artisan ui bootstrap php artisan ui bootstrap --auth npm install npm run build No tutorial, ele não diz para você mudar de diretório na linha de comando, depois que você cria o projeto. Ele também usa a gramática "npm run production", coisa que não funciona na versão que eu tenho. Com o que eu aprendi ontem, acredito que o "npm run dev" atualiza o navegador de tempo em tempo, já o "npm run build" obriga você a atualizar a tela do navegador, se você quiser ver o resultado das modificações que fez no código. Outra coisa que não funciona no tutorial é o theme.blade.php, eu tive que mudar assim: <!doctype html> <html> <head> <!-- Scripts --> <!--script src="{{ asset('js/app.js') }}" defer></script --> <!-- Styles --> <!-- link href="{{ asset('css/app.css') }}" rel="stylesheet" --> @vite(['resources/sass/app.scss', 'resources/js/app.js']) </head> <body> <p class="h1 text-primary">This is example from ItSolutionStuff.com</p> </body> </html> Ou seja, eu comentei os links, e introduzi um novo comando Blade @vite, principalmente porque não tem nada dentro do arquivo 'css/app.css'. O tutorial não explica como rodar o theme.blade.php - eu criei esse arquivo na pasta views, e alterei o routes/web.php assim: <?php use Illuminate\Support\Facades\Route; Route::get('/', function () {return view('theme');}); Auth::routes(); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); Pelo menos a gramática do route não é tão assustador quanto o que aparece no projeto Chirps ou na hora de instalar o Breeze. Pelo que eu entendi nesse código, qualquer usuário pode ver a página theme, mas para ver os demais, primeiro o usuário precisa ser cadastrado.
-
Eu não consegui instalar o Octane no meu projeto. Você tem um tutorial de como fazer isso?
-
Ontem, eu estava consertando a tabela de produtos. Tinha muito item com essa descrição "produto pt10", eu mudei para "produto 10 pc". A sintaxe do PHP para fazer essa tarefa é: $novo=str_replace("pt10","10 pc",$descricao); O problema é que esse código não funciona se a descrição tiver "Pt10", "pT10","PT10", assim eu fiz uma sequência de casos, imaginando que uma delas iria funcionar: $novo=str_replace("pt10","10 pc",$descricao); $novo=str_replace("pT10","10 pc",$descricao); $novo=str_replace("Pt10","10 pc",$descricao); $novo=str_replace("PT10","10 pc",$descricao); Na prática, isso não deu certo. Tudo indica que um comando str_replace anula o trabalho de um str_replace anterior. Assim, usei o velho método da tentativa e erro, assim: <?php namespace App\Http\Controllers; use App\Models\tbprod; use Illuminate\Http\Request; class CorrigirController extends Controller { public function inicio(Request $request){ if($request->input('consertar')){ $descricao=$request->input('consertar'); $novo=str_replace("pt10","10 pc",$descricao); if($novo==$descricao){ $novo=str_replace("Pt10","10 pc",$descricao);} if($novo==$descricao){ $novo=str_replace("pT10","10 pc",$descricao);} if($novo==$descricao){ $novo=str_replace("PT10","10 pc",$descricao);} $codprod=$request->input('codprod'); tbprod::where('codprod',$codprod)->update(['prod'=>$novo]); } $itens=tbprod::where('prod','like','%pt10%')->get(); return view('corrigir',compact('itens'));} }
-
como deixo responsivo um slide
pergunta respondeu ao adrsublimacao de Frank K Hosaka em Tutoriais & Dicas - PHP
Você pode mostrar como você definiu as variáveis $dadosbanner, $dadosbanner2 e $dadosbanner3? No meu caso eu criei uma classe chamada dadosbanner conforme a listagem mais acima, e $dadosbanner passou a ser uma instância daquela classe. Outra coisa errada que eu vi no código é o <a href="#">, ou seja, os slides não estão amarrados com os links. -
como deixo responsivo um slide
pergunta respondeu ao adrsublimacao de Frank K Hosaka em Tutoriais & Dicas - PHP
Estou começando a estudar. A primeira correção é $dadosbanner3->link3 e $dadosbanner3->img3, o correto é $dadosbanner->link3 e $dadosbanner->img3. A segunda correção é $dadosbanner2->img2 e $dadosbanner2->link_2 para $dadosbanner->img2 e $dadosbanner->img2. A terceira correção: você precisa tirar a vírgula depois de label#img-dot-3. Olha, os únicos erros que eu encontrei foram esses. O seu código é responsivo, tanto no notebook bem como no celular. Para testar o seu código, copiei três imagens na internet e salvei na pasta /img/banner como teste.jpg, teste1.jpg e teste2.jpg, e criei uma classe chamada dadosbanner( ), assim: <?php class dadosbanner { public $img; public $img2; public $img3; public $link_1; public $link_2; public $link_3; public function getImg(){return $this->img;} public function getImg2(){return $this->img2;} public function getImg3(){return $this->img3;} public function getLink1(){return $this->link_1;} public function getLink2(){return $this->link_2;} public function getLink3(){return $this->link_3;}} $dadosbanner=new dadosbanner(); $dadosbanner->img="teste.jpg"; $dadosbanner->img2="teste2.jpg"; $dadosbanner->img3="teste3.jpg"; $dadosbanner->link_1="uol.com.br"; $dadosbanner->link_2="facebook.com"; $dadosbanner->link_3="nyt.com"; ?> <style> .div-slider{width:auto;height: 400px;text-align: center;} .slides-front {padding: 0;width: 980px;height: 370px;display: block;margin: auto; position: relative;} .slides-front * {user-select: none;-ms-user-select: none; -moz-user-select: none;-khtml-user-select: none; -webkit-user-select: none;-webkit-touch-callout: none;} .slides-front input { display: none; } .slide-container { display: block; } .slide {top: 0;opacity: 0;width: 980px;height: 370px; display: block;position: absolute; transform: scale(0); transition: all .7s ease-in-out 0.1s;} .slide img {width: 100%;height: 100%;} .nav label {width: 150px;height: 100%;display: none; position: absolute;opacity: 0;z-index: 9;cursor: pointer; transition: opacity .2s;color: #FFF;font-size: 156pt; text-align: center;line-height: 380px;font-family: "Varela Round", sans-serif; background-color: rgba(255, 255, 255, .3); text-shadow: 0px 0px 15px rgb(119, 119, 119);} .slide:hover + .nav label { opacity: 0.5; } .nav label:hover { opacity: 1; } .nav .next { right: 0; } input:checked + .slide-container .slide { opacity: 1;transform: scale(1); transition: opacity 1s ease-in-out 0.1s;} input:checked + .slide-container .nav label { display: block; } .nav-dots {width: 100%;bottom: 9px;height: 11px;display: block; position: relative;text-align: center;} .nav-dots .nav-dot {top: 375px;width: 11px; height: 11px;margin: 0 4px;position: relative; border-radius: 100%;display: inline-block; background-color: rgba(0, 0, 0, 0.6);} .nav-dots .nav-dot:hover { cursor: pointer;background-color: rgba(0, 0, 0, 0.8);} input#img-1:checked ~ .nav-dots label#img-dot-1, input#img-2:checked ~ .nav-dots label#img-dot-2, input#img-3:checked ~ .nav-dots label#img-dot-3 { background: rgba(0, 0, 0, 0.8);} </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="div-slider"> <ul class="slides-front"> <input type="radio" name="radio-btn" id="img-1" checked=""> <li class="slide-container"> <div class="slide"> <div class="mg-b-10" align="center"><a href="#" class="view_data" id="<?php print $dadosbanner->link_1;?>"><img src="img/banner/<?php echo $dadosbanner->img;?>" class="img-fluid" /></a></div> </div> <div class="nav"> <label for="img-3" class="prev">‹</label> <label for="img-2" class="next">›</label> </div> </li> <input type="radio" name="radio-btn" id="img-2"> <li class="slide-container"> <div class="slide "> <div class="mg-b-10" align="center"><a href="#" class="view_data" id="<?php print $dadosbanner->link_2;?>"><img src="img/banner/<?php echo $dadosbanner->img2;?>" class="img-fluid" /></a></div> </div> <div class="nav"> <label for="img-1" class="prev">‹</label> <label for="img-3" class="next">›</label> </div> </li> <input type="radio" name="radio-btn" id="img-3"> <li class="slide-container"> <div class="slide"> <div class="mg-b-10" align="center"><a href="#" class="view_data" id="<?php print $dadosbanner->link_3;?>"><img src="img/banner/<?php echo $dadosbanner->img3;?>" class="img-fluid" /></a></div> </div> <div class="nav"> <label for="img-2" class="prev">‹</label> <label for="img-1" class="next">›</label> </div> </li> </ul> </div> <script> $(document).ready(function(){ var slids = $(".div-slider [type=radio]"); // busca os radios na div var slids_len = slids.length; // conta o número de radios var intervalo = 2; // intervalo em segundos function rodar(){ var slids_ativo = $(".div-slider [type=radio]:checked") .attr("id") .match(/\d+/)[0]; // pega o valor numérico do id do radio checado if(slids_ativo == slids_len) slids_ativo = 0; // se estiver no último slide, volta pro primeiro slids.eq(slids_ativo).prop("checked", true); // checa o radio da vez } var tempo = setInterval(rodar, intervalo*1000); // inicia o temporizador $(".div-slider").hover( function(){ // função quando entra o mouse clearInterval(tempo); // cancela o temporizador }, function(){ // função quando retira o mouse tempo = setInterval(rodar, intervalo*1000); // reinicia o temporizador } ); }); </script> -
O Lary encontrou um erro no meu route::resource
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
O route::resource é bacana, mas ainda prefiro usar o route::get, assim: //route Route::get('venda2',[Venda2Controller::class,"inicio"])->name('venda2'); //controller <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbvenda; use Exception; class Venda2Controller extends Controller { public function inicio(Request $request){ if($request->input('atualizar')){ $venda=fmt($request->input('atualizar')); $id=$request->input('id'); tbvenda::where('id',$id)->update(['venda'=>$venda]);} if($request->input('excluir')){ $id=$request->input('excluir'); tbvenda::where('id',$id)->delete();} if($request->input('dia')){ $dia=$request->input('dia'); $venda=$request->input('venda'); try {tbvenda::create(['dia'=>$dia,'venda'=>$venda]);} catch(Exception $e){redirect('venda2')->with(['msg'=>'Venda já registrada']);} } $hoje=date('Y-m-d'); $vendas=tbvenda::orderBy('dia','desc')->get(); return view('venda2',['hoje'=>$hoje],compact('vendas'));} //venda2.blade.php @include('menu') <table class="table table-striped"> <form> @csrf <tr><td><input type=date name=dia value={{$hoje}}> <td><input name=venda autofocus> @if(Session::has('msg')) {{Session::get('msg')}} @endif </form> @foreach($vendas as $venda) <tr><td><a href=?excluir={{$venda->id}}>{{date('d/m/Y',strtotime($venda->dia))}}</a> <form> @csrf <td class=text-end><input placeholder={{dec($venda->venda)}} style=text-align:right;border:none;background:none name=atualizar> <input type=hidden name=id value={{$venda->id}}> </form> @endforeach -
Converter resultado de loop while de 6 linha para 6 colunas em PHP
pergunta respondeu ao WAT de Frank K Hosaka em PHP
<!-- mysql CREATE TABLE `tbacougue` ( `id` int NOT NULL AUTO_INCREMENT, `cod` int DEFAULT NULL, `fab` date DEFAULT NULL, `val` date DEFAULT NULL, `lote` int DEFAULT NULL, `qt` int DEFAULT NULL, `peso` float DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci --> <style> td{text-align:right} </style> <?php function fmt($dia){return date('d/m/y',strtotime($dia));} $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select cod from tbacougue group by cod"); while($row=$query->fetch_assoc()){ $cod=$row['cod']; echo "Código do produto: $cod"; $subq=$mysqli->query("select * from tbacougue where cod=$cod"); $num_rows=mysqli_num_rows($subq); echo "<table><th>Fab<th>Val<th>Lote<th>Qt<th>Peso<th>|<th>Fab<th>Val<th>Lote<th>Qt<th>Peso"; for($i=0;$i<$num_rows;$i=$i+2){ $s=$subq->fetch_array(); echo "<tr><td>".fmt($s[2])."<td>".fmt($s[3])."<td>".$s[4]."<td>".$s[5]."<td>".$s[6]; $s=$subq->fetch_array(); if($s){ echo "<td>|<td>".fmt($s[2])."<td>".fmt($s[3])."<td>".$s[4]."<td>".$s[5]."<td>".$s[6];}} echo "<tr></table>";} -
O Lary encontrou um erro no meu route::resource
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Eu criei uma tabela tbvenda (dia,venda), onde dia é um campo com chave única, e com ele criei apenas um blade e com ele incluo, excluo e edito. Claro que se trata de uma gambiarra para fins pedagogicos e mostrar o misterioso rote::resource, que força a trabalhar com <form method=post> bem como uma gramática fixa (update, destroy, create), não funciona se você alterar essa gramática: //Model tbvenda <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class tbvenda extends Model { use HasFactory; protected $table="tbvenda"; protected $fillable=['dia','venda'];} //route Route::resource('venda',VendaController::class) ->only(['index','store','destroy','update']); //controller <?php namespace App\Http\Controllers; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\View\View; use App\Models\tbvenda; use Exception; class VendaController extends Controller{ public function index():View { $hoje=date('Y-m-d'); return view('venda',['hoje'=>$hoje,'vendas'=>tbvenda::orderBy('dia','desc')->get()]); } public function store(Request $request):RedirectResponse { $validated=$request->validate(['dia'=>'required','venda'=>'required']); try { tbvenda::create($validated); } catch (Exception $e) {return redirect(route('venda.index'))->with( ['msg'=>"venda já registrada"]);} return redirect(route('venda.index'));} public function destroy(tbvenda $venda): RedirectResponse { $venda->delete(); return redirect(route('venda.index'));} public function update(Request $request, tbvenda $venda): RedirectResponse { $novavenda=fmt($request->input('novavenda')); $dia=$venda->dia; $atualizar=['dia'=>$dia,'venda'=>$novavenda]; $venda->update($atualizar); return redirect(route('venda.index')); } } // Helpers function dec($value){return number_format($value,2,',','.');} function fmt($value){$value=str_replace(".","",$value); return str_replace(",",".",$value);} // venda.blade.php @include('menu') <script>document.title='Registro de Vendas';btmenu.innerHTML='Registro de Vendas'</script> <table class="table table-striped"> <tr><td> <form action="{{route('venda.store')}}" method=post> @csrf <input type=date name=dia value={{$hoje}}><td align=right> <input name=venda autocomplete=off autofocus> @if(Session::has('msg')) {{Session::get('msg')}} @endif </form> @foreach($vendas as $venda) <tr><td> <form method=post action="{{route('venda.destroy',$venda)}}"> @csrf @method('delete') <a href="{{route('venda.destroy',$venda)}}" onclick="event.preventDefault(); this.closest('form').submit()"> {{date('d/m/Y',strtotime($venda->dia))}} </a> </form> <td class=text-end> <form method=post action={{route('venda.update',$venda)}}> @csrf @method('patch') <input name=novavenda placeholder="{{dec($venda->venda)}}" style=text-align:right;border:none;background:transparent> </form> @endforeach // blade -
Tentei usar o route::resource que aparece no projeto Chirps (mencionado no começo do manual oficial do Laravel 10), mas não deu certo. Depois de conferir várias vezes, eu não tive outra escolha senão pedir ajuda no Laracasts, assim: My route::resource doesn't work // web.php Route::resource('venda',VendaController::class); // controllers class VendaController extends Controller{ public function index():View{ return view('venda'); } public function store(Request $request):RedirectResponse{ return "olá mundo";} } // venda.blade.php <form action="{{route('venda.store')}}"> @csrf <input name=teste> </form> Em menos de cinco minutos veio a resposta do Lary: The issue with the code is that the store method in the VendaController is returning a string instead of a RedirectResponse object. To fix this, change the return statement in the store method to: return redirect()->route('venda.index'); This will redirect the user to the index method of the VendaController after submitting the form. Also, make sure that the venda.blade.php file is saved in the resources/views directory. Here's the updated code: // web.php Route::resource('venda', VendaController::class); // controllers class VendaController extends Controller { public function index(): View { return view('venda'); } public function store(Request $request): RedirectResponse { // Process the form data here return redirect()->route('venda.index'); } } // venda.blade.php <form action="{{ route('venda.store') }}" method="POST"> @csrf <input name="teste"> <button type="submit">Submit</button> </form> Ou seja, eu não posso usar o método GET, quando trabalhar com o route::resource.