
Frank K Hosaka
Membros-
Total de itens
1.623 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
Eu tenho uma tabela de produtos onde eu tenho o código do fornecedor. Por exemplo, eu tenho o alface que compro na quitanda A e ele usa o código 123, eu também compro o mesmo alface na quitanda B e ele usa o código 456. Eu queria fazer um pedido de compra, usando a descrição do produto, no caso o alface, e também o código do fornecedor. Como todos os códigos de fornecedores estão num só campo eu queria saber como separar. Ao invés de procurar na internet, eu fui direto no Bard, e eu gostei da resposta dele, mas eu fiz a minha adaptação: <?php $texto="a123 b456 c789"; $numeros=explode(" ",$texto); var_dump($numeros); // resposta (adaptada) : ["a123","b456","c789"] Eu gostei do Bard. Pedi para ele fazer um código para fazer orçamento no PHP e eu fiquei decepcionado. O Bard é bacana, mas ainda está bem longe de acabar com os fóruns de informática.
-
Estou trabalhando num projeto de campeonato de tacos, mas não tinha a menor ideia de como promover o torneio entre os times. Eu consegui fazer um torneio com 2 times, 3 times e até 4 times. Mas fazer um torneio com n times, aí eu apelei para o Bard: <?php function realizarTorneioRoundRobin($times) { for ($i = 0; $i < count($times); $i++) { for ($j = $i + 1; $j < count($times); $j++) { echo $times[$i]." x ".$times[$j]."<br>";}}} $times = ['A', 'B']; realizarTorneioRoundRobin($times);
-
Hoje eu fiz manutenção no meu projeto orçamento, e descobri a diferença entre os input type=button e type=submit. Os dois recebem o click do mouse, mas só o submit é capaz de mandar as variáveis definidas no formulário para o cabeçalho do navegador: <script> function soma(a,b){ pSoma.innerHTML=parseFloat(a)+parseFloat(b)} </script> <form> <table> <tr><td>Parcela 1<td><input name=p1> <tr><td>Parcela 2<td><input name=p2> <tr><td>Total<td><p id=pSoma></p> <tr><td><input type=button value=Calcular onclick=soma(p1.value,p2.value)> <td><input type=submit> </table> </form>
-
Ontem eu fui passear no fórum do MySQL do Script Brasil e eu encontrei uma questão que criava uma coluna que acumulava valores. Mas a sintaxe não foi reconhecido no meu MySQL Workbench e muito menos no PhpMyAdmin. Pedi ajuda para o Bard, mas não consegui fazer o MySQL funcionar. Eu fui logo presumindo que só dava acumular valores pelo PHP. Hoje, eu fui no YouTube e encontrei um vídeo bem simples e rápido, trazendo o conceito de subquery. A listagem final ficou assim: SELECT filial, Ano, QtdVendidaAno, SUM(QtdVendidaAno) OVER (PARTITION BY filial ORDER BY Ano ASC) As Acumulado FROM ( SELECT filial, DATEPART(yy,DataVenda) AS Ano, SUM(QtdVendido) AS QtdVendidaAno FROM VendasAgrupadas ) AS VendasAgrupadaAno Ainda não testei isso, mas achei o vídeo bacana Acumulando valores de uma coluna utilizando uma instrução SQL - YouTube Quando as sugestões do Bard não fazem sentido, o melhor jeito é procurar outras soluções como o YouTube. Eu já prefiro usar o PHP, eu não tenho memória suficiente para lembrar a sintaxe de uma subquery.
-
mudando de php 5.6 para 7.4.44
pergunta respondeu ao MauroConte de Frank K Hosaka em Repositório de Scripts - PHP
getUser não é uma função embutida do PHP, provavelmente o problema está na classe em que a função está hospedado. Você tem a lista completa da classe? -
Lá em 2020, o Wash me informou que era possível despachar um json pelo PHP, eu tentei e como não consegui acabei desistindo. Aqui em 2023, o Wash bateu na mesma tecla: o PHP consegue sim despachar o json. Ele passou esse tutorial: https://github.com/w-studies/ajax-json Para o tutorial dele funcionar, você precisar criar o arquivo index.html no diretório raiz, e o arquivo index.php na pasta api. O tutorial do Wash é acadêmico, ele usa o Ajax. Eu ainda estou no primário, só ontem é que consegui chegar até o JavaScript, usando o famoso método da tentativa e erro: index.php <script> async function json(){ response = await fetch("teste.php") produtos = await response.json() categorias = {} produtos.forEach(function(produto){ key=produto.tipo if(!categorias[key]){categorias[key]=[]} categorias[key].push(produto.tipo)}) } </script> =============================================================================== teste.php <?php $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select * from mat join tipomat on tipomat.id = mat.idtipo"); die(json_encode($query->fetch_all(MYSQLI_ASSOC))); Esse código não faz o menor sentido. O PHP ajunta duas tabelas e monta o json (eu fiquei feliz com esse código, essa foi a primeira vez que eu vi o PHP mostrar o json em carne e osso), e na outra ponta usei a função fetch para pegar o json do PHP mas o máximo que eu consegui ontem foi separar as categorias dos produtos. O problema é como eu passo as categorias para o HTML? Eu não consegui. O Bard me ensinou que eu não posso usar o recurso da variável global no JavaScript, quando trabalho com uma função assíncrona. Ou seja, agora que eu consegui mandar o json para o HTML, descobri que não posso fazer mais nada, a menos que eu estude Ajax e o tutorial do Wash. ==================================== Depois de estudar um pouco o tutorial do Wash, eu consegui colocar o Json do Javascript dentro do HTML assim: dados.php <?php // mysql mat(id,material,valor,idtipo) // mysql tipomat (id,tipo) $mysqli=new mysqli("localhost","root","","laravel"); $tarefa=$_GET['tarefa']; if($tarefa=="categoria"){ $query=$mysqli->query("select * from tipomat");} if($tarefa!=="categoria"){ $query=$mysqli->query( "select * from mat join tipomat on mat.idtipo=tipomat.id where tipo='$tarefa'");} die(json_encode($query->fetch_all(MYSQLI_ASSOC))); ================================================================================== <script> async function json(){ response=await fetch("dados.php?tarefa=categoria"); dados=await response.json(); first.innerHTML="<option>Selecione uma Categoria</option>" dados.forEach(function(dado){ first.innerHTML+="<option>"+dado.tipo+"</option>"})} async function json2(){ modal2.style='display:block;margin-top:50px' response=await fetch("dados.php?tarefa="+first.value); dados=await response.json(); second.innerHTML="<option>Selecione um Produto</option>" dados.forEach(function(dado){ second.innerHTML+="<option>"+dado.material+"</option>"})} </script> <button onclick="modal.style='display:block;margin-top:50px'"> Abrir modal </button> <div id=modal style='display:none'> <select id=first onchange=json2()> <script>json()</script> </select> </div> <div id=modal2 style='display:none'> <select id=second> </select> </div>
-
Esse é um tema clássico, mas eu não consegui resolver em 2020, quando entrei aqui no Fórum Script Brasil. Eu tenho uma tabela de 2.000 produtos, uma parte representa coisas que eu consumo e outra parte é revenda. Para separar os dois, a alternativa que eu encontrei foi filtrar os produtos que foram registrados de acordo com a classificação contábil da conta estoque. Mas ontem encontrei um debate de como filtrar os produtos por categoria no fórum iMasters. Eu não sei se consegui resolver o problema do rapaz, mas eu gostei da minha solução. Ele usa a função assíncrona do JavaScript, assim: teste.php <script> function java(escolhido){ fetch("pag2.php?categoria="+escolhido) .then(response => {return response.text()}) .then(texto => {mensagem.innerHTML = texto})} </script> <select id=categoria onchange=java(value)> <option>Selecione uma opção</option> <option>Básica</option> <option>Eventual</option> </select> <div id=mensagem style="margin-top:100px"></div> pag2.php <?php $categoria=$_GET['categoria']; if($categoria=="Básica"){ ?> <select> <option>Selecione uma opção</option> <option>Caneta</option> <option>Lápis</option> <option>Borracha</option> </select> <?php } if($categoria=="Eventual"){ ?> <select> <option>Selecione uma opção</option> <option>Baton</option> <option>Preservativo</option> </select> <?php } Esse é um código bem pequeno, mas acho que pode ajudar quem usa a categoria na tabela de produtos.
-
Eu tentei fazer um código mais simples: <?php class Conexao { private static $pdo; public static function getConnection(){ if(!self::$pdo){ self::$pdo=new pdo("mysql:host=localhost;dbname=laravel","root","");} return self::$pdo;}} try { $Conexao = Conexao::getConnection();var_dump($Conexao); $sql = "INSERT INTO FLE ( FLE_DTHR_CHEGADA ) VALUES ( GETDATE())"; $stmt = $Conexao->prepare($sql); $stmt->execute(); echo "Atualização bem-sucedida";} catch (Exception $e) {echo $e->getMessage();} ?> mas na hora de executar, eu tive essa mensagem: SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION laravel.GETDATE does not exist
-
Gostaria de burlar o sistema de um site
pergunta respondeu ao Ademir Bispo de Frank K Hosaka em Repositório de Scripts - PHP
Boa pergunta, eu sei que ele foi condenado a 20 anos e um mês de cadeia, por ter conseguido burlar vários celulares no apogeu do Lava Jato, mas não consegui o endereço da penitenciária. Desconfio que é Brasília. O trabalho dele é ótimo, ele foi até requisitado pelo presidente anterior e dizem que ele conseguiu criar um ato de prisão para um juiz federal; enfim os melhores programadores estão atrás das grades e os que nem sabem como ligar o computador estão nos fóruns. -
Gostaria de burlar o sistema de um site
pergunta respondeu ao Ademir Bispo de Frank K Hosaka em Repositório de Scripts - PHP
Procure o Sr Walter Delgatti Neto. -
MVC: perdi o meu acesso à pasta localhost/astudy
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Eu usei o método da tentativa e erro. Mudei o nome da pasta a_study para astudy. O Google Chrome consegue abrir localhost/astudy sem nenhum problema, o que não é o caso do Edge que muda o endereço para https://www.localhost/astudy. Tudo indica que se trata de implicância do navegador do Windows 11, logo a melhor solução é limpar o cache dele. O problema é ter que redefinir um monte de privilégios do tipo entrar no Script Brasil sem precisar passar pela sabatina do login, agora feito em quatro etapas além de acertar aqueles quadros de motos, faixa de pedestre e assim vai. Outro meio de fazer a pasta astudy funcionar dentro do Edge foi através do servidor php, eu uso o comando php -S localhost:8000, e no Edge eu consigo entrar na pasta com o comando localhost:8000. -
Eu tenho um projeto chamado orçamento no Laravel e no PHP. Apesar dos programas serem quase iguais, a verdade é que tem muitas diferenças que eu queria eliminar. Por exemplo, o Laravel usa datalist na pasta das Views que contém os formulários, e o PHP só tem um botão que conduz o usuário para ir até outra página para pesquisar o produto. Eu coloquei o datalist no PHP, e em menos de meia hora, o meu irmão reclamou que o programa não funciona. Fui lá verificar e não funciona mesmo. O datalist foi criado em 2014. O iPad 1.0 foi criado em 2010, esse equipamento é muito antigo. Eu pedi para o meu irmão jogar fora, mas alega que não tem recurso para comprar um novo. Resultado: vou ter que mexer tanto no projeto em PHP bem como no Laravel, tenho que considerar tanto os equipamentos novos que suportam o <datalist> bem como os mais antigos. Fazer programa para uso próprio é difícil. Fazer programa para terceiros é muito mais difícil.
-
Como fazer funcionar o meu segundo código MVC?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Não é uma boa ideia colocar todas as classes num só arquivo. O Lúcio sugeriu trabalhar com o endereço absoluto através dessa variável: $path=$_SERVER['DOCUMENT_ROOT'].'/pastaDoProjeto/MVC'; Eu pensei fazer isso através do comando do PHP define, mas a constante desaparece toda vez que você submete um formulário. A sugestão do Barder é de criar o arquivo config.php (onde é definido o path), ela é muito boa, se você precisar criar vários projetos com nomes diferentes. Não é o meu caso. Então decidi trabalhar com o endereço absoluto desde o index.php até cada uma das classes. Nas classes, eu fiz assim: <?php class LoginController { private $path; public function __construct(){ $this->path=$_SERVER['DOCUMENT_ROOT'].'/campbets';} public function login($mensagem=null,$nome=null) { require_once "$this->path/Models/Times.php"; $times=(new Times)->listaTimes(); require_once "$this->path/Views/viewLogin.php";} } -
No meu diretório forum, coloquei o arquivo index.php e com ele coloquei dois .jpg, e o código ficou assim: <?php session_start(); if(isset($_POST['totalPaginas'])){ $images=$_SESSION['images']; $totalPaginas=$_POST['totalPaginas']; $pagina=$_POST['pagina']; $pagina++; if($pagina>$totalPaginas){echo "Não tem mais";exit;} goto gambiarra;} ?> <pre> A história de como transformei o meu amigo de infância numa garota </pre> <?php $dir='/wamp64/www/forum'; if (is_dir($dir)) { $images=[]; $files = scandir($dir); foreach ($files as $file) { $extension = strtolower(pathinfo($file, PATHINFO_EXTENSION)); // Verifica se a extensão corresponde a um formato de imagem comum if (in_array($extension, ['jpg', 'jpeg', 'png', 'gif', 'bmp'])) { $images[]=$file;}}} else { echo "O diretório não existe.";exit;} $_SESSION['images']=$images; $totalPaginas=count($images)-1; $pagina=0; gambiarra: ?> <form method=post> <img src=<?=$images[$pagina]?> width=400 height=400> <input type=hidden name=totalPaginas value=<?=$totalPaginas?>> <input type=hidden name=pagina value=<?=$pagina?>><br><br> <input type=submit value=Próximo> </form>
-
Eu cansei de ver os tutoriais espalhados na internet e também das sugestões do Bard. Eu estou indignado. Eu sou o único usuário no planeta que não pode escrever "localhost/astudy" no navegador. Agora, para contornar o problema estou escrevendo "localhost/a_study". Claro que dá para resolver isso com um curso de pós graduação de WampServe ou Windows 11, mas a minha meta era estudar o MVC. Assim, a minha saída para estudar o MVC é esquecer os tutoriais. Nada de mexer no .htacess, nada de mexer no Composer, nada de copiar o Router.php do Bard, e nada de criar as pastas Controllers, Models e Views. Assim, tudo o que restou na pasta a_study foi o index.php. Logo, é nele que vou começar o meu segundo código MVC. Todos os tutoriais usam o método POST. Só que eu não consigo enxergar nada no cabeçalho do navegador. Como sou novato no MVC, nada me impede de usar o método GET. Eu consegui colocar algumas classes dentro do index.php, mas eu não consegui criar uma classe que simulasse um formulário em HTML. Tentei fazer assim: classe viewLogin { private $viewLogin; public function __construct() { $this->viewLogin = "<form><input name=nome></form><?=$mensagem?>";} e o PHP reclamou que a variável $mensagem não estava definida. Eu não tive outra escolha senão criar o arquivo viewLogin.php com o HTML correspondente. Dentro do index.php eu não preciso mais usar o comando require_once ou include, eu já vou direto na classe assim: (new LoginController)->login(); E assim, consegui montar o meu segundo arquivo painel.php, ou seja, em menos de duas horas eu consegui o que eu não consegui em todo mês. Mas na medida que o index.php foi expandindo, eu fiquei imaginando como evitar de escrever if(isset($_GET['key'])){...} para cada formulário que eu ia criando, eu queria a um GET para todos os formulários, inclusive um para o próprio index.php que não tem nenhum GET. Olha só como ficou bacana: index.php <?php if($_GET==null){(new LoginController)->login();exit;} switch(key($_GET)){ case 'nome': (new LoginController)->verifica();break; case 'nomeTime': (new Times)->incluir();break; case 'alterarTime': (new Times)->alterar($id,$nome,$email,$senha,$telefone);break; case 'excluirTime' :(new Times)->excluir($id,$nome);break;} class LoginController { public function login($mensagem=null,$nome=null) { $times=(new Times)->listaTimes(); require_once 'viewLogin.php';} public function verifica(){ $nome=$_GET['nome']; $senha=$_GET['senha']; if($nome==' NOVO CADASTRO'){ require_once 'viewTimeCadastrar.php';exit;} if($senha!==(new Times)->senha($nome) || $senha=null){ $times=(new Times)->listaTimes(); $mensagem="Senha não bate!"; require_once 'viewLogin.php';exit;} require_once 'viewPainel.php';}} class Conexao { private $conexao; public function __construct(){ $this->conexao=new mysqli("localhost","root","","u835212901_campbets");} public function consulta($sql) { $query=$this->conexao->query($sql); return $query->fetch_all(MYSQLI_ASSOC);} public function modifica($sql){ return $this->conexao->query($sql);} } class Times { public function incluir(){ $nome=$_GET['nomeTime']; $email=$_GET['email']; $senha=$_GET['senha']; $telefone=$_GET['telefone']; $sql="insert into times (nome,email,senha,telefone) values ('$nome','$email','$senha','$telefone')"; $fetch=(new Conexao)->modifica($sql); $mensagem="Cadastro do time $nome efetuado"; require_once 'viewLogin.php';} public function listaTimes(){ $fetch=(new Conexao)->consulta("select * from times order by nome"); return json_decode(json_encode($fetch));} public function senha($nome){ $fetch=(new Conexao)->consulta("select senha from times where nome='$nome'"); return $fetch[0]['senha'];} public function excluir($id,$time){ (new Conexao)->modifica("delete from times where id=$id"); $mensagem="time $time retirado do banco de dados"; require_once 'viewLogin.php';} public function alterar($id,$nome,$email,$senha,$telefone){ (new Conexao)->modifica("update times set nome=$nome, email=$email, senha=$senha,telefone=$telefone where id=$id"); $mensagem="time $nome atualizado"; require_once 'viewLogin.php';} } class jogadores { public function incluir(){ require_once 'viewCadastrarJogador.php';} public function alterar(){} public function excluir(){} } É óbvio que isso é um péssimo exemplo de programação, mas foi assim que comecei a aprender a usar o PHP em 2020. Tudo na base da tentativa e erro.
-
Faz duas semanas que tento fazer esse código funcionar, e hoje ele funcionou sem nenhuma explicação. Eu montei os códigos em três arquivos no diretório raiz, são eles: index.php <?php require 'LoginController.php'; (new Login)->contagem(); ======================================= LoginController.php <?php Class Login{ public function contagem($contagem = 0){ $contagem++; require_once 'LoginView.php';} } if(isset($_POST['contagem'])){ $contagem=$_POST['contagem']; (new Login)->contagem($contagem);} ============================================= LoginView.php <form method=post> <h1><?=$contagem?></h1> <input type=hidden name=contagem value='<?=$contagem?>'> <input type=submit> </form>
-
Gerar excel com várias sheets através de phpspreadsheet (php/mysql)
pergunta respondeu ao peterhall de Frank K Hosaka em Tutoriais & Dicas - PHP
Eu não vejo como conciliar essa procedure que você passou com a primeira procedure que você apresentou: $sql = $conn->prepare("call procedure (?, ?, ?)"); $sql->bind_param("sss", $conta, $date1, $date2); principalmente o "sss". Pelo que entendi na nova procedure existem 6 tabelas (tabela1, tabela1_historico, tabela2, tabela2_historico), mas todos com os mesmos campos. Tem como passar o exemplo de apenas um único registro, com identificador, col1, ..., col5, data? -
Salvar numeros de forma ordenada no Banco de Dados
pergunta respondeu ao jcvilanova de Frank K Hosaka em PHP
O problema é o planejamento. O objetivo é criar palpites que não foram repetidos. Vamos supor que a loteria seja de apenas um número, logo, os possíveis palpites são necessariamente 10: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Mas, na vida real, a Caixa Econômica lhe concede o direito de concorrer com dois palpites, desde que pague um pouco mais. Logo, os palpites podem ser 0,1 - 0,2 - 0,3 - 0,4 - 0,5 - 0,6 - 0,7 - 0,8 - 0,9, depois tem a fila do 1,0, 1,2, 1,3, 1,4 e assim por diante. Só com dois números os palpites são bem grandes. Imagine fazer um programa que trabalha com um palpite que sorteia seis números, mas o apostador pode jogar com até quinze números. Se o jogador pode jogar até 15 palpites, não faz sentido trabalhar com um campo de apenas 6 números, daí porque trabalhei com vetor, ele é bem flexível, ele aumenta e diminui de acordo com as necessidades. Já um banco de dados com 15 campos pré definidos ocupa o mesmo espaço que os vetores, graças à tecnologia do Varchar(), ou seja, os campos também são flexíveis. O problema é que o autor do projeto não quer os palpites não se repitam ao que já foi sorteado. Voltando à nossa primeira loteria, vamos supor que o número sorteado foi 1 no sorteio anterior. Faz sentido eu desconsiderar os palpites 1,0 1,2 1,3 1,4 1,5 1,6 1,7 1,8 1,9 só por que um dois palpites já foi sorteado? E quem é o matemático que afirmou que um número já sorteado não vai se repetir nunca mais? -
Não sei como usar try catch (Exception $e)
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Boa gambiarra. Esqueci do @. -
Hoje decidi trabalhar no arquivo Router.php que o Barder passou para mim. Com ajuda do echo e var_dump, eu consegui fazer a seguinte gambiarra: index.php <?php require_once 'Router.php'; require_once 'HomeController.php'; // o router precisa de todas as classes $router = new Router(); $router->addRoute('/', 'HomeController', 'index'); $uri=$_SERVER['REQUEST_URI']; // $uri='/a_study/' $tamanho=strlen($uri); $uri=substr($uri,8,$tamanho); // $uri="/" $route = $router->getRoute($uri); if ($route) { $controller = $route['controller']; $method = $route['method']; (new $controller)->$method();} ========================================================================== Router.php <?php class Router{ private $routes = []; public function addRoute($url, $controller, $method){ $this->routes[$url] = [ 'controller' => $controller, 'method' => $method,];} public function getRoute($url){ if (array_key_exists($url, $this->routes)) { return $this->routes[$url];} else { return null;}} } ============================================================================= Homepage.php <div style='width:500px;margin:0 auto;margin-top:100px'> <form method=post action=HomeController.php> Nome <input name=nome> <input type=submit> </form> <h1><?=$mensagem?> </div> ============================================================================ HomeController.php <?php class HomeController{ public function index($mensagem = null){ require_once 'homepage.php';} } if($_POST){ $mensagem="Seu nome é ".$_POST['nome']; (new HomeController)->index($mensagem);} Depois de duas semanas apanhando com tentativa e erro, finalmente consegui montar o meu primeiro MVC com um router que funciona (claro que se trata de uma enorme gambiarra, mas eu não tenho mais o problema da nova tela se agregar à tela anterior. Hoje também perguntei ao Barder se ele não tinha um código básico de MVC com router, e não é o que danadinho tem! O código dele é super bacana, mas não contempla uma rotina para processar resposta do usuário. Mas eu estou contente, agora vou dormir mais tranquilo!
-
Mostrar Soma por Mes e Ano (PHP + MYSQL)
pergunta respondeu ao williasimione de Frank K Hosaka em PHP
No MySQL: CREATE TABLE `beijos` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `data` date NOT NULL, `beijos` int NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; INSERT INTO `beijos` VALUES (1,'2022-02-05',60),(2,'2022-03-09',80),(3,'2023-08-01',150), (4,'2023-08-02',250),(5,'2023-07-03',50),(6,'2023-07-05',60),(7,'2023-08-17',65),(8,'2023-08-20',183); No PHP: <?php $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("SELECT month(data) as mes, year(data) as ano, sum(beijos) as total from beijos group by month(data),year(data) order by data"); $rows=$query->fetch_all(MYSQLI_ASSOC); foreach($rows as $row){ echo $row['ano']." ".$row['mes']." ".$row['total']."<br>";} resultado: 2022 2 60 2022 3 80 2023 7 110 2023 8 648 -
Ainda não consegui encontrar um router para funcionar o meu código MVC; existem vários na Internet, mas a grande maioria não funciona (mais provavelmente eu não sei como fazer funcionar). O último que visitei é bem bacana: coffeecode/router - Packagist - eu tentei procurar a página HTML no projeto dele, e eu não achei. O rapaz teve a audácia de montar a página HTML dentro de uma classe! Fui tentar fazer o teste, agora respeitando a tecnologia do namespace do PHP, mas nada deu certo, nada funcionou. Eu preciso de um router simples, que faça a personalização onde for necessária. Então joguei fora todo o projeto, ou seja, eu fui no gerenciador de arquivos e exclui a pasta. Mas na hora de criar novamente a pasta astudy, eu não consegui mais acessar pelo navegador. Toda vez que digitava "localhost/astudy", o navegador mudava para https://www.localhost/astudy". Isso é bem embaraçoso, acredito que isso é preço que a gente paga por instalar o .htaccess que estraga o Apache, o Windows, o Navegador, o sistema de busca do Google. O Bard me levou até o arquivo hosts dentro de um dos subdiretórios do System32 do Windows, eu consegui editar "127.0.0.1 localhost/astudy" mas não consegui salvar, mesmo eu sendo o administrador. Já faz duas semanas que estou nessa agonia. O MVC é um padrão de programação, onde você trabalha com classes. O problema é na hora de chamar uma pagina HTML através de qualquer comando PHP (include, require, header), ele ajunta a visão anterior com uma nova visão que você gostaria de mostrar. Para resolver isso, a solução encontrada é o router. O menor router que eu encontrei foi com o Bard, o código só tem 20 linhas, mas não sei como fazer funcionar. A grande maioria leva você até a classe desejada. O problema é na hora do HTML submeter o formulário: a maior parte dos tutoriais não falam nada. Outros aconselham a usar o framework Symfony, e existem esses samaritanos que mostram packages bacanas, mas na hora de usar, você fica perdida, e não encontra nenhum debate sobre o projeto do Gifthb ou coisa parecida. É um pesadelo! O mais lógico é ir direto para o Laravel, o probema é que lá é tudo mágica, eu acho bacana a funcionalidade dele, principalmente o Eloquent. Agora, fazer uma conexão entre o Laravel e o MySQL através do Artisan, isso para mim é muito obscuro. Já estudar o MVC abriu uma nova perspectiva para mim, desde 1990 é que ouço falar em classe, mas só com o MVC é que foi possível ver na prática o poder da lógica da programação, o único problema é que não tem nenhum tutorial que explique como montar um router que funcione e nem estrague o seu computador e sua paciência.
-
Gerar excel com várias sheets através de phpspreadsheet (php/mysql)
pergunta respondeu ao peterhall de Frank K Hosaka em Tutoriais & Dicas - PHP
Para ajudá-lo melhor, preciso da estrutura da tabela que você está usando bem como a lista da procedure dentro do banco de dados, eu não consegui imitar o seu código aqui no meu PC, e se possível com alguns dados da tabela também. -
O meu projeto PHP MVC-r não funciona no Hostinger [Resolvido]
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Encontrei um outro tutorial, dessa vez ele usa o Simfony, onde você precisa usar o Composer várias vezes, depois de testar e fazer alguns ajustes, eu subi tudo de uma vez no Hostinger. E funcionou sem nenhum problema. How to build a simple PHP MVC framework - Giuseppe Maccario A grande vantagem desse tutorial é que você não precisa ativar o servidor do PHP para poder usá-lo no computador local.