Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.211
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. Yes, it is possible to emulate the Laravel request-view paradigm in MVC PHP. The main difference between the two is that Laravel uses a single controller to handle all requests, while MVC PHP uses separate controllers for each type of request. However, you can still achieve the same separation of concerns by using middleware in MVC PHP. To emulate the Laravel request-view paradigm in MVC PHP, you would need to: Create a middleware class for each type of request. In each middleware class, define the logic for handling the request. In your controller, call the appropriate middleware class for each request. Use a view to render the response to the user. Here is an example of a middleware class for handling a GET request: PHP class GetMiddleware { public function handle($request, $next) { // Do something with the request... return $next($request); } } In this example, the middleware class simply does something with the request before passing it on to the next middleware class or controller. Here is an example of a controller that uses middleware: PHP class HomeController { public function index() { // Get the middleware for GET requests. $middleware = new GetMiddleware(); // Use the middleware to handle the request. $response = $middleware->handle($request, $next); // Render the response to the user. return view('home', $response); } } In this example, the controller uses the GetMiddleware class to handle all GET requests. The middleware class then does something with the request before passing it on to the view. By using middleware, you can achieve the same separation of concerns as Laravel's request-view paradigm in MVC PHP.
  2. Nesses três últimos anos, eu sempre tive dificuldade para salvar uma opção do usuário. Para contornar o problema, eu usei a variável $_SESSION['opcao']. O MVC tem um recurso bacana chamado render, e ele dispensa o uso do $_SESSION. A ideia básica do render é bem simples, você define a variável e depois chama o código que vai usar a variável. O problema é como colocar essa ideia simples no mundo do MVC. Depois de 8 horas de tentativa e erro, eu não encontrei outra solução senão criar um código que não se encaixa na pasta Models, ou Views ou Controllers, dentro desses módulos o PHP reclamou que estava criando um código com loop para o infinito. Apesar da minha solução não ser satisfatória, eu gostei do render, ele abre uma nova oportunidade de como posso abrir os views e ao mesmo como passar os valores para ele trabalhar. index.php <?php require realpath('.').'/Controllers/viewController.php'; $view=new View(); $view->render('opcaoView',['opcao'=>'']); =============================================================== rever.php <?php if(isset($_POST['opcao'])){ $opcao=$_POST['opcao']; require_once realpath('.').'/Controllers/viewController.php'; $view=new View(); $view->render('opcaoView',['opcao'=>$opcao]); echo "a sua opcao foi $opcao";} ?> ================================================================== Views/opcaoView.php <div style="width:250px;margin:0 auto;margin-top:200px"> <form action=rever.php method=post> Nome: <Select name=opcao id=opcao method=post> <option>Vana</option> <option>Messias</option> <option>Inácio</option> </Select> <p> <input type=submit> </form> <script>opcao.value='<?=$opcao?>'</script> =================================================================== Controllers/viewController.php <?php class View { public function render($viewName, $data = []) { $viewFile =realpath('.')."/Views/$viewName.php"; extract($data); require $viewFile;}}
  3. O Bard ajuda muito, perguntei para ele se havia um exemplo de como incuir um registro de banco de dados, e ele disse que sim e passou o código. O código dele é muito bacana, mas na hora de testar, nada deu certo. O exemplo do Bard presume que não existe um montes de pastas no MVC, mas o ruim é que eu não consegui enxergar como os dados do View passavam para o Controller. Eu pergutei para o Bard se era possível passar os dados de um <form> de um View diretamente para uma classe no Controller, e ele respondeu: não, não e não. Logo, o único jeito de fazer um MVC funcionar é tudo na base da tentativa e erro, como eu faço com o PHP desde 2020. Depois de 57 tentativas, consegui o meu código MVC para incluir um único registro no banco de dados: index.php <?php require_once "Views/timeView.php"; ====================================================== Views/timeView.php <?php if(isset($_POST['nome'])){ require_once './Controllers/timeController.php'; $time=new timeController(); $time->salvarTime();exit;} ?> <!DOCTYPE html> <html> <head> <title>Cadastrar novo time</title> </head> <body> <form method="post"> <input type="text" name="nome" placeholder="Name"> <input type="email" name="email" placeholder="Email"> <input type="password" name="senha" placeholder="Senha"> <input type="text" name="telefone" placeholder="Telefone"> <input type="submit" value="Salvar Novo Time"> </form> =========================================== Models/conexao.php <?php class conexao{ private $conexao; public function __construct(){ $host='localhost'; $user='root'; $password=''; $db='laravel'; $this->conexao=new mysqli($host,$user,$password,$db); return $this->conexao;} public function consulta($sql){ try {$query=$this->conexao->query($sql);} catch(Exception $e){echo $e->getMessage();exit;} $rows=$query->fetch_all(MYSQLI_ASSOC); return $rows;}} ===================================================================== Models/times.php <?php class times{ private $conexao; public function __construct(){ require_once 'conexao.php'; $this->conexao=new conexao();} public function save($nome,$email,$senha,$telefone){ $this->conexao->consulta("insert into times (nome,email,senha,telefone) values('$nome','$email','$senha','$telefone')");}} ====================================================================== Controllers/timeController.php <?php class timeController{ private $times; public function __construct(){ require './Models/times.php'; $this->times=new times();} public function salvarTime(){ $name=$_POST['nome']; $email=$_POST['email']; $senha=$_POST['senha']; $telefone=$_POST['telefone']; $this->times->save($name,$email,$senha,$telefone); header('Location: index.php');}} ============================================================= Controllers/viewController.php <?php class view{ private $template_name; private $vars=[]; public function __construct($template_name){ $this->template_name=$template_name;} public function setVar($name,$value){ $this->vars[$name]=$value;} public function getVar($name){ return $this->vars[$name];} public function render() { extract($this->vars); ob_start(); include $this->template_name; $content=ob_get_contents(); ob_end_clean(); return $content;}} Eu ainda não testei a classe view nesse código, mas espero fazer dele o coração dos meus projetos futuros.
  4. Depois de três anos estudando o PHP, hoje eu consegui montar o meu primeiro MVC. Isso eu devo ao Barder, ele conseguiu em uma semana o que eu não consegui em três anos. Para eu conseguir a lista dos cinco primeiros produtos, a minha listagem era assim: <?php $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select * from tbprod limit 5"); $rows=$query->fetch_all(MYSQLI_ASSOC); var_dump($rows); Com o MVC, a minha listagem ficou bem robusta e imponente! index.php <?php require_once "Controller/primeiroController.php"; $primeiro=new primeiroController(); $primeiro->exibir(); ================================================= Models/conexao.php <?php class conexao{ private $conexao; public function __construct(){ $host='localhost'; $user='root'; $password=''; $db='laravel'; $this->conexao=new mysqli($host,$user,$password,$db); return $this->conexao;} public function consulta($sql){ $query=$this->conexao->query($sql); $rows=$query->fetch_all(MYSQLI_ASSOC); return $rows;}} ============================================================= Models/produtos.php <?php class produtos{ private $conexao; public function __construct(){ require_once 'conexao.php'; $this->conexao=new conexao();} public function amostra(){ $rows=$this->conexao->consulta("select * from tbprod limit 5"); return $rows;}} =========================================================== Views/primeiroView.php <?php var_dump($amostra); ========================================================== Controllers/primeiroController.php <?php class primeiroController{ private $produtos; public function __construct(){ $realpath=realpath("."); require_once "$realpath/Models/produtos.php"; $this->produtos=new produtos();} public function render($viewName, $data = []) { $realpath=realpath("."); $viewFile ="$realpath/Views/$viewName.php"; if (!file_exists($viewFile)) { throw new \Exception("View file '$viewName.php' not found.");} extract($data); require $viewFile;} public function exibir(){ $amostra=$this->produtos->amostra(); $this->render('primeiroView',['amostra'=>$amostra]);}}
  5. Frank K Hosaka

    DiogoM

    Eu também sou novato na área de MVC para o PHP. Eu estou trabalhando num campeonato de jogos de tacos, e estou usando esse tutorial para montar um esquema do tipo Model, View e Controller: MVC e PHP: Conceito de MVC e sua funcionalidade usando o PHP (devmedia.com.br) A ideia é bem bacana, mas na hora de codificar eu sinto um monte de dificuldade na hora de trabalhar com o banco de dados, na hora de invocar uma classe e principalmente na hora de ir e voltar. Eu sempre trabalhei no diretório raiz, trabalhar com pastas não é nada fácil, ontem gastei horas e horas para saber como funcionava o comando header( ) do PHP. Por exemplo, executo estou na pasta Controller e preciso abrir um arquivo lá na pasta View, e no final o código ficou assim header("location:./listaTodosTimes.php"). Eu não tenho a menor ideia como isso funciona. São esses pequenos detalhes é que fazem a gente gastar um enorme tempo. Outro comando que me fez um enorme tempo foi esse: $row=$query->fetch_assoc( ). Mesmo sabendo que ele retorna um único registro, ele vem dentro de um vetor, tipo [["time"=>"SPFC"]]. Para pegar a informação, eu fiz a seguinte gambiarra: $time=$row[0]["time"]; Outro problema bem grave é a internet. Quase todos os exemplo que eu encontro estão escritos em inglês. Eu não tenho a menor ideia do que o rapaz está comentando no código dele, isso sem falar que eu quase não sei como trabalhar com HTML, JavaScript, CSS e o próprio PHP. Logo, a minha única saída é o famoso método da tentativa e erro. Eu fico feliz quando vejo o meu programa funcionar, mas tenho insônia, eu sempre me pergunto se ele está certo, e eu não tenho ninguém para conferir. Hoje eu vi o cadastro de produto, e a cebola estava a R$ 90,00 o quilo, quando o preço médio é R$ 4,00. Certamente eu fiz alguma besteira. Assim eu compartilho os meus problemas no forum assim: <?php $cebola = 12 * $margem E pergunto para a turma: olha, o PHP reclama que a variável $margem não está definida. O que eu fiz de errado? E o fórum sempre tem gente boa para responder a questão na hora. Geralmente o pessoal me coloca o link do portal do PHP, e eu sempre esqueço de falar que o meu problema é que não sei nada de inglês. Aí, um outro me coloca o link do Google. Enfim, eu não sei o que é mais cruel, se é o MVC do PHP ou a turma do fórum.
  6. Ontem, eu gastei três horas, para executar esse código: <?php $usuario = new usuario(); if($_POST['excluir']){$usuario->excluir();} $usuario->procurar($_SESSION['osafado']); $id=$usuario->id; ?> <form method=post> <button name=excluir type=submit>Excluir <?=$id?></button> </form> Esse é um erro difícil de achar, mas depois de três horas é que percebi o grande erro. Quando o código apresenta o formulário, o id é definido pela variável SESSION, mas quando o botão atualiza a página, a nova instância do usuario não tem nada no id. Que bom seria se a gente pudesse escrever coisa do tipo: i <?php if(isset($_POST['excluir']){ $usuario=old usuario(); $usuario->excluir() ;}
  7. Frank K Hosaka

    pergunta de novato

    Eu uso o famoso método da tentativa e erro. O correto é ler o manual, experimetar o código exemplo para ver se chega no mesmo resultado. Mas eu detesto ler manual, lá tem mais informações dificeis de entender. Vamos para a aula número um: Crie um arquivo chamado index.php na pasta C:\Wamp64\www\georgem e escreva esse código: <?php echo "Olá George, pressione o botão debaixo para ir no arquivo seguinte"; ?> <form action="paginaseguinte.php"> <button type="submit">Ir para a página seguinte</button> </form> Agora, abra o navegador, veja se o wamp está com o ícone verde na barra de tarefas, e digite localhost/georgem Você verá a mensagem para apertar o botão, e quando você apertar o botão, o PHP vai apresentar essa mensagem de erro "O arquivo paginaseguinte.php não foi encontrado". Para consertar o erro, crie um arquivo chamado paginaseguinte.php com esse código: <script>alert("Parabéns, Georgem! Você conseguiu passar na primeira aula!")</script> Para testar o novo código, volte no navegador, e use a tecla de atualização. Ou seja, o único jeito de aprender a dirigir um carro é usando primeiro a chave, depois tem que procurar um buraco para a chave, depois descobrir para que lado virar a chave, e qundo o motor começar a roncar, você aparece aqui no fórum e pergunta: e agora, o que eu faço? Geralmente o fórum leva dois anos para responder, mas tem gente bacana que diz na hora que diz "faça um curso de condutor no Detran", e tem outros engraçadinhos como eu que sugere empurrar a alavanca para trás para ver o que acontece. Se o carro não funcionar, geralmente é um bug no motor!
  8. Projeto Senac 2.0, atualizado em 10/08/2023 02:11 hs (ufa, terminei!) O que dá mais trabalho com as classes é que eu sempre esqueço que todas as informações que foram gravadas na classe desaparecem, assim que você aperta o botão submeter. Estava pensando em até criar um $_SESSION['classes'], mas o propósito desse projeto é outro. Ele é para ver como funcionam as classes. Eu acho difícil trabalhar com eles, eu prefiro mais o estilo dissertativo, a gente vai escrevendo o que der na telha. MySQL CREATE TABLE `usuarios` ( `id` int NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, `senha` varchar(255) NOT NULL, `nome` varchar(45) DEFAULT NULL, `endereco` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 --------------------------------------------------------------------------------------- index.php <?php require('classes.php'); $Usuario=new Usuario(); if(isset($_POST['email'])){ $_SESSION['email']=$_POST['email']; $_SESSION['senha']=$_POST['senha'];} if(isset($_SESSION['email'])){ $email=$_SESSION['email']; $senha=$_SESSION['senha'];} else {$email="";$senha="";} ?> <form method=post action=validar.php> <label class="text-primary h4">E-mail:</label> <input class="form-control" type=text name=email placeholder= "Preencha seu e-mail" value='<?=$email?>' required><br> <label class="text-danger h4">Senha:</label> <input class="form-control" type=text name=senha placeholder= "Preencha sua senha" value='<?=$senha?>'><br> <button class="btn btn-primary" name="logar" type="submit"> Entrar</button> <button class="btn btn-primary" name="novo" type="submit"> Novo</button> <button class="btn btn-primary" name="alterar" type="submit"> Alterar</button> <button class="btn btn-primary" name="excluir" type="submit"> Excluir</button> </form> <br><br><font size=4 color=red><i> <div id=mensagem><?=$_SESSION['mensagem']?><div></i> </body> </html> ----------------------------------------------------------------------------- cadastro.php <?php require('classes.php'); $Usuario=new Usuario(); if(isset($_POST['nome'])){ $Usuario->nome = $_POST['nome']; $Usuario->email = $_POST['email']; $Usuario->senha = $_POST['senha']; $Usuario->endereco = $_POST['endereco']; $Usuario->cadastrar(); $_SESSION['mensagem']="Nova conta já cadastrada."; header('location:index.php');} $email=$_SESSION['email']; $senha=$_SESSION['senha']; $teste=$Usuario->validaUsuario($email,$senha); if($teste=="Senha incorreta" || $teste=="Sucesso"){ $_SESSION['mensagem']="Essa conta já está cadastrada"; header('Location:index.php');} ?> <form method=post> <label class="text-primary h4">Nome:</label> <input class="form-control" name=nome required><br> <label class="text-primary h4">E-mail:</label> <input class="form-control btn btn-warning" name=email value=<?=$email?>><br><br> <label class="text-primary h4">Senha:</label> <input class="form-control btn btn-warning" name=senha value=<?=$senha?>><br><br> <label class="text-primary h4">Endereço:</label> <input class="form-control" name=endereco required><br><br> <input class="form-control btn btn-primary" type=submit><br><br> </form> <input class="form-control btn btn-primary" type=submit Value=Cancelar onclick="location.replace('index.php')"> ----------------------------------------------------------------------- classes.php <!DOCTYPE html> <html> <title>Projeto Senac 2.0</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" crossorigin="anonymous"> <body class="w-25 mx-auto mt-5"> <?php session_start(); class Usuario { public $host="localhost"; public $user="root"; public $password=""; public $database="laravel"; public $query, $link, $result, $id, $nome, $email, $senha, $endereco; public function MySQL(){} public function getConexao(){ $this->link=mysqli_connect($this->host,$this->user,$this->password); if(!$this->link){ echo "Falha na conexão com o Banco de Dados! <br>"; echo "Erro:".mysqli_error($this->link); die();} elseif(!mysqli_select_db($this->link,$this->database)){ echo "O Banco de Ddos solicitado não pode ser aberto! <br>"; echo "Erro:".mysqli_error($this->link); die();}} public function excluir($id){ $sql="delete from usuarios where id=$id"; $resposta=$this->query($sql); return $resposta;} public function query($query){ $this->getConexao(); $this->query=$query; if($this->result=mysqli_query($this->link,$this->query)){ mysqli_close($this->link); return $this->result;} else { echo "Ocorreu um erro na execução dda SQL"; echo "Erro:".mysqli_error($this->link); echo "SQL:".$query; die(); return mysqli_close($this->link);}} public function Cadastrar() { $sql = "INSERT INTO Usuarios (nome,email,senha,endereco) VALUES ('$this->nome','$this->email','$this->senha','$this->endereco')"; if ($this->query($sql)) {return "Sucesso";} else { return "Erro na tentativa de cadastrar";}} public function Editar() { $sql="update usuarios set nome='$this->nome',email = '$this->email', senha='$this->senha',endereco='$this->endereco' where id=$this->id"; if ($this->query($sql)) {return "Sucesso";} else { return "Erro na tentativa de editar";exit;}} public function validaUsuario($email,$senha) { $this->email=$email; $this->senha=$senha; if (strlen($this->email) > 100) { echo "E-mail deve ter até 100 caracteres"; return false;} if ($this->senha == null || strlen($this->senha) < 6) { return "Preencha a senha com no mínimo 6 caracteres!"; } $sql = "select * from usuarios where email='$this->email'"; $resposta = $this->query($sql); $usuario = $resposta->fetch_assoc(); if ($usuario==null) { $_SESSION['mensagem']="Email não cadastrado"; header('location:index.php');exit;} if ($usuario['senha'] != $this->senha) { $_SESSION['mensagem']="Senha incorreta"; header('location:index.php');exit;} $_SESSION['usuario']=$usuario['nome']; $this->id=$usuario['id']; $this->nome=$usuario['nome']; $this->email=$usuario['email']; $this->senha=$usuario['senha']; $this->endereco=$usuario['endereco']; return "Sucesso";} } ?> ----------------------------------------------------------------------------- editar.php <?php require('classes.php'); $Usuario=new Usuario(); if(isset($_POST['nome'])){ $Usuario->id=$_POST['id']; $Usuario->nome = $_POST['nome']; $Usuario->email = $_POST['email']; $Usuario->senha = $_POST['senha']; $Usuario->endereco = $_POST['endereco']; $_SESSION['email']=$_POST['email']; $_SESSION['senha']=$_POST['senha']; $Usuario->editar(); $_SESSION['mensagem']="Cadastro atualizado."; header('location:index.php');} $Usuario->email=$_SESSION['email']; $Usuario->senha=$_SESSION['senha']; $Usuario->validaUsuario($Usuario->email,$Usuario->senha); $id=$Usuario->id; $nome=$Usuario->nome; $email=$Usuario->email; $senha=$Usuario->senha; $endereco=$Usuario->endereco; ?> <form method=post> <input type=hidden name=id value=<?=$id?>> <label class="text-primary h5">Nome:</label> <input class="form-control" name=nome value='<?=$nome?>'><br> <label class="text-primary h5">E-mail:</label> <input class="form-control" name=email value='<?=$email?>'><br> <label class="text-primary h5">Senha:</label> <input class="form-control" name=senha value='<?=$senha?>'><br> <label class="text-primary h5">Endereço:</label> <input class="form-control" name=endereco value='<?=$endereco?>'><br> <input class="form-control btn btn-primary" type=submit value=Atualizar><br><br> </form> <input class="form-control btn btn-primary" type=submit Value=Cancelar onclick="location.replace('index.php')"> ------------------------------------------------------------------------------------ excluir.php <?php require('classes.php'); $Usuario=new Usuario(); if(isset($_POST['excluir'])){ $id=$_POST['id']; $Usuario->excluir($id); $_SESSION['mensagem']="Essa conta acabou de ser excluido."; header('location:index.php');} $Usuario->email=$_SESSION['email']; $Usuario->senha=$_SESSION['senha']; $Usuario->validaUsuario($Usuario->email,$Usuario->senha); $id=$Usuario->id; $nome=$Usuario->nome; $email=$Usuario->email; $senha=$Usuario->senha; $endereco=$Usuario->endereco; ?> <form method=post> <input name=id type=hidden value=<?=$id?>> <label class="text-primary h5">Id: <?=$id?> Nome:</label> <input class="form-control btn btn-warning" value='<?=$nome?>'><br><br> <label class="text-primary h5">E-mail:</label> <input class="form-control btn btn-warning" value='<?=$email?>'><br><br> <label class="text-primary h5">Senha:</label> <input class="form-control btn btn-warning" name=senha value='<?=$senha?>'><br><br> <label class="text-primary h5">Endereço:</label> <input class="form-control btn btn-warning" value='<?=$endereco?>'><br><br> <input class="form-control btn btn-primary" type=submit name=excluir value='Confirmar exclusao'><br><br> </form> <input class="form-control btn btn-primary" type=submit Value=Cancelar onclick="location.replace('index.php')"> --------------------------------------------------------------------------- produtos.php <?php include("classes.php"); ?> <pre> O usuário logado é <?=$_SESSION['usuario']?>. A rotina de produtos não foi implantada na versão 2.0 </pre> <button class="btn btn-primary" onclick="location.replace('index.php')">Voltar</button> ---------------------------------------------------------------------------- <?php include('classes.php'); $Usuario=new Usuario(); $_SESSION['mensagem']=""; $_SESSION['email']=$_POST['email']; $_SESSION['senha']=$_POST['senha']; if (isset($_POST['logar'])) { $resposta = $Usuario->validaUsuario($_POST['email'],$_POST['senha']); if($resposta == "Sucesso") {header("Location:produtos.php");} else {$_SESSION['mensagem']=$resposta; header('location:index.php');}} if(isset($_POST['novo'])){header('location:cadastro.php');} if(isset($_POST['alterar'])){header('location:editar.php');} if(isset($_POST['excluir'])){header('location:excluir.php');}
  9. O arquivo zipado está com o arquivo PDF corrompido e também está faltando o código do conexao.php, mesmo assim, eu consegui fazer um código tão safado quanto o do Senac. Apesar de safado, ele funciona (pelo menos, até onde eu testei). Ele inclui, altera e exclui a conta do usuário, e só ocupa um arquivo ao invés de quatro arquivos que está no zip. <!DOCTYPE html> <html> <body style="width:500px;margin:0 auto;margin-top:100px"> <?php if(isset($_GET['home'])){ echo "Sinto muito, essa página não está pronta.";exit;} ?> <form> E-mail:<input type=email name=email><p> Senha: <input type=password name=senha><p> <button type=submit>Entrar</button> </form> <?php // esse código precisa de uma tabela no mysql: usuarios(id,email,senha) if(isset($_GET['cadastrar'])){ $Usuario=new Usuario(); $Usuario->cadastrar();} if(isset($_GET['editar'])){ $Usuario=new Usuario(); $velhoEmail=$_GET['velhoEmail']; $novoEmail=$_GET['editar']; $Usuario->editar($novoEmail,$velhoEmail);} if(isset($_GET['excluir'])){ $Usuario=new Usuario(); $excluir=$_GET['excluir']; $Usuario->excluir($excluir);} if(!isset($_GET['email'])){exit;} class Usuario { public $id,$nome,$email,$senha,$endereco,$conexao; public function __construct(){ $this->conexao = new mysqli("localhost","root","","laravel"); return $this->conexao;} public function validaUsuario() { if ($this->validaEmail()) { if ($this->senha== null || strlen($this->senha) < 6) { return "Preencha a senha com no mínimo 6 caracteres!"; } return $this->Login();}} public function validaEmail() { if ($this->email == null) { echo "O e-mail é indispensável"; return false;} elseif(strlen($this->email)>45) { echo "E-mail deve ter até 45 caracteres"; return false;} return true;} public function Login() { $sql = "select * from usuarios where email = '$this->email'"; $resposta = $this->conexao->query($sql); $usuario = $resposta->fetch_assoc(); if (!$usuario) { echo "Email não cadastrado <a href=?cadastrar=$this->email&senha=$this->senha>Cadastrar $this->email</a>";exit;} elseif ($usuario['senha'] != $this->senha) { echo "Senha incorreta";exit;} echo " <table> <tr><td nowrap>Opção 1: <td nowrap>alterar email $this->email para <td><form><input type=email name=editar onchange=submit()> <input type=hidden name=velhoEmail value=$this->email></form> <tr><td>Opção 2: <td>excluir o email $this->email <td><form> <input name=excluir type=submit value=Excluir onchange=submit()> <input type=hidden name=excluir value=$this->email> </form> <tr><td>Opção 3: <td>ir para o Home Page <td><form><input name=home type=submit value='Home Page'></form> </table>";} public function Cadastrar() { $this->email=$_GET['cadastrar']; $this->senha=$_GET['senha']; $sql = "insert into usuarios (email,senha) values ('$this->email','$this->senha')"; if (!mysqli_query($this->conexao, $sql)) {return "Erro na tentativa de cadastrar";exit;}} public function Editar($novoEmail,$velhoEmail) { $sql = "update usuarios set email = '$novoEmail' where email='$velhoEmail'"; if (!mysqli_query($this->conexao, $sql)) { return "Erro na tentativa de editar";exit;}} public function Excluir($email){ $sql = "delete from usuarios where email='$email'"; if (!mysqli_query($this->conexao, $sql)) { return "Erro na tentativa de editar";exit;}} } $Usuario = new Usuario(); $Usuario->email=$_GET['email']; $Usuario->senha=$_GET['senha']; $resposta = $Usuario->validaUsuario($Usuario); ?>
  10. Frank K Hosaka

    Herança no PHP

    <!DOCTYPE html> <html> <body style="width:500px;margin:0 auto;margin-top:100px"> <?php if(isset($_GET['home'])){ echo "Sinto muito, essa página não está pronta.";exit;} ?> <form> E-mail:<input type=email name=email><p> Senha: <input type=password name=senha><p> <button type=submit>Entrar</button> </form> <?php // esse código precisa de uma tabela no mysql: usuarios(id,email,senha) if(isset($_GET['cadastrar'])){ $Usuario=new Usuario(); $Usuario->cadastrar();} if(isset($_GET['editar'])){ $Usuario=new Usuario(); $velhoEmail=$_GET['velhoEmail']; $novoEmail=$_GET['editar']; $Usuario->editar($novoEmail,$velhoEmail);} if(isset($_GET['excluir'])){ $Usuario=new Usuario(); $excluir=$_GET['excluir']; $Usuario->excluir($excluir);} if(!isset($_GET['email'])){exit;} class Usuario { public $id,$nome,$email,$senha,$endereco,$conexao; public function __construct(){ $this->conexao = new mysqli("localhost","root","","laravel"); return $this->conexao;} public function validaUsuario() { if ($this->validaEmail()) { if ($this->senha== null || strlen($this->senha) < 6) { return "Preencha a senha com no mínimo 6 caracteres!"; } return $this->Login();}} public function validaEmail() { if ($this->email == null) { echo "O e-mail é indispensável"; return false;} elseif(strlen($this->email)>45) { echo "E-mail deve ter até 45 caracteres"; return false;} return true;} public function Login() { $sql = "select * from usuarios where email = '$this->email'"; $resposta = $this->conexao->query($sql); $usuario = $resposta->fetch_assoc(); if (!$usuario) { echo "Email não cadastrado <a href=?cadastrar=$this->email&senha=$this->senha>Cadastrar $this->email</a>";exit;} elseif ($usuario['senha'] != $this->senha) { echo "Senha incorreta";exit;} echo " <table> <tr><td nowrap>Opção 1: <td nowrap>alterar email $this->email para <td><form><input type=email name=editar onchange=submit()> <input type=hidden name=velhoEmail value=$this->email></form> <tr><td>Opção 2: <td>excluir o email $this->email <td><form> <input name=excluir type=submit value=Excluir onchange=submit()> <input type=hidden name=excluir value=$this->email> </form> <tr><td>Opção 3: <td>ir para o Home Page <td><form><input name=home type=submit value='Home Page'></form> </table>";} public function Cadastrar() { $this->email=$_GET['cadastrar']; $this->senha=$_GET['senha']; $sql = "insert into usuarios (email,senha) values ('$this->email','$this->senha')"; if (!mysqli_query($this->conexao, $sql)) {return "Erro na tentativa de cadastrar";exit;}} public function Editar($novoEmail,$velhoEmail) { $sql = "update usuarios set email = '$novoEmail' where email='$velhoEmail'"; if (!mysqli_query($this->conexao, $sql)) { return "Erro na tentativa de editar";exit;}} public function Excluir($email){ $sql = "delete from usuarios where email='$email'"; if (!mysqli_query($this->conexao, $sql)) { return "Erro na tentativa de editar";exit;}} } $Usuario = new Usuario(); $Usuario->email=$_GET['email']; $Usuario->senha=$_GET['senha']; $resposta = $Usuario->validaUsuario($Usuario); ?>
  11. Consegui terminar o meu código, ao invés de usar dez1, dez2, dez3, dez4, dez5 e dez6, eu usei apenas um campo texto chamado sorteio com esse formato '[dez1,dez2,dez3,dez4,dez5,dez6]', isso porque você falou de outras loterias que tem menos números ou mais números serem sorteados. Mesmo assim, o problema é como conferir o palpite aleatório com o que está no banco de dados. Deixei o meu código final logo acima. Espero que ele ajude no seu projeto, apesar de ter mudado a sua estrutura no banco de dados.
  12. Fiz um código básico para ver como conferir um palpite com o banco de dados: <?php $pdo=new pdo("mysql:host=localhost;dbname=laravel","root",""); $query="drop table if exists sorteio"; $stmt=$pdo->prepare($query); $stmt->execute(); $query="create table sorteio (`id` int NOT NULL AUTO_INCREMENT, `dataDoSorteio` date DEFAULT NULL,`tipoJogo` varchar(10) DEFAULT NULL, `numeroDoSorteio` int DEFAULT NULL, `Sorteio` varchar(45) DEFAULT NULL,PRIMARY KEY (`id`))"; $stmt=$pdo->prepare($query); $stmt->execute(); $query="insert into sorteio (dataDoSorteio,tipoJogo,numeroDoSorteio,Sorteio) values ('2021-12-14','Mega-Sena',2438,'[4,11,19,25,37,55]'), ('2021-12-16','Mega-Sena',2439,'[2,8,34,38,47,51]'), ('2021-12-20','Mega-Sena',2440,'[9,41,42,46,54,18]')"; $stmt=$pdo->prepare($query); $stmt->execute(); $palpite=[4,11,19,25,37,55,57,60]; $query="select Sorteio from sorteio"; $stmt=$pdo->prepare($query); $stmt->execute(); $sorteios=$stmt->fetchAll(PDO::FETCH_COLUMN); echo "Testando palpite ".implode(" ",$palpite); foreach($sorteios as $sorteio){ echo "<br>Testando sorteio $sorteio"; $j=json_decode($sorteio); if($j[0]==$palpite[0] && $j[1]==$palpite[1] && $j[2]==$palpite[2] && $j[3]==$palpite[3] && $j[4]==$palpite[4] && $j[5]==$palpite[5]){goto fim;} else {echo "palpite válido";exit;}} fim: echo "<br>Palpite inválido pois os seis primeiros números já foram sorteados"; O problema todo é como comparar o palpite com os resultados já divulgados. Você impôs a regra de não repetir um resultado que já foi publicado. No meu código, eu usei um único palpite com seis números que já foram publicados, mas foram usados 8 dezenas. É quase improvável que o resultado da Mega-Sena se repita mais de uma vez, mas isso não quer dizer que seja impossível. Mas invalidar um palpite de 8 dezenas só porque tem 6 dezenas que já foram sorteadas não faz o menor sentido.
  13. Ainda não entendi o propósito do projeto. Preciso de uma ideia mais prática. Gerar número aleatório de acordo com o gosto do freguês é bem difícil de enxergar. Mesmo assim, eu posso sugerir a estrutura do banco de dados aposta (id,palpites), onde id é chave primária e palpites é um string com 45 caracteres, ele teria essa cara: 1 , '[01 02 03 04 05 06]' 2, '[07 08 09 10 11 12]' 3, '[07 08 09 10 11 13]' Como exercício, tente ver se o registro com id=2 é igual ao registro de id=3.
  14. Para ter a hora atual, a função seria assim '.date('H:i').' e para não ter o dia em tempo real basta não usar nenhuma função de tempo, basta escrever na unha.
  15. <?php $f['time']="08:53"; // isso inventei para testar esse código $data = date('D'); $mes = date('M'); $dia = date('d'); $ano = date('Y'); $semana = ['Sun' => 'Domingo','Mon' => 'Segunda-Feira','Tue' => 'Terca-Feira', 'Wed' => 'Quarta-Feira','Thu' => 'Quinta-Feira', 'Fri' => 'Sexta-Feira', 'Sat' => 'Sábado']; $mes_extenso = ['Jan' => 'Janeiro','Feb' => 'Fevereiro','Mar' => 'Marco', 'Apr' => 'Abril','May' => 'Maio','Jun' => 'Junho','Jul' => 'Julho', 'Aug' => 'Agosto','Nov' => 'Novembro','Sep' => 'Setembro', 'Oct' => 'Outubro','Dec' => 'Dezembro']; $style="font-size: 12px;margin: 10 0 10;border-top: 1.9px solid #fff;padding: 10 0 0;position: relative"; $hoje="Hoje é ".$semana[$data]." dia $dia de ".$mes_extenso[$mes]."de $ano"; echo "<span style=$style>".$hoje." ".$f['time']."</span>";
  16. Para ordenar seis números sorteados, o código é esse: <?php $numbers=range(1,60); srand((float)microtime()*1000000); shuffle($numbers); $palpites=[]; for($i=0;$i<=5;$i++){$palpites[]=$numbers[$i];} asort($palpites); foreach($palpites as $palpite){echo "$palpite ";} Para colocar o palpite no banco de dados, eu preciso de mais informação. Eu sei que a aposta mínima de seis números na Mega-Sena custa R$ 5,00 e o maior custa R$ 25.025,00 com quinze números, mas é preciso verificar, eu não tenho certeza. Eu vou criar uma tabela aposta com 6 campos ou 15 campos? Essa tabela vai identificar o cliente? O cliente pode apostar os mesmos números mais de uma vez ou só uma vez? Preciso de um campo para o número e data do sorteio?
  17. Um rapaz no Laracasts comentou que estou usando indevidamente o relacionamento da tabela, ele disse para não jogar todo o banco de dados no visualizador, ele orientou a só mandar o agrupamento de datas no visualizador com a respestiva soma. Se alguém quiser mais detalhes, basta clicar na data que o controlador vai montar os detalhes daquela data e devolver no visualizador. A idéia é bem simples. Não precisa de nenhum relacionamento, o visualizador só vai ter a informação que o usuário precisa, e a tabela pode trabalhar com apenas um campo com a data e a hora da venda. As soluções mais simples são as melhores.
  18. Eu pedi ajuda para a turma do Laracasts sobre a possibilidade de eu trabalhar com apenas um campo, ao invés do Vendido (tipo data) e do HoraVenda (tipo data tempo), mas dessa vez eu não consegui nenhum resultado. No PHP é possível trabalhar com apenas um campo, porque o controlador e o visualizador fica tudo misturado no mesmo código. Já no Laravel, o controlador e o visualizador são peças separadas. Claro que é possível executar várias consultas dentro do visualizador, mas esse não é o propósito do Laravel. Para rodar a consulta somente no controlador, eu precisaria mandar os dados do pedido junto com a relação dos pedidos para cada data, e isso só é possível através de um relacionamento, e o relacionamento só funciona se o campo em referência for do tipo data e não data tempo.
  19. Comigo esse código traz tudo em ordem alfábetica.
  20. Faz quase duas semanas que eu encontrei um valor nulo no banco de dados, onde eu não esperava. No PHP, eu tinha o seguinte código: $vendido=date('Y-m-d'); $horavenda=date('Y-m-d H:i'); $query=$mysqli("update tbpedido set vendido='$vendido', 'horavenda'=$horavenda" where ped=2023); Não há como passar um valor nulo nessas condições. Depois de duas semanas, é que eu lembrei que o meu irmão tem acesso ao meu projeto Laravel, que basicamente é um xerox do projeto PHP. Mas não é. No controller eu encontrei isso: $vendido=date('Y-m-d H:i'); tbpedido::where('ped',2023)->update(['vendido'=>$vendido]); Ou seja, no Laravel eu esqueci de definir o valor da hora da venda, e foi assim que o banco de dados ficou com o valor nulo. Outro erro bastante grave é o princípio da atomicidade. Data da venda e hora da venda é a mesma coisa no mundo do banco de dados, não há porque ter dois campos para mostrar o mesmo valor. Para separar data da hora, isso dá para fazer com o comando: data da venda = date('d/m/Y',strtotime($vendido)) e hora da venda = date('H:i',strtotime($vendido)). Mesmo assim, estou contente por ter encontrado um erro em apenas duas semanas. Geralmente eu gastava vários meses.
  21. Ontem, eu recebi uma mensagem de erro nesse código: <?php $pedidos=[["id"=>1,"total"=>2.00,"data"=>"2023-07-27"], ["id"=>2,"total"=>10.00,"data"=>null], ["id"=>3,"total"=>5.00,"data"=>"2023-07-27"]]; echo "relatório de orçamentos <br><table><th>Pedido<th>Total<th>Data"; foreach($pedidos as $pedido){ echo "<tr><td>".$pedido['id']."<td>".$pedido['total']. "<td>".date('d/m/y',strtotime($pedido['data']));} // Deprecated: strtotime(): Passing null to parameter #1 ($datetime) // of type string is deprecated in C:\wamp64\www\astudy\index.php on line 8 Não descobri como apareceu o valor null na variável data. Para contornar o problema, eu tentei usar try {$dia=date('d/m/y',strtotime($pedido['data']));} catch (Exception $e){$dia="problema";} Não deu certo, a tela ficou com outras mensagens de erro. Assim, eu fiz outra gambiarra: <?php $pedidos=[["id"=>1,"total"=>2.00,"data"=>"2023-07-27"], ["id"=>2,"total"=>10.00,"data"=>null], ["id"=>3,"total"=>5.00,"data"=>"2023-07-27"]]; echo "relatório de orçamentos <br><table><th>Pedido<th>Total<th>Data"; foreach($pedidos as $pedido){ if($pedido['data']!==null){ $dia=date('d/m/y',strtotime($pedido['data']));} else { $dia="problema";} echo "<tr><td>".$pedido['id']."<td>".$pedido['total']. "<td>$dia";} e o relatório vai aparecer no final dessa mensagem. Ou seja, eu cai na segunda lei de Murphy, onde "a pressa é a inimiga da programação".
  22. <?php $texto='{"parentesco":"mãe","apelido":"moça"}'; $jtexto=json_decode($texto); // só funciona se o json for válido echo $jtexto->parentesco."<br>"; // mãe echo $jtexto->apelido; // moça $novo_texto = preg_replace(array("/(á|à|ã|â|ä)/","/(Á|À|Ã|Â|Ä)/","/(é|è|ê|ë)/", "/(É|È|Ê|Ë)/","/(í|ì|î|ï)/","/(Í|Ì|Î|Ï)/","/(ó|ò|õ|ô|ö)/","/(Ó|Ò|Õ|Ô|Ö)/", "/(ú|ù|û|ü)/","/(Ú|Ù|Û|Ü)/","/(não)/","/(não)/"), explode(" ","a A e E i I o O u U n N"),$texto); echo $novo_texto; // {"parentesco":"mae","apelido":"moça"} Note que não foi tirado o cedilha da moça. Eu fiz isso de propósito, para você entender a função preg_replace do PHP
  23. Hahahaha... eu li um pouco sobre API e tudo indica que esse recurso é para quem usa a hospedagem com o WordPress, onde você pode baixar o WP-CLI, e acessar os dados do site Word-Press, sem precisar usar o navegador. O meu plano é de pobre. Não dá para brincar com o Laravel e nem tem API nenhuma. O único jeito é rezar para você encontrar alguém aqui que ganha mais de R$ 1.320,00 por mês e que tenha experiência com Word Press e também tenha disposição para ajudá-lo. Milagre é difícil de acontecer, mas sempre existe uma possibilidade. Enquanto isso, use o seu domínio para compartilhar o PHP, pelo menos é isso que eu faço.
  24. Hahahaha... agora, consegui ver onde está o problema. Eu nunca usei uma API no hospedeiro. Eu não tenho nenhuma experiência nessa área. Eu lembro que apanhei muito quando estudei JavaScript, foi quase um ano apanhando, até aprender a montar um código em PHP que devolvesse os dados em json para o JavaScript jogar na tela. Eu desconfio que o raciocínio é o mesmo. O problema é ver quem manda as informações para o API ou ver como ele chega lá, se é que chega.
  25. Eu também sou novato na hospedagem. Eu queria usar o Laravel, mas eu não posso usar o comando npm na hospedagem tipo site do Hostinger. Quanto ao PHP, eu nunca tive problema. A minha sugestão agora é mudar o teste.php, assim: <?php $mysqli=new mysqli("localhost","userNameNoDominio","SenhaNoDominio","NomeDoBancoDeDadosNoDominio"); $query=$mysqli->query("select * from users"); $rows=$query->fetch_all(); var_dump($rows); e boa sorte, mas o mais importante é ver se você consegue abrir o banco de dados sem a ajuda do PHP, na rotina do gerenciador de banco de dados do hospedeiro.
×
×
  • Criar Novo...