Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mruoppolo

Dúvidas OOP

Recommended Posts

Olá, tudo bem?

 

Eu estou desenvolvendo um sistema de login e senha orientado a objetos, para estudar apenas, estou com a seguinte dúvida:

 

Eu criei uma class DAO do usuário que tem a seguinte função:

 

public function login($senha, $login) {
	$sql = 'select * from tb_usuarios where strUsuarioLogin = "' . $login . '" and strUsuarioSenha = "' . $senha . '"';

	$executa = mysqli_query($this->conexao->getCon(), $sql);

	if(mysqli_num_rows($executa)>0){
		return true;
	}else{
		return false;
	}
}	

Eu queria adaptar esta função para trazer os dados do usuário, eu sei que eu poderia retornar a ID e simplesmente fazer uma query dentro do meu index.php, porém eu acredito que assim estaria errado (fora dos padrões da oop), então eu tentei modificar da seguinte forma:

 

public function login($senha, $login) {
	$sql = 'select * from tb_usuarios where strUsuarioLogin = "' . $login . '" and strUsuarioSenha = "' . $senha . '"';

	$executa = mysqli_query($this->conexao->getCon(), $sql);

	if(mysqli_num_rows($executa)>0){
		return mysqli_fetch_assoc($executa);
	}else{
		return false;
	}
}

Ele me retornou os dados quando eu jogo isso num var dump, mas se eu eu tento puxar um único dado, tipo $user[''strUsuarioLogin']; ele fala que não existe.

 

Então ai vai a minha dúvida, como eu posso puxar dados do banco nessa lógica?

 

Obrigado :D

Compartilhar este post


Link para o post
Compartilhar em outros sites
50 minutos atrás, Gleydson lins disse:

Tenta assim:

var_dump($user[0][''strUsuario"]);

Se não der certo mostra a saída do var_dump.

 

Retornou:

 

Notice: Undefined offset: 0 in C:\dev\holetires\index.php on line 77
NULL

 

:/

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 minutos atrás, Gleydson lins disse:

Dá um var_dump($user) e mostra a saída.

 

array(4) { ["intUsuarioID"]=> string(1) "1" ["strUsuarioNome"]=> string(17) "Marcello Ruoppolo" ["strUsuarioLogin"]=> string(23) "contato@wpmasterlab.com" ["strUsuarioSenha"]=> string(32) "1e41eb41ce234ebf86b69853d4996146" }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maaano, fui muito burro, eu descobri o que esta acontecendo, kkk, eu estava puxando $user['strUserID'] sendo que no banco de dados o nome do campo é strUsuarioID auehauehaeu.

 

Resolvi aqui, valeu Gleydson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se está tentando fazer orientado a objetos, já está fazendo errado. Um método de login, apenas realiza o login. Qualquer coisa além disso, é além da responsabilidade dele. Ou seja, estará violando a S.R.P. (Single Responsibility Principle). Além disso, seu código possui falhas de segurança.

 

Voltando ao ponto principal, detenha-se a uma interface lógica. Como, por exemplo:

A interface LoginService, define quem gerencia o Login do sistema. Ela fica responsável por cuidar de qualquer aspecto do login (sessão de usuário, quanto tempo expira, se há usuário logado, "lembra-me", etc...).

/**
 * Responsible by the login management 
 * @author Gabriel Heming
 **/
interface LoginService
{

    /**
     * Realize the login of an user
     * @param string $username
     * @param string $password
     * @throws RuntimeExpception If it isn't possible to realize the login
     **/
    public function login(string $username , string $password) : void;

    /**
     * Return if an user is logged
     * @return boolean
     **/
    public function hasUserLogged() : bool;

    /**
     * Return the user authenticated
     * @return User
     * @throws RuntimeExpception If there isn't user authenticated
     **/
    public function hasUserAuthenticated() : bool;
}

Perceba que, conforme documentado, o método login não retorna absolutamente nada, apenas lançará uma exception quando não for possível realizar o login. Mostrarei melhor mais para o fim.

 

Para gerenciar o login, LoginService precisa autenticar um usuário. Para isso, ela faz o uso da interface UserService Essa interface, por sua vez, trata dos aspectos do usuário. Ou seja, toda a regra de negócio que é pertinente a um usuário.

/**
 * Manage any aspects of an user
 * @author Gabriel Heming
 **/
interface UserService
{

    /**
     * Authenticate the user
     * @param string $username
     * @param string $password
     * @return boolean True if the user exists and the password match
     **/
    public function auth(string $username , string $password) : bool;
    
    /**
     * Return an user by his username
     * @param string $username
     * @return User The User object
     **/
    public function getUser(string $username) : User;
}

Já a interface UserService, trata dos aspectos do usuário. O método auth (autenticação), ele pode ser contraditório aonde deve estar. Entretanto, vamos aos "aspectos comuns" de onde ele pode ser utilizado:

 

- Login;

- Alteração de senha (quando a senha anterior deve ser validada para que uma nova senha seja inserida).

 

Se for ir mais a fundo:

- Autenticação via serviços (WS, Rest, API, etc...).

 

Ou seja, o método se preocupa apenas em autenticar o usuário. Ele não precisa informar se o problema é o usuário que não existe ou a senha que não confere, apenas se autenticou ou não.

 

Isso são interfaces básicas, bem grosseiras mesmo. Entretanto, demonstram o que cada participante deve se preocupar.

 

Quanto ao uso, bem, a coisa fica bem simples:

try 
{
    //instância do serviço com injeção de dependencia do storage
    $loginService = new LoginService(new mysqli(/**dados de conexão**/));
    $loginService->login('usuario' , 'minhasenha');

    echo "login realizado com sucesso";

    $user = $loginService->getUserAuthenticated();
    echo "Usuário logado: ".$user->getNome();
}
catch (\RuntimeException $exception)
{
    echo $exception->getMessage();
}

Do ponto de vista de orientação a objetos, o que a classe Login faz não é importante. Internamente, ela está utilizando o UserService para autenticar o usuário e para retornar o usuário que está autenticado, mas isso não é importante para a interface.

 

Agora, do ponto de vista de segurança é outra história e você precisa saber como está sendo realizado o login. E você pode verificar mais no link abaixo:

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.