Jump to content
ndias

ajax + phpoo_mvc + mysql_pdo

Recommended Posts

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

Share this post


Link to post
Share on other sites
Em 01/06/2018 at 05:01, sandra19 disse:

Você recebeu alguma ajuda ou tirou algo do assunto e com fidelidade? Algo muito parecido acontece comigo.
 

 

 

 

Posicionamiento web en Madrid

Sandra, não recebi nenhuma ajuda. Resolvi sozinho! O problema era que eu estava esquecendo de incluir as require ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Jefferson andre
      Saudações mestres,
       
      Como faço para ajustar o programa abaixo para calcular a diferença entre duas variaveis que armazenam horario no ajax quando ocorre um evento onblur?
       
      O programa funciona com numeros mas nao com tempo, depois que eu pegar a diferenca entre os horarios quero multiplicar por uma terceira variavel.
       
      <html> <body> <script> function calcular() { var num1 = Number(document.getElementById("hora_saida").value); var num2 = Number(document.getElementById("hora_entrega").value); var elemResult = document.getElementById("resultado"); if (elemResult.textContent === undefined) { elemResult.textContent = "O resultado eh " + String(num1 + num2) + "."; } else { // IE elemResult.innerText = "O resultado eh " + String(num1 + num2) + "."; } } </script> <label>Horario de saida</label> <input type ="time" name="hora_saida" id="hora_saida"onblur="calcular();"> <label>Horario da entrega</label> <input type ="time" name="hora_entrega" id="hora_entrega"onblur="calcular();"> <div id="resultado"></div> <span id="resultado"></span> </body> </html>  
    • By Gustavuh
      Boa tarde.
       
      Estou carregando os dados do usuário numa session.
       
      Na página de redirecionamento, jogo essa session para uma váriável.
       
      Quero por BEM VINDO, {nome_do_usuario}, mas aparece o erro UNDEFINED INDEX: USER_NAME.
       
      Segue codigo...
       
      if(!isset($_SESSION['userlogin'])){ unset($_SESSION['userlogin']); header("Location: index.php"); exit; }else{$userlogin = $_SESSION['userlogin'];} <img src="images/user.png" alt=""> <span> Bem vindo(a), <strong style="font-style: italic;"><?= $userlogin['user_apelido']; ?></strong></span> Como resolver esse caso tão simples?

    • By EstilloWeb
      Está ocorrendo um erro em meu comando MySQL na ordenação dos resultados. O código é o seguinte:
      $sql_imos4 = "Select DISTINCT imovel FROM propostas ORDER BY id DESC"; $exe_imos4 = mysqli_query($conexao, $sql_imos4); O objetivo é listar uma única vez um imóvel com proposta, mesmo que haja dois ou mais registros, sempre ordenado mais recente. O que está ocorrendo quando o imóvel tem mais de uma proposta cadastrada, a ordenação está sendo feita pelo ID da proposta mais antiga.
      Exemplo:
      imóvel ref. 4528 tem duas propostas, sendo que a mais recente tem o ID 235 porém aparece na listagem abaixo do imóvel ref. 4325, que tem uma só proposta e ID 230.
      O resultado deveria estar invertido neste caso.
      Onde pode estar o erro? Agradeço a ajuda.
×

Important Information

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