zharatos Postado Setembro 22, 2020 Denunciar Share Postado Setembro 22, 2020 <?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 //<------------- Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Fevereiro 6, 2023 Denunciar Share Postado Fevereiro 6, 2023 (editado) 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 Fevereiro 6, 2023 por Frank K Hosaka Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Fevereiro 6, 2023 Denunciar Share Postado Fevereiro 6, 2023 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
zharatos
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.