Jump to content

Search the Community

Showing results for tags 'MVC'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento e Banco de Dados
    • HTML e CSS
    • Java
    • Javascript
    • .NET
    • PHP
    • Python
    • Ruby
    • Mobile
    • Ambientes de Desenvolvimento
    • Arquitetura e Métodos Ágeis
    • Banco de Dados
    • DevOps
    • Desenvolvimento de Games
    • E-Commerce e Pagamentos Online
    • SEO e Otimizações
    • WordPress
    • Algoritmos & Outras Tecnologias
  • Design e Produto
    • Fotografia
    • Photoshop
    • Design de interfaces e UX
    • Edição/Produção de Vídeos
    • Marketing Online
    • Desenho, Ilustração e 3D
  • Entretenimento e uso pessoal
    • Geral
    • Segurança & Malwares
    • Gadgets e wearable
    • Softwares e Apps
    • Entretenimento

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Found 84 results

  1. sergiosfpereira

    Dúvida MVC para fins didáticos [Respondida]

    Boa tarde a todos, Estou estudando MVC e me deparei com a seguinte situação: Tenho uma View que precisa receber dados de dois Models diferentes, então no controller desta View eu tenho a função abaixo: public function teste($id) { $this->view->a = $this->getOneA($id); $this->loadModel('b'); $this->view->b = $this->model->getOneB($id); $this->view->render('app/teste'); } O cenário acima me retorna o esperado, pega os dados de A e de B e os deixa disponiveis para a View. Está correto utilizar esse método ? Se sim, eu deveria carregar o Model "b" no __construct do controller "a" ou diretamente na função do controller "a" como neste exemplo? Se não, qual a melhor maneira de obter dados de diferentes Models? OBS: todos os controllers são filhos do controller principal e todos os models são filhos do model principal. E me perdoem se eu estiver falando bobagem, como disse, estou aprendendo e a finalidade aqui é didatica e agradeço a quem puder contribuir.
  2. Rzorr

    Url, Busca

    Bom dia, eu tenho um site de imóveis, sou corretor, ele está com alguns problemas na URL, comprei esse script e venho fazendo algumas alterações nele, sei o básico, cadastrar, deletar, buscar, update, mas o que acontece esse site foi construido com MVC e confesso parei de estudar PHP faz muito tempo, e não entendo nada de MVC, abaixo o código da busca e como forma o link é montado. No site o link fica assim: /imoveis/lista/referencia/referencia/categoria/comprar/tipo/tipo/cidade/Camboriú/bairro/bairro#busca nesse exemplo fiz uma busca pela cidade! Se clico no menu em vendas o link fica assim: /imoveis/lista/referencia/referencia/categoria/comprar/tipo/tipo/cidade/cidade/bairro/bairro#busca pessoal obrigado pela disposição em ajudar, eu to tentando resolver faz dias, mas não consigo entender a a forma como é construido. <?php class busca extends controller { public function init(){ } public function inicial(){ $referencia = $this->post('referencia'); $categoria = $this->post('categoria'); $tipo = $this->post('tipo'); $cidade = $this->post('cidade'); $bairro = $this->post('bairro'); if($referencia){ $cidade = "cidade"; $bairro = "bairro"; $tipo = "tipo"; $categoria = "categoria"; } else { $referencia = 'referencia'; if(!$categoria){ $categoria = "categoria"; } if(!$tipo){ $tipo = "tipo"; } if(!$cidade){ $cidade = "cidade"; } if(!$bairro){ $bairro = "bairro"; } } $endereco = DOMINIO."imoveis/lista/referencia/$referencia/categoria/$categoria/tipo/$tipo/cidade/$cidade/bairro/$bairro#busca"; $this->irpara("$endereco"); }
  3. Olá, alguém poderia me ajudar a implementar uma paginação de resultados? tenho o modelo mvc abaixo Controller <?php // Load All Posts public function index(){ $posts = $this->postModel->getPosts(); $data = [ 'posts' => $posts ]; $this->view('posts/index', $data); } ?> Model <?php // Get All Posts public function getPosts(){ $this->db->query("SELECT *, posts.id as postId, users.id as userId FROM posts INNER JOIN users ON posts.user_id = users.id ORDER BY posts.created_at DESC;"); $results = $this->db->resultset(); return $results; } View <?php foreach($data['posts'] as $post) : ?> <div class="card card-body mb-3"> <h4 class="card-title"><?php echo $post->title; ?></h4> <div class="bg-light p-2 mb-3"> Written by <?php echo $post->name; ?> on <?php echo $post->created_at; ?> </div> <p class="card-text"><?php echo $post->body; ?></p> <a class="btn btn-dark" href="<?php echo URLROOT; ?>/posts/show/<?php echo $post->postId; ?>">More</a> </div> <?php endforeach; ?> Como fazer a paginação ?
  4. Pessoal, bom dia. Tentei fazer o exemplo abaixo do site: http://www.macoratti.net/15/10/mvc_roles1.htm E está retornando o seguinte erro quando tento fazer um novo registro: System.InvalidOperationException: 'The ViewData item that has the key 'Name' is of type 'System.String' but must be of type 'IEnumerable<SelectListItem>'.' Alguém poderia me ajudar? Obrigada!
  5. Olá amigos. Estou desenvolvendo um sistema, que pretendo disponibilizar para vários clientes, no entanto no modelo antigo, eu tinha que colocar todo o sistema dentro da pasta do cliente no ftp para pode rodar, o que não é vialvel pois a cada edição terei que refazer o mesmo trabalho para todos os clientes. Migrei o sistema de procedural para POO e estou usando MVC como estrutura, de inicio consigo por o sistema em uma pasta e apenas os arquivos básicos na pasta cliente. na pasta do cliente ficam index config environment .htaccess no caso, a home do projeto funciona bem, mas quando se tenta acessar outras paginas, ele não encontra ou mostra uma template incorreta. para um resumo: tenho um sistem no endereço exemplo www.meusistema.com.br cada cliente tem um subdominio: cliente.meusistema.com.br eu gostaria que na pasta do cliente, ficasse apenas os arquivos de configuração, pois quando for fazer a manutenção do sistema, as alterações sejam validas para todos os clientes.
  6. Claudinei Teodoro

    Método UPDATE em DAO Generico - Java

    Sou super novato estou começando a entender programação agora e estou com dificuldade em implementar o método UPDATE no meu DAO Generico.Os métodos INSERT, SELECT, DELETE já esta funcionando preciso somente de uma ajuda para o método UPDATE.Segue abaixo método INSERT que estou utilizando, alguém pode me ajudar com o método UPDATA utilizando como base este método INSERT.public void salvar(T objeto) throws SQLException, IllegalArgumentException, IllegalAccessException, ClassNotFoundException {Class classe = objeto.getClass();String parteInicialSQL = "INSERT INTO " + classe.getSimpleName().toLowerCase() + "(";Field[] atributos = classe.getDeclaredFields();String parteFinalSQL = ") VALUES(";for (Field atributo : atributos) {if (!"id".equals(atributo.getName())) {parteInicialSQL += atributo.getName().toLowerCase() + ",";parteFinalSQL += "?,";}}parteInicialSQL = parteInicialSQL.substring(0, parteInicialSQL.length() - 1);parteFinalSQL = parteFinalSQL.substring(0, parteFinalSQL.length() - 1) + ")";Class.forName("org.postgresql.Driver");Connection conexao = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/postgres", "postgres", "123456");PreparedStatement sql = conexao.prepareStatement(parteInicialSQL + parteFinalSQL);int numeroInterrogacao = 1;for (Field atributo : atributos) {if (!"id".equals(atributo.getName())) {atributo.setAccessible(true);sql.setObject(numeroInterrogacao++, atributo.get(objeto));}}System.out.println(parteInicialSQL + parteFinalSQL);sql.execute();conexao.close();}
  7. Boa noite pessoal, Estou desenvolvendo uma aplicação e estou utilizando o método Auth do Laravel 5.8. Aparentemente esta tudo funcionando, acesso a certas áreas solicitam login. Eu gostaria de saber como faço para limitar o acesso de registro de usuários de um modo mais simples, pois andei pesquisando e existe formas de criar uma conta admin, mas para o meu propósito não teria necessidade de tanta complexidade, apenas gostaria de limitar o acesso ao http://localhost:8000/register para uma conta de e-mail especifica, ou mesmo se precisar criar um campo na tabela para validar se existe, não sei direito como fazer isso, estou aprendendo faz pouco tempo a respeito do Laravel. Exemplo de como esta funcionando minha app: http://localhost:8000/sistema === REQUER LOGIN PARA ACESSO http://localhost:8000/register == TAMBEM REQUER LOGIN, PORÉM QUALQUER USUÁRIO LOGADO FAZ REGISTRO DE NOVO USUÁRIO PARA ESSA ROTA EU GOSTARIA DE LIMITAR APENAS AO MEU EMAIL OU NOME DE USUÁRIO CADASTRADO. Obrigado!
  8. <?php require_once 'lib/Database/Connection.php'; require_once 'Crud.php'; class UsuarioModel extends Crud { protected $table = 'usuario'; private $nome; private $arquivo; private $formacao; private $nivel; private $email; private $senha; private $curso; private $disciplina; private $periodo; public function setNome($nome) { $this->nome = $nome; } public function setArquivo() { $this->arquivo = $arquivo; } public function setFormacao($formacao) { $this->formacao = $formacao; } public function setNivel($nivel) { $this->nivel = $nivel; } public function setEmail($email) { $this->email = $email; } public function setSenha($senha) { $this->senha = $senha ; } public function setCurso($curso) { $this->curso = $curso; } public function setDisciplina($disciplina) { $this->disciplina = $disciplina; } public function setPeriodo($periodo) { $this->periodo = $periodo; } public function insert() { $sql = "INSERT INTO $this->table (nome, arquivo, formacao, nivel, email, senha, curso, disciplina, periodo) VALUES (:nome, :arquivo, :formacao, :nivel, :email, :senha, :curso, :disciplina, :periodo)"; $stmt = Connection::prepare($sql); $stmt->bindParam(':nome', $this->nome); $stmt->bindParam(':arquivo', $this->arquivo); $stmt->bindParam(':formacao',$this->formacao ); $stmt->bindParam(':nivel', $this->nivel); $stmt->bindParam(':email', $this->email); $stmt->bindParam(':senha', $this->senha); $stmt->bindParam(':curso', $this->curso); $stmt->bindParam(':disciplina',$this->disciplina); $stmt->bindParam(':periodo', $this->periodo); return $stmt->execute(); } public function update($id) { $sql = "UPDATE $this->table SET nome = :nome, arquivo = :arquivo, formacao = :formacao, nivel = :nivel, email = :email, senha = :senha, curso = :curso, disciplina = :disciplina, periodo = :periodo WHERE id = :id"; $stmt = Connection::prepare($sql); $stmt->bindParam(':nome', $this->nome); $stmt->bindParam(':arquivo', $this->arquivo); $stmt->bindParam(':formacao',$this->formacao ); $stmt->bindParam(':nivel', $this->nivel); $stmt->bindParam(':email', $this->email); $stmt->bindParam(':senha', $this->senha); $stmt->bindParam(':curso', $this->curso); $stmt->bindParam(':disciplina',$this->disciplina); $stmt->bindParam(':periodo', $this->periodo); $stmt->bindParam(':id', $id); return $stmt->execute(); }
  9. Estou criando um sistema com adição de um tópico categoria que assim que é adicionado é chamado na tabela para aparecer na tabela ao lado. Estou recebendo o erro abaixo, mas a categoria é cadastrada: A PHP Error was encountered Severity: Warning Message: Cannot modify header information - headers already sent by (output started at /storage/ssd5/194/9530194/public_html/application/helpers/funcoes_helper.php:1) Filename: helpers/url_helper.php Line Number: 564 Backtrace: File: /storage/ssd5/194/9530194/public_html/application/controllers/admin/Categoria.php Line: 35 Function: redirect File: /storage/ssd5/194/9530194/public_html/index.php Line: 315 Function: require_once Segue foto: View Código: <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header"><?php echo 'Administrar '.$subtitulo; ?></h1> </div> </div> <div class="row"> <div class="col-lg-6"> <div class="panel panel-default"> <div class="panel-heading"> <?php echo 'Adicionar nova '.$subtitulo; ?> </div> <div class="panel-body"> <div class="row"> <div class="col-lg-12"> <?php echo validation_errors('<div class="alert alert-danger">','</div>'); echo form_open('admin/categoria/inserir'); ?> <div class="form-group"> <label id="txt-categoria">Nome da Categoria</label> <input type="text" id="txt-categoria" name="txt-categoria" class="form-control" placeholder="Entre com o texto"> </div> <button type="submit" class="btn btn-default">Cadastrar</button> <?php echo form_close(); ?> </div> </div> <!-- /.row (nested) --> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> <!-- /.col-lg-6 --> <div class="col-lg-6"> <div class="panel panel-default"> <div class="panel-heading"> <?php echo 'Alterar '.$subtitulo. ' existente'; ?> </div> <?php $this->table->set_heading("Nome da Categoria","Alterar","Excluir"); foreach($categorias as $categoria){ $nomecat = $categoria->titulo; $alterar= anchor(base_url('Admin/categoria'),'<i class="fa fa-refresh fa-fw"></i> Alterar'); $excluir=anchor(base_url('Admin/categoria/excluir/'.md5($categoria->id)),' <i class="fa fa-remove fa-fw"></i> Excluir'); $this->table->add_row($nomecat,$alterar,$excluir); } $this->table->set_template(array( 'table_open' => '<table class="table table-striped">' )); echo $this->table->generate(); ?> </div> <div class="panel-body"> <div class="row"> <div class="col-lg-12"> </div> </div> <!-- /.row (nested) --> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> </div> <!-- /.row --> </div> <!-- /#page-wrapper --> </div> MODEL CODE: <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Categorias_model extends CI_Model { public $id; public $titulo; public function __construct(){ parent::__construct(); } public function listar_categorias(){ $this->db->order_by('titulo','ASC'); return $this->db->get('categoria')->result(); } public function publicacao(){ $this->db->select('usuario.id as idautor, usuario.nome, postagens.id, postagens.titulo, postagens.subtitulo, postagens.user, postagens.data, postagens.img, postagens.categoria, postagens.conteudo'); $this->db->from('postagens'); $this->db->join('usuario', 'usuario.id = postagens.user'); $this->db->where('postagens.id ='.$id); return $this->db->get()->result(); } public function listar_titulo($id){ $this->db->from('categoria'); $this->db->whre('id ='.$id); return $this->db->get()->result(); } public function adicionar($titulo){ $dados['titulo'] = $titulo; return $this->db->insert('categoria',$dados); } public function excluir($id){ $this->db->where('md5(id)',$id); return $this->db->delete('categoria'); } } CONTROLLER: <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Categoria extends CI_Controller { public function __construct(){ parent::__construct(); $this->load->model('categorias_model','modelcategorias'); $this->categorias = $this->modelcategorias->listar_categorias(); } public function index() { $dados['categorias'] = $this->categorias; $this->load->library('table'); //Dados a serem enviados para o cabeçalho $dados['titulo'] = 'Painel de Controle'; $dados['subtitulo'] = 'Categoria'; $this->load->view('backend/template/html-header', $dados); $this->load->view('backend/template/template'); $this->load->view('backend/template/categoria'); $this->load->view('backend/template/html-footer'); } public function inserir(){ $this->load->library('form_validation'); $this->form_validation->set_rules('txt-categoria','Nome da Categoria', 'required|min_length[3]|is_unique[categoria.titulo]'); if($this->form_validation->run() == FALSE){ $this->index(); }else{ $titulo = $this->input->post('txt-categoria'); if($this->modelcategorias->adicionar($titulo)){ redirect(base_url('admin/categoria')); }else{ echo "Houve um erro no sistema!"; } } } public function excluir($id){ if($this->modelcategorias->excluir($id)){ redirect(base_url('admin/categoria')); }else{ echo "Houve um erro no sistema!"; } } } Gostaria de ajuda para corrigir o erro: Desde já agradeço!
  10. Boa tarde!! Estou com uma dúvida de arquitetura me corroendo onde eu coloco o código de um controle de estoque e onde faço sua chamada? Estou desenvolvendo um sistema que entre os seus módulos tera um controle de estoque, como eu organizo o código deste módulo. Vamos a um exemplo: Toda vez que eu fizer uma venda preciso diminuir o numero de itens do produto vendido da tabela produtos. A função/metodo dimiuirItem() {bla bla} Deve ficar no EstoqueController ? Ou crio uma camada a mais na arquitetura MVC apenas para guardar as classes de controle de estoques ? Ou ainda desenvolvo tudo no Model. E caso a nova camada seja o mais correto a fazer onde devo chamar os métodos dentro do Model ou nos Controllers? Muito obrgado e desculpem o tamanho da duvida kkkk
  11. Olá, Estou tentando implementar uma função que exibe uma lista de feedbacks cadastrados por um usuário específico, mas não estou conseguindo. Acredito que seja na classe Feedback o problema, pois dei o "echo" na query que vai para o banco e não printa o idUser. Onde pode estar o problema? //pagina da listagem do usuário <?php error_reporting(E_ALL); ini_set('display_errors', 1); session_start(); if($_SESSION['logado']!=1){ header("Location: ../index.php"); } if($_SESSION['idPermissao'] != 1){ header("Location: ../index.php"); } include_once $_SERVER['DOCUMENT_ROOT']."/feedback/controle/ControleUsuario.class.php"; $cControle = new ControleUsuario(); if(isset($_GET['idUserVisualizar'])){ $usuario = $cControle->visualizarUsuario($_GET['idUserVisualizar']); } if(isset($_GET['idUserSituacao'])){ $cControle->situacaoUsuario($_GET['idUserSituacao']); } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Visualizar usuário</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" media="screen" href="main.css"> <script src="main.js"></script> </head> <body> <a href="logout.php">sair</a> <?php echo "<h3>Usuário ".$usuario->getLoginUser()."</h3><br>"; if($_SESSION['idUser'] == $usuario->getIdUser()){ echo "Situação: Ativo"; } else{ if($usuario->getIdSituacao() == 0){ echo "Situação: Inativo | <a href='visualizarUsuario.php?idUserSituacao=".$usuario->getIdUser()."'>Ativar</a><br>"; } else{ echo "Situação: Ativo | <a href='visualizarUsuario.php?idUserSituacao=".$usuario->getIdUser()."'>Desativar</a><br>"; } } if($usuario->getIdPermissao() == 2){ $feedbacksRealizados = $cControle->feedbacksRealizados($_GET['idUserVisualizar']); echo "Feedbacks realizados: ".$feedbacksRealizados->getFeedbacksRealizados()." | <a href='listaFeedbacks.php?idUserListaFeedbacks=".$usuario->getIdUser()."'>Visualizar feedbacks</a>"; } ?> <br><br><a href="listaUsuarios.php"><<<:</a> </body> </html> // Classe ControleFeedback.class <?php include_once $_SERVER['DOCUMENT_ROOT']."/feedback/modelo/Feedback.class.php"; class ControleFeedback{ public function listarFeedbacksUser($idUser){ echo "<br>teste2: ".$idUser."<br>"; $feedback = new Feedback($idUser); $feedbacks = $feedback->listarFeedbacksUser(); return $feedbacks; } } ?> // Classe Feedback.class <?php include_once $_SERVER['DOCUMENT_ROOT']."/feedback/db/MySQL.class.php"; class Feedback{ private $idFeedback; private $nomeCliente; private $idInstalador; private $atendimento; private $relatoSatisfacao; private $antigaOperadora; private $notaInstalacao; private $idUser; public function __construct($idFeedback = null, $nomeCliente = null, $idInstalador = null, $atendimento = null, $relatoSatisfacao = null, $antigaOperadora = null, $notaInstalacao = null, $idUser = null){ $this->idFeedback = $idFeedback; $this->nomeCliente = $nomeCliente; $this->idInstalador = $idInstalador; $this->atendimento = $atendimento; $this->relatoSatisfacao = $relatoSatisfacao; $this->antigaOperadora = $antigaOperadora; $this->notaInstalacao = $notaInstalacao; $this->idUser = $idUser; } public function getIdFeedback(){ return $this->idFeedback; } public function setIdFeedback($idFeedback){ $this->idFeedback = $idFeedback; } public function getNomeCliente(){ return $this->nomeCliente; } public function setNomeCliente($nomeCliente){ $this->nomeCliente = $nomeCliente; } public function getIdInstalador(){ return $this->idInstalador; } public function setIdInstalador($idInstalador){ $this->idInstalador = $idInstalador; } public function getAtendimento(){ return $this->atendimento; } public function setAtendimento($atendimento){ $this->atendimento = $atendimento; } public function getRelatoSatisfacao(){ return $this->relatoSatisfacao; } public function setRelatoSatisfacao($relatoSatisfacao){ $this->relatoSatisfacao = $relatoSatisfacao; } public function getAntigaOperadora(){ return $this->antigaOperadora; } public function setAntigaOperadora($antigaOperadora){ $this->antigaOperadora = $antigaOperadora; } public function getNotaInstalacao(){ return $this->notaInstalacao; } public function setNotaInstalacao($notaInstalacao){ $this->notaInstalacao = $notaInstalacao; } public function getIdUser(){ return $this->idUser; } public function setIdUser($idUser){ $this->idUser = $idUser; } public function listarFeedbacksUser(){ $con = new MySQL(); $sql = "SELECT * FROM feedback WHERE idUser = $this->idUser"; echo $sql; die; $resultados = $con->consulta($sql); if(!empty($resultados)){ $feedbacks = array(); foreach($resultados as $resultado){ $feedback = new Feedback(); $feedback->setIdFeedback($resultado['idFeedback']); $feedback->setNomeCliente($resultado['nomeCliente']); $feedback->setIdInstalador($resultado['idInstalador']); $feedback->setAtendimento($resultado['atendimento']); $feedback->setRelatoSatisfacao($resultado['relatoSatisfacao']); $feedback->setAntigaOperadora($resultado['antigaOperadora']); $feedback->setNotaInstalacao($resultado['notaInstalacao']); $feedback->setIdUser($resultado['idUser']); $feedbacks[] = $feedback; } return $feedbacks; }else{ return false; } } } Esta é a sequência de testes que eu fiz, ele da o "echo" dos IDs certos, mas na classe Feedback parece que ele não recebe então printa a query sem o idUser. O problema é na função?
  12. Estou criando meu próprio mvc php para adquirir mais conhecimento. Mas estou me deparando com uma coisa muita estranha, eu perco a $_SESSION de uma view para outra view Fiz um codigo simples pra testar.a.php ----- view a.php <?php session_start(); $_SESSION['teste'] = 'Funcionou'; echo $_SESSION['teste']; ?> <?php session_start(); echo $_SESSION['teste']; // Notice: Undefined variable: _SESSION in var_dump($_SESSION); // Notice: Undefined variable: _SESSION in NULL ?> <?php namespace Sis\Classes; use App\Model\ClassLogin; use Sis\Traits\TraitGetIp; class ClassSession { private $login; private $timeSession = 1200; private $timeCanary = 300; public function __construct(){ if(session_id() == ''){ ini_set("session.save_handler", "files"); //Cabeçalhos somente atraves de arquivos ini_set("session.use_cookies", 1); //Habilita o uso de cookies ini_set("session.use_only_cookies", 1); //Só pode habilitar a seção atraves de coockies ini_set("session.cookie_domain", DOMAIN); //Só aceita coockies vindo do nosso sistema ini_set("session.cookie_httponly", 1); //Só aceita script php e não deixa o javascript alterar o sistema if(DOMAIN != "localhost"){ ini_set("session.cookie_secure", 1); //Para trabalhar com o SSL do servidor ativo } /*Criptografia das nossas sessions*/ ini_set("session.entropy_length", 512); // ini_set("session.entropy_file","/dev/urandom"); ini_set("session.hash_function", "sha256"); ini_set("session.hash_bits_per_character", 5); session_start(); } $this->login = new ClassLogin(); } #Proteger contra roubo de sessão public function setSessionCanary($par=null){ session_regenerate_id(true); if($par == null){ $_SESSION['canary']=[ "birth" => time(), "IP" => TraitGetIp::getUserIp() //Pega o ip do usuario ]; }else{ $_SESSION['canary']['birth']=time(); } } #Verificar a integridade da sessão public function verifyIdSessions(){ if(!isset($_SESSION['canary'])){ $this->setSessionCanary(); } if($_SESSION['canary']['IP'] !== TraitGetIp::getUserIp()){ $this->destructSessions(); $this->setSessionCanary(); } if($_SESSION['canary']['birth'] < time() - $this->timeCanary){ $this->setSessionCanary("Time"); } } #Setar as sessões do nosso sistema public function setSessions($Email){ $this->verifyIdSessions(); $_SESSION['Login'] = true; $_SESSION['Time'] = time(); $_SESSION['Nome'] = $this->login->getIssetSession($Email)['data']['Nome']; $_SESSION['Email'] = $this->login->getIssetSession($Email)['data']['Email']; $_SESSION['Permissoes'] = $this->login->getIssetSession($Email)['data']['Permissoes']; } #Validar as páginas internas do sistema public function verifyInsideSession(){ $this->verifyIdSessions(); if(!isset($_SESSION['Login']) || !isset($_SESSION['Permissoes']) || !isset($_SESSION['canary'])){ $this->destructSessions(); header("Location: ".DIRPAGE."NaoAutorizado"); }else{ if($_SESSION['Time'] >= time() - $this->timeSession){ $_SESSION['Time']=time(); }else{ $this->destructSessions(); header("Location: ".DIRPAGE."NaoAutorizado"); } } } #Destruir as sessions existentes public function destructSessions(){ foreach (array_keys($_SESSION) as $key) { unset($_SESSION[$key]); } } #testar public function testarSessions(){ echo 'oiiiiiiiiiiiiiiiiiiiiiiooooooooooo'; } }
  13. Estou escrevendo uma aplicação MVC em PHP e a estrutura de diretórios é a seguinte: - root ¬ app ¬ controllers ¬ models ¬ views ¬ core ¬ config ¬ public Na pasta “app” fica as camadas MVC. Em “controllers” coloco classes que vão receber dados e acionar models e/ou renderizar views. Nos “models” coloco basicamente as entidades do banco de dados e suas operações. Em “views” coloco as páginas com código html + php para exibição de dados No “core” coloco classes e/ou arquivos genéricos (tenho planos de usar essa mesma base para desenvolver outras aplicações futuramente, uma espécie de microframework.) No entanto surgiu duas classes um pouco diferentes, uma delas trabalha com datas e realiza operações como conversão e cálculo entre datas, a outra cria e gerencia múltiplas threads. Tenho dúvida em qual camada devo colocá-las, já que nenhuma delas fazem acesso a banco de dados ou arquivos e nem emite saídas, apenas retornam valores. Devo criar uma camada adicional? Qual? Devo colocá-la em um das camadas já existentes? Obs: qualquer informação adicional que possa ser útil é sempre bem-vinda!
  14. Caros, bom dia. Fiquei com dúvida, mas acho que estou postando no local correto. Sou iniciante no desenvolvimento Web (front e back). Gostei muito do padrão MVC (PHP) e por isso descobri a existência do Cake PHP. Percebi grande dificuldade em usar estas formas de programar, principalmente por não entender muito de orientação a objeto. Por isso estou fazendo um curso sobre. Mas ainda resta dúvidas: um iniciante DEVE usar padrões (acho que sim) como MVC e frameworks (não tenho certeza) como CakePHP? Principalmente no caso de frameworks, me dá a sensação que estou deixando de aprender certas partes da linguagem, pois o framework faz elas por mim. Sei que são importantes para ganho de tempo e otimização, mas como iniciante tenha meus receios. Alguém pode me ajudar? Conte sua experiência do início de carreira.
  15. Ola a todos e agradeço desde já Tenha a classe de validação do form onde pega todos os erros do form: // Validação final do cadastro public function validateFinalCadastro($arrVar) { if(count($this->getErro())>0){ $arrResponse=[ "retorno"=>"erro", "erros"=>$this->getErro() ]; }else{ $arrResponse=[ "retorno"=>"success", "erros"=>null ]; } return json_encode($arrResponse, JSON_UNESCAPED_UNICODE); } Aqui tenho o Controller que passa para view: public function teste() { //echo 'esse é um teste'; $this->recVariaveis(); $validate = new ClassValidate(); $validate->validateFields($_POST); $validate->validateEmail($this->Email); $validate->validateIssetEmail($this->Email); $validate->validateData($this->DataNascimento); $validate->validateCpf($this->Cpf); $validate->validateConfSenha($this->Senha,$this->SenhaConf); $validate->validateStrongSenha($this->Senha); $validate->validateCaptcha($this->gRecaptchaResponse); $validate->validateFinalCadastro($this->arrVar); } Se eu dar um echo, print ou vardump na $validate->validateFinalCadastro($this->arrVar); consigo passar ela pra view e apresentar o erro ...ele apresenta depois do fechamento do html da pagina... {"retorno":"erro","erros":["Email já cadastrado!","Utilize uma senha mais forte!","Sistema de segurança foi ativado! Atualize a página e tente novamente ou aguarde mais um pouco."]} Aqui esta o ajax sem datatype: 'json' Sem datatype: 'json' eu entro no success reponse mais caio no else, porque o response.retorno esta sem o datatype: 'json'. $('#FormCadastroClientes').on('submit', function(event){ event.preventDefault(); var dados=$(this).serialize(); console.log(dados); $.ajax({ url: getRoot()+'CadastroClientes/teste', type: 'post', contentType: "application/x-www-form-urlencoded;charset=UTF-8", data: dados, success: function (response) { $('.retornoCad').empty(); if(response.retorno == 'erro'){ getCaptcha(); $.each(response.erros,function(key,value){ $('.retornoCad').append(value+''); }); }else{ $('.retornoCad').append('Dados inseridos com sucesso!'); } }, error: function (response, jqXHR, request, status, errorThrown, erro) { console.log(response); //alert(dados); console.log(dados); //alert(jqXHR); console.log(jqXHR); //alert(request); console.log(request); //alert(status); console.log(status); //alert(errorThrown); console.log(errorThrown); //alert(erro); console.log(erro); }, complete: function (jqXHR, textStatus) { //colocar aqui algo que deseja que faça ao terminar todo o processo (finnaly) } }); Ajax com datatype: 'json' nao consigo entrar no success ele já cai no erro $('#FormCadastroClientes').on('submit', function(event){ event.preventDefault(); var dados=$(this).serialize(); console.log(dados); $.ajax({ url: getRoot()+'CadastroClientes/teste', type: 'post', dataType: 'json', data: dados, success: function (response) { $('.retornoCad').empty(); if(response.retorno == 'erro'){ getCaptcha(); $.each(response.erros,function(key,value){ $('.retornoCad').append(value+''); }); }else{ $('.retornoCad').append('Dados inseridos com sucesso!'); } }, error: function (response, jqXHR, request, status, errorThrown, erro) { console.log(response); //alert(dados); console.log(dados); //alert(jqXHR); console.log(jqXHR); //alert(request); console.log(request); //alert(status); console.log(status); //alert(errorThrown); console.log(errorThrown); //alert(erro); console.log(erro); }, complete: function (jqXHR, textStatus) { //colocar aqui algo que deseja que faça ao terminar todo o processo (finnaly) } }); Observações: - Consigo inserir no banco tudo ok. - Consigo apresentar o rertun json_encode direto na view - Consigo entrar no success do ajax sem usar datatype: 'json' não entro no if para ler o array mais entro no else. Eu recebo esse erros no console.log No response eu teria que receber o return do json_encode e não recebo. O que eu recebo é o html da view. O ajax esta esperando um retorno em json e nao o html da pagina. parsererror SyntaxError: "JSON.parse: unexpected character at line 1 column 1 of the JSON data" Obrigado a todos.....atecipadamente
  16. Victor Hugo Soares

    Sistema PHP MVC com Ajax

    Olá a todos, estou com um probleminha e já revirei de todos os lados e não consegui o login em ajax funciona perfeitamente, porém a recuperação de senha não está dando certo :( minha aplicação tem a seguinte estrutura de diretórios: |-aplicacao_site |-aplicacao_site/core/Aplicacao.php |-aplicacao_site/core/Controlador.php |-aplicacao_site/core/View.php |-aplicacao_site/libs/Helper.php |-aplicacao_site/model/Model.php |-aplicacao_site/view/_templates/cabecalho.php |-aplicacao_site/view/_templates/menu.php |-aplicacao_site/view/_templates/rodape.php |-aplicacao_site/controller/Login.php |-aplicacao_site/view/Login/index.php |-aplicacao_site/view/Login/recuperacaoSenha.php |-publico |-publico/site |-publico/site/index.php ->primeiro arquivo a ser executado |-publico/site/ajax.php |-publico/site/.htaccess |-publico/site/vendor/autoload.php |-publico/site/vendor/jquery/jquery.min.js |-publico/site/vendor/jquery/jquery.validate.min.js |-publico/site/js/login.js |-publico/site/js/RecuperaSenha.js Vamos aos códigos: Obs: arroba é o nome do site; |-publico/site/.htaccess <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /arroba/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> |-publico/site/index.php <?php date_default_timezone_set( "America/Sao_Paulo" ); try { require 'definicoes.php'; // This is the (totally optional) auto-loader for Composer-dependencies (to load tools into your project). // If you have no idea what this means: Don't worry, you don't need it, simply leave it like it is. if ( file_exists( ARROBA . 'vendor/autoload.php' ) ) { require ARROBA . 'vendor/autoload.php'; } // load application config (error reporting etc.) require APP . 'config/config.php'; $app = \core\Aplicacao::INSTANCIA(); $app->Inicia(); } catch ( Exception $e ){ echo '<br /> Erro na execução do sistema <br />'; echo $e->getMessage(); } |-publico/site/vendor/autoload.php <?php spl_autoload_register( function( $className ){ $className = str_replace("\\", "/" , $className . '.php'); $className = APP . $className; if ( file_exists( $className ) ){ require_once ( $className ); } else { //echo '<br /> Não será carregada automaticamente <br />'; } } ); |-publico/site/js/login.js var formulario = "#FrmLogin"; var formulario2 = "#FrmRecuperaSenha"; function InicializaValidacao(){ $( formulario ).validate({ rules: { email:{ required: true, email: true }, senha:{ required: true } }, messages:{ email:{ required: "Por favor preencha o Email", email: "Por favor preencha com um Email válido!" }, senha:{ required: "Por favor preencha a Senha" } }, highlight: function(element){ $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); }, unhighlight: function(element){ $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); }, //função chamada caso os dados estejam de acordo submitHandler: function(form){ $.ajax({ type: "post", url: "ajax.php", dataType: "html", data: $(formulario).serialize(), beforeSend: function(data){ }, complete: function(){ }, success: function(data){ var retorno = $.parseJSON( data ); if( retorno.sucesso ){ window.location.assign( 'inicio' ); }else{ //console.log( 'Falhou' ); $( '#myModal' ).find('#myModalLabel').html( 'Problema na autenticação' ); $( '#myModal' ).find('.modal-body').html( retorno.errMsg ); $( '#myModal' ).modal( 'show' ); } }, error: function(){ //console.log( 'Erro' ); } }); } }); } $( document ).ready( function(){ InicializaValidacao(); }); |-publico/site/js/RecuperaSenha.js var formulario = "#FrmRecuperaSenha"; function InicializaValidacao(){ $( formulario ).validate({ rules: { email:{ required: true, email: true } }, messages:{ email:{ required: "Por favor preencha o Email", email: "Por favor preencha com um Email válido!" } }, highlight: function(element){ $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); }, unhighlight: function(element){ $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); }, //função chamada caso os dados estejam de acordo submitHandler: function(form){ $.ajax({ type: "post", url: "ajax.php", dataType: "html", data: $( formulario ).serialize(), beforeSend: function(data){}, complete: function(){}, success: function(data){ console.log( data ); var retorno = $.parseJSON( data ); if( retorno.sucesso ){ $( '#myModal' ).find('#myModalLabel').html( 'Problema na autenticação' ); $( '#myModal' ).find('.modal-body').html( retorno.errMsg ); $( '#myModal' ).modal( 'show' ); }else{ //console.log( 'Falhou' ); $( '#myModal' ).find('#myModalLabel').html( 'Problema na autenticação' ); $( '#myModal' ).find('.modal-body').html( retorno.errMsg ); $( '#myModal' ).modal( 'show' ); } }, error: function(){ window.location.assign( 'problem' ); } }); } }); } $( document ).ready( function(){ InicializaValidacao(); }); |-aplicacao_site/core/Aplicacao.php <?php namespace core; class Aplicacao { /** @var null The controller */ private $url_controller = null; /** @var null The method (of the above controller), often also named "action" */ private $url_action = null; /** @var array URL parameters */ private $url_params = array(); /** * Instancia da classe * @var Aplicacao */ private static $instancia; /** * "Start" the application: * Analyze the URL elements and calls the according controller/method or the fallback */ public function __construct() { // create array with URL parts in $url $this->splitUrl(); } public function Inicia(){ // check for controller: no controller given ? then load start-page if ( !$this->url_controller ) { $page = new \controller\Inicio(); $page->index(); } elseif ( file_exists( APP . str_replace( '\\', '/' , $this->url_controller ) . '.php' ) ) { // here we did check for controller: does such a controller exist ? // if so, then load this file and create this controller // example: if controller would be "car", then this line would translate into: $this->car = new car(); //require APP . 'controller/' . $this->url_controller . '.php'; $this->url_controller = new $this->url_controller(); // check for method: does such a method exist in the controller ? if ( method_exists( $this->url_controller, $this->url_action ) ) { if ( !empty( $this->url_params ) ) { // Call the method and pass arguments to it call_user_func_array( array( $this->url_controller, $this->url_action ), $this->url_params ); } else { // If no parameters are given, just call the method without parameters, like $this->home->method(); $this->url_controller->{ $this->url_action }(); } } else { if (strlen($this->url_action) == 0) { // no action defined: call the default index() method of a selected controller $this->url_controller->index(); } else { //header('location: ' . URL . 'problem'); $page = new \controller\Problem(); $page->index(); } } } else { //header('location: ' . URL . 'problem'); $page = new \controller\Problem(); $page->index(); } } /** * Cria uma instancia de um objeto da Classe caso não exista uma * @return Aplicacao */ public static function INSTANCIA() { if ( !self::$instancia ){ self::$instancia = new Aplicacao(); } return self::$instancia; } /** * Get and split the URL */ private function splitUrl() { if ( isset( $_GET[ 'url' ] ) ) { // split URL $url = trim( $_GET[ 'url' ], '/' ); $url = filter_var( $url, FILTER_SANITIZE_URL ); $url = explode( '/', $url ); // Put URL parts into according properties // By the way, the syntax here is just a short form of if/else, called "Ternary Operators" // @see http://davidwalsh.name/php-shorthand-if-else-ternary-operators $this->url_controller = isset($url[0]) ? '\controller\\' . $url[0] : null; $this->url_action = isset($url[1]) ? $url[1] : null; // Remove controller and action from the split URL unset($url[0], $url[1]); // Rebase array keys and store the URL params $this->url_params = array_values($url); // for debugging. uncomment this if you have problems with the URL //echo 'Controller: ' . $this->url_controller . '<br>'; //echo 'Action: ' . $this->url_action . '<br>'; //echo 'Parameters: ' . print_r($this->url_params, true) . '<br>'; } } } |-aplicacao_site/core/Controlador.php <?php namespace core; class Controlador { /** * @var null Database Connection */ public $db = null; /** * @var null Model */ public $model = null; /** * Whenever controller is created, open a database connection too and load "the model". */ function __construct() { $this->openDatabaseConnection(); $this->loadModel(); } /** * Open the database connection with the credentials from application/config/config.php */ private function openDatabaseConnection() { // set the (optional) options of the PDO connection. in this case, we set the fetch mode to // "objects", which means all results will be objects, like this: $result->user_name ! // For example, fetch mode FETCH_ASSOC would return results like this: $result["user_name] ! // @see http://www.php.net/manual/en/pdostatement.fetch.php $options = array( \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_OBJ, \PDO::ATTR_ERRMODE => \PDO::ERRMODE_WARNING); // generate a database connection, using the PDO connector // @see http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/ $this->db = new \PDO(DB_TYPE . ':host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=' . DB_CHARSET, DB_USER, DB_PASS, $options); } /** * Loads the "model". * @return object model */ public function loadModel() { //require_once APP . 'model/model.php'; // create new "model" (and pass the database connection) $this->model = new \model\Model($this->db); } } |-aplicacao_site/core/View.php <?php namespace core; class View { /** @var array <br/> Lista de folhas de Estilo que serão incorporados na página */ private static $listaCSS = array(); /** @var array <br/> Lista de scripts em Javascript que serão incorporados na página */ private static $listaJS = array(); /** @var array <br/> Lista de dados das tabelas DataTables em JSON que serão incorporados na página */ private static $dadosDataTables = array(); /** @var View <br/> Instancia da classe */ private static $instancia; /** * Cria uma instancia de um objeto da Classe caso não exista uma * @return View */ public static function INSTANCIA() { if ( !self::$instancia ){ self::$instancia = new View(); } return self::$instancia; } public static function PEGACSS( $chave = null ) { if( $chave ){ return ( isset( static::$listaCSS[ $chave ] ) ? static::$listaCSS[ $chave ] : null ); } else { return ( isset( static::$listaCSS ) ? static::$listaCSS : null ); } } public static function REGISTRACSS( $valor, $chave = null ) { if( $chave ){ static::$listaCSS[ $chave ] = $valor; } else { static::$listaCSS[] = $valor; } } public static function PEGAJS( $chave = null ) { if( $chave ){ return ( isset( static::$listaJS[ $chave ] ) ? static::$listaJS[ $chave ] : null ); } else { return ( isset( static::$listaJS ) ? static::$listaJS : null ); } } public static function REGISTRAJS( $valor, $chave = null ) { if( $chave ){ static::$listaJS[ $chave ] = $valor; } else { static::$listaJS[] = $valor; } } public static function PEGADADOSDATATABLE( $chave = null ) { if( $chave ){ return ( isset( static::$dadosDataTables[ $chave ] ) ? static::$dadosDataTables[ $chave ] : null ); } else { return ( isset( static::$dadosDataTables ) ? static::$dadosDataTables : null ); } } public static function REGISTRADADOSDATATABLE( $valor, $chave = null ) { if( $chave ){ static::$dadosDataTables[ $chave ] = $valor; } else { static::$dadosDataTables[] = $valor; } } } |-aplicacao_site/libs/Helper.php <?php namespace libs; class Helper { CONST DB_CHAVE_CRYPT = 'XYZ'; public static function getConexaoBDARROBA(){ $mySQL = \classes\db\mysql\MySQL::getInstance(); $connector = $mySQL->createConnector( 'arroba' , $mySQL->createConnectionConfig( DB_HOST , DB_NAME , DB_USER , DB_PASS ) ); return $connector; } /** * debugPDO * * Shows the emulated SQL query in a PDO statement. What it does is just extremely simple, but powerful: * It combines the raw query and the placeholders. For sure not really perfect (as PDO is more complex than just * combining raw query and arguments), but it does the job. * * @author Panique * @param string $raw_sql * @param array $parameters * @return string */ static public function debugPDO($raw_sql, $parameters) { $keys = array(); $values = $parameters; foreach ($parameters as $key => $value) { // check if named parameters (':param') or anonymous parameters ('?') are used if (is_string($key)) { $keys[] = '/' . $key . '/'; } else { $keys[] = '/[?]/'; } // bring parameter into human-readable format if (is_string($value)) { $values[$key] = "'" . $value . "'"; } elseif (is_array($value)) { $values[$key] = implode(',', $value); } elseif (is_null($value)) { $values[$key] = 'NULL'; } } /* echo "<br> [DEBUG] Keys:<pre>"; print_r($keys); echo "\n[DEBUG] Values: "; print_r($values); echo "</pre>"; */ $raw_sql = preg_replace($keys, $values, $raw_sql, 1, $count); return $raw_sql; } //verifica se existe a array e/ou a chave informada. //retorna false caso um dos dois não exista. static public function Existe($array, $key) { return isset($array) && array_key_exists($key, $array) && !empty($array[$key]); } static public function doAjaxRequest() { if ( self::Existe( $_POST, 'functionName' ) ){ list( $nomeClasse, $nomeMetodo ) = explode( '::', $_POST[ 'functionName' ] ); if ( ! isset( $nomeClasse ) || $nomeClasse === "" || $nomeClasse === null ){ throw new \Exception( 'Classe não encontrada na solicitação em Ajax!' ); } if ( ! isset( $nomeMetodo ) || $nomeMetodo === "" || $nomeMetodo === null ){ throw new \Exception( 'Método não encontrado na solicitação em Ajax!' ); } require_once ( APP . '/core/Controlador.php' ); require_once ( APP . '/controller/' . strtolower( $nomeClasse ) . '.php' ); call_user_func( '\controller\\' . $nomeClasse . "::" . $nomeMetodo ); } else { throw new \Exception( 'Parâmetro do Ajax "functionName" não encontrado!' ); } } //busca a sql dentro de um arquivo xml static function PegaSQL( $xml, $id ){ try { $dom = new \DOMDocument( '1.0', 'UTF-8' ); $dom->load( APP . "/sql" . $xml); $xml = new \DOMXPath( $dom ); return $xml->query( "//*[@id='" . $id . "']" )->item(0)->nodeValue; } catch( \Exception $e ) { return false; } } } |-aplicacao_site/controller/Login.php <?php namespace controller; /** * Class Login * * Please note: * Don't use the same name for class and method, as this might trigger an (unintended) __construct of the class. * This is really weird behaviour, but documented here: http://php.net/manual/en/language.oop5.decon.php * */ class Login extends \core\Controlador { static $loginOK = false; /** * PAGE: index * This method handles what happens when you move to http://yourproject/login/index (which is the default page btw) */ public function index() { $app = \core\Aplicacao::INSTANCIA(); if( $app->Logado() ){ if( $app->MesmaSessao() ){ // load views require APP . 'view/_templates/cabecalho.php'; require APP . 'view/inicio/index.php'; require APP . 'view/_templates/rodape.php'; } else { // carrega a página de login require APP . 'view/autenticacao/index.php'; } } else { // carrega a página de login require APP . 'view/login/index.php'; } } /** * Método chamado via Ajax permitindo o usuário logar no sistema * * Como o método é chamado via Ajax, a execução do código não passa pela index.php, sendo assim * necessário a importação de todos os arquivos de configuração e tals */ static public function LOGAR() { $retorno[ 'sucesso' ] = false; $retorno[ 'errMsg' ] = null; if( ! \libs\Helper::Existe( $_POST, 'email' ) ){ //$email = $_POST[ 'email' ]; //throw new Exception( 'Parâmetro email não encontrado' ); $retorno[ 'errMsg' ] = 'Parâmetro email não encontrado'; } elseif( ! \libs\Helper::Existe( $_POST, 'senha' ) ){ //$senha = $_POST[ 'senha' ]; //throw new Exception( 'Parâmetro senha não encontrado' ); $retorno[ 'errMsg' ] = 'Parâmetro senha não encontrado'; } else { require_once APP . 'config/config.php'; $app = \core\Aplicacao::INSTANCIA(); if ( $app->FazerAcesso( $_POST[ 'email' ], $_POST[ 'senha' ] ) ){ $retorno[ 'sucesso' ] = true; } else { $retorno[ 'errMsg' ] = 'Usuário ou senha inválidos!'; } } echo json_encode( $retorno ); } public function recuperacaoSenha(){ $app = \core\Aplicacao::INSTANCIA(); // carrega a página de login require APP . 'view/login/recuperacaoSenha.php'; } /** * Método chamado via Ajax permitindo o usuário logar no sistema * * Como o método é chamado via Ajax, a execução do código não passa pela index.php, sendo assim * necessário a importação de todos os arquivos de configuração e tals */ static public function RecuperarSenha() { $retorno[ 'sucesso' ] = false; $retorno[ 'errMsg' ] = null; if( ! \libs\Helper::Existe( $_POST, 'email' ) ){ //$email = $_POST[ 'email' ]; //throw new Exception( 'Parâmetro email não encontrado' ); $retorno[ 'errMsg' ] = 'Parâmetro email não encontrado'; } else { require_once APP . 'config/config.php'; } echo json_encode( $retorno ); } } |-aplicacao_site/view/Login/index.php <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VH - Soluções Inteligentes"> <meta name="author" content="Victor Hugo - Soluções Inteligentes"> <title>VH - Soluções Inteligentes</title> <!-- Bootstrap Core CSS --> <link href="<?php echo URL; ?>vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="<?php echo URL; ?>css/style.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="<?php echo URL; ?>vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <div class="container"> <div class="row"> <div class="col-md-4 col-md-offset-4"> <div class="login-panel panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">Por favor autentique-se</h3> </div> <div class="panel-body"> <!-- Form --> <form id="FrmLogin" role="form" method="post" action="login"> <input type="hidden" name="functionName" value="Login::LOGAR" /> <fieldset> <div class="form-group"> <!-- <input class="form-control" placeholder="E-mail" name="email" type="email" autofocus> --> <input class="form-control" placeholder="E-mail" name="email" autofocus> </div> <div class="form-group"> <input class="form-control" placeholder="Senha" name="senha" type="password" value=""> </div> <!-- <div class="checkbox"> <label> <input name="remember" type="checkbox" value="Remember Me">Remember Me </label> </div> --> <div> <label> <a href="login/recuperacaoSenha">Esqueceu a Senha?</a> </label> </div> <input type="submit" class="btn btn-lg btn-success btn-block" value="Entrar" /> </fieldset> </form> <!-- /form --> <!-- Modal --> <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <h4 class="modal-title" id="myModalLabel">Problemas de autenticação</h4> </div> <div class="modal-body"> Texto body modal </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button> <!-- <button type="button" class="btn btn-primary">Save changes</button> --> </div> </div> <!-- /.modal-content --> </div> <!-- /.modal-dialog --> </div> <!-- /.modal --> </div> </div> </div> </div> </div> <!-- jQuery --> <script src="<?php echo URL; ?>vendor/jquery/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <!-- Necessário para Modal --> <script src="<?php echo URL; ?>vendor/bootstrap/js/bootstrap.min.js"></script> <!-- Script para a validação do Formulário --> <script type="text/javascript" src="<?php echo URL; ?>vendor/jquery/jquery.validate.min.js"></script> <!-- Custom Page JavaScript --> <script type="text/javascript" src="<?php echo URL; ?>js/login.js"></script> </body> </html> |-aplicacao_site/view/Login/recuperacaoSenha.php <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VH - Soluções Inteligentes"> <meta name="author" content="Victor Hugo - Soluções Inteligentes"> <title>VH - Soluções Inteligentes</title> <!-- Bootstrap Core CSS --> <link href="<?php echo URL; ?>vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="<?php echo URL; ?>css/style.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="<?php echo URL; ?>vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <div class="container"> <div class="row"> <div class="col-md-4 col-md-offset-4"> <div class="login-panel panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">Recuperação de senha</h3> </div> <div class="panel-body"> <!-- Form --> <form id="FrmRecuperaSenha" role="form" method="post" action="login"> <input type="hidden" name="functionName" value="Login::RecuperarSenha" /> <fieldset> <div> <label> <a href="../login"> <i class="fa fa-arrow-left" /> </i> Voltar </a> </label> </div> <div class="form-group"> <!-- <input class="form-control" placeholder="E-mail" name="email" type="email" autofocus> --> <input class="form-control" placeholder="E-mail" name="email" autofocus> </div> <input type="submit" class="btn btn-lg btn-success btn-block" value="Enviar" /> </fieldset> </form> <!-- /form --> <!-- Modal --> <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <h4 class="modal-title" id="myModalLabel">Problemas de autenticação</h4> </div> <div class="modal-body"> Texto body modal </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button> <!-- <button type="button" class="btn btn-primary">Save changes</button> --> </div> </div> <!-- /.modal-content --> </div> <!-- /.modal-dialog --> </div> <!-- /.modal --> </div> </div> </div> </div> </div> <!-- jQuery --> <script src="<?php echo URL; ?>vendor/jquery/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <!-- Necessário para Modal --> <script src="<?php echo URL; ?>vendor/bootstrap/js/bootstrap.min.js"></script> <!-- Script para a validação do Formulário --> <script type="text/javascript" src="<?php echo URL; ?>vendor/jquery/jquery.validate.min.js"></script> <!-- Custom Page JavaScript --> <script type="text/javascript" src="<?php echo URL; ?>js/RecuperaSenha.js"></script> </body> </html> meio complicadinho né, mas se alguém puder dar uma força agradeço.
  17. Adriano_MSB

    Ajax em background

    Pessoal eu tenho uma aplicação com uma pagina que faz uma chamada ajax para meu server o tempo todo a cada 5 segundos. A pagina em si funciona muito bem, mas tem um grande problema a qual não sei o que fazer. A cada 5 seg, eu faço uma chamada no server para verificar se chegou alguma mensagem, pois o usuário tem por obrigação responder imediatamente. Então quando o server responde com novas mensagens eu toco um som para que o usuário saiba que chegou mensagem e faça o trabalho dele. Isso funciona, mas tem um porem, o usuário não fica la olhando pra tela do sistema, ele minimiza a tela do navegador e vai fazer outras coisas, nessa que ele minima o navegador depois de alguns minutos as chamadas ajax param, é como se o navegador parasse de executar os scripts, mas se ele volta para a tela as chamadas voltam a acontecer. Devido a esse problema, a tela não esta atingindo o proposito, pois não esta alertando o usuário. A linguagem, por de traz é asp.net mvc, mas acho que esse problema não é na programação uma vez que ele funciona sem erros. Eu devo fazer alguma configuração para que a pagina continue executando os scripts enquanto estiver minimizada ou o usuário estiver em outra aba?
  18. Acho que estou com algum problema de herança ou coisa assim, eu não consigo chamar mais de um Container::getModel no meu Controller. Vou colocar o meu __construct aqui e o erro que ele me retorna PaginaController.php public function __construct() { parent:: __construct(); #se eu comentar e deixar apenas um ai ele funciona, mas quando tento fazer com mais de um ele da um erro $this->contato = Container::getModel("Contato"); $this->noticia = Container::getModel("Noticias"); $this->institucional = Container::getModel("Institucional"); $this->atuacao = Container::getModel("Atuacao"); $this->banner = Container::getModel("Banners"); } Container.php public static function getModel($model) { $objModel = "\\App\\Models\\".$model; return new $objModel(DataBase::getDataBase()); } Fatal error: Uncaught TypeError: Argument 1 passed to Core\BaseModel::__construct() must be an instance of PDO.
  19. Pessoal, estou a desenvolver uma aplicação em java para um trabalho da faculdade e estou utilizando a arquitetura MVC, no qual, tenho classes model, modelDAO, modelBLL, controller e view. A minha dúvida é a seguinte, eu posso instanciar as classes model na view da aplicação e passar o objeto criado para o controller? Ex: instanciar um cliente no botão salvar e pegar os dados que o usuário digitou nos campos de texto e utilizar os metodos setters da classe cliente para preencher os atributos do cliente e logo após passar o objeto para o controller. Se não poder fazer isso, então, qual a melhor forma de passar os dados da view para a controller?
  20. ndias

    ajax + phpoo_mvc + mysql_pdo

    To tentando fazer uma requisição Ajax em um projeto POO-MVC Tenho um formulário q eu uso o evento onchange pra chamar uma função JavaScript q por sua vez usa Ajax pra requisitar via POST uma página php <!DOCTYPE html> <head> <script> function consultaCPF($cpf) { $.ajax({ type : 'POST', url : 'ajax/consultaCPF.php', data : 'CPF='+$cpf, dataType: 'json', success : function(response){ if(response.codigo == "1") { }else{ } }, error: function(XMLHttpRequest, textStatus, errorThrown){ $("#erro").html('<b>ERRO</b>'+XMLHttpRequest.responseText); } }); } </script> </head> <body> <div id="erro"> <form name="form" method="post"> <input type="text" name="CPF" maxlength="14" onchange="return consultaCPF(this.value)" value="<?php if($_POST){echo $_POST['CPF'];}?>"> </form> </div> </body> </html> Até aí td bem... Na página php eu instancio uma classe da minha Model q faz uma consulta no bd pra saber se já existe ou não cadastrado o CPF digitado no form. Se existir me retorna 1, senão me retorna 2. A resposta eu capturo em json e passo de volta pro Ajax receber. Esse success é q vai determinar minha ação. <?php if($_POST && $_POST['CPF']){ $consulta = new \App\Models\Validacoes(\App\Init::getDb()); $res = $consulta->CPF($_POST['CPF']); if($res == 1){ $retorno = array('codigo' => 1, 'mensagem' => 'CPF ja existe'); echo json_encode($retorno); exit(); }else{ $retorno = array('codigo' => 2, 'mensagem' => 'CPF não cadastrado'); echo json_encode($retorno); exit(); } } Até aí tudo bem... Acontece que quando o Ajax faz a requisição da página php onde eu instancio minha classe, não sei pq tá dando Fatal Error Class Not Found (como se não tivesse conectando com meu banco). namespace App; class Init { public static function getDb(){ $db = new \PDO("mysql:host=127.0.0.1;dbname=root;charset=utf8","root","vertrigo"); return $db; } } Porém funciona se eu testar minha classe direto na página PHTML do formulário usando um método GET pra receber e passar a consulta pro meu objeto. namespace App\Models; class Validacoes { protected $db; public function __construct(\PDO $db) { $this->db = $db; } public function CPF($cpf){ $stmt = $this->db->prepare("Select CPF from tabela where REPLACE(REPLACE(CPF,'.',''),'-','') = :cpf LIMIT 1"); $stmt->bindParam(":cpf",$cpf); $stmt->execute(); if($stmt->fetchAll()){ $res = 1; }else{ $res = 2; } return $res; } } Será q o fato de não funcionar com o Ajax requisitando em public uma página php, tem haver com a rota? Pois só as Views estão usando Controllers! Ou estou fazendo errado utilizando uma página php na requisição Ajax? ERRO ( ! ) Fatal error: Class 'App\Models\Validacoes' not found in D:\Projetos\SAEE\public\ajax\consultaCPF.php on line 3 Call Stack # Time Memory Function Location 1 0.0010 335304 {main}( ) ..\consultaCPF.php:0
  21. ZecaLoteiro

    Aprendendo MVC - Conceitos

    Bom dia srs, Estou aprendendo MVC e para exercitar iniciei um projeto no seguinte contexto: Classe Cliente tem uma propriedade: IDadosCadastrais DadosCadastrais; As classes PF e PJ implementam a interface DadosCadastrais. Penso que: Todo cliente tem dado cadastral, porém só tem CNPJ se for pessoa jurídica, por isso criei classes separadas para PF e PJ. Porém na hora de preencher o formulário da view se eu utilizo um modelo Cliente, a informações dos dados cadastrais não são recebidas. Se alguém puder me ajudar no esclarecimento das seguintes questões: 1) O conceito que utilizei para separação dos dados está correto é a melhor prática? 2) Como posso obter uma instancia da classe Cliente direto da view para o controller? 3) Caso eu tenha que receber os dados e criar manualmente, como posso receber no controller um dado de um campo do formulário? Desde já obrigado.
  22. Sou iniciante em ASP MVC e não estou conseguindo fazer com que o meu controller retorne os dados do banco no calendário, ele só retorna uma página em branco com o Json. Tentei seguir alguns exemplos pesquisando na internet mas não obtive sucesso! Controller public JsonResult Calendario() { var verCookie = Request.Cookies.Get(GerarHashMd5("idUser")); if (verCookie == null) { RedirectToAction("Login"); } var listCalender = new List<Modelos.PosVendasParticipantesModelo>(); var dal = new DAL.PosVendasParticipantesDAL(); var calender = dal.Todos(); if (calender.Rows.Count > 0) { foreach (DataRow dr in calender.Rows) { var entity = new Modelos.PosVendasParticipantesModelo(); entity.ID = Convert.ToInt32(dr["ID"]); entity.ProximaLigacao = Convert.ToDateTime(dr["PROXIMA_LIGACAO"]); listCalender.Add(entity); } } return Json(listCalender.ToArray(), JsonRequestBehavior.AllowGet); Jquery $(document).ready(function () { $('#calendar').fullCalendar({ header: { left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay,listWeek' }, defaultDate: '2018-03-12', navLinks: true, // can click day/week names to navigate views editable: true, eventLimit: true, // allow "more" link when too many events events: "/Home/Calendario", }); });
  23. Como posso alterar o valor do item do meu menu se tiver um usuário logado? Tentei verificar a existência da sessão na controller, mas não sei como posso retornar dados pra layout.cshtml. Meu código está assim: <ul id="menu-normal"> <li class="hover-menu"><a href="@Url.Action("Index", "Home")">INÍCIO</a></li> <li class="hover-menu"><a href="@Url.Action("Aniversariantes", "Home")">ANIVERSARIANTES</a></li> <li class="hover-menu"><a href="@Url.Action("CRM", "Home")">CRM</a></li> <li class="hover-menu"><a href="">PARTICIPANTES</a></li> <li class="hover-menu"><a href="">TURMAS</a></li> <li class="btn-login"><a href="@Url.Action("Login", "Home")">LOGIN</a></li> </ul> Queria que quando o usuário estivesse logado, exibisse "Painel" ao invés de "Login" continuar exibindo "Login" caso não tenha nenhum usuário logado.
  24. ggbelgamo

    Sistema de login em Asp MVC

    Olá, sou iniciante e gostaria de criar um sistema de login em MVC. Poderiam me ajudar e explicar como isso é feito?
  25. Olá galerinha do bem, estou tendo um problema na implementação da pagina 404, depois da implementação não consigo mais acessar nenhuma pagina, que todas elas da na 404, alguem ai pode me da uma ideia do que aconteceu estou travado nessa aula Class Core { public function StartCore() { $Url = '/'; if (filter_input(INPUT_GET, 'url', FILTER_DEFAULT)): $Url .= filter_input(INPUT_GET, 'url', FILTER_DEFAULT); endif; $Params = array(); if (!empty($Url) && $Url !== '/'): $Url = explode('/', $Url); array_shift($Url); $CurrentController = $Url[0] . 'Controller'; array_shift($Url); if (isset($Url[0]) && !empty($Url[0])): $CurrentAction = $Url[0]; array_shift($Url); else: $CurrentAction = 'index'; endif; if (count($Url) > 0): $Params = $Url; endif; else: $CurrentController = 'HomeController'; $CurrentAction = 'index'; endif; if (!file_exists('Controllers/' . $CurrentController . '.php') || !method_exists($CurrentController, $CurrentAction)): $CurrentController = 'NotFoundController'; $CurrentAction = 'index'; endif; $C = new $CurrentController(); call_user_func_array(array($C, $CurrentAction), $Params); } } Class ControllerCore { public function loadView($viewName) { require_once ('App/Views/'.$viewName.'.php'); } } Class NotFoundController extends ControllerCore { public function index() { $this->loadView('404', array()); } } Opsss: Página não encontrada!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.