
Frank K Hosaka
Membros-
Total de itens
1.623 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
O plano que uso no Hostinger é de hospedagem de site, ou seja, não dá para usar o npm. Por outro lado, o meu projeto não precisa do npm. Todos os códigos foram feitos na unha. A única coisa que não é minha é o arquivo router.php que coloquei na pasta Controllers. Eu copiei do Bard. O código a seguir funciona no computador local, mas você precisa ativar o servidor do PHP assim: php -S localhost:8000 No navegador, você escreve localhost:8000 O servidor vai buscar o index.php, o index.php vai passar todo o comando para o router, e o router é que faz todo o espetáculo do MVC acontecer. Assim, eu acho que o correto é chamar o MVC de MVC-r, sem o router o MVC não faz o menor sentido. Agora, como fazer isso funcionar no Hostinger, isso é um problema bem sério. Se eu não conseguir, o jeito é abandonar o MVC-r para sempre. index.php <?php require 'Controllers/router.php'; $router=new Router(); $router->run(); ================================================================= Views/menu.php <!DOCTYPE html> <html lang="en"> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>projeto php</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous"></script> <script> var lçto = ""; var descrição = "" function lançar(id,jd) {lçto=id; descrição=jd;} function registro(id,jd) {eleconta=document.getElementById(lçto); eledescrição = document.getElementById(descrição); eleconta.value=id; eledescrição.innerHTML=jd;} </script> <style> a:link,a:visited{text-decoration:none;color:blue} a:hover{text-decoration:underline;color:#f00} a:active{text-decoration:none} body{margin:auto;max-width:500px} .desktop{display: none;position:fixed;overflow:auto;background:lightgray} form{margin: 0} .desktop2 {display:none;background-color:lightblue;position:fixed;z-index:1;left:30%;top:10%; padding:10px;width:40%;height:85%;overflow:auto;} .flutua{position:relative;left:80%} .linha{line-height:0px;min-height:0px;height:0px} .linha2{line-height:20px;min-height:20px;height:20px} .linha3{line-height:10px;min-height:10px;height:10px;font-size:12} .menu {position: relative;display: block;left:1%} .menu2 {position:relative;z-index:2} .movel {display:none; position:fixed; background-color:lightgray; border:1px solid;top:10;left:10} .movel2 {display:none;background-color:lightgray;position:fixed;z-index:1;left:10%;top:10%} .se {display:flex} summary{list-style:none} td{white-space: nowrap} </style> <header id=cabecalho class="navbar navbar-light sticky-top bg-light flex-md-nowrap p-0"> Projeto PHP <div class="dropdown"> <button type="button" class="btn btn-outline-primary dropdown-toggle" data-bs-toggle="dropdown" id=btmenu> Menu <?=Date('H:i')?> </button> <ul class="dropdown-menu"> <li><a class="dropdown-item" href=orcamento>Orçamento</a></li> </ul> </div> </header> ============================================================================================================== Views/login.php <!DOCTYPE html> <html lang="en"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Projeto PHP</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous"> <style> html,body {height: 100%} body {display: flex;align-items: center;padding-top: 40px;padding-bottom: 40px;background-color: #f5f5f5;} .form-signin {max-width: 330px;padding: 15px;} .form-signin .form-floating:focus-within {z-index: 2;} </style> <body class="text-center"> <main class="form-signin w-100 m-auto"> <form method=post> <h1 class="h3 mb-3 fw-normal">Projeto PHP</h1> <div><?=$mensagem?></div> <div class="form-floating"> <input type="email" class="form-control" name=email placeholder="name@example.com" value='<?=$value?>' autofocus required> <label for="floatingInput">Email</label> </div> <div class="form-floating"> <input type="password" class="form-control" id="floatingPassword" placeholder="Senha" name="senha" required> <label for="floatingPassword">Senha</label> </div> <button class="w-100 btn btn-lg btn-primary" type="submit">Entrar</button> </form> </main></body></html> ================================================================================================================= Models/conexao.php <?php class conexao{ private $conexao; function __construct(){ $host='localhost'; $user='root'; $password=''; $db='laravel'; $this->conexao=new mysqli($host,$user,$password,$db); return $this->conexao;} function root(){ return $_SERVER['DOCUMENT_ROOT']."/astudy/";} function consulta($sql){ // retorna vários registros try {$query=$this->conexao->query($sql); $rows=$query->fetch_all(MYSQLI_ASSOC); return $rows;} catch(Exception $e){echo $e->getMessage();exit;}} function unico($sql){ // retorna um registro $rows=$this->consulta($sql); if($rows==null){return 0;} return $rows[0];} function atualiza($sql){ try {$this->conexao->query($sql);} catch(Exception $e){echo $e->getMessage();exit;}} function render($viewName, $data = []) { $viewFile=realpath('.')."/Views/$viewName.php"; extract($data); require $viewFile;} } ============================================================================= Controllers/router.php <?php class Router { private $routes = [],$controle; public function __construct(){ require 'Controllers/controle.php'; $this->controle=new controle(); $this->addRoute('GET','/',function(){ $this->controle->inicio();}); $this->addRoute('POST','/',function(){ $this->controle->login();}); $this->addRoute('GET','/orcamento',function(){ $this->controle->orcamento();}); } public function addRoute($method, $path, $handler) { // $method is the HTTP method (e.g., GET, POST, PUT, DELETE) // $path is the route path (e.g., '/', '/about', '/contact') // $handler is the route handler (a callable function or object) $this->routes[$method][$path] = $handler;} public function run() { // Get the current request method and path $method = $_SERVER['REQUEST_METHOD']; $path = $_SERVER['REQUEST_URI']; // Find the matching route $route = $this->routes[$method]; if (!array_key_exists($path, $route)) { throw new Exception('No route found for method ' . $method . ' and path ' . $path);} // Call the route handler $handler = $route[$path]; $handler();}} ============================================================================= Controllers/controle.php <?php class controle{ private $conexao; public function __construct(){ require_once 'Models/conexao.php'; $this->conexao=new conexao(); return $this->conexao;} public function inicio(){ date_default_timezone_set('America/Sao_Paulo'); $inicio=date('H:i'); return $this->conexao->render('login',['mensagem'=>$inicio,'value'=>'']);} public function login(){ $email=$_POST['email']; $senha=$_POST['senha']; unset($_POST); $row=$this->conexao->unico("select * from users where email='$email'"); if(!$row||$row==0){ $this->conexao->render('login', ["mensagem"=>"Email $email incorreto!","value"=>$email]);exit;} $dbSenha=$row['password']; if(!password_verify($senha,$dbSenha)){ $this->conexao->render('login', ['mensagem'=>'Senha incorreta!','value'=>$email]);exit;} session_start(); $_SESSION['nome']=$row['name']; $_SESSION['id']=$row['id']; unset($_GET); $this->conexao->render('menu');exit;} public function orcamento(){ echo "projeto em andamento..."; } }
-
Eu usei o arquivo index.php para chegar no controlador, usando o método da tentativa e erro. Eu fiquei muito contente, quando vi o controlador gerenciando a rotina do login. No tempo do PHP, eu usei a gambiarra do $_SESSION, é uma enorme confusão. Já o método "render" do MVC é muito mais prático. Se o usuário digitou o email ou a senha de maneira errada, você pode colocar primeiro a mensagem em uma variável local e em seguida chamar a rotina de login, onde ele vai apresentar a mensagem usando apenas a variável local. A ideia é simples, o problema é como codificar. Resolvido isso, pedi para o controlador renderizar a rotina de opções, onde tem um monte de <a ref= etc>, mas na hora que selecionei a opção orçamento, eu acabei voltando na rotina de login. Eu fiquei pasmo. Eu escrevi no arquivo index.php o seguinte: var_dump('index'), e ele me confirmou que eu sempre volto no arquivo index.php, toda vez que eu seleciono a opção "orçamento". Eu perdi o dia inteiro para saber como é possível chegar no arquivo index.php. Só pela meia noite é que vi o problema. Eu usei o método get na rotina das opções para tentar voltar no controlador, mas o get não era executado, ao invés disso ele abria o arquivo index.php. No php convencional, o método get jogava no cabeçalho do navegador coisa do tipo opcoes.php?orcamento. Mas o MVC é diferente, ele escreve assim /?orcamento, e assim descobri como o index.php voltou no meio da história. O index.php é o único que está sozinho no diretório raiz. Hoje de manhã, eu lembrei do Laravel. Perguntei para o Barder se é possível imitar o Laravel na famosa rotina routes. O Barder disse que sim. Basta eu eu criar o arquivo routes.php, chamar esse arquivo dentro da rotina principal, e ativar o servidor PHP. Eu fiquei pasmo, eu nem sabia que existia o servidor PHP. Já estou estudando o MVC já faz duas semanas e não sei onde encontrar forças para procurar o tal do servidor PHP. Se eu conseguir achar esse servidor, certamente vou fazer o teste da tentativa e erro aqui no meu PC. Se der certo, vou fazer o teste lá no Hostinger.
-
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 fiz assim: ... foreach($array as $key => $account){ if($key!==0){ $spreadsheet->createSheet($key); $sheet=$spreadsheet->getSheet($key);} else { $sheet=$spreadsheet->getActiveSheet();} $sheet->setTitle($account); ... Mas fiquei curioso com a consulta do PDO. Tem jeito de publicar a estrutura do banco de dados e a procedure? -
É possível criar um código MVC no PHP?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Uma possível solução é deixar tudo na mão do controlador, até mesmo para você ir de um view para outro. Se um view quiser ir para outro, primeiro tem que pedir a benção do controlador, assim: index.php <?php require_once 'Controller/controle.php'; $controle=new controle(); $controle->inicio(); ================================================== View/inicio.php <?php if(isset($_POST['lista'])){ require_once root.'/Controller/controle.php'; $controle=new controle(); $controle->listar(); exit;} ?> <div style="width:500px;margin:0 auto;margin-top:200px"> <form method=post> <input type=submit name=lista value="Ver 5 clientes"> </form> </div> =================================================== View/lista.php <?php if(isset($_POST['voltar'])){ require_once root.'/Controller/controle.php'; $controle=new controle(); $controle->inicio();} ?> <table><th>ID<th>Cliente <?php foreach($clientes as $cliente): echo "<tr><td>$cliente->codp<td>$cliente->pessoa"; endforeach; ?> </table> <form method=post> <input type=submit name=voltar value=Voltar> </form> ==================================================== Model/conexao.php <?php define('root',realpath('.')); class conexao{ private $conexao; function __construct(){ $host="localhost"; $user="root"; $password=""; $dbname="laravel"; $this->conexao=new mysqli($host,$user,$password,$dbname);} function consulta($sql){ try {$query=$this->conexao->query($sql); $rows=$query->fetch_all(MYSQLI_ASSOC); return json_decode(json_encode($rows));} catch(Exception $e){ echo $e->getMessage()."<br> conexao->consulta $sql";exit;}} } ========================================================================== Controller/controle.php <?php class controle{ private $conexao; function __construct(){ require_once realpath('.').'/Model/conexao.php'; $this->conexao=new conexao;} function listar(){ $sql="select * from tbpessoa limit 5"; $clientes=$this->conexao->consulta($sql); require_once root.'/View/lista.php';} function inicio(){ require_once root.'/View/inicio.php';} } -
Semana passada, eu prometi ajudar o Lúcio a desenvolver um programa para um campeonato de tacos, usando o MVC do PHP. O problema é que eu não sabia nada de MVC. Então eu peguei esse tutorial: MVC e PHP: Conceito de MVC e sua funcionalidade usando o PHP (devmedia.com.br). Eu gostei do tutorial e fui adaptando ao novo estilo de codificar, mas na medida que fui avançando fui encontrando vários erros difíceis de corrigir. Hoje decidi codificar o tutorial, e eu fui encontrando os mesmos erros que o PHP apontou nos meus códigos. Aqui está o código corrigido do tutorial. No tutorial, o rapaz usa a variável $_REQUEST, mas ela é totalmente desnecessária. O rapaz tenta listar os clientes do banco de dados. Eu consegui chegar na listagem, o que eu não esperava é o formulário de apresentação do index.php estar junto com a listagem. O problema é mais grave do que imaginei. Eu não sei como corrigir, e nem sei se é possível fazer o MVC no PHP. index.php <?php if(isset($_GET['class'])){ $classe=$_GET['class']; $metodo=$_GET['acao']; $classe.='Controller'; require_once 'Controller/'.$classe.'.php'; $obj=new $classe(); $obj->$metodo();} ?> <form> classe <input name=class value=Cliente> metodo <input name=acao value=listar> <input type=submit> </form> =============================================== View/cliente_view.php <!DOCTYPE HTML PUBLIC "-//3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; chrset=UTF-8"> <title>Implementando MVC</title> </head> <body> <table> <tr> <th>ID</th> <th>Cliente</th> </tr> <?php foreach($jclientes as $cliente): ?> <tr> <td><?php echo $cliente->codp; ?></td> <td><?php echo $cliente->pessoa; ?></td> </tr> <?php endforeach; ?> </table> </body> </html> ================================================================ Model/Cliente.php <?php class Cliente{ private $id, $nome; public function save(){} public function update(){} public function remove(){} public function listAll(){ $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select codp, pessoa from tbpessoa limit 5"); $fetch=$query->fetch_all(MYSQLI_ASSOC); return $fetch; } } ============================================================================== Controller/ClienteController.php <?php require_once 'Model/Cliente.php'; class ClienteController{ public function listar(){ $cliente=new Cliente(); $clientes=$cliente->listAll(); $jclientes=json_decode(json_encode($clientes,true)); require_once 'view/cliente_view.php'; } }
-
Bard, is possible to emulate laravel request-view paradigm in mvc php?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Do you have a view example that uses GetMiddleware class? Sure, here is a view example that uses the GetMiddleware class: PHP <html> <head> <title>Home</title> </head> <body> <!-- This view will only be rendered if the user is authenticated. --> <?php if ($request->user()): ?> <h1>Welcome, <?php echo $request->user()->name; ?></h1> <?php endif; ?> </body> </html> This view file first checks if the user is authenticated by using the $request->user() variable. If the user is not authenticated, the view file will not be rendered. Otherwise, the view file will be rendered and the user's name will be displayed. Here is how you would use this view file in a controller: 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 view. return view('home', $response); } } In this controller, the index() method first gets the middleware for GET requests. Then, the method uses the middleware to handle the request. If the user is authenticated, the method renders the home view. Otherwise, the method returns a 401 Unauthorized response. I hope this helps! Let me know if you have any other questions. -
Bard, is possible to emulate laravel request-view paradigm in mvc php?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
how is possible to write return view('home', $response); in mvc php? The return view('home', $response); code in MVC PHP is used to render a view. The view() function takes two arguments: the name of the view file and an optional array of data that will be passed to the view. In this case, the view file is called home and the data array is empty. The view() function will first look for the view file in the views directory. If the file is found, it will be rendered and the output will be returned to the user. If the file is not found, an error will be thrown. The $response variable is an object that represents the HTTP response. It can be used to set the headers, cookies, and status code of the response. In this case, the $response variable is not being used, but it is still being passed to the view() function as a way to future-proof the code. Here is an example of how the return view('home', $response); code would be used in a controller: PHP class HomeController { public function index() { // Get the data for the view. $data = [ 'title' => 'Home', ]; // Render the view. return view('home', $data); } } In this example, the HomeController class has an index() method that renders the home view. The index() method first gets the data for the view, which in this case is just a title. Then, the method calls the view() function to render the view. The view() function takes the name of the view file and the data array as arguments. In this case, the view file is called home and the data array contains the title of the page. The return view('home', $response); code can be used in any controller that needs to render a view. It is a simple and efficient way to render views in MVC PHP. do you have code for view function por mvc php? Yes, here is a simple PHP function that you can use to render a view: PHP function view($name, $data = []) { // Get the view file. $view_file = __DIR__ . '/views/' . $name . '.php'; // Check if the view file exists. if (!file_exists($view_file)) { throw new Exception('View file not found: ' . $view_file); } // Extract the data array. extract($data); // Include the view file. include $view_file; } This function takes two arguments: the name of the view file and an optional array of data that will be passed to the view. The function first gets the view file by appending the view name to the current directory path and the .php extension. Then, the function checks if the view file exists. If the file does not exist, an exception is thrown. Next, the function extracts the data array into the local scope. This makes the variables in the data array available to the view file. Finally, the function includes the view file. You can use this function in any controller that needs to render a view. For example: PHP class HomeController { public function index() { // Get the data for the view. $data = [ 'title' => 'Home', ]; // Render the view. view('home', $data); } } In this example, the HomeController class has an index() method that renders the home view. The index() method first gets the data for the view, which in this case is just a title. Then, the method calls the view() function to render the view. The view() function takes the name of the view file and the data array as arguments. In this case, the view file is called home and the data array contains the title of the page. I hope this helps! Do you have more code examples to class GetMiddleware? Sure, here are some more code examples for the GetMiddleware class: You can use the request object to get information about the request, such as the URI, the headers, and the body. For example: PHP $uri = $request->getUri(); $headers = $request->getHeaders(); $body = $request->getBody(); You can use the next() function to pass the request to the next middleware class or controller. For example: PHP $response = $next($request); You can use the return() function to return a response to the user. For example: PHP return response('Hello, world!'); Here is an example of a more complex GetMiddleware class that checks if the user is authenticated before allowing them to access the resource: PHP class GetMiddleware { public function handle($request, $next) { // Check if the user is authenticated. if (! $request->user()) { return response('You are not authenticated.', 401); } // Pass the request to the next middleware class or controller. return $next($request); } } This middleware class first checks if the user is authenticated by using the request->user() method. If the user is not authenticated, the middleware class returns a 401 Unauthorized response. Otherwise, the middleware class passes the request to the next middleware class or controller. I hope this helps! Let me know if you have any other questions. -
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.
-
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;}}
-
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.
-
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]);}}
-
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.
-
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() ;}
-
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!
-
Alterar dados com método getUsuario
pergunta respondeu ao Lúcio Flávio da Silva Sales de Frank K Hosaka em Tutoriais & Dicas - PHP
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');} -
Alterar dados com método getUsuario
pergunta respondeu ao Lúcio Flávio da Silva Sales de Frank K Hosaka em Tutoriais & Dicas - PHP
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); ?> -
<!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); ?>
-
Salvar numeros de forma ordenada no Banco de Dados
pergunta respondeu ao jcvilanova de Frank K Hosaka em PHP
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. -
Salvar numeros de forma ordenada no Banco de Dados
pergunta respondeu ao jcvilanova de Frank K Hosaka em PHP
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. -
Salvar numeros de forma ordenada no Banco de Dados
pergunta respondeu ao jcvilanova de Frank K Hosaka em PHP
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. -
formatação de data e hora pegando informações do banco de dados
pergunta respondeu ao Ualace de Frank K Hosaka em PHP
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. -
formatação de data e hora pegando informações do banco de dados
pergunta respondeu ao Ualace de Frank K Hosaka em PHP
<?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>"; -
Salvar numeros de forma ordenada no Banco de Dados
pergunta respondeu ao jcvilanova de Frank K Hosaka em PHP
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? -
Aleluia! Descobri o enigma do valor nulo no banco de dados.
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
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. -
Aleluia! Descobri o enigma do valor nulo no banco de dados.
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
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.