Ir para conteúdo
Fórum Script Brasil
  • 0

O meu projeto PHP MVC-r não funciona no Hostinger [Resolvido]


Frank K Hosaka

Pergunta

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...";
    }
}

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Encontrei um outro tutorial, dessa vez ele usa o Simfony, onde você precisa usar o Composer várias vezes, depois de testar e fazer alguns ajustes, eu subi tudo de uma vez no Hostinger. E funcionou sem nenhum problema.

How to build a simple PHP MVC framework - Giuseppe Maccario

A grande vantagem desse tutorial é que você não precisa ativar o servidor do PHP para poder usá-lo no computador local.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...