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

Estou com um baita erro no meu código aqui


zharatos

Pergunta

<?php
class Usuario
{
    private $pdo;
    public $msgErro = "";
 
    public function conectar($nome, $host, $usuario, $senha)
    {
        global $pdo;
        try {
            $pdo = new PDO("mysql:dbname=".$nome.";host=".$host,$usuario,$senha);
 
        } catch (PDOException $e) {
            $msgErro = $e->getMessage();
        }
    }
 
    public function cadastrar($nome, $email, $senha)
    {
        global $pdo;
        //verificar se já exista o email cadastrado
        $sql = $pdo->prepare("SELECT id_usuario FROM usuarios where email = :e");
 
        $sql->bindvalue(":e",$email);
        $sql->execute();
        if ($sql->rowCount() > 0) {
            return false;
        }
        else{
            $sql = $pdo->prepare("INSERT INTO usuarios (nome, email, senha) VALUES (:n, :e, :s)");
            $sql->bindvalue(":n",$nome);
            $sql->bindvalue(":e",$email);
            $sql->bindvalue(":s",md5($senha));
            $sql->execute();
            return true;
            
        }
 
        //caso não tenha
    }
 
    public function logar($email, $senha){
        global $pdo;
        //verificar se o email e senha estão cadastrados
 
        $sql = $pdo->prepare("SELECT id_usuario FROM usuarios WHERE email = :e AND senha = :s");
        $sql->bindvalue(":n",$nome); //<--------------
        $sql->bindvalue(":s",md5($senha));     //<----------
        $sql->execute();
        if($sql->rowCount() > 0){
            $dado = $sql->fetch();
            session_start();
            $_SESSION ['id_usuario'=$dado['id_usuario'];
            return true//a pessoa esta logado
        }
        
        else{
            return false//n foi possivel logar
 
        }
 
        //criar 
 
    }
}
    
?>
 
o erro esta dando onde esta o comentario //<-------------
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

O erro no método logar está na variavel $nome, o correto deveria ser $sql->bindvalue(":e",$email);

Praticamente só ontem é que eu comecei a estudar o objeto classe, eu não tinha a menor ideia de como estudar a classe.

Até onde eu sei, a classe tem propriedades e métodos.

Usei o seguinte código para estudar o seu projeto:

astudy.php

class Usuario { seu codigo } 
$usuario=new usuario;
var_dump($usuario); // $pdo=null;msgErro=""
var_dump($usuario->conectar("astudy","localhost","root","")); // object PDO
var_dump($usuario->conectar("mosca","mosca","mosca","mosca")); // null
var_dump($usuario); // $pdo=null;msgErro=""
var_dump($usuario->cadastrar("frank","frank@gmail","1234")); // true
var_dump($usuario->conectar("astudy","localhost","root","")); // object PDO
var_dump($usuario->cadastrar("frank","frank@gmail","1234")); // false

Eu usei um banco de dados fictício, mesmo assim consegui cadastrar o usuário, mas na hora que usei um banco de dados verdadeiro, a classe recusou de fazer o serviço. Isso eu não entendo. Mesmo assim, se eu conseguir melhorar o código, eu volto aqui.

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

  • 0

Eu vi o que houve. Quando entrei com informação fictícia, a classe não atualizou o objeto pdo, e quando entrei com o cadastro, a classe cadastrou sem restrição. Na segunda vez, ele não deixou cadastrar, pois a classe impôs uma regra para não cadastrar para quem já tem. Fiz uma nova bateria de teste, e parece que tudo está em ordem.

MySQL

CREATE TABLE `usuarios` (
  `id_usuario` int NOT NULL AUTO_INCREMENT,
  `email` varchar(45) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `nome` varchar(45) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `senha` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id_usuario`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

astudy.php

<?php
class Usuario {
public $pdo;
public $msgErro;
public function conectar($dbnome, $host, $usuario, $senha){
    try {$this->pdo = new PDO("mysql:dbname=".$dbnome.";host=".$host,$usuario,$senha);
        return $this->pdo;} 
    catch (PDOException $e) {$this->msgErro = $e->getMessage();
        return $this->msgErro;}}
public function cadastrar($nome, $email, $senha){
    //verificar se já exista o email cadastrado
    $sql = $this->pdo->prepare("SELECT id_usuario FROM usuarios where email = :e");
    $sql->bindvalue(":e",$email);
    $sql->execute();
    if ($sql->rowCount() > 0) {return false;}else{
        $sql=$this->pdo->prepare("INSERT INTO usuarios (nome, email, senha) VALUES (:n, :e, :s)");
        $sql->bindvalue(":n",$nome);
        $sql->bindvalue(":e",$email);
        $sql->bindvalue(":s",md5($senha));
        $sql->execute();
        return true;}
    /*caso não tenha*/ }
public function logar($email, $senha){
    //verificar se o email e senha estão cadastrados
    $sql = $this->pdo->prepare("SELECT id_usuario FROM usuarios WHERE email = :e AND senha = :s");
    $sql->bindvalue(":e",$email);
    $sql->bindvalue(":s",md5($senha));
    $sql->execute();
    if($sql->rowCount() > 0){
        $dado = $sql->fetch();
        session_start();
        $_SESSION ['id_usuario'] =$dado['id_usuario'];
        return true; /*a pessoa esta logado*/ } else {
        return false; /*n foi possivel logar*/}}
}
$usuario=new usuario;
var_dump($usuario); 
var_dump($usuario->conectar("astudy","localhost","root",""));
var_dump($usuario->cadastrar("frank","frankhosaka@gmail.com","1234"));
var_dump($usuario->logar("frankhosaka@gmail.com","1234"));
var_dump($usuario);

Resultado:

C:\wamp64\www\astudy\astudy.php:37:
object(Usuario)[1]
  public 'pdo' => null
  public 'msgErro' => null
C:\wamp64\www\astudy\astudy.php:38:
object(PDO)[2]
C:\wamp64\www\astudy\astudy.php:39:boolean true
C:\wamp64\www\astudy\astudy.php:40:boolean true
C:\wamp64\www\astudy\astudy.php:41:
object(Usuario)[1]
  public 'pdo' => 
    object(PDO)[2]
  public 'msgErro' => null

 

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...