Login
Olá.
Estou fazendo um sistema de cadastro e login, está funcionando quais perfeitamente. Porem tem alguns erros que eu não consigo resolver, já procurei na internet mas não achei nada relevante. Poderia me ajudar?
Usuarios.php
<?php
require_once 'Crud.php';
class Usuarios extends Crud {
protected $table = 'usuarios';
private $usuario;
private $nomesobrenome;
private $email;
private $senha;
public function setUsuario($usuario) {
$this->usuario = $usuario;
}
public function setNomesobrenome($nomesobrenome) {
$this->nomesobrenome = $nomesobrenome;
}
public function setEmail($email) {
$this->email = $email;
}
public function setSenha($senha) {
if(!empty($senha)) {
$options = [
'cost' => 11,
];
$this->senha = password_hash($senha, PASSWORD_BCRYPT, $options);
if(password_verify($senha, $this->senha)) {
return true;
}
}
return false;
}
public function insert() {
$propriedades = [
'usuario' => $this->usuario,
'nomesobrenome' => $this->nomesobrenome,
'email' => $this->email,
'senha' => $this->senha
];
if(strlen($this->senha) < 8) {
return('A sua senha precisa ter pelo menos 8 caracteres.');
exit();
}
if(!filter_var($this->email, FILTER_VALIDATE_EMAIL)) {
return('E-mail invalido.');
exit();
}
foreach($propriedades as $propriedade => $valor) {
if(empty($this->$propriedade)) {
return('O campo '.$propriedade.' não foi preenchido.');
exit();
}
}
$stmt = DB::prepare("SELECT * FROM {$this->table} WHERE usuario=:usuario OR nomesobrenome=:nomesobrenome OR email=:email");
$stmt->bindValue(':usuario',$this->usuario,PDO::PARAM_STR);
$stmt->bindValue(':nomesobrenome',$this->nomesobrenome,PDO::PARAM_STR);
$stmt->bindValue(':email',$this->email,PDO::PARAM_STR);
$stmt->execute();
$resultado = $stmt->fetch(\PDO::FETCH_ASSOC);
$dadosJaExistem = array_intersect([
'usuario' => $this->usuario,
'nomesobrenome' => $this->nomesobrenome,
'email' => $this->email],
$resultado
);
if($dadosJaExistem) {
$mensagem = 'O(s) valor(es): ' . implode(', ', $dadosJaExistem) . ' já existem no banco de dados, por favor escolha outro(s).';
return($mensagem);
exit();
}
$sql = "INSERT INTO $this->table (usuario, nomesobrenome, email, senha) VALUES (:usuario, :nomesobrenome, :email, :senha)";
$stmt = DB::prepare($sql);
$stmt->bindParam(':usuario', $this->usuario);
$stmt->bindParam(':nomesobrenome', $this->nomesobrenome);
$stmt->bindParam(':email', $this->email);
$stmt->bindParam(':senha', $this->senha);
if($stmt->execute()) {
return 'Conta registrada com sucesso!';
exit();
}
return 'Falha ao cadastrar.';
}
public function login($usuario, $email, $senha) {
try {
$stmt = DB::prepare("SELECT id, usuario, email, senha FROM $this->table WHERE usuario = :usuario OR email=:email");
$stmt->execute(array(':usuario'=>$usuario, ':email'=>$email));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() == 1) {
if(password_verify($senha, $row['senha'])) {
$_SESSION['user_session'] = $row['id'];
return true;
}else {
return false;
}
}
}catch(PDOException $e) {
echo $e->getMessage();
}
}
public function is_loggedin() {
if(isset($_SESSION['user_session'])) {
return true;
}
}
public function redirect($url) {
header("Location: $url");
}
public function logout() {
session_destroy();
unset($_SESSION['user_session']);
return true;
}
public function update($id) {
$sql = "UPDATE $this->table SET usuario = :usuario, nomesobrenome = :nomesobrenome, email = :email, senha = :senha WHERE id = :id";
$stmt = DB::prepare($sql);
$stmt->bindParam(':usuario', $this->usuario);
$stmt->bindParam(':nomesobrenome', $this->nomesobrenome);
$stmt->bindParam(':email', $this->email);
$stmt->bindParam(':senha', $this->senha);
$stmt->bindParam(':id', $id);
return $stmt->execute();
}
}
**session.php**
<?php
session_start();
function __autoload($class_name){
require_once 'classes/' . $class_name . '.php';
}
$session = new Usuarios();
if(!$session->is_loggedin()) {
$session->redirect('index');
}
Esses dois arquivos ficam dentro de uma pasta chamada classe.
E esse fica no diretório raiz.
**login.php**
<?php
session_start();
function __autoload($class_name){
require_once 'classes/' . $class_name . '.php';
}
$login = new Usuarios();
if($login->is_loggedin()!="") {
$login->redirect("index");
}
if(isset($_POST["btn-entrar"])) {
$usuario = strip_tags($_POST["usuario_email"]);
$email = strip_tags($_POST["usuario_email"]);
$senha = strip_tags($_POST["senha"]);
if($login->Login($usuario,$email,$senha)) {
$login->redirect("index");
}else {
$error = "Detalhes errados.";
}
}
?>
**index.php**
<?php
require_once("classes/session.php");
require_once("classes/Usuarios.php");
$auth_user = new Usuarios();
$user_id = $_SESSION['user_session'];
$stmt = $auth_user->runQuery("SELECT * FROM users WHERE user_id=:user_id");
$stmt->execute(array(":user_id"=>$user_id));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
?>
Os erros que dá são esses...
— Quando vai registrar
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/f2v1PWg.png&key=0a17baeb2f24f385c12b41d88cf46de6397aebcdb0582c62e8ef40e6c5713895" />
— Quando vai fazer o login
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/bRuWqet.png&key=c5ae7aad1a12c6339cd65b17f0784bdd046b8f03e170c950832ee344e62394d7" />
Por favor, peço a vocês que me auxilie com os avisos e erros. Muito obrigado.Discussão (7)
Carregando comentários...