
Frank K Hosaka
Membros-
Total de itens
1.586 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
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.
-
Antes de 2020, eu usava o PowerPoint e o Access, ambos do Microsoft Office, para imprimir etiqueta de preço. Até hoje eu não sei mexer no PowerPoint, mas consegui montar um programa de etiqueta nele pelo VBA, ele pegava as informações no Access, montava a etiqueta para mim, e imprimia exatamente o que ele mostrava na tela. Essa é a famosa tecnologia Wyswyg, What You See Is What You Get. O problema do Office é que eu não sabia como conectá-lo com o meu celular. Foi assim que começou a minha aventura no PHP. O grande problema do PHP é que só funciona se você sabe usar o HTML. Já se passaram três anos, e só hoje é que eu aprendi a aumentar ou diminuir o tamanho da fonte no HTML. O PHP pode alterar o HTML, mas eu não sei como ensiná-lo a calcular o tamanho da fonte para caber dentro de uma <div>. Assim, eu fiz o HTML na base da tentativa e erro, tudo na unha. Mas, na hora de imprimir, eu descobri um novo problema: o HTML não é Wyswyg. Ou seja, você vê o HTML de um jeito, mas a impressora enxerga de outro jeito. Para resolver o problema, eu fiz uma captura de tela para depois imprimir. Eu achei isso bastante embaraçoso. <style> #box1 {border: 1px solid #000000;position: absolute;width: 18%;height:15%;left:5%} #box2 {border: 1px solid #000000;position: absolute;width: 18%;height:15%;left:25%} #box3 {border: 1px solid #000000;position: absolute;width: 18%;height:15%;left:45%} .titulo1{text-align:center;font-size:230%} .preco1{text-align:center;font-size:300%} .titulo2{text-align:center;font-size:230%} .preco2{text-align:center;font-size:300%} .titulo3{text-align:center;font-size:150%} .preco3{text-align:center;font-size:350%} </style> <div id="box1"> <div class="titulo1">542 Trado 08</div> <div class="preco1">R$ 175,00</div> </div> <div id="box2"> <div class="titulo2">543 Trado 10</div> <div class="preco2">R$ 224,50</div> </div> <div id="box3"> <div class="titulo3">389 Cavadeira 2 Cabos</div> <div class="preco3">R$ 61,50</div> </div>
-
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
Para manter o mesmo padrão da primeira imagem, eu exclui o CSS *, e para a imagem não distorcer a tabela, eu defini o tamanho da imagem em width=100px e height=70px. Eu gostei do CSS a span e a:hover span, não sabia que era possível fazer aparecer e desaparecer uma imagem como se fosse um modal. O que eu não consegui foi colocar a sirene do corpo de bombeiros dentro do código fonte. Tem jeito de explicar como você conseguiu isso? <style type=text/css> ::-webkit-scrollbar{width:1.5rem} ::-webkit-scrollbar-track{background-color:#ccc;box-shadow:inset 1px 1px 4px rgba(black,.2);width:1rem} ::-webkit-scrollbar-thumb{background-image:linear-gradient(red,black);box-shadow:inset 1px 1px 2px white;border-radius:1px} ul{margin:20px 0 0 20x;list-style:none;} a{position:relative;display:block;width:400px;padding:1px 0;background-color:#FFFFFF;text-decoration:none;color:#000000} a:hover{background-color: #999999;} a span{display:none} a:hover span{display:block;position:absolute;top:0px;left:100%;border:1px #CCCCCC solid} </style> <table border=1 style="height:839px;display:block;overflow-x:hiden;width:100%"> <tr> <th width=100% bgcolor=D9D9D9><center><b>PRODUTOS</b></center></th> <th style="padding:0 55px" bgcolor=F4CCCC><center><b>VALOR</b><center></th> <tr> <td bgcolor=00FFFF><center><b>A</b></center></td> <td> <tr> <td><font size=5><center><a href=#>Action Figure Sword Art O. CR Wedding Sinon<br><span><img src="gato.jpg" alt="gato" width=100px height=70px></span></a>LINK</center></font></td> <td><font sinze=5><center>R$ 200,00<br><a href="https://www.americanas.com.br/produto/4083026862" target="_blank">NOS SITES</a></center></font></td> </table> -
Ontem, eu perdi um tempão para consertar uma tabela. Os programadores profissionais dividem o HTML em <div> para apresentar as informações de forma atraente e consistente, mas eu ainda não cheguei lá. Eu imaginava que eu era um programador eventual que só sabe mexer com o <table>. Um <table> profissional tem o formato <table><thead><th></th></thead><tbody><tr><td></td></tr></tbody></table>, mas eu só uso <table><tr><td></table>, mas o desalinhamento mostrou que nem mereço o diploma de programador eventual. Eu tentei consertar a tabela, estudando Bootstrap 5.3. Lá eu vi <th scope='col'>, <th scope='row'>, bem como <thead> e <tbody>. Sem dúvida ficou bem melhor, mas ainda sobrou um pedaço da linha que não queria encostar na borda da tabela. Mas por sorte eu encontrei uma célula <td> que não tinha o cabeçalho <th> correpondente, e isso sim explicou porque a minha tabela ficou desalinhada. Depois de descobrir o meu erro, joguei fora o <th scope='col'>, <thead> e <tbody> bem como um monte de </th> e </td>. Outra coisa curiosa que eu encontrei é que eu não conseguia avermelhar um <td> se eu usar <table class="table table-striped">, quando a linha é mais escura. É que eu usei um CSS particular .preto , .vermelho. Assim, precisei padronizar a formatação, tudo em Bootstrap. Ao invés de .preto, eu usei <td class="text-dark">. O problema é que eu trabalho mais com números, assim eu precisava alinhar tudo pela direita, e a gramática do Bootstrap é essa: <td class="text-danger text-end">. Fazendo teste isolado, ele funciona, mas dentro do Blade do Laravel, eu só tive problema. O meu código ficou assim: codigo.blade.php @php if($custoatual!=$custoanterior){$classe="text-danger text-end";} else {$classe="text-dark text-end";} @endphp <td class={{$classe}}>{{$custoanterior}} Depois de quatro horas, eu descobri o meu erro. Não basta usar aspas na variável, mas também em torno do token do blade, assim: <td class="{{$classe}}">{{$custoanterior}} A vida é bruta!
-
Plotar gráfico com PHPLOT
pergunta respondeu ao Jeanfson Dutra de Frank K Hosaka em Repositório de Scripts - PHP
Eu não consegui achar o ProcessaPDF.class.php na internet, eu só achei phpplot.php, fiz um teste com esse código: <?php //include_once ("ProcessaPdf.class.php"); require_once 'phplot.php'; $palavras = [['Frank',10],['Joao',6],['Pedro',3]]; $plot = new PHPlot(640 , 480); //$data = [['1940' , 6.2 ],['1950' , 6.2 ],['1960' , 6.3 ],['1970' , 5.8 ]]; $data=$palavras; $plot->SetTitle('Grafico da analise de palavras-chave encontradas'); $plot->SetPlotType("bars"); $plot->SetXTitle("Palavras vagas do vento"); $plot->SetYTitle("Frequencia"); $plot->SetFont('x_title',2); $plot->SetFont('y_title',2); $plot->SetDataValues($data); $plot->SetYDataLabelPos('plotin'); $plot->DrawGraph(); ?> No final, deixo a imagem do gráfico. Você sabe onde posso encontrar uma cópia do ProcesaPdf.class.php? -
Essa dica eu encontrei nessa página: javascript - How to show calendar popup when input[type="date"] is on focus - Stack Overflow Fiz um código teste, ele funciona! index.php <style> .input-container input { border: none; box-sizing: border-box; outline: 0; padding: .75rem; position: relative; width: 100%; } input[type="date"]::-webkit-calendar-picker-indicator { background: transparent; bottom: 0; color: transparent; cursor: pointer; height: auto; left: 0; position: absolute; right: 0; top: 0; width: auto; } </style> <input type=date> Em tempo, sozinho ele funciona muito bem, mas no meio de um código maior ele acaba apresentando comportamento inesperado.
-
No começo do manual do Laravel 10 tem o projeto Chirps, e lá encontrei a seguinte rota: Route::resource('chirps',ChirpController::class) ->only(['index','store','edit','update','destroy']) ->middleware(['auth','verified']); Ou seja, se você digitar no navegador localhost:8000/chirps, você vai parar na tela do login. Para proteger os meus códigos em laravel, eu usei esse esquema: Route::middlaware(['auth','verfied])->group(function(){ ... }); ou seja, eu ajuntei todas as minhas rotas dentro de uma rota maior. Para proteger ainda mais os códigos em Laravel, eu fui em config\session.php e alterei 'expire_on_close' => true, ou seja, assim que você fecha o navegador, você está automaticamente deslogado. O Laravel parece bacana, ele simplifica o que parece ser bem complicado. O problema é que no Hostinger eu tenho tanto o projeto PHP como o Laravel, mas eu não faço a menor ideia de como fazer essa tecnologia funcionar no mundo do PHP. Alguém tem um tutorial para me indicar?
-
Eu defini o email como único: CREATE TABLE `users` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `email` varchar(191) COLLATE utf8mb4_general_ci NOT NULL, `email_verified_at` timestamp NULL DEFAULT NULL, `password` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `remember_token` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `level` int DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email_UNIQUE` (`email`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
- 2 respostas
-
- programação
- logica
-
(e %d mais)
Tags:
-
Eu tentei atualizar o cadastro do cliente, mas eu logo vi que eu não tinha feito essa rotina no Laravel, o que eu tinha era apenas a tela de consulta. Mas eu lembrei do projeto Chirp (ele está no primeiro parágrafo do manual oficial do Laravel 10), ele pega todos os dados do formulário e manda diretamente no banco de dados. Eu queria copiar a ideia. Tudo o que eu precisava era mandar todos os dados do cliente no formato <input name=pessoa value={{$pessoa->pessoa}} readonly style=border:none>. Mas na hora de submeter o formulário, absolutamente nada foi encaminhado adiante. Eu precisava tirar o atributo readonly do input. Ou seja, qualquer um pode alterar os dados do cliente logo na tela de consulta. Mas como só eu mexo nesse programa, acabei gostando da solução. O código parcial do Laravel ficou assim: pessoa.blade.php @include('menu') <script>btmenu.innerHTML='Pessoa'</script> <div> <form> <table class='table table-striped'><tr><th>Busca<th align=left> <input name=busca onchange=submit() autofocus> <script>busca1.focus()</script> <tr><td><td><i>Para procurar em todos os campos use @</i> </form> @foreach($pessoas as $pessoa) <tr><td align=right><a href='?codp={{$pessoa->codp}}&pessoa={{$pessoa->pessoa}}'>{{$pessoa->codp}}</a> <td><details> <summary> <form> <b><input name=pessoa value='{{$pessoa->pessoa}}' style=border:none size=50></b></summary> Endereço:<b><input name=end value='{{$pessoa->end}}' style=border:none size=50></b> <br>CNPJ CPF: <b><input name=cnpj value='{{$pessoa->cnpj}}' style=border:none size=50></b> <br>Telefone:<b> <input name=tel value='{{$pessoa->tel}}' style=border:none size=50></b> <br>Nota:<b><input name=nota value='{{$pessoa->nota}}' style=border:none size=50></b> <br><input type=hidden name=codp value={{$pessoa->codp}}> <input name=updated_at value='{{date('Y-m-d H:i:s')}}' onclick=submit() style=border:none> </form> </details> @endforeach </table></div> DiarioController.php <?php public function pessoa(Request $request){ if($request->input('updated_at')){ $codp=$request->input('codp'); tbpessoa::where('codp',$codp)->update($request->toArray()); return redirect('orcamento');}
-
No meu projeto Laravel eu criei o arquivo menu.blade.php. Para chamar arquivo menu.blade.hp dentro do outro arquivo tipo pagar.blade.php, eu usei o comando @include('menu'). No projeto Chirps que aparece no manual oficial do Laravel 10, no entanto, ele usa outra tecnologia: <x-app-layout> </x-app-layout>, ele está amarrado no arquivo views\layout\app.blade.php, e dentro desse arquivo tem um comando reservado para incluir um novo HTML, ele é chamado de {{$slot}}. Eu não vejo nenhuma necessidade de usar essa tecnologia, mas ela é interessante. A solução mais simples é copiar todo o conteúdo do arquivo views\menu.blade.php no arquivo views\layout\app.blade.php e no final acrescentar o comando {{$slot}}. O chato é que eu vou precisar colocar marcador <x-app-layout> </x-app-layout> em todos os demais arquivos que se reportavam ao menu.blade.php. A Lei do Menor Esforço me orienta a não mexer no meu projeto, mas nada impede de eu fazer um teste. Encontrei um outro tutorial no Google informando que eu preciso usar o comando php artisan make:components teste. Ele cria o arquivo views\components\teste.blade.php. Dentro dele, criei o seguinte código: olá mundo 1 <div> {{$slot}} </div> olá mundo 2 Dentro da pasta views, eu criei o arquivo teste2.blade.php <x-teste> teste2 </x-teste> Para eu poder chamar o arquivo teste2 na barra do navegador, eu acrescentei esse código no arquivo routes/web.php: Route::view('teste2','teste2'); Note que 'teste2' aparace duas vezes, o primeiro é o comando que você vai usar no navegador: localhost:8000/teste2 e o segundo é o nome do arquivo que o Laravel vai ter que abrir e mostrar no navegador, assim:
-
Ontem eu estava estudando o projeto Chirps que aparece logo no primeiro parágrafo do manual do Laravel 10. Lá tem centenas de recursos que eu ainda não sei usar, mas o mais bacana é o Laravel pegar os dados de um formulário e jogar diretamente no banco de dados. O meu projeto é um monte de linguiças por não saber como usar as ferramentas do Laravel de maneira adequada. O Laravel tem uma ferramenta chamada Helper, mas ele só funciona no lado do servidor e não no lado do cliente. Então, ontem veio a clássica pergunta, como mandar um valor válido para o Laravel trabalhar? Hoje de manhã eu lembrei do JavaScript, ele é o único que é capaz de pegar o valor do <form>, mudar o que for preciso, para a jornada continuar tranquilo. Olha só: index.php <script> function validar(){ valor.value=valor.value.replace(",",".")} </script> <form> <input name=valor id=valor value=9,99> <input type=submit onclick=validar()> </form> <?php if(!isset($_GET['valor'])){exit;} echo $_GET['valor']; e a seguir um trecho parcial do Laravel produtoNovo.blade.php @include('menu') <script> function valida(){ custo.value=custo.value.replace(",",".") margem.value=margem.value.replace(",",".")} </script> <div><table class='table table-sm table-striped'><tr><th><th> <form action={{route('produtoStore')}}> <tr><td><td><font color=blue>Cadastrar Novo Produto <tr><td>Produto<td><input name=prod autocomplete=off size=40> <tr><td>Unidade<td><input name=un value=un autocomplete=off> <tr><td>Custo<td><input name=custo id=custo autocomplete=off> <tr><td>Código Produto Fornecedor<td><input name=codforn autocomplete=off> <tr><td>Margem<td><input name=margem id=margem autocomplete=off> <tr><td><td><input type=submit onclick=valida() value=Confirmar> </form></table></div> DiarioController.php <?php public function produtoStore(Request $request){ tbprod::create($request->toArray()); return redirect('produto'); }
-
Veja se você encontra o id do processo através do var_dump($listaJuntasCadastradas);
-
Depois de quase um ano, eu consegui transformar o meu projeto em PHP em Laravel. Ele funciona do jeito que eu quero, mas isso não quer dizer que o projeto Laravel esteja correto. Assim, eu tomei a iniciativa de tentar estudar o Laravel 10.x no site oficial, eu ainda estou preso no primeiro parágrafo. Ele ensina a criar o projeto Chirps para quem não está familiarizado com o Laravel. Como ele está em inglês, eu fui tentando entender na base da tentativa e erro. Eu tive que jogar fora quatro vezes o projeto, pois eu só recebia mensagens de erro. Quando usei o Laravel nesse último ano, eu só usei um terminal. O projeto Chirps pede para você trabalhar com três terminais! Um terminal é para ativar o php artisan serve. Outro terminal é para ativar npm run dev. E finalmente outro terminal é para mexer nos códigos. No ano passado, eu vi o npm run dev, mas não sabia para que servia, e eu deixei ele de lado. Mas dessa vez, acabei gostando desse comando, o projeto Chirps mostra a grande mágica do Laravel com a ferramenta npm run dev, ele atualiza no navegador para qualquer alteração que você faz no código em tempo real. Logo adiante, o projeto Chirps pede para você abrir mais um terminal: php artisan tinker. Você digita coisa do tipo Chirp::all( ); e ele mostra o que tem dentro dessa tabela, mas no meu caso apareceu duas vezes a mensagem de erro de que não foi encontrado a classe "Chirp". Ao invés de começar do zero, eu pedi ajuda para o Laracasts e o Lary me respondeu em menos de cinco minutos para eu usar o comando composer dump-autoload. Enfim, em dois dias já consegui chegar no segundo parágrafo do projeto Chirps, e já vi dezenas de ferramentas que eu nunca usei no meu projeto. Ainda faltam mais trinta parágrafos para chegar até o final e assim conseguir o meu diploma de iniciante.