Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.623
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. No MySQL, eu tenho um recurso chamado STORED PROCEDURES, e lá criei o seguinte: CREATE DEFINER=`root`@`localhost` PROCEDURE `procedimento`(teste text) BEGIN select noti from notificao where noti like concat('%',teste); END Eu uso a guia da consulta SQL, assim: call procedimento('m010'), ele vai retornar todos noti que terminam com 'm010'. call procedimento('m100'), ele vai retornar todos noti que terminam com 'm100'. Para o procedimento procurar os noti que começam com um padrão, o procedimento terá que ser mudado após o like, seria assim concat(teste,'%'). Isso é que eu entendi como atualização de consulta.
  2. Em menos de cinco minutos, o fórum do Laracast respondeu a minha dúvida, afirmando que usei errado o comando with no controller, eu usei os nomes das tabelas, quando o correto é usar o nome das relações. Ele também sugeriu para eu usar o nome dos objetos sempre no plural, e eu comentei que não sou capaz nem capaz de saber o nome do objeto no singular. Aqui está a listagem final: app>Http>Controllers>DiarioController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbconta; use App\Models\tbdiario; use App\Models\tbhistprod; use App\Models\tbprod; use App\Models\tbsupervariavel; Use Auth; class DiarioController extends Controller { public function detalhe(Request $request){ $produtos=tbhistprod::with('relProdutos','relPessoas')->where('lcto',$lcto)->get(); dd(compact('produtos'));}} app>Models>tbhistprod.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class tbhistprod extends Model{ use HasFactory; protected $table="tbhistprod"; public function relProdutos(){return $this->belongsTo(tbprod::class);} public function relPessoas(){return $this->belongsTo(tbpessoa::class);}} app>Models>tbpessoa.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class tbpessoa extends Model{ use HasFactory; protected $table="tbpessoa"; protected $primaryKey="codp"; public function relHistorias(){return $this->hasMany(tbhistprod::class);}} app>Models>tbprod.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class tbprod extends Model{ use HasFactory; protected $table="tbprod"; protected $primaryKey="codprod"; public function relHistorias(){return $this->hasMany(tbhistprod::class);}}
  3. Como sempre acontece, o método da tentativa e erro nunca dá certo. Com o pouco que eu sei de inglês, eu abri um tópico em Laracasts. Se alguém vai entender o que eu escrevi, isso eu não sei: Call to undefined relationship [tbprod] on model [App\Models\tbhistprod (laracasts.com)
  4. O tutorial que fala da junção de três tabelas é esse daqui: php - How to join three table by laravel eloquent model - Stack Overflow Aqui eu tenho duas enormes barreiras, a primeira é a língua inglesa e a segunda é a linguagem de programação. Eu não tenho a menor experiência nessas duas áreas, e assim só sobrou o método da tentativa e erro, ou o que os americanos chamam de improvisation. Primeiro eu pego uma folha de papel e faço um esboço do que eu quero, usando a linguagem do tutorial: tbhistprod codprod belongsTo tbprod codp belongsTo tbpessoa tbprod codprod hasMany tbhistprod tbpessoa codp hasMany tbhistprod goal: $produtos=tbhisprod::with('tbprod','tbpessoa')->('lcto',$lcto)->get( ). O próximo passo é usar o VS Code e colocar tudo isso dentro do projeto do Laravel, sem que o VS Code use aquelas minhocas vermelhas debaixo do código.
  5. Hoje eu fiz a minha primeira tentativa de ajuntar três tabelas, precisava traduzir em Eloquent a seguinte consulta SQL: Select * from tbhistprod, tbpesssoa, tbprod where lcto=$lcto and tbhistprod.codprod = tbprod.codprod and tbhistprod.codp = tbpessoa.codp Depois de criar um Model para cada tabela e relacionar todas elas no controller, a sintaxe ficou assim: $produtos=tbprod::join('tbhistprod','tbhistprod.codprod','=','tbprod.codprod') ->join('tbpessoa','tbpessoa.codp','=','tbhistprod.codp')->where('lcto',$lcto)->get( ); Apesar de eu ter conseguido o resultado que eu queria, acredito que essa não é a forma mais adequada. Eu vi um tutorial em que o rapaz definia a relação das tabelas através do Model, usando o conceito de HasMany e BelongsTo. Esse vai ser o meu desafio dessa semana.
  6. COMMIT (oracle.com) Use the COMMIT statement to end your current transaction and make permanent all changes performed in the transaction. A transaction is a sequence of SQL statements that Oracle Database treats as a single unit. This statement also erases all savepoints in the transaction and releases transaction locks. Until you commit a transaction: You can see any changes you have made during the transaction by querying the modified tables, but other users cannot see the changes. After you commit the transaction, the changes are visible to other users' statements that execute after the commit. You can roll back (undo) any changes made during the transaction with the ROLLBACK statement (see ROLLBACK). Oracle Database issues an implicit COMMIT under the following circumstances: Before any syntactically valid data definition language (DDL) statement, even if the statement results in an error After any data definition language (DDL) statement that completes without an error You can also use this statement to: Commit an in-doubt distributed transaction manually Terminate a read-only transaction begun by a SET TRANSACTION statement Oracle recommends that you explicitly end every transaction in your application programs with a COMMIT or ROLLBACK statement, including the last transaction, before disconnecting from Oracle Database. If you do not explicitly commit the transaction and the program terminates abnormally, then the last uncommitted transaction is automatically rolled back. A normal exit from most Oracle utilities and tools causes the current transaction to be committed. A normal exit from an Oracle precompiler program does not commit the transaction and relies on Oracle Database to roll back the current transaction. Achei isso no Google. O problema é que eu não sei nada de inglês.
  7. <?php $teste='[{"id":"3b3686e4-59f1-4e31-857f-f56e356cea25", "code":"PLC","fullCode":"PLACED","orderId":"5e964b70-db99-4175-94b9-ba6813579167", "merchantId":"6fb755ee-b9b0-499c-8c8a-ff6acbd18c73","createdAt":"2023-01-13T19:26:07.886Z"}, {"id":"621ad460-f5a5-4e36-b446-834c1dcbf5d3","code":"PLC","fullCode":"PLACED", "orderId":"5025400f-11df-4318-8fdf-24ac02d0ee99", "merchantId":"6fb755ee-b9b0-499c-8c8a-ff6acbd18c73","createdAt":"2023-01-13T19:26:08.638Z"}]'; $jteste=json_decode($teste); var_dump($jteste); echo "<table>"; foreach($jteste as $jt): foreach($jt as $key=>$j): echo "<tr><td>$key<td>=>$j"; endforeach; echo "<tr style=height:25px>"; endforeach; echo "</table>";
  8. Copiei o seu código e na hora de executar eu obtive a mesma mensagem de erro. Eu uso o Wamp com Windows 11 & Microsoft Edge. Vou verificar se descubro mais alguma coisa. Bom, estudando o seu código, o problema está aqui: <?php header('Location:tela_login.php'); Primeiro, eu criei o arquivo tela_login.php. Não funcionou. Depois eu tirei o espaço que havia entre a diretriz location, dois pontos e o nome do arquivo. Aí a mensagem desapareceu. Acredito que Wamp, Xamp, Windows 11, PHP, Microsoft Edge, Opera são programas que não têm a tecnologia da inteligência artificial, para mim 'location : tela_login.php' é a mesma coisa que 'location:tela_login.php'.
  9. Eu estava pensando nessa sugestão, espero que você goste:
  10. Eu uso o MySQL e também não consegui executar a consulta:
  11. O que é demanda de informática? Tem jeito de citar pelo menos 3 exemplos?
  12. Pedi para montar o mesmo orçamento que deu problema, e assim descobri que a consulta estava errada $sql="select tbhistped.id,tbhistped.ped, tbhistped.codprod, tbhistped.qt as qt, tbhistped.unitario as unitario, tbhistped.subtotal, tbprod.prod as prod, tbprod.un as un from tbhistped inner join tbprod on tbhistped.codprod = tbprod.codprod and tbhistped.ped = $ped order by tbhistped.id"; Apesar da consulta estar errada, o programa funciona na maioria dos casos, quando o correto é não funcionar em nenhum caso. Nessa consulta, eu peço para a consulta procurar itens que existem na tabela de produtos através do codprod. O problema é que eu esqueci de pedir para ele olhar o codprod da tabela de produtos. Essa redação é bem longa, assim, tentei montar a consulta de outra maneira, tipo $sql="select * from tbhistped, tbprod where ped=$ped and tbhistped.codprod = tbprod.codprod order by tbhistped.id"; A redação de 2023 é muito mais fácil de entender do que aquela que inventei em 2020.
  13. Do jeito que você publicou parece que o código PHP está na mesma pagina que o formulário HTML, mas aqui vou supor que são dois códigos diferentes, e o código PHP está no arquivo tela_cadastroDoador.php que é a primeira parte da lista. A minha primeira dúvida é o mysqli, eu acredito que ele não dá suporte para MariaDB, mas só o MySQL. Fiz o teste no MySQL e eu tive que corrigir a redação INSERT TO para INSERT INTO, e também colocar aspas em todas as variáveis alfa numéricas. Para saber se o PHP conseguiu incluir os dados, pedi para ele olhar a variável $result. Caso o mysqli não dê suporte ao MariaDB, você vai ter que trabalhar com o motor PDO do PHP. <?php $conexao=new mysqli("localhost","root","","astudy"); $nome = "Frank"; $cpf = "999.999.999-99"; $email = "frankhosaka@gmail.com"; $senha = "1234"; $result = mysqli_query($conexao, "INSERT INTO doador (nome, cpf, email, senha) VALUES ('$nome', '$cpf', '$email', '$senha')"); var_dump($result); ?>
  14. Ontem, o meu irmão Jorge mostrou um erro no meu programa Orçamento que fiz com o PHP e o MySQL. Eu tentei adicionar um item e excluir todos os itens, mas o erro ficou aparecendo. A minha saída foi entrar diretamente no MySQL e alterar o total do pedido na unha. A conclusão mais óbvia que eu cheguei é que o meu código está errado. Hoje decidi procurar o erro. Tentei usar o MySQL, peguei um orçamento e alterei o valor total. Atualizei a página do PHP no navegador, e o valor errado apareceu por lá. Mas bastou adicionar ou ou excluir um item, que o orçamento já calculou o valor correto. Esse teste eu fiz no computador local. Eu fui lá no site hospedeiro, usei a mesma técnica, mas o programa orçamento de lá já corrige o valor total. Alguém já passou por essa situação constrangedora?
  15. Encontrei essa sugestão $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout ); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Encoding: none','Content-Type: application/pdf')); header('Content-type: application/pdf'); $result = curl_exec($ch); curl_close($ch); echo $result; em Using PHP CURL to display PDF file is just producing strange text - Stack Overflow
  16. Descobri o erro. Na hora de criar a tabela, você precisa especificar o nome do banco de dados também. Alterei o seu código, considerando a chave primária idpessoa e também o motor do innoDB: create database cadastro character set utf8mb4 collate utf8mb4_general_ci; create table `cadastro`.`pessoas` ( `idpessoa` int not null auto_increment, `nome` varchar(30) not null, `nascimento` date, `sexo` ENUM('M','F'), `peso` decimal(5,2), `altura` decimal(3,2), `nacionalidade` varchar(20) default 'Brasil', PRIMARY KEY (`idpessoa`)) Engine=InnoDB;
  17. Eu tentei executar o seu código tirando a palavra pessoas que aparece no final da definição da tabela aqui no meu MySQL Worbench. Ele conseguiu criar o banco de dados cadastro, mas ele se recusa a criar a tabela pessoas, alegando que ela já existe. Vou ver como conserto, e conto depois.
  18. Aqui está o código que lista os dez produtos a partir do produto escolhido pelo usuário: @include('menu') <script> var icontrole document.title='Produto';btmenu.innerHTML='Procurar produto por nome' function controle(comando){ if(comando=="proximo"){ if(icontrole<produtos.options.length){icontrole+=10;show(icontrole)}} if(comando=="anterior"){ if(icontrole>9){icontrole-=10;show(icontrole)}}} function lista(input){ option=Array.prototype.find.call(produto.list.options,function(option){ return option.value === input}) show(option.getAttribute("id"))} function show(j){ j=parseInt(j) divshow.innerHTML="" for(i=j;i<=j+9;i++){ divshow.innerHTML+=produtos.options[i].value+"<br>"} produto.value="" icontrole=j} </script> <div class="w600 m-auto"> <input list=produtos autofocus id=produto onchange=lista(value)> <datalist id=produtos> @foreach($prod as $key=> $pr) <option id={{$key}}>{{$pr->prod}} [{{$pr->codprod}}] @endforeach </datalist></div> <div class="w600 m-auto" id=divshow></div> @if(empty($show)) <script>show(0)</script> @php $show="já começou" @endphp @endif <div class="w600 m-auto"> <input type=submit value=Anterior onclick="controle('anterior')"> <input type=submit value=Próximo onclick="controle('proximo')"> </div> Sobre o código JavaScript preciso comentar que ele funciona graças ao comando j=parseInt(j) - essa é uma dica que eu recebi aqui ou no Imasters. Ele é utilizado num loop para listar os 10 itens, mas por motivo desconhecido ele não funciona como se fosse um inteiro. Assim a função parseInt garante que a variável é do tipo inteiro.
  19. O único jeito que eu encontrei de colocar o banco de dados no HTML foi através do PHP. Usando o seu código, consegui montar algo semelhante (note que não há nenhum código JavaScript): <?php if(isset($_GET['tipoDocumento'])){ echo $tipoDoc=$_GET['tipoDocumento']; echo $dig=$_GET['digitaliza'] ?? null; echo $data=$_GET['data_documento']; echo $codigo=$_GET['codigo_externo']; echo $arquivo=$_GET['arquivo']; $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli("inserto into tbteste (tipoDoc,dig,data,codigo,arquivo) values ($tipoDoc,$dig,$data,$codigo,$arquivo)");} ?> <!DOCTYPE html> <html lang=en> <meta charset=UTF-8> <meta http-equiv=X-UA-Compatible content=IE=edge /> <meta name=viewport content="width=device-width, initial-scale=1.0"> <title>projeto php</title> <form> Tipo de Documento <select name=tipoDocumento> <option value="">Selecione <option value=CNPJ>CNPJ <option value=CPF>CPF </select> <p> Digitaliza: SIM<input type=radio name=digitaliza value=digitaliza> NÃO<input type=radio name=digitaliza value='não digitaliza'> <p> Data do Documento: <input type=date name=data_documento> <p> Código Externo da Caixa: <input name=codigo_externo> <p> Selecione arquivo: <input type=file name=arquivo> <p> <input type=submit> </form>
  20. Agora, estudando o código JavaScript com mais calma, dá para perceber que a variável controleCampo foi intercalado em locais totalmente inesperados. Não é de admirar que o campo não aparece. Eu tirei o contador do controleCampo, eu defini como uma string ' ???? ', e coloquei nos locais mais adequados para ele ser visível: <script> var controleCampo = ' ???? '; function adicionarCampo(){ document.getElementById('form').insertAdjacentHTML('beforeend', '<p>'+ '<div id="formulário"><Label>Tipo de Documento</Label>'+ '<select name="tipos_documentos" id="tipos_documentos">'+ '<option value="">Selecione</option></select><p>'+ '<label>Digitaliza:</label>'+ '<label>SIM</label><input type="radio" name="1" id="sim">' + controleCampo + '<label>NÃO</label><input type="radio" name="1" id="não">'+ controleCampo + '<p><label>Data do Documento:</label>'+ '<input type="date" name="data_documento" id="data_documento">'+ controleCampo + '<p><label>Código Externo da Caixa:</label>'+ '<input type="text" name="codigo_cx_externo" ' + 'id="codigo_cx_externo" placeholder="Código Externo">'+ controleCampo + '<form enctype="multipart/form-data" action="">'+ '<label for="">Upload dos Arquivos:</label>'+ '<input type="file" name="imagem1" id="imagem">'+ controleCampo + '</form></div>') } </script> <spam id=form></spam> <script>adicionarCampo()</script>
  21. Eu ainda não sei como trabalhar com banco de dados no JavaScript, mas para testar o seu código, eu tive que mudar o id do primeiro elemento. Ao invés de "formulario", eu chamei de "form". Essa função cria uma div com id=formulario, logo, não faz sentido ele procurar um elemento que ainda não existe. O meu código ficou assim: <script> var controleCampo = 1; function adicionarCampo(){ controleCampo++; document.getElementById('form').insertAdjacentHTML('beforeend', '<br><br>'+ '<div id="formulário"><Label>Tipo de Documento</Label>'+ '<select name="tipos_documentos" id="tipos_documentos">'+ '<option value="">Selecione</option></select><label>Digitaliza:</label>'+ '<label>SIM</label><input type="radio" name="1" id="sim'+ controleCampo + '"><label>NÃO</label><input type="radio" name="1" id="não'+ controleCampo + '"><label>Data do Documento:</label><input type="date" name="data_documento'+ controleCampo + '" id="data_documento"><br><label>Código Externo da Caixa:</label>'+ '<input type="text" name="codigo_cx_externo" id="codigo_cx_externo'+ controleCampo + '" placeholder="Código Externo"><form enctype="multipart/form-data" action="">'+ '<label for="">Upload dos Arquivos:</label>'+ '<input type="file" name="imagem1" id="imagem'+ controleCampo + '"></form></div>') } </script> <spam id=form></spam> <script>adicionarCampo()</script>
  22. Encontrei nesse endereço Laravel 9 JetStream Livewire CRUD Operations Tutorial | by LaravelTuts | Medium um tutorial para instalar o Livewire no Laravel, ele é um componente que permite criar modal. Eu tentei instalar cinco vezes, mas não consegui. Hoje eu consegui a ajuda do Mix manifest not found at: C:\wamp64\www\example-app\public\/mix-manifest.json (laracasts.com), e assim consegui um roteiro para tornar o tutorial funcional: 1. composer create-project laravel/laravel example-app 2. cd example-app 3. composer require laravel/jetstream 4. php artisan jetstream:install livewire 5. npm install 6. npm run dev 7. verificar /app/Providers/AppServiceProvider.php <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Schema; class AppServiceProvider extends ServiceProvider{ /* Register any application services. @return void */ public function register(){} /* Bootstrap any application services. @return void */ public function boot(){Schema::defaultStringLength(191);} } 8. php artisan migrate 9. php artisan make:migration create_products_table 10. copiar código do tutorial em database/migrations/2022_12_31_184629_create_products_table.php 11. php artisan migrate 12. php artisan make:model Product 13. copiar código do tutorial em app/Models/Product.php 14. php artisan make:livewire products 15. copiar código do tutorial em app/Http/Livewire/Products.php 16. copiar código do tutorial em resources/views/livewire/products.blade.php 17. criar e copiar código do tutorial em resources/views/livewire/create.blade.php 18. copiar código do tutorial em resources/views/layout/app.blade.php 19. ADICIONAR código do tutorial em routes/web.php 20. alterar código de resources/views/layout/app.blade.php onde tiver <!-- Styles --> <link rel="stylesheet" href="{{ mix('css/app.css') }}"> <script src="https://cdn.tailwindcss.com/?plugins=forms"></script> @livewireStyles <!-- Scripts --> <script src="{{ mix('js/app.js') }}" defer></script> mudar para <!-- Styles & Scripts --> <script src="https://cdn.tailwindcss.com/?plugins=forms"></script> @livewireStyles @vite(['resources/css/app.css','resources/js/app.js']) 21. php artisan serve e rezar bastante. Feliz Ano Novo!
  23. Bacana, Wash! Faz dois anos que eu quebro a cabeça com esse json_decode, mas nunca imaginei em colocar o string diretamente nele, sempre coloquei num outro string, e o Json_decode me retornava null. Valeu, viver é aprender!
×
×
  • Criar Novo...