
Frank K Hosaka
Membros-
Total de itens
1.623 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
A minha ideia era colocar uma caixa para localizar produtos, usando o JavaScript para fazer uma lista dos dez produtos seguintes ao produto que o usuário está procurando. Usei o famoso loop for(i=j;i<=j+9;i++), mas ele funcionou só uma vez. Nas outras vezes, o JavaScript listou todos os produtos a partir do produto selecionado. Para evitar esse transtorno, olha só a gambiarra que eu fiz: resources > views > produto.blade.php @include('menu') <script> document.title='Produto';btmenu.innerHTML='Procurar produto por nome' function show(j){ divshow.innerHTML="" divshow.innerHTML+=produtos.options[j].value+"<br>";j++ divshow.innerHTML+=produtos.options[j].value+"<br>" divshow.innerHTML+=produtos.options[j+1].value+"<br>" divshow.innerHTML+=produtos.options[j+2].value+"<br>" divshow.innerHTML+=produtos.options[j+3].value+"<br>" divshow.innerHTML+=produtos.options[j+4].value+"<br>" divshow.innerHTML+=produtos.options[j+5].value+"<br>" divshow.innerHTML+=produtos.options[j+6].value+"<br>" divshow.innerHTML+=produtos.options[j+7].value+"<br>" divshow.innerHTML+=produtos.options[j+8].value+"<br>"} function procurar(valor){ for(i=0;i<produtos.options.length;i++){ if(produtos.options[i].value==valor){ j=produtos.options[i].getAttribute('data-id')}} show(j)} </script> <div><p><p> <form> <input list=produtos autofocus id=produto onchange=procurar(value) autofocus> <datalist id=produtos> @foreach($prod as $key => $pr) <option data-id={{$key}} value='{{$pr['prod']}}'> @endforeach </datalist></form></div> <div id=divshow></div> <script>show(0)</script> O código que funciona apenas uma vez é esse daqui, eu não sei o que eu fiz de errado: @include('menu') <script> document.title='Produto';btmenu.innerHTML='Procurar produto por nome' function show(j){ divshow.innerHTML=""; for(i=j;i<j+9;i++){divshow.innerHTML+=produtos.options[i].value+"<br>";}} function procurar(valor){ for(i=0;i<produtos.options.length;i++){ if(produtos.options[i].value==valor){ j=produtos.options[i].getAttribute('data-id');}} show(j);} </script> <div><p><p> <form> <input list=produtos autofocus id=produto onchange=procurar(value) autofocus> <datalist id=produtos> @foreach($prod as $key => $pr) <option data-id={{$key}} value='{{$pr['prod']}}'> @endforeach </datalist></form></div> <div id=divshow></div> <script>show(0)</script> Fiz o teste no PHP, mas o problema persiste: <?php $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select * from tbprod order by prod"); $prod=$query->fetch_all(MYSQLI_ASSOC);?> <script> document.title='Produto';btmenu.innerHTML='Procurar produto por nome' function procurar(valor){ for(i=0;i<produtos.options.length;i++){ if(produtos.options[i].value==valor){ j=produtos.options[i].getAttribute('data-id');}} divshow.innerHTML=""; for(i=j;i<j+9;++i){divshow.innerHTML+=produtos.options[i].value+"<br>";}} function show(j){ divshow.innerHTML=""; for(i=j;i<j+9;++i){divshow.innerHTML+=produtos.options[i].value+"<br>";}} </script> <div><p><p> <form> <input list=produtos autofocus id=produto onchange=procurar(value) autofocus> <datalist id=produtos> <?php foreach($prod as $key=>$pr){echo "<option data-id=$key value='".$pr['prod']."'>";} ?> </datalist></form></div> <div id=divshow></div> <script>show(0)</script>
-
Encontrei o tutorial do JavaScript nessa página: HTML DOM Datalist options Collection (w3schools.com) Com ele, montei um código para mostrar os dez primeiros itens do <input list>. Ele usa a linguagem Blade Laravel, mas dá para adaptar no PHP, é só trocar tudo o que estiver depois do @ com o comando PHP equivalente. O Laravel já tem um comando para paginar a lista de produtos, mas ele só é funcional para 150 itens, o meu passa de 1.500 itens, logo vou precisar do JavaScript para criar o meu próprio roteiro de paginação. A minha ideia é paginar os dez próximos itens do que o usuário estiver procurando. resources>views>produto.blade.php @include('menu') <script> document.title='Produto';btmenu.innerHTML='Procurar produto por nome' function show(){ divshow.innerHTML="" for(i=0;i<=9;i++){ divshow.innerHTML+=produtos.options[i].value+"<br>"}} </script> <div><p><p> <form> <input list=produtos autofocus name=produto> <datalist id=produtos> @foreach($prod as $pr) <option value='{{$pr->prod}} [{{$pr->codprod}}]'> @endforeach </datalist></form></div> <div id=divshow></div> <script>show()</script>
-
Select variável em php
pergunta respondeu ao thiagoaf19 de Frank K Hosaka em Tutoriais & Dicas - PHP
Ótimo, agora só falta você acrescentar a tag resolvido na mensagem. -
Select variável em php
pergunta respondeu ao thiagoaf19 de Frank K Hosaka em Tutoriais & Dicas - PHP
Eu fiz o teste com esse código <?php $dtAno=2022;$dtMes=12; $dtSelect=$dtAno.' as ano,'.$dtMes.' as mes'; $sql=$dtSelect; echo $sql; // resultado: 2022 as ano,12 as mes E tudo indica que ele funciona, mas não faz sentido eu escrever algo do tipo "Select 2022 as ano". Se você usa números como nome de campos, pelo menos você tem que separá-los com vírgulas, como eu fiz no exemplo. -
routes>web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\diarioController; Route::get('teste',[diarioController::class,'teste']); app>Http>Controllers>diarioController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class DiarioController extends Controller { public function teste(request $request){ if($request->input('inpteste')){return 'olá ,'.$request->input('inpteste')."!";} return "<form>Nome <input name=inpteste></form>";} }
-
Ano da Data cadastrada no Banco de Dados
pergunta respondeu ao thiagoaf19 de Frank K Hosaka em Tutoriais & Dicas - PHP
Se você quer a data de hoje, a gramática é $dt=date('d/m/Y'). Para carregar no banco de dados, o formato tem que ser assim: $dt=date('Y-m-d'). -
<script> function painel(texto){ tamanho=texto.length i1=texto.indexOf("#");texto1=texto.substr(0,i1);texto=texto.substr(i1+1,tamanho);tamanho-=i1 i1=texto.indexOf("#");texto2=texto.substr(0,i1);texto=texto.substr(i1+1,tamanho);tamanho-=i1 i1=texto.indexOf("#");texto3=texto.substr(0,i1);texto=texto.substr(i1+1,tamanho);tamanho-=i1 i1=texto.indexOf("#");texto4=texto.substr(0,i1);texto=texto.substr(i1+1,tamanho);tamanho-=i1 i1=texto.indexOf("#");texto5=texto.substr(0,i1);texto=texto.substr(i1+1,tamanho);tamanho-=i1 texto6=texto.substr(0,tamanho) divtexto.innerHTML+='<table><tr><td>Nome<td>'+texto1+'<td>codp<td>'+texto2+'<tr><td>CNPJ<td>'+texto3+ '<tr><td>Endereço<td>'+texto4+'<tr><td>Telefone<td>'+texto5+'<tr><td>Nota<td>'+texto6+'<tr><td>----' inpProcura.value='';inpProcura.focus()} </script> <?php $mysqli=new mysqli("localhost","root","","diario"); $query=$mysqli->query("select * from tbpessoa order by pessoa"); echo "<input id=inpProcura type=text list=pessoas onchange=painel(value) autofocus>"; echo "<datalist id=pessoas>"; while($row=$query->fetch_assoc()){ echo "<option value='".$row['pessoa']."#".$row['codp']."#".$row['cnpj']."#". $row['end']."#".$row['tel']."#".$row['nota']."'>";} echo "</datalist>"; echo "<p><div id=divtexto></div>";
-
No arquivo exemplo.blade.php tenho um código assim: <input value={{$dados->valor}}> O <input> aqui serve para mostrar o valor de um lançamento contábil, mas também serve para receber novo valor para alterar o lançamento contábil. Eu não lembro como resolvi o problema da formatação no PHP, mas o Google me pediu para estudar a formatação no PHP para resolver esse drama no Laravel. Mas para a minha surpresa, ao invés de resolver o problema no view exemplo.blade.php, ele pede para resolver no model tbdiario, assim: <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class tbdiario extends Model{ use HasFactory; protected $table="tbdiario"; protected $primaryKey="docto"; protected $fillable=['dia','contad','contac','valor','hist']; public function getValorAttribute($value){ return number_format($value,2,",",".");} public function setValorAttribute($value){ $value=str_replace(".","",$value); $this->attributes['valor']=str_replace(',','.',$value); } As duas útimas funções é que fazem a mágica da formatação, ele mostra o valor no formato brasileiro, mas na hora que você digita o novo valor, ele vai traduzir no formato PHP. É muito engenhoso! Antes do view exibir o valor de um campo, ele vai procurar no model se existe uma função get[Campo]Attribute ou set[Campo]Attribute no model. Ainda não sei se é possível imitar um negócio desses no PHP. Mas o que eu mais gostei foi a atualização de um registro contábil. No PHP, eu tinha que olhar cada campo para ver se foi alterado para depois atualizar. Já o Laravel é bem mais simples: <?php namespace App\Http\Controllers; use App\Models\tbdiario; use App\Models\tbsupervariavel; use Illuminate\Http\Request; class DiarioController extends Controller { public function diario(request $request) { if($request->input('docto')){ $docto=tbdiario::find($request->input('docto')); $docto->fill($request->input())->save();}} Para mim, está valendo a pena estudar o Laravel. Essa é a primeira vez que aprendo a olhar uma tabela como uma classe com propriedade e métodos. O certo é estudar o PHP para depois ver o Laravel. Estou fazendo o inverso, e com isso já consertei o banco de dados, e também estou consertando o meu projeto que está em PHP.
-
Eu estou estudando o banco de dados desde 1990, comecei com o DBase e depois eu fui para Access. O problema do Access é que eu não encontrei uma forma de conectar as tabelas com o HTML. Em 2020, eu conheci o MySQL, mas ele também não conecta as tabelas com o HTML. Quem faz essa mágica é o PHP, e o PHP é capaz de fazer uma ponte entre o MySQL e o HTML, mas o PHP precisa de um servidor. No meu caso, eu uso o WampServ. Se eu fosse fazer esse trabalho, eu iria criar uma tabela assim tbCEP com os campos id (chave primária com auto incremento), CEP, NomeRua. Depois iria criar um código PHP assim <?php $mysqli=new mysqli("localhost","root",""."astudy"); $query=$mysqli->query("select * from tbCEP"); $rows=$query->fetch_all(); echo "Oá mundo, aqui está a minha tabela de CEP <br>"; var_dump($rows);
-
Receber dados na mesma tela;
pergunta respondeu ao Wesley Goncalves de Frank K Hosaka em Tutoriais & Dicas - PHP
Ou você pode apelar para a gambiarra: <!-- itens_selecionar.php --> <form action=itens_selecionar.php method=post> <label>Item</label> <input type=text name=item_pesquisado id=inpItem> <button type=submit>Enviar</button> </form> <?php if(isset($_POST['item_pesquisado'])){ $conexao=new mysqli("localhost","root","","diario"); $item_pesquisado=mysqli_real_escape_string($conexao,$_POST['item_pesquisado']); echo "<p>O item pesquisado é o $item_pesquisado"; echo "<script>inpItem.value='$item_pesquisado'</script>";} ?> Ou: <?php if(isset($_POST['item'])){$item=$_POST['item'];} else {$item="";} echo "<form method=post>Item <input name=item value='$item'><button>Enviar</form>"; ?> Para fazer da maneira correta, siga o Iowys e o Wash. Para fazer gambiarra, é comigo mesmo. -
Comecei a estudar os códigos do php campos_selects.php, editar_doc.php, processa_editar_doc.php, mas as imagens falam que o problema está no cadastro do documento. O código dessa rotina não foi passado por aqui. Eu acredito que o problema está justamente nesse arquivo, é ele que controla os outros arquivos, eu acho. O certo é zipar todo o projeto e mandar tudo de uma vez, mas o fórum não suporta arquivos zipados. Enfim, tem que ter paciência, mas eu agradeço pela sua mensagem. É muito raro alguém mandar a estrutura do banco de dados com alguns dados para trabalhar, e até alguns códigos em PHP. A maior parte só escreve assim "tenho problema", mas você foi muito além. Você usa o input_filter do PHP, eu já vi isso três vezes aqui no fórum, mas nunca cheguei a estudar. Por isso, fiquei interessado no seu projeto.
-
Bom dia, Flaviac, Não consegui importar a tabela documento. Eu defini ID_DOC como chave primária, mudei o ID_DOC para não haver repetição de números, mas não consigo executar esse comando INSERT INTO `documento` (`ID_DOC`, `NUMERO_DOC`, `TIPO_DOC`, `TITULO`, `INTERESSADO`, `OBS`, `PERIODICIDADE`) VALUES (13, '299814/2022-10', 26, 'Folha de Ponto', 'Beatriz Bernardes', '', 6), (14, '152156/2021-12', 4, 'Compra de Material', 'Fernando Carvalho', '', 5), (15, '056932/2018-20', 8, 'Declaração', 'Kátia de Souza', 'ingresso em 2019.', 5), (16, '084165/2020-33', 9, 'Ata Extraordinária', 'Unidade', '', 2), (17, '098632/2019-22', 1, 'Processo', 'Bruna Caxias', '', 5), (18, '166320/2021-15', 6, 'Ata VCE', 'Edivaldo Rogério da Silva', '', 2), (19, '299664/2022-38', 8, 'Declaração', 'Caio de Almeida', '', 5), (20, '289946/2022-08', 1, 'Processo', 'Ana Maria Costa Vitorino', '', 5), (21, '352214/2022-13', 8, 'Declaração', 'Noeli da Silva Araujo', 'referente a compra do mês 03/22.', 5), (22, '201533/2022-32', 17, 'Carta de Comparecimento', 'Renato Vasconcelos Farias Araújo', '', '', 3); O MySQL retorna esse erro: Error Code: 1136. Column count doesn't match value count at row 10 O chato é que eu não consigo ver aonde está o erro. Se eu for incluir um a um, dá certo, mas não consigo entender porque não consigo executar tudo de uma vez. Ao invés de resolver o seu problema, eu só encontrei um outro. ------ Consegui achar! O último registro tem 8 colunas, mas a tabela tem 7 colunas. Isso me deixou intrigado: como o MySQL cria um script com essa discrepância? Ou foi você que editou na unha o script do banco de dados na hora de publicar aqui no fórum?
-
O encodeURI não ajuda a variável $_GET pegar tudo, quando o código não usa o <form>. O <form> é o melhor meio para o $_GET pegar tudo o que tiver na barra de endereço mesmo com o caractere &. Sem o <form>, a gambiarra do htmlspecialchars para JavaScript é bacana, ou seja, tudo que gera problema, o usuário troca o problema por outra coisa que o $_GET consiga pegar. Usei esse código para testar: <?php if(isset($_GET['teste'])){echo "<a style=color:red>".$_GET['teste']."</a><p>";} ?> <form> form sem encodeURI<input name=teste value="João & Maria" onclick=submit()><p> form com encodeURI <input name=teste value="João & Maria" onclick=encodeURI(value);submit()><p> </form> sem form sem encodeURI <input value="João & Maria" onclick=location.replace('?teste='+value)><p> sem form com encodeURI <input value="João & Maria" onclick=location.replace('?teste='+encodeURI(value))>
-
Hoje precisei fazer manutenção num código bem antigo, do tempo que não sabia como usar o HTML e muito menos o JavaScript. O meu código não conseguia pegar tudo o que estava na barra de navegação com o comando $_GET. No Google, encontrei a solução nesse endereço: PHP’s htmlspecialchars Implemented in JavaScript | by Charles Stover | Medium Como o código não funcionou comigo, fiz várias mudanças até ele funcionar. Ele ficou assim: <script> htmlsp.specialchars = [[ '&', 'e' ]] function htmlsp(string) { escapedString = string; len=htmlsp.specialchars.length; for (var x = 0; x < len; x++) { escapedString = escapedString.replace( new RegExp(htmlsp.specialchars[x][0], 'g'), htmlsp.specialchars[x][1]);} return escapedString;}; </script> <?php if(isset($_GET['teste'])){echo "<a style=color:red>".$_GET['teste']."</a><p>";} ?> <form> form sem htmlspecialchars <input name=teste value="João & Maria" onclick=submit()><p> form com htmlspecialchars <input name=teste value="João & Maria" onclick=value=htmlsp(value);submit()><p> </form> sem form sem htmlspecialchars <input value="João & Maria" onclick=location.replace('?teste='+value)><p> sem form com htmlspecialchars <input value="João & Maria" onclick=location.replace('?teste='+htmlsp(value))>
-
Depois de pesquisar o Google e várias tentativas e erros, finalmente descobri um jeito de descobrir o usuário através da senha. class AuthController extends Controller{ public function postLogin(Request $request){ //$request->validate(['email' => 'required','password' => 'required']); $request->validate(['password'=>'required']); $email='tentativa@erro.com'; $user=User::where('id',1)->get()->toArray(); if(Hash::check($request->input('password'),$user[0]['password'])){$email=$user[0]['email'];} $user=User::where('id',2)->get()->toArray(); if(Hash::check($request->input('password'),$user[0]['password'])){$email=$user[0]['email'];} //$credentials = $request->only('email', 'password'); $credentials=['email'=> $email,'password'=>$request->input('password')]; if (Auth::attempt($credentials)) { return redirect()->intended('dashboard')->withSuccess('You have Successfully loggedin');} return redirect("")->withSuccess('Oppes! You have entered invalid credentials');} } Mas esse código não funciona se você não mexer também no Models class User extends Authenticatable { // protected $hidden = ['password','remember_token',]; } Aqui estou pedindo para exibir o campo password da tabela users. O Laravel é muito engenhoso!
-
Eu consegui tirar o campo Email da tela do Login (basta usar <!--div /div-- > no bloco que pede o email. Claro que só isso não basta. Eu encontrei uma dica bacana em php - Laravel: Using only password auth for intranet app - Stack Overflow. A sugestão é essa $credentials = [ 'email' => 'intranet@intranet', 'password' => $request->input('password') ]; isso no LoginController. A solução é bem engenhosa, mas só funciona se você colocar todo o projeto na mão de um único usuário. No meu caso, tenho dois usuários. Fiz uma bela gambiarra que deu certo, mas não vou publicar aqui para não virar motivo de piada. Eu tentei usar o recurso de localizar o usuário pela senha, mas eu não consegui porque a senha está criptografada. Se você usar o recurso Hash::make('senha'), ele sempre vai gerar uma senha nova e nunca vai ser igual ao que foi gravado na tabela. Tentei usar o recurso Cript::decript, mas ele pediu mais um argumento além da senha textual. Decidi fazer uma gambiarra, e esquecer tudo isso, e trabalhar com o campo email se surgir um terceiro usuário.
-
Para trabalhar com o projeto PHP com um PC e um celular, eu criei dois usuários através de duas senhas na tbsupervariavel, que pode ser facilmente modificado com o MySQL. Já o Laravel é bem mais organizado. Ele criou uma tabela chamada users, e dentro dele tem email, password e outros campos. Não dá para modificar a senha pelo MySQL, se você fizer isso, o usuário nunca mais vai conseguir logar no Laravel. O password da tabela user não é um texto, não é um código hexadecimal tipo md5, é coisa bem particular só do Laravel. Logo, eu precisei buscar o código de atualização da senha no Google, e foi fácil encontrar: How to change password in laravel 9 (techtoolindia.com). Tentei implantar no meu projeto, e só tive problema no view, aonde o tutorial escreveu @extends('layouts.app') eu mudei para @extends('layout'). O maior problema é que o Laravel pede uma senha de pelo menos 6 caracteres. Isso é muito para mim, 4 caracteres é o ideal para mim. O meu projeto é simples, estou pensando em tirar o campo email, para facilitar o trabalho de login. Mas para alterar o número de caracteres, eu alterei essa função: class AuthController extends Controller{ public function postRegistration(Request $request){ $request->validate(['name' => 'required','email' => 'required|email|unique:users', 'password' => 'required|min:4',]);
-
Quando apertei o comando Logout na barra de navegação do Laravel ou na barra de navegação que eu criei, eu tive a resposta 404 Not Found. Levei cinco dias no Google para encontrar a resposta. O problema está na route que foi definido no arquivo web.php Route::get('', [AuthController::class, 'index'])->name('login'); Route::get('logout', [AuthController::class, 'logout'])->name('logout'); e também no método definido em AuthController: public function logout() {Session::flush();Auth::logout();return Redirect('login');} A sugestão que eu encontrei e que deu certo foi alterar o método: public function logout() {Session::flush();Auth::logout();return Redirect('');} Pelo que entendi, o melhor é não usar o apelido da rota, quando usar o comando redirect.
-
Eu ainda não sei como cadastrar um usuário no banco de dados, mas no meu código PHP eu consegui criar dois usuários com a variável global $_SESSION. Eu criei o usuário $_SESSION['id']=1 e o outro usuário é o $_SESSION['id']=2. O nome do programa é orçamento. Ele é controlado pela tabela supervariável onde tem o número do orçamento em que o usuário está trabalhando. Eu pensei que precisaria mexer no programa orçamento para suportar mais de um usuário, mas decidi não mexer nada. Eu mexi na tabela supervariável, onde só havia um registro, com o código codsuper=1. Eu criei um outro registro com os mesmos dados, mas com o codsuper=2. No programa orçamento, onde havia $query=$mysqli->query("select * from tbsupervariavel"), eu alterei para $codsuper=$_SESSION['id']; $query=$mysqli->query("select * from tbsupervariavel where codsuper=$codsuper"); Eu fiz a mesma coisa onde havia a ocorrência do update da tbsupervariavel. E assim consegui executar o orçamento no PC e um outro orçamento no celular, usei apenas um login diferente, e assim consegui trabalhar com dois orçamentos diferentes ao mesmo tempo! Estou super contente, mesmo que a Croácia tenha conseguido acertar todos os penaltis.
-
Estudei o componente Bleeze e encontrei exatamente o que eu queria, uma tela com o nome de quem estava logado no topo da tela. Mas na hora de ver como fazer isso, eu só encontrei {{_('Dashboard')__}} e não consegui achar mais nada a respeito desse comando. Assim eu decidi trabalhar com o Laravel básico, sem nenhum componente. E assim começou a minha pesquisa no Google, e depois de várias tentativas e erros, encontrei um tutorial de como fazer o nome do usuário logado no topo da tela: Laravel 9 Custom Login and Registration Example - ItSolutionStuff.com O problema do Google é que tem muitas respostas, mas a maioria não funciona no ambiente do Laravel 9. Nesse tutorial que eu encontrei, eu me deparei com o misterioso {{_('Dashboard')__}}, tudo o que ele faz é botar o nome do usuário no topo da tela mas com a logomarca da Laravel. Para fazer algo mais personalizado, o jeito é estudar bastante, mas pelo menos eu aprendi que não preciso instalar o componente Breeze, por enquanto. Com a ajuda do Google, consegui colocar o nome do usuário no topo da tela, criei um arquivo menu.blade.php com esse comando {{ auth()->user()->name }}. No PHP, eu usei a variável global $_SESSION, mas todo o projeto ficou amarrado com o valor de duas senhas. Estudando o Laravel pretendo consertar novamente o banco de dados e o código PHP que suporta apenas um usuário.
-
utilizar AJAX com XMLHttpRequest
pergunta respondeu ao Juscelinoo de Frank K Hosaka em Tutoriais & Dicas - PHP
Eu tentei executar o seu código, mas ele não funcionou. Eu fiz as seguintes adaptações: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script> function enviarViaAjax(){ alert("resposta Não OK do LADO do XMLHttpRequest.readyState"); } enviarViaAjax() </script> O JavaScript é coisa nova para mim. Tudo o que eu sei do JavaScript eu aprendi com o Iowys e o Wash aqui no fórum. Para eu usar as funções do ajax, eu preciso conectar o HTML com a biblioteca do ajax através do primeiro código <script src>. Para colocar o Javascript no HTML eu preciso usar o marcador <script></script>. Outra coisa que eu aprendi com o Iowys e o Wash foi separar os códigos, o <?php ?> de um lado, e o <script></script> do outro lado. O Iowys me orientou a separar o PHP e o HTML. Eu ainda não consegui, estou estudando o Laravel para ver se é possível separar essas duas linguagens de programação. Mas misturar <?php ?> com <script>, você é o primeiro caso aqui no fórum, mas eu aconselho a não fazer isso a menos que seja estritamente necessário. -
Ah, eu esqueci a peça mais importante do frankstein: é a maquiagem! How to Install Bootstrap in Laravel 9? | by LaravelTuts | Medium mas eu não consegui instalar depois de muitas tentativas. Olhando o documento oficial do Laravel, só encontrei uma nota afirmando que as versões novas já vem o componente Vite. Como fazer o Bootstrap trabalhar com o Vite, isso não tem nenhuma palavra, assim fica por sua conta e risco tentar vários tutoriais que tem na internet, eles alegam que funciona, mas o meu não funcionou. Eu usei várias vezes o comando npm install && npm run dev, mas só recebi o alerta de que o projeto estava inconsistente. É uma pena. Certamente eu estaria podre de rico se conseguisse fazer um frankstein andar.
-
Finalmente, decidi acrescentar o modal do Livewire no meu projeto frankstein (How to build modals with Laravel and Livewire (philo.dev). O Laravel me incentivou a consertar o meu banco de dados bem como a melhorar o meu código PHP que criei em 2020. Não dá para traduzir diretamente o PHP em Laravel, tem muita coisa que o Laravel oferece mas que eu não havia previsto no meu código, o Laravel valoriza o planejamento, já o PHP é flexível demais e você não consegue escapar da tentação de fazer gambiarra. Claro que o PHP consegue montar um frankstein tão bom quanto o Laravel, mas chega uma hora que a consciência dói e uma voz lá no fundo grita: a gambiarra não compensa.
-
Depois de instalado o Laravel Breeze, ele mostra a tela do Welcome e lá em cima tem a opção de login e register, isso quando você usa localhost:8000 na tela do navegador. No meu caso, eu só tenho 2 usuários, e não preciso criar novos usuários no momento. Logo, só a rotina do login já é suficiente. Para fazer isso, eu alterei o route do Breeze assim: <?php use App\Http\Controllers\ProfileController; use Illuminate\Support\Facades\Route; //Route::get('/', function () {return view('welcome');}); //Route::get('/dashboard', function () {return view('dashboard');})->middleware(['auth', 'verified'])->name('dashboard'); //Route::middleware('auth')->group(function () { // Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); // Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); // Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');}); require __DIR__.'/auth.php'; Route::get('/',function() {return view('auth.login');}); Route::get('/dashboard',function(){return "olá mundo";});
-
Ontem eu tive coragem de ler novamente o manual do Laravel, é um texto bem difícil, ele está escrito em inglês e usa muitos termos técnicos do tipo "framework", coisa que eu não ainda não encontrei nenhuma palavra em português a não ser "frankstein", um monstro montado com vários pedaços roubados lá da funerária. Em 2020, eu aprendi a usar o PHP e o JavaScript. O PHP é capaz de abrir uma tabela no MySQL e mostrar para o usuário as informações disponíveis na tabela. Já o JavaScript é capaz de enxergar a escolha que o usuário fez. E só existe um espaço para ajuntar esses dois recursos, é o HTML. Estudar PHP e JavaScript para montar uma página HTML não é nada fácil. Foi pensando nesse drama é que inventaram o Laravel, é um frankstein. Existem muitos outros frankstein na internet. Ontem eu consegui instalar um novo componente no meu projeto, ele se chama Laravel Breeze. Esse componente pega o RG do usuário. De 2020 até 2022, eu usei esse código em HTML para pegar o RG do usuário: <form method=post> Qual é a senha? <input name=senha> </form> Ou seja, eu usei a senha para identificar o usuário, é um programinha bem pangaré e através dele eu consegui separar as páginas de HTML, quem usava a senha 1234 podia ver todas as páginas, e quem tinha a senha 4321 só as páginas menos importantes. Já o Laravel Breeze é bem esperto. Ele pega o RG do usuário e grava numa tabela. Eu precisaria de uns 20 anos para montar uma solução desse tipo tipo, já o Laravel Breeze só precisa de cinco minutos, basta apenas ter experiência para costurar. Graças a minha falta de experiência, eu tive que criar um novo projeto pelo composer, pois eu havia jogado fora o arquivo welcome.blade.php, sem isso não tem como instalar o Laravel Breeze; no novo projeto é preciso configurar o banco de dados, tanto no arquivo .env bem como no config/database.php, isso sem esquecer de fazer o artisan migrate e npm install para ter uma cirurgia bem sucedida.