O autoload do Omar só funciona no projeto dele
O projeto do Omar é outra coisa! O autoload dele funciona como mágica.
Eu copiei a função autoload no meu projeto, e o máximo que eu consegui foi a mensagem "Erro interno no servidor ao encontrar dados cruciais de funcionamento!".
Ou seja, o problema não é o meu notebook e sim o meu projeto. Acho que o autoload quis dizer que o meu projeto é uma grande porcaria:
arquivo /mvc/controles/controle.php
<?php
session_start();
require $_SERVER['DOCUMENT_ROOT'].'/mvc/modelos/usuários.php';class controle {
private $usuários;
public function __construct(){
$this->usuários=new usuários();}
public function login() {
$mensagem="";
require $_SERVER['DOCUMENT_ROOT'].'/mvc/visões/login.php';}
public function menu($email,$senha){
$validaEmail=$this->usuários->validaEmail($email);
$validaSenha=$this->usuários->validaSenha($email,$senha);
if(!$validaEmail || !$validaSenha){
$mensagem="Dados inválidos!";
require $_SERVER['DOCUMENT_ROOT'].'/mvc/visões/login.php';exit;}
$_SESSION['id']=$this->usuários->id;
$_SESSION['nome']=$this->usuários->nome;
$_SESSION['email']=$this->usuários->email;
require $_SERVER['DOCUMENT_ROOT'].'/mvc/visões/menu.php';}
public function alterarSenha(){
$mensagem="";
$email=$_SESSION['email'];
require $_SERVER['DOCUMENT_ROOT'].'/mvc/visões/alterarSenha.php';}
public function senhaAlterada($senhaAlterada){
$this->usuários->atualizarSenha($_SESSION['email'],$senhaAlterada);
return $this->login();}}
$controle=new controle();
if(isset($_POST['email'])){$controle->menu($_POST['email'],$_POST['senha']);}
if(isset($_POST['senhaAlterada'])){$controle->senhaAlterada($_POST['senhaAlterada']);}
if(isset($_GET['sair'])){$controle->login();}
if(isset($_GET['senha'])){$controle->alterarSenha();}
arquivo /mvc/controles/controleDiário.php
<?php
session_start();
require $_SERVER['DOCUMENT_ROOT'].'/mvc/modelos/diário.php';
require $_SERVER['DOCUMENT_ROOT'].'/mvc/modelos/funções.php';class controleDiário {
private $diário;
public function __construct(){
$this->diário=new diário();}
public function início($dia){
$consultas=$this->diário->consulta($dia);
$lçtos=$consultas[0];
$somaDébito=$consultas[1];
$somaCrédito=$consultas[2];
require $_SERVER['DOCUMENT_ROOT']."/mvc/visões/diário.php";exit;}}
$diário=new controleDiário();
if(isset($_POST['novaData'])){$diário->início($_POST['novaData']);}
if(isset($_GET)){$dia=date('Y-m-d');$diário->início($dia);}
arquivo /mvc/index.php
<?php
require $_SERVER['DOCUMENT_ROOT'].'/mvc/modelos/funções.php';
$controle=new controle();
$controle->login();
arquivo /mvc/modelos/conexão.php
<?php
class conexão {
private static $pdo;
public function __construct(){}
public static function instância(){
$dbname="mvc";
$user="root";
$password="";
if($_SERVER['SERVER_NAME']=="exemplo.net"){
$dbname="u123_Hostinger";
$user="u123_Hostinger";
$password="JamesBond";}
if(!self::$pdo){
self::$pdo=new PDO("mysql:host=localhost;dbname=$dbname",$user,$password);}
return self::$pdo;}}
arquivo /mvc/modelos/diário.php
<?php
require $_SERVER['DOCUMENT_ROOT'].'/mvc/modelos/conexão.php';class diário extends conexão {
private $pdo;
public function __construct(){
$this->pdo=conexão::instância();}
public function consulta($dia){
$stmt=$this->pdo->query("select sum(valor) as somaDébito from diário
where contaD>0 and dia='$dia'");
$somaDébito=$stmt->fetchAll(PDO::FETCH_ASSOC)[0]['somaDébito'];
$stmt=$this->pdo->query("select sum(valor) as somaCrédito from diário
where contaC>0 and dia='$dia'");
$somaCrédito=$stmt->fetchAll(PDO::FETCH_ASSOC)[0]['somaCrédito'];
$stmt=$this->pdo->query("select * from diário where
dia='$dia'");
return [$stmt->fetchAll(PDO::FETCH_OBJ),$somaDébito,$somaCrédito];}}
arquivo /mvc/modelos/funções.php
<?php
spl_autoload_register(function ($Class) {
$includeDir = false;
$findDir = ['controles','modelos','visões'];
foreach ($findDir as $DirName) {
if (!$includeDir
&& file_exists(__DIR__ . FindClass($DirName, $Class))
&& !is_dir(__DIR__ . FindClass($DirName, $Class))) {
include_once (__DIR__ . FindClass($DirName, $Class));
$includeDir = true;}}
if (!$includeDir) {
die("Erro interno no servidor ao encontrar dados
cruciais de funcionamento!");}});
function FindClass($dir, $class) {
return (
DIRECTORY_SEPARATOR
. '..'
. DIRECTORY_SEPARATOR . 'class'
. DIRECTORY_SEPARATOR . $dir
. DIRECTORY_SEPARATOR . $class . '.php');}
function dec($value){
if($value!==null){
return number_format($value,2,',','.');}}
arquivo /mvc/modelos/usuários.php
<?php
require $_SERVER['DOCUMENT_ROOT'].'/mvc/modelos/conexão.php';class usuários extends conexão {
public $id, $nome, $email;
public function validaEmail($email){
$stmt=conexão::instância()->query("select email from usuários
where email='$email'");
return $stmt->fetch(PDO::FETCH_ASSOC);}
public function validaSenha($email,$senha){
$stmt=conexão::instância()->query("select * from usuários
where email='$email'");
$linha=$stmt->fetch(PDO::FETCH_ASSOC);
$verSenha=$linha['senha'];
$this->id=$linha['id'];
$this->nome=$linha['nome'];
$this->email=$linha['email'];
return password_verify($senha,$verSenha);}
public function atualizarSenha($email,$novaSenha){
$hash=password_hash($novaSenha,PASSWORD_BCRYPT,['cost'=>12]);
return conexão::instância()->query("update usuários set
senha='$hash' where email='$email'");}}
arquivo /mvc/visões/alterarSenha.php
<?php require $_SERVER['DOCUMENT_ROOT'].'/mvc/visões/básico.html'; ?>
<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">
<?php if($mensagem!==""): ?>
<div class="alert alert-success">
<?=$mensagem?>
</div>
<?php endif; ?>
<form method=post action=/mvc/controles/controle.php>
<h1 class="h3 mb-3 fw-normal">alterar senha</h1>
<div class="form-floating">
<input type="email" class="form-control" value=<?=$email?>>
<label for="floatingInput">Email</label>
</div>
<div class="form-floating">
<input type="password" class="form-control" id="floatingPassword" name="senhaAlterada" autofocus required>
<label for="floatingPassword">Senha</label>
</div>
<button class="w-100 btn btn-lg btn-primary" type="submit">Entrar</button>
</form>
</main>
arquivo /mvc/visões/básico.html
<!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"><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"
rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN"
crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
<title>projeto mvc</title>
arquivo /mvc/visões/diário.php
<?php
include $_SERVER['DOCUMENT_ROOT']."/mvc/visões/menu.php"; ?>
<table class='table table-striped'>Lançamentos do dia
<form method=post action='../controles/controleDiário.php'>
<input type=date name=novaData value=<?=$dia?> onchange=submit()>
</form>
<th>lçto<th>contad<th>contac<th>valor<th>hist
<?php foreach($lçtos as $lçto): ?>
<tr>
<td><?=$lçto->lçto?>
<td><?=$lçto->contad?>
<td><?=$lçto->contac?>
<td class=text-end><?=dec($lçto->valor)?>
<td><?=$lçto->hist?>
<?php endforeach; ?>
<tr><td><td><td><td><?=dec($somaDébito)?><td>Soma dos Débitos
<tr><td><td><td><td class=text-danger><?=dec($somaCrédito)?>
<td class=text-danger>Soma dos Créditos
arquivo /mvc/visões/login.php
<?php require $_SERVER['DOCUMENT_ROOT'].'/mvc/visões/básico.html'; ?>
<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">
<?php if($mensagem!==""): ?>
<div class="alert alert-success">
<?=$mensagem?>
</div>
<?php endif; ?>
<form method=post action=/mvc/controles/controle.php>
<h1 class="h3 mb-3 fw-normal">projeto mvc</h1>
<div class="form-floating">
<input type="email" class="form-control" name=email placeholder="name@example.com" 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>
arquivo /mvc/visões/menu.php
<?php
require $_SERVER['DOCUMENT_ROOT'].'/mvc/visões/básico.html';
date_default_timezone_set('America/Sao_Paulo');
?>
<body style="max-width:500px;margin:0 auto">
<header class="navbar navbar-light sticky-top bg-light flex-md-nowrap p-0">projeto mvc
<div class=dropdown>
<button type=button class="btn btn-outline-primary dropdown-toggle" data-bs-toggle=dropdown id=btmenu>
Menu
</button>
<ul class="dropdown-menu">
<?php if($_SESSION['id']==1){ ?>
<li><a class=dropdown-item href=controleDiário.php>Diário</a></li>
<?php } ?>
</ul>
</div>
<div class="dropdown">
<button class="btn btn-outline-primary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
<?=$_SESSION['nome']?>
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="../controles/controle.php?sair">Sair</a></li>
<li><a class="dropdown-item" href="../controles/controle.php?senha">Mudar a senha</a></li>
</ul>
</div>
</header>
Essa listagem é enorme e o projeto não funciona, mas se você quiser testar, você pode copiar tudo e salvar como c:\wamp64\www\script.txt, e nesse mesmo diretório executar "localhost/scriptin.php" (ele vai criar a pasta mvc e todas pastas e todos os arquivos)
arquio ScriptIn.php
<?php
if (!is_dir("mvc")){
mkdir("mvc");
mkdir("mvc/controles");
mkdir("mvc/modelos");
mkdir("mvc/visões");}
$script=file_get_contents("script.txt");
$ocorrencias=substr_count($script,"arquivo /mvc/");
$substring = "arquivo /mvc/";
$posicao = [];
$posicao[0]=strpos($script,$substring);
for($i=1;$i<=$ocorrencias-1;$i++){
$posicao[$i]=strpos($script,$substring,$posicao[$i-1]+1);}
$codigo=[];
for($i=0;$i<=$ocorrencias-2;$i++){
$codigo[]=substr($script,$posicao[$i],$posicao[$i+1]-$posicao[$i]);}
$codigo[]=substr($script,$posicao[$ocorrencias-1],strlen($script)-$posicao[$ocorrencias-1]);
for($i=0;$i<=$ocorrencias-1;$i++){
$lines=explode("\n",$codigo[$i]);
$arquivo=trim(substr($lines[0],9));
$criar=fopen($arquivo,"w");
$tamanhoNome=strlen($arquivo)+9;
$conteudo=trim(substr($codigo[$i],$tamanhoNome));
file_put_contents($arquivo,$conteudo);
fclose($criar);}
echo "Trabalho encerrado";Discussão (4)
Carregando comentários...