
Frank K Hosaka
Membros-
Total de itens
1.586 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
Hoje eu executo o Laravel pelo Hostinger, mas sempre faço o backup do Hostinger para o meu notebook. Tentei abrir o Laravel no notebook com "localhost/laravel", e deu certo! Antigamente, eu tinha que abrir o VS Code, usar a linha de comando, digitar "php artisan serve", depois usar "localhost:8000" no navegador.
-
Eu encontrei um erro brutal no meu projeto MVC produtos, ele tinha que fazer uma lista de 8 produtos em 4 colunas, e ele acabou listando mais de 8 produtos, repetindo um ou outro produto que já tinha sido publicado. Tive que parar tudo e corrigir a lógica. Eu consegui corrigir o problema para 4 colunas, mas não sei como fazer a quinta coluna. <?php function colunar($itens,$colunas){ $contagem = count($itens); $linhas=intval($contagem/$colunas); if($contagem/$colunas>$linhas){$linhas++;} echo "<tr><td colspan=4>$colunas colunas<tr>"; for($iLinha=0;$iLinha<$linhas;$iLinha++){ for($iColuna=0;$iColuna<=$colunas;$iColuna++){ if(($iLinha+$iColuna*$linhas)<$contagem){ echo "<td>".$itens[$iLinha+$iColuna*$linhas];}} echo "<tr>";}} echo "<table>"; $itens=[0,1,2,3,4,5,6,7]; colunar($itens,1); colunar($itens,2); colunar($itens,3); colunar($itens,4); colunar($itens,5);
-
ScriptIn.php, um jeito de testar o MVC projeto produto
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
O programa ScriptOut.php faz justamente o contrário. Ele varre o diretório astudy do meu notebook, e lista todos os arquivos bem como o código fonte do arquivo para eu poder publicar no fórum. O problema é que eu não sei como exibir o código fonte do PHP na tela do navegador, a não ser usando a opção do código fonte do navegador: <?php $script=""; $arquivos = scandir("astudy"); array_shift($arquivos); // retira . array_shift($arquivos); // retira .. foreach ($arquivos as $arquivo) { if(is_dir("astudy/$arquivo")){ $diretorio="astudy/$arquivo"; $files=scandir($diretorio); array_shift($files); array_shift($files); foreach($files as $file){ $script.="arquivo /$diretorio/$file\n"; $script.=file_get_contents("$diretorio/$file")."\n\n";}} else { $script.="arquivo /astudy/$arquivo\n"; $script.=file_get_contents("astudy/$arquivo")."\n\n"; }} echo $script; // não é possível ver o código fonte do PHP pelo comando echo // favor usar o comando exibir código fonte do navegador -
A minha sugestão é instalar o arquivo ScriptIn.php no diretório C:\wamp64\www. Você copia todo código fonte do tópico MVC projeto produto no mesmo diretório com o nome de script.txt. Em seguida você digita no navegador "localhost/scriptin", e o programa vai criar a pasta astudy, bem como as outras pastas e arquivos. Depois disso, basta você digita "localhost/astudy", para você conhecer o projeto produtos. arquivo c:/wamp64/www/ScriptIn.php <?php if (!is_dir("astudy")){ mkdir("astudy"); mkdir("astudy/Controller"); mkdir("astudy/Model"); mkdir("astudy/View");} $script=file_get_contents("script.txt"); $ocorrencias=substr_count($script,"arquivo /astudy/"); $substring = "arquivo /astudy/"; $posicao = []; $posicao[0]=strpos($script,$substring); for($i=1;$i<=$ocorrencias-1;$i++){ $posicao[$i]=strpos($script,$substring,$posicao[$i-1]+1);} $codigo=[]; for($i=0;$i<=$ocorrencias-2;$i++){ $codigo[]=substr($script,$posicao[$i],$posicao[$i+1]-$posicao[$i]);} $codigo[]=substr($script,$posicao[$ocorrencias-1],strlen($script)-$posicao[$ocorrencias-1]); for($i=0;$i<=$ocorrencias-1;$i++){ $lines=explode("\n",$codigo[$i]); $arquivo=trim(substr($lines[0],9)); $criar=fopen($arquivo,"w"); $tamanhoNome=strlen($arquivo)+9; $conteudo=trim(substr($codigo[$i],$tamanhoNome)); file_put_contents($arquivo,$conteudo); fclose($criar);} echo "Trabalho encerrado";
-
Eu pedi um roteador para o Bard, mas o exemplo que ele passou usa a tecnologia Laravel, certamente não vai funcionar no ambiente PHP. Aqui no fórum estou publicando o projeto MVC produtos, e eu uso o arquivo index.php como roteador. O problema de você usar o index.php como roteador é que você só pode usar uma única chave, não pode usar a mesma chave várias vezes. No meu caso, eu só tenho a tabela produto, assim eu posso usar <input name=incluir> <input name=excluir> <input name=alterar> O problema é quando eu precisar criar uma outra tabela que precisa incluir, excluir e alterar um registro. Nesse caso, usar o index.php é um péssimo negócio. O único jeito que eu encontrei para resolver isso foi através de gambiarra, ou seja, usar o controlador como roteador, assim: /atest/Controller/testeController.php <?php class teste{public function ola(){echo "olá mundo!";}} if(isset($_GET['ola'])){ $teste=new teste(); $teste->ola();} /atest/View/viewTeste.html <form action="../Controller/testeController.php"> <input type=submit name=ola value="Me Clique"> </form> <a href="../Controller/testeController.php?ola">Me Clique</a> /atest/index.php <?php header('location:View/viewTeste.html');
-
// histórico das atualizações no projeto produtos 18/11/23 foi criado conexao.php, tornando possível todo código se reportar a apenas uma conexão. 19/11/23 foi criado viewAtualizar.php 20/11/23 criei o código ScripIn.php para ajudar a testar o MVC projeto produtos. 21/11/23 criei o código ScripOut.php para publicar o projeto no fórum. 22/11/23 acrescentei a rotina de alteração e inclusão de produtos, bem como mudei o roteador do index.php para o controlador 23/11/23 acrescentei a rotina do orçamento
-
Usei o meu programa ScriptOut.php para publicar todos os arquivos e os respectivos conteúdos da pasta astudy aqui. Agora, sugiro você copiar todo o texto e salvar em script.txt no diretório C:/wamp64/www, e em seguida executar o programa ScriptIn.php que publiquei em outro tópico, ele vai montar o diretório astudy e todos os arquivos do projeto no seu computador. arquivo /astudy/Controller/orçamentoController.php <?php session_start(); require $_SERVER['DOCUMENT_ROOT']."/astudy/Model/produto.php"; require $_SERVER['DOCUMENT_ROOT']."/astudy/Model/funções.php"; class orçamentoController { private $produto; public function __construct(){$this->produto=new produto();} public function produto(){ $produtos=$this->produto->listarTudo(); $irPara="Controller/orçamentoController"; require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewFiltro.php";exit;} public function inicio(){ $soma=0; $itens=[]; $_SESSION['itens']=[]; require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewOrçamento.php";exit;} public function acrescentaItem($prod){ $soma=0; $_SESSION['itens'][]=$prod; $itens=$_SESSION['itens']; foreach($itens as $item){$soma+=$item[1]*$item[3];} require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewOrçamento.php";exit;} public function excluir($key){ $soma=0; array_splice($_SESSION['itens'],$key,1); $itens=$_SESSION['itens']; foreach($itens as $item){$soma+=$item[1]*$item[3];} require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewOrçamento.php";exit;} public function alterar($alterar,$chave){ $soma=0; $_SESSION['itens'][$chave][1]=$alterar; $_SESSION['itens'][$chave][4]=$alterar*$_SESSION['itens'][$chave][3]; $itens=$_SESSION['itens']; foreach($itens as $item){$soma+=$item[1]*$item[3];} require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewOrçamento.php";exit;}} $get=$_GET; $class=new orçamentoController(); if(key($get)=='produto'){$class->produto();} if(key($get)=='inicio' || key($get)=='apagar'){$class->inicio();} if(key($get)=='id'){ $prod=$get['prod']; $un=$get['un']; $preço=$get['preço']; $total=$get['preço']; $class->acrescentaItem([$prod,1,$un,$preço,$total]);} if(key($get)=='excluir'){$class->excluir($get['excluir']);} if(key($get)=='alterar'){$class->alterar($get['alterar'],$get['chave']);} arquivo /astudy/Controller/produtoController.php <?php require $_SERVER['DOCUMENT_ROOT']."/astudy/Model/produto.php"; class produtoController { private $produto; public function __construct(){ $this->produto=new produto();} public function criarTabela(){$this->produto->criarTabela();} public function listar(){ $produtos=$this->produto->listar(); $contagem=count($produtos); $colunas=4; $numLinhas=intval($contagem/$colunas); if($contagem/$colunas>$numLinhas){$numLinhas++;} require $_SERVER['DOCUMENT_ROOT'].'/astudy/View/viewProduto.php';exit;} public function filtrar($filtro){ $produtos=$this->produto->filtrar($filtro); $irPara="View/viewAtualizar"; require $_SERVER['DOCUMENT_ROOT'].'/astudy/View/viewFiltro.php';exit;} public function atualizar($dados){ $irPara="View/viewAtualizar"; $produtos=$this->produto->atualizar($dados); require $_SERVER['DOCUMENT_ROOT'].'/astudy/View/viewFiltro.php';exit;} public function incluir($dados){ $produtos=$this->produto->incluir($dados); require $_SERVER['DOCUMENT_ROOT'].'/astudy/View/viewFiltro.php';exit;} public function excluir($dados){ $produtos=$this->produto->excluir($dados);}} if(isset($_GET)){ $get=$_GET; $classe=new produtoController(); if(key($get)=="criarProdutos"){$classe->criarTabela();} if(key($get)=="verProdutos"){$classe->listar();} if(key($get)=="item"){$classe->filtrar($get['item']);} if(key($get)=="atualizar"){$classe->atualizar($get['atualizar']);} if(key($get)=="excluir"){$classe->excluir($get['excluir']);} if(key($get)=="incluir"){$classe->incluir($get['incluir']);}} arquivo /astudy/Model/conexao.php <?php class conexao { private static $pdo; public function __construct(){} public static function getInstance(){ if(!self::$pdo){ self::$pdo=new PDO("mysql:host=localhost;dbname=laravel","root","");} return self::$pdo;}} arquivo /astudy/Model/funções.php <?php function nf($número){return number_format($número,2,',','.');} arquivo /astudy/Model/produto.php <?php require $_SERVER['DOCUMENT_ROOT']."/astudy/Model/conexao.php"; class produto { private $pdo; public function __construct(){ $this->pdo=conexao::getInstance();} public function criarTabela(){ $tabela='produto'; $stmt=$this->pdo->prepare("SELECT COUNT(*) AS total FROM information_schema.tables WHERE table_name = ?"); $stmt->execute([$tabela]); $total=$stmt->fetchColumn(); if($total>0){$this->pdo->exec("DROP TABLE $tabela");} $sql="CREATE TABLE $tabela (id INT NOT NULL AUTO_INCREMENT, prod VARCHAR(255) NOT NULL, preço FLOAT NOT NULL, un VARCHAR(2) NOT NULL, PRIMARY KEY (id))"; $this->pdo->exec($sql); $sql="INSERT INTO produto (prod,preço,un) values (?,?,?)"; $dados=[["Maçã Red",20,"kg"],["Macarrão Tipo Ninho",5.5,"un"], ["Pera Portuguesa",25,"kg"],["Picanha Fresca",50,"kg"], ["Pão de Forma",7,"un"],["Pão Francês",11,"kg"],["Banana Nanica",8,"kg"], ["Laranja Lima",5,"kg"],["Refrigerante 2L",8.50,"un"]]; foreach($dados as $dado){ $stmt=$this->pdo->prepare($sql); $stmt->execute($dado);} require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewBasico.html"; echo "<h1>Tabela criada com sucesso!<br>";} public function listarUm($id){ $stmt=$this->pdo->query("SELECT * from produto where id=$id"); return $stmt->fetchALL(PDO::FETCH_ASSOC);} public function listarTudo(){ $stmt=$this->pdo->query("SELECT * from produto order by prod"); return $stmt->fetchALL(PDO::FETCH_ASSOC);} public function listar(){ $stmt=$this->pdo->query("SELECT SUBSTRING_INDEX(prod,' ',1) AS grupo FROM produto GROUP BY grupo ORDER BY grupo"); return $stmt->fetchALL(PDO::FETCH_ASSOC);} public function filtrar($filtro){ $stmt=$this->pdo->query("select * from produto where prod like '$filtro%' order by prod"); return $stmt->fetchALL(PDO::FETCH_ASSOC);} public function atualizar($dados){ $stmt=$this->pdo->prepare('UPDATE produto SET prod=?,preço=?,un=? WHERE id=?'); $stmt->execute([$dados[1],$dados[2],$dados[3],$dados[0]]); $filtro=$dados[0]; $stmt=$this->pdo->query("select * from produto where id=$filtro"); return $stmt->fetchAll(PDO::FETCH_ASSOC);} public function incluir($dados){ $stmt=$this->pdo->prepare('INSERT INTO produto (prod,preço,un) values (?,?,?)'); $stmt->execute([$dados[0],$dados[1],$dados[2]]); $filtro=$this->pdo->lastInsertId(); $stmt=$this->pdo->query("select * from produto where id=$filtro"); return $stmt->fetchAll(PDO::FETCH_ASSOC);} public function excluir($dados){ $id=$dados[1]; $produto=$dados[0]; $this->pdo->query("delete from produto where id=$id"); require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewBasico.html"; echo "<h1>o produto $produto foi excluido</h1>";}} arquivo /astudy/View/viewAtualizar.php <?php require('viewBasico.html'); $id=$_GET['id']; $prod=$_GET['prod']; $preço=$_GET['preço']; $un=$_GET['un']; ?> <table class="table table-striped fs-1"> <form action='../Controller/produtoController.php'> <tr><td>Código<td><?=$id?><input type=hidden name=atualizar[] value=<?=$id?>> <tr><td>Produto<td><input name=atualizar[] value='<?=$prod?>'> <tr><td>preço<td><input name=atualizar[] value=<?=$preço?>> <tr><td>Un<td><input name=atualizar[] value='<?=$un?>'> <tr><td><td colspan=2><input name=alterar type=submit value=Atualizar> </form> <tr><td><td> <form action='../Controller/produtoController.php'> <input type=hidden name=excluir[] value='<?=$prod?>'> <input type=hidden name=excluir[] value=<?=$id?>> <input type=submit value=Excluir> </form> </table> arquivo /astudy/View/viewBasico.html <!DOCTYPE html> <meta name="viewport" content="width=device"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <input id=inputMenu class=fs-1 type=submit value=Menu onclick="location.replace('../View/viewMenu.php')"> <a class='fs-1 link-underline-light' id=mensagem></a> <hr> arquivo /astudy/View/viewFiltro.php <?php include('viewBasico.html'); echo "<table class=table><th class=fs-1>Cód<th class=fs-1>Produto <th class=fs-1>preço<th class=fs-1>Un"; foreach($produtos as $produto){ $id=$produto['id']; $prod=$produto['prod']; $prodURL=urlencode($prod); $preço=$produto['preço']; $un=$produto['un']; echo "<tr><td class='fs-1 text-end'>$id"; echo "<td class='fs-1 text-nowrap overflow-hidden'>"; echo "<a class='link-underline-light' href=../$irPara?id=$id&prod=$prodURL&preço=$preço&un=$un>$prod</a>"; echo "<td class=fs-1>$preço<td class=fs-1>$un";} ?> </table> arquivo /astudy/View/viewIncluir.php <?php require('viewBasico.html'); ?> <form class="w-50 mt-5 m-auto" action='/astudy/Controller/produtoController.php'> <table class="table table-striped fs-1"> <tr><td><td class=fs-1>Novo Produto <tr><td>Produto<td><input name=incluir[] required> <tr><td>Preço<td><input name=incluir[] required> <tr><td>Un<td><input name=incluir[] required> <tr><td><td><input type=submit value='Incluir Novo Produto'> </form> </table> arquivo /astudy/View/viewMenu.php <?php include('viewBasico.html'); ?> <script>inputMenu.setAttribute('type','hidden')</script> <table class='table table-striped fs-1'> <tr><td><a class=link-underline-light href="/astudy/Controller/produtoController.php?criarProdutos"> Criar ou recriar tabela produtos</a> <tr><td><a class=link-underline-light href="/astudy/Controller/produtoController.php?verProdutos"> Ver todos produtos</a> <tr><td><a class=link-underline-light href="/astudy/View/viewIncluir.php"> Incluir novo produto</a> <tr><td><a class=link-underline-light href="/astudy/Controller/orçamentoController.php?inicio">Orçamento</a> </table> arquivo /astudy/View/viewOrçamento.php <?php include('viewBasico.html') ?> <script>mensagem.innerHTML="Orçamento"</script> <table class='fs-1 table table-striped'> <th>Produto<th>Qt<th>Un<th>Preço<th>Total <?php foreach($itens as $key=>$item): ?> <tr><td><a class=link-underline-light href='../Controller/orçamentoController.php?excluir=<?=$key?>'> <?=$item[0]?></a> <td><input class='border border-light bg-transparent' value=<?=$item[1]?> size=1 onchange="location.replace ('../Controller/orçamentoController.php?alterar='+ this.value+'&chave=<?=$key?>')"> <td><?=$item[2]?><td class=text-end><?=nf($item[3])?><td class=text-end><?=nf($item[4])?> <?php endforeach;?> <tr><td><input type=submit value=Produto onclick="location.replace ('../Controller/orçamentoController.php?produto')"> <input type=submit value=Apagar onclick="location.replace ('../Controller/orçamentoController.php?apagar')"> <td><td><th>Geral<th><?=nf($soma)?> </table> arquivo /astudy/View/viewProduto.php <?php include('viewBasico.html') ?> <p class='fs-1 text-center'><?=$contagem?> grupos de produtos <table class=table> <!--esse algorítimo é péssimo, ele só faz 4 colunas no máximo--> <?php for($iLinha=0;$iLinha<$numLinhas;$iLinha++){ for($iColuna=0;$iColuna<=$colunas;$iColuna++){ if(($iLinha+$iColuna*$numLinhas)<$contagem){ $item=$produtos[$iLinha+$iColuna*$numLinhas]['grupo']; echo "<td><a class='link-dark link-underline link-underline-opacity-0 fs-2' href='?item=$item'>$item</a>";}} echo "<tr>";} ?> </table> arquivo /astudy/index.php <?php header("location:View/viewMenu.php");
-
O meu projeto é assim pasta <controller> produtoController.php pasta <model> tbproduto.php index.php Eu uso o endereço absoluto para pular do index para o controller ou chamar a classe tbproduto. O problema é quando eu crio o namespace Controller no produtoController. Aí o index reclama que não consegue achar o produtoController. Para resolver isso, eu mudei $classe = new produtoController para $classe = new Controller\produtoController. O drama começa quando eu crio um namespace no arquivo tbproduto como model. No produtoController, eu coloco "use model\tbproduto", e na hora de iniciar uma classe $tbproduto=new tbproduto() ou $tbproduto=new Model\tbproduto(), aí o controlador diz que não encontrou a classe. Alguém aqui usou o Namespace no PHP (ou seja, fora do Laravel) e conseguiu fazer funcionar?
-
Como colocar o máximo de texto na tela de celular com 7 cm de largura?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Valeu. Não consegui fazer funcionar as elipsis, mas o CSS do cálculo é bom demais! <style>p {width:calc(8cm - 8px);white-space: nowrap;overflow:hidden}</style> Pensei em usar a propriedade text-overflow, mas ele não funcionou. A função calc só funciona se você colocar espaço antes e depois do operador -. -
Eu fiz um código, estipulando 35 caracteres como o máximo que dá para colocar em 7 cm na tela do celular, mas ficou um horror: astudy/Model/funcoes.php <meta name="viewport" content="width=device-width"> <?php class funcoes { public function ajustarTexto($texto){ if(strlen($texto)>35){ return substr($texto,0,32)."...";} else {return $texto;}} } $funcoes=new funcoes(); echo "<br>".$funcoes->ajustarTexto("Descontinuar Abraçadeira Fluorescente"); echo "<br>".$funcoes->ajustarTexto("Descontinuar Acabamento Registro de Pressão"); Existe algum jeito de fazer os dois textos terminarem exatamente no canto direito do celular?
-
Select de Produtos mais Vendidos
pergunta respondeu ao adrsublimacao de Frank K Hosaka em Tutoriais & Dicas - PHP
<?php // mysql store (id,idProduto,qt,venda)(1,116,10,10)(2,115,2,2) // (3,115,1,1)(4,115,4,4)(5,116,20,20); $connect=new mysqli("localhost","root","","laravel"); $query=$connect->query("select idProduto, count(idProduto) as contagem from store group by idProduto order by contagem desc"); while($row=$query->fetch_assoc()){ echo "contagem ".$contagem=$row['contagem']." idProduto ".$row['idProduto']."<br>";} // contagem 3 idProduto 115 contagem 2 idProduto 116 Aqui, uma versão melhorada: <?php // mysql store (id,idProduto,qt,venda)(1,116,10,10)(2,115,2,2) // (3,115,1,1)(4,115,4,4)(5,116,20,20); // mysql produto (id,nome)(115,"canabis")(116,"papola") $connect=new mysqli("localhost","root","","laravel"); $query=$connect->query("select idProduto, count(idProduto) as contagem from store group by idProduto order by contagem desc"); while($row=$query->fetch_assoc()){ $idProduto=$row['idProduto']; $query2=$connect->query("select nome from produto where id=$idProduto"); $produto=$query2->fetch_assoc()['nome']; echo "contagem ".$contagem=$row['contagem']." produto $produto<br>";} // contagem 3 produto canabis contagem 2 produto papola -
Na listagem seguinte, o comando @include('menu') pressupõe que tem um link para o CDN do Bootstrap. web.php <?php use Illuminate\Support\Facades\Route; Route::middleware(['auth','verified'])->group(function(){ Route::get('megasena',[App\Http\Controllers\EstoqueController::class,'megasena']);} =============================== EstoqueController.php <?php namespace App\Http\Controllers; class EstoqueController extends Controller { public function megasena(){ $vr['escolha']=mt_rand(1,14); if($vr['escolha']<=6){ $vr['titulo']="Palpite para Mega-Sena: linha ".$vr['escolha'];} if($vr['escolha']>=7 and $vr['escolha']<=12){ $vr['coluna']=$vr['escolha']-6; $vr['titulo']="Palpite para Mega-Sena: coluna ".$vr['coluna'];} else {$vr['coluna']=0;} $vr['diagonal']=0; if($vr['escolha']>12){ $vr['diagonal']=$vr['escolha']-12; $vr['titulo']="Palpite para Mega-Sena: diagonal ".$vr['diagonal'];} $matriz=[]; for($j=1;$j<=6;$j++){ for ($i = 0, $palpites = []; $i < 1500; $i++) @$palpites[mt_rand(1, 60)]++; arsort($palpites); $i=0; $sorteio=[]; foreach($palpites as $key => $valor){ $sorteio[]=$key; $i++; if($i==6){break;}} sort($sorteio); $matriz[]=$sorteio;} return view('megasena',compact('vr','matriz'));} } ======================== megasena.blade.php @include('menu') <table class=table> <td colspan=6>{{$vr['titulo']}} @foreach($matriz as $linha=>$mat) <tr> @foreach($mat as $coluna=>$sorte) @if($vr['escolha'] < 7 && ($linha+1)==$vr['escolha'] || $vr['escolha'] > 6 && $vr['escolha'] < 13 && ($coluna+1)==$vr['coluna'] || $vr['diagonal']==1 && ($linha+$coluna==5) || $vr['diagonal']==2 && $linha==$coluna) <td class=text-danger>{{$sorte}} @else <td>{{$sorte}} @endif @endforeach @endforeach
-
O Bard é bacana. Nem sempre ele encontra a melhor resposta. Hoje, por exemplo, eu queria saber como pegar o nome do cliente no Laravel. A resposta dele estava certa, dentro do contexto do Controller do Laravel. Eu precisava da resposta no contexto do Views. Eu apelei para a improvisação, e consegui achar a solução. No Model, eu tinha uma relação. No Controller eu fiz assim: $hists=tbhistprod::where('codprod',$codprod)->with('relação')->get( ). No Views, eu fiz assim <tr><td>{{$hists->relação->nomeCliente}}. Essa solução não é nada óbvia, mas quem inventou o Laravel é bastante engenhoso. Hoje de noite, eu perguntei se é possível criar um arquivo HTML que caiba na tela do celular. Ele deu várias dicas, e eu experimentei esse daqui: <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> <title>Exemplo de HTML responsivo</title> </head> <body> <h1>Este é um exemplo de HTML responsivo</h1> <p>Este texto será exibido em toda a largura da tela, mesmo que ela seja pequena.</p> </body> </html> Eu fiquei bastante contente com a resposta. Ele funciona! Todos os códigos que eu fiz, eu pedi para trabalhar com 50% da tela de um notebook para ver se cabia na tela do celular. Mas não cabe, você é obrigado a empurrar a tela para o lado para ver o resto da informação. Mas com a dica do Bard, eu consigo colocar todo o meu layout exatamente no tamanho da tela do celular, o ruim é que é bem difícil de enxergar. Mas isso já vai ajudar bastante na hora de mudar o layout.
-
Laravel: mandando um monte de variáveis do controller para o view
uma questão postou Frank K Hosaka PHP
Para resolver esse problema eu inventei uma classe chamada vr dentro da pasta Controllers do Laravel. Ficou esquisito, mas ele funcionou. Mas hoje eu senti um enorme peso na consciência e fiz um teste com PHP e eu vi que a maneira mais elegante de passar um monte de variáveis do Controller para um view é usando um vetor, assim: <?php $vr['nome']='Frank'; $vr['idade']=64; $vr['cidade']='Diadema'; $vr['cadastro']=date('Y-m-d'); var_dump($vr); -
Ontem, o Wash passou o link de um vídeo no YouTube que fala do Git e Github. Eu tenho pavor do YouTube, mas ele é importante. Graças ao YouTube eu consegui instalar o Laravel, mas eu só tenho a versão básica. O Laravel precisa ser turbinado com, no mínimo, o Breezer. Mas isso eu não consegui, eu precisaria aprender a usar o programa npm. Eu consegui ver os primeiros quinze minutos do vídeo do Git e Github, e o rapaz falou do npm. Assim, eu deixei o vídeo de lado. Basicamete essa é a diferença entre um desenvolvedor e um improvisador, o primeiro sabe lidar com o npm e eu tenho pavor dele. De 1990 até 2020, eu improvisava os meus códigos dentro do Visual Basic que vem embutido no Office da Microsoft. Em 2020, graças ao YouTube, eu consegui instalar o WampServe, e com ele é que eu conheci o PHP. O PHP é fantástico! Eu nunca imaginei que eu poderia executar um código dentro do navegador. Estudando o WampServe eu consegui executar o código no navegador do celular, mas só em 2023 é que me aventurei e aluguei uma hospedagem de R$ 23,00 para guardar os meus códigos e o meu banco de dados na Hostinger. Agora, eu tenho o meu projeto Orçamento tanto no PHP bem como no Laravel. O Laravel é muito chato, ele trabalha com o paradigma MVC. Para eu contornar o problema, eu simplesmente copiei todo o código PHP dentro da pasta views onde estão os arquivos blade.php e eu espero que com o tempo eu consiga separar os códigos em model, view e controller. O meu programa é bem simples: <?php $orçamento=$preço*$quantidade; Mas na hora de executar no navegador com o comando localhost/astudy/index.php, o PHP alerta que as variáveis $preço e $quantidade não estão definidas. Para resolver isso, eu fui obrigado a aprender um pouco de HTML, tipo: <?php if(isset($_GET['preço'])){ $preço=$_GET['preço']; $quantidade=$_GET['quantidade']; $orçamento=$preço*$quantidade; echo "$preço x $quantidade = $orçamento"; } ?> <form> <table> <tr><td>preço<td><input name=preço> <tr><td>quantidade<td><input name=quantidade> <tr><td><td><input type=submit> </form> Eu aprendi HTML na base da tentativa e erro. São códigos simples que dá para compartilhar no fórum PHP do Script Brasil. Agora, fazer isso na gramática do Laravel, isso iria exigir um monte de código. Nesse caso, o Git e Github é um bom negócio. Não no meu caso que ainda não tenho coragem de enfrentar o npm. O npm é um programa federal, ele precisa do acesso ao diretório raiz, coisa que não tenho privilégio na minha hospedagem de R$ 23,00 por mês na Hostinger.
-
Filtrar no select do modal pelo campo input
pergunta respondeu ao Carlos Lourenço de Frank K Hosaka em PHP
Pelo que eu entendi, quando você clica no botão do modal 2, você quer que apareça o coteúdo desse botão no modal 1. Eu fiz o teste aqui e funcionou, com algumas modificações: <style> .btn-nwe6 {background-color: blue; color: white; border: 2px solid blue; border-radius: 5px;} .bx.bx-note {font-size: 24px;color: yellow;} </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"> </script> <script type="text/javascript"> $(document).ready(function() { $(document).on('click', 'a', function(event) { var composicao = $(this).attr('composicao') $('#idComposicao').val(composicao)})}) </script> Modal_1: <input id=idComposicao> <p> Modal_2: <a href="#modal-composicao" role="button" data-toggle="modal" composicao="'.$Hardware['idHardware'].'" class="btn-nwe6" title="Composição"><i class="bx bx-note">Botão</i></a> -
Despachando um json pelo PHP [Resolvido]
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Valeu ikkinet, eu esqueci de colocar o nome do arquivo da segunda listagem. Às vezes tento fazer duas listagens separadas, mas o fórum acaba ajuntando tudo. Mesmo assim, o fórum Script é o melhor que eu encontrei. Já o DivMedia é um horror, você monta o código de um jeito, e no final é publicado de maneira diferente. Por outro lado, eu ainda tenho essa dificuldade de separar o lado do servidor e o lado do cliente: por exemplo, para mostrar os dados de um produto, você precisa que o usuário selecione um item. Se eu pedir para o servidor jogar todos os produtos no HTML, isso não vai afetar o desempenho do cliente que geralmente tem um notebook de 2 gb de RAM? Sinceramente, eu não sei o que é back-end e front-end. Eu sou péssimo em HTML. Estou aprendendo alguma coisa com a ajuda do PHP. Eu escrevo echo "olá mundo", e o PHP monta <html><body>olá mundo</body></html>. -
Imprimir array por post para php através de angularjs
pergunta respondeu ao Gregory Carmo de Frank K Hosaka em Tutoriais & Dicas - PHP
Acredito que a solução é $json=file_get_contents('salvar/teste.php'); eu não uso o angular.js -
Eu encontrei um código da função captcha no fórum iMasters. Ele precisa do arquivo Open-Sans-Regular.ttf que você encontra nesse link: edx-fonts/open-sans/fonts/Regular/OpenSans-Regular.ttf at master · edx/edx-fonts (github.com) mysql CREATE TABLE `tab_logar` ( `ggid` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT, `ggLogin` varchar(50) DEFAULT NULL, `ggSenha` varchar(45) DEFAULT NULL, PRIMARY KEY (`ggid`) ) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci (1,"joao","123") ================================================================================= captcha.php <?php function funcCaptcha($text){ $width = 200; $height = 100; $fontfile = "OpenSans-Regular.ttf"; $image = imagecreatetruecolor($width, $height); $white = imagecolorallocate($image, 255, 255, 255); $black = imagecolorallocate($image, 0, 0, 0); imagefill($image, 0, 0, $white); imagettftext($image, 25, rand(-20,20), $width/4, 60, $black, $fontfile, $text); $warped_image = imagecreatetruecolor($width, $height); imagefill($warped_image, 0, 0, imagecolorallocate($warped_image, 255, 255, 255)); for ($x=0; $x < $width; $x++) { # code... for ($y=0; $y < $height; $y++) { # code... $index = imagecolorat($image, $x, $y); $color_comp = imagecolorsforindex($image, $index); $color = imagecolorallocate($warped_image, $color_comp['red'], $color_comp['green'], $color_comp['blue']); $imageX = $x; $imageY = intval($y + sin($x / 10)) ; imagesetpixel($warped_image, $imageX, $imageY, $color); } } $path = "capacha.jpg"; imagejpeg($warped_image,$path); imagedestroy($warped_image); imagedestroy($image); return $path; } ======================================================================= index.php <?php include('captcha.php'); $ggCon = mysqli_connect("localhost","root","","laravel"); $phpSelf = $_SERVER['PHP_SELF']; $mensagem=""; if(isset($_POST['ggLogin'])){ $gg_id = $_POST['gg_id']; $ggLogin = $_POST['ggLogin']; $ggSenha = $_POST['ggSenha']; $ggCaptcha = $_POST['ggCaptcha']; $text88 = $_POST['text88']; if($ggCaptcha!==$text88){ $mensagem="Favor digitar o Captcha corretamente"; goto gambiarra;} $sqlVF = mysqli_query($ggCon, "SELECT * FROM tab_logar WHERE ggLogin = '".$ggLogin."' AND ggSenha = '".$ggSenha."' "); $AcompararDados = mysqli_num_rows($sqlVF); if($AcompararDados == true){ $_SESSION['gg_id'] = $gg_id; print "usuário logado";exit;} else{ print "não logou";exit;}} $text88 = rand(10000,99999); $myimage = funcCaptcha($text88); gambiarra: ?> <form action="<?=$phpSelf?>" method="post" style="width:200px;padding:1em;margin:auto"> <h1>Acessar painel</h1> <table> <tr><td>Id<td><input name=gg_id value=1> <tr><td>Login<td><input name="ggLogin" value='joao'> <tr><td>Senha<td> <input name="ggSenha" value='123'> <tr><td>Digite o código<td><input name="ggCaptcha"> <tr><td><img src="capacha.jpg" style="width:150px;" alt="código captcha"><br> <input type=hidden name=text88 value=<?=$text88?>> <tr><td><input type=submit> </table> <p><h4><?=$mensagem?></h4></p> </form>
-
Avermelhando uma linha ou coluna ou diagonal de uma matriz 6 x 6
uma questão postou Frank K Hosaka PHP
index.php <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <?php echo "<table class='table w-25 m-auto'>"; $escolha=mt_rand(1,14); $linha=0; if($escolha<=6){ echo "<td colspan=6>Palpite para Mega-Sena: linha $escolha";} if($escolha>=7 and $escolha<=12){ $coluna=$escolha-6; echo "<td colspan=6>Palpite para Mega-Sena: coluna $coluna";} else {$coluna=0;} $diagonal=0; if($escolha>12){ $diagonal=$escolha-12; echo "<td colspan=6>Palpite para Mega-Sena: diagonal $diagonal";} $controle=5; for($j=1;$j<=6;$j++){ $linha++; for ($i = 0, $palpites = []; $i < 1500; $i++) @$palpites[mt_rand(1, 60)]++; arsort($palpites); $i=0; $sorteio=[]; foreach($palpites as $key => $valor){ $sorteio[]=$key; $i++; if($i==6){break;}} sort($sorteio); echo "<tr>"; foreach($sorteio as $key=>$sorte){ if($coluna!==0 and $key==($coluna-1)){ $class="class='text-danger'";} else {$class="";} if($escolha<=6 and $escolha==$linha){ $class="class='text-danger'";} if($diagonal==1 and $linha==($key+1)){ $class="class='text-danger'";} if($diagonal==2 and $key==$controle){ $class="class='text-danger'"; $controle--;} echo "<td $class>$sorte";}} echo "<tr><td colspan=6>"; echo "<input type=submit value='Novo Palpite' onclick=location.replace('index.php')>"; -
Eu estou em 2023, vinte anos depois de publicado a primeira mensagem, e não consegui encontrar nenhum html no portal do UOL ou do jornal o Estado, assim eu tive que improvisar assim: teste.html <html> <head> <title>Exemplo de HTML</title> </head> <body> <h1>Olá, mundo!</h1> </body> </html> === index.php <?php $handle=fopen("teste.html","r"); $conteudo=fread($handle,filesize("teste.html")); var_dump($conteudo); echo $conteudo;
-
Para mandar o valor de várias variáveis de uma rotina para outra eu usava um monte de <input> dentro de um <form>. Hoje eu fiz um teste, e eu consegui mandar o valor de várias variáveis dentro de uma só variável: <?php if(isset($_GET['zvalor'])){ $zvalor=explode(",",$_GET['zvalor']); $codprod=$zvalor[0]; $estoque=$zvalor[1]; $total=$zvalor[2]; echo "código $codprod estoque $estoque total $total";} $codprod=1; $estoque=2; $total=3; $zvalor=$codprod.",".$estoque.",".$total; ?> <form> <input type=submit value=Teste> <input type=hidden name=zvalor value="<?=$zvalor?>"> </form>
-
Eu não sei mexer no gitHub, consegui criar o frankhosaka/repositorioDoFrank (github.com), mas como fazer o upload do arquivo sql, isso eu não tenho a menor ideia. Mas posso fazer uma lista: INSERT INTO `tbl_lojas` VALUES (0000000001,'Sabor Vida'),(0000000040,'Maria'); INSERT INTO `tbl_pdia` VALUES (2,0,'prato',1,'prato.png',1),(3,0,'sopa',1,'prato.png',2),(4,0,'sobremesa',1,'prato.png',3),(5,1,'prato',1,'prato.png',4),(6,1,'sopa',1,'prato.png',5),(7,1,'sobremesa',1,'prato.png',6); Eu segui mais ou menos o primeiro código no início desse tema. Eu trabalhei com apenas um único arquivo png na pasta tablemenu/img_menu. Para criar o arquivo prato.png eu fiz assim: pedi imagens de prato para o Google, pedi para o Windows 11 capturar a tela, selecionei a figura desejada, e assim criei o arquivo png.
-
Aqui está a minha experiência com grid, só não consegui diminuir o tamanho da imagem. <?php $conectar=new mysqli("localhost","root","","laravel"); $loja=1; $sqloja=mysqli_query($conectar,"select * from tbl_lojas where idloja=$loja"); $lojan=mysqli_fetch_array($sqloja); $diasDaSemana=['segunda-feira','terça-feira']; //,'quarta-feira','quinta-feira','sexta-feira','sábado','domingo'];?> <title>Pratos do dia</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <div class="w-50 m-auto"><input type=submit value="Top Menu"></div> <h1 class="w-50 m-auto">Pratos do dia - <?=$lojan['loja']?></h1> <div class="container w-50"> <?php foreach($diasDaSemana as $indice=>$dia){ ?> <div class=row> <div class="col text-center fs-1"><?=$dia?></div> </div> <div class=row> <?php $sql=mysqli_query($conectar,"select * from tbl_pdia where pdialoja=$loja and pdiasemana=$indice"); while($row=mysqli_fetch_array($sql)){ $img="tablemenu/img_menu/".$row['pdiaimg']; $descricao=$row['pdianome']; $preço=$row['pdiapreco'];?> <div class=col> <div class=row><img src=<?=$img?>></div> <div class=row><div class=text-center><?=$descricao?></div></div> <div class=row><div class=text-center>€ <?=$preço?></div></div> </div> <?php } ?> </div> <?php } ?> </div> A estrutura das tabelas é a seguinte: CREATE TABLE `tbl_lojas` ( `idloja` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT, `loja` varchar(50) DEFAULT NULL, PRIMARY KEY (`idloja`) ) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci REATE TABLE `tbl_pdia` ( `id` int NOT NULL AUTO_INCREMENT, `pdiasemana` int NOT NULL, `pdianome` varchar(45) DEFAULT NULL, `pdialoja` int DEFAULT NULL, `pdiaimg` varchar(45) DEFAULT NULL, `pdiapreco` float DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COMMENT='Teste'
-
<?php $preço=1.00; $café=2.50; echo "$preço $café"; $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select * from tbl_lojabrás"); $row=$query->fetch_assoc(); echo $row['função']; o meu PHP bem como o MySQL aceitam os acentos utilizados na língua portuguesa.