Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.581
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. Passei o dia todo estudando a função __construct( ). Ele não é nada fácil, o máximo que eu consegui com o meu método científico de tentativa e erro foi isso: <?php class conexao extends \PDO { public $bd=null; public $dsn="mysql:dbname=astudy;host=localhost"; public $username='root'; public $password=''; function __construct(){ $this->bd = new PDO($this->dsn,$this->username,$this->password); return $this->bd;}} $frank= new conexao; $query=$frank->bd->query("select * from tbprod"); var_dump($query->fetch()); Eu tentei escrever $frank->query, mas o PHP reclamou que eu não inicializei o objeto PDO, que eu deveria fazer uma referência ao construtor. A única maneira que eu vi para fazer referência ao construtor foi puxando a propriedade bd, ou seja, $frank->bd Na montagem da classe, note que coloquei todas as variáveis como público. Você pode mudar tudo para private, menos o $bd.
  2. Eu fiz mais um teste, e percebi que não preciso definir a relação da tbprod com a tbhistprod e nem da tbpessoa com a tbhistprod. Eu só preciso definir a relação no Model da tbhistprod com as outras duas tabelas assim: 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 produtos(){return $this->belongsTo(tbprod::class,'codprod');} public function pessoas(){return $this->belongsTo(tbpessoa::class,'codp');}} Note que apareceram os campos 'codprod' e 'codp' nas relações, senão o Eloquent iria procurar o campo 'id' como chave primária nas outras tabelas, o que não é o caso. O controller ficou assim: app>Http>Controllers>DiarioController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbhistprod; class DiarioController extends Controller { public function detalhe(Request $request){ $produtos=tbhistprod::with('produtos','pessoas')->where('lcto',$lcto)->get(); $soma=$produtos->sum('custototal'); return view('detalhe',compact('detalhe','contas','produtos'),['soma'=>$soma]);}} E, finalmente, no detalhe.blade.php, para obter o nome do produto, você precisa mencionar a relação assim: {{{$produtos->produtos->prod}}} e para obter o nome do fornecedor, assim {{{$produtos->pessoas->pessoa}}}
  3. Esse sim é um json de verdade! Eu consegui isso itemId 41eea8db-b3f8-4807-97b0-384f1b40dcb7 categoryId 371b26a6-86e5-46b8-9a19-3d379afae666 itemExternalCode c01-i001 categoryName Categoria Item Normal categoryIndex 2 itemName Sanduíche itemDescription Descrição do item... logosUrls 0 elementos itemIndex 0 itemPrice 20 itemMinSalePrice 20 itemSchedules 0 elementos itemOptionGroups 2 elementos e mais uns dez desse tipo, com o código: <?php $teste='[ etc etc ]'; $jteste=json_decode($teste); // var_dump($jteste); echo "<table>"; foreach($jteste as $j){ echo " <tr><td>itemId<td>$j->itemId <tr><td>categoryId<td>$j->categoryId <tr><td>categoryName<td>$j->categoryName <tr><td>categoryIndex<td>$j->categoryIndex <tr><td>itemName<td>$j->itemName <tr><td>itemDescription<td>$j->itemDescription <tr><td>logosUrls<td>".count($j->logosUrls)." elementos <tr><td>itemIndex<td>$j->itemIndex <tr><td>itemPrice<td>".$j->itemPrice->value." <tr><td>itemMinSalePrice<td>$j->itemMinSalePrice <tr><td>itemSchedules<td>".count($j->itemSchedules)." elementos <tr><td>itemOptionGroups<td>".count($j->itemOptionGroups)." elementos <tr height=50px> "; } Esse json tem centenas de itens, eu só listei alguns. Tem algumas chaves que não têm a propriedade itemExternalCode, logo vai dar problema se você pedir para imprimir. Alguns itens são arrays, você não pode imprimir diretamente, mas você pode contar os elementos. Para imprimir, por exemplo, o item $j->logosUrls, você teria que fazer algo do tipo $logo=$j->logosUrls; foreach($logo as $L){echo $L->campo."<br>";} Para saber quem é uma propriedade ou um array, você precisa dar uma olhada antes no objeto através do comando var_dump( ). Espero ter ajudado.
  4. Achei isso na internet: Moodle in English: Exception - Argument 1 Error
  5. Não consegui transformar o string em json usando json_decode json_encode do PHP. Agora, vou pegar uma chave e trabalhar por parte, e ver se encontro algum padrão. Peguei a primeira chave "itemId" e eu consegui essas chaves: itemId categoryId itemExternalCode categoryName categoryIndex itemName itemDescription logosUrls itemIndex itemPrice itemMinSalePrice itemSchedules itemOptionGroups itemGeneralTags itemProductTags eu usei esse código: <?php $teste=' {"itemId":"961c2637-5d9a-3e23-8bb6-beace6ea5592", etc etc }'; $jteste=json_decode($teste); foreach($jteste as $key=>$value){echo $key."<br>";} Já a última chave itemId, não consegui transformar em json. Visualmente ele não segue o padrão da primeira chave com que trabalhei. Eu desconfio que isso daí é um arquivo XML, e nisso eu não tenho a menor experiência. Tentei importar no Microsoft Excel, mas não ajudou muito.
  6. O código que publiquei não funciona, pois eu não segui a nomenclatura sugerida pelo manual do Laravel. A chave primária da tbprod é codprod e não id. A chave primária da tbpessoa é codp e não id. Logo, para o código acima funcionar, ela tem que ser consertada assim: <?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,'codprod');} public function relPessoas(){return $this->belongsTo(tbpessoa::class,'codp');}}
  7. 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.
  8. 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);}}
  9. 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)
  10. 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.
  11. 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.
  12. 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.
  13. <?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>";
  14. 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'.
  15. Eu estava pensando nessa sugestão, espero que você goste:
  16. Eu uso o MySQL e também não consegui executar a consulta:
  17. O que é demanda de informática? Tem jeito de citar pelo menos 3 exemplos?
  18. 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.
  19. 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); ?>
  20. 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?
  21. 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
  22. 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;
  23. 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.
×
×
  • Criar Novo...