Jump to content
junior almeida

duvida php + oreitanção a objetos

Recommended Posts

Tenho uma duvida sobre php + orientação a objetos.

estou desenvolvendo um sistema, na parte de login o usuário entra com os dados de e-mail e senha e um método faz uma consulta no banco para ver se os dados que foi digitados estão corretos

apos estar correto grava o id em uma sessao e armazeno o objeto gerado da consulta em uma variável usando o método setResultado, na pagina de usuario pego a sessao do id e faço uma consulta no banco passando o id e utilizo o método getResultado para pegar o objeto da consulta que me retorna. ate ai tudo bem mas me gerou uma duvida se outra pessoa fizer um login os dados que estavam armazenados na variável resultados vão ser perdidos ou os dados de variáveis ficam salvos em alguma especie de cookies.

 

exemplo: pessoa A fez o login seus dados foram setados em uma variável resultado logo em seguida a pessoa B faz o login ela também tem seus dados setados na variável resultado, os dados da pessoa A foi perdido ou ele fica salvo em algum lugar.

 

não sei se ficou confuso mas se alguém puder me tirar essa duvida.

Share this post


Link to post
Share on other sites

Se foi no mesmo dispositivo, e na mesma navegação (mesma hora, navegador, IP...), seria basicamente isso:

 

$pessoa = "João"; // Primeira pessoa que fez login
$pessoa = "Maria"; // Segunda pessoa que fez login

//Perceba que a variavel $pessoa recebeu valor 2 vezes (como você explicou)
//portanto, o valor final da variavel vai ser: Maria
//pois, de acordo com a ordem, Maria foi a ultima a fazer login, entao a variavel tera sempre o ultimo valor
//você pode conferir isso fazendo:

echo $pessoa;

//Resumindo, João será "esquecido", e Maria estará armazenada na variavel $pessoa

 

Edited by Jhess
;

Share this post


Link to post
Share on other sites

certo essa era minha duvida, mas em um sistema onde a pessoa faz o login isso seria algo vulnerável para colocar no meu sistema ou não.

em vez de guardar os dados de um select em uma variável eu deveria guardar em uma sessao?

Share this post


Link to post
Share on other sites

Com certeza utilize sessão, não há motivos pra guardar em variáveis. Quando o usuário clicar num botão "Sair", é só apagar a sessão e pronto, novo pra re-uso. E também, a sessão expira automaticamente...

 

Recomendo: https://www.devmedia.com.br/criando-sessao-para-login-no-php/27347

Share this post


Link to post
Share on other sites

estou de volta ainda não consegui entender direito o que esta acontecendo

abaixo esta a parte do meu código onde estou com duvidas.

 

painelUsuario.php

 

<?php   
        $query = new DbFunctions();
        $id = $_SESSION['idUsuario'];

        $query->select("SELECT * FROM usuarios WHERE id = '$id'");

       print_r($query->getResult());
    ?>

 

 

dbFunctions.php

 

private $result;

public function getResult(){return $this->result;}
private function setResult($r){$this->result = $r;}

public function select($sql){
        $query = $this->conecta()->query($sql);
        foreach($query as $row){
            $this->setResult($row);
            return true;
        }
    }

 

a minha duvida é nessa variável result que esta recebendo o objeto do select

quando a pessoa A fizer o login e a pessoa B também fizer o login o dado da pessoa A vai se perder?

 

fiz um teste me mostrando o resultado do print

pessoa A:

A.thumb.png.d98fbf859c399bc8880ad823f63ba71e.png

 

abrir uma janela anonima e fiz o login com a pessoa B

 

B.thumb.png.63aee6f6d7906f6852f2597b386acc77.png

 

os dados da pessoa B sobrepôs os dados da pessoa A, mas se eu recarregar a pagina da pessoa A, me mostra os dados corretos dela.

ao recarregar a pagina da pessoa A ela não deveria me mostrar os dados da pessoa B já que ela foi  a ultima pessoa a fazer o login?

 

me desculpem mas ainda estou com essa duvida se puderem me dar uma luz pra entender melhor agradeço. 

Share this post


Link to post
Share on other sites

Não, não irá sobrepôr. As sessões são um vínculo entre o browser (navegador) e o servidor (PHP). É criado um arquivo, no servidor, utilizando informações do browser e no browser é salva uma referência deste arquivo.

 

Se outro usuário entrar e criar uma sessão, ela será diferente e estará em um arquivo diferente. Desta forma, não irá apagar as sessões de outros usuários.

 

Talvez o artigo abaixo lhe tire algumas dúvidas:

https://diogobemfica.com.br/como-funciona-as-sessoes-do-php/

 

Outro ponto, é que a sua dúvida não tem relação com orientação à objetos.

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 Paulo Correia
      Tenho uma dúvida, ou acho que estou fazendo errado (rsrsrsrs).

      Seria assim, numa classe que seria a Pai (em arquivo separado) eu teria 
      o construct que faria os setters numas váriaveis private, mais ou menos 
      assim:

      <?

      namespace UmNomeQualquer;

      class Pai {

           protected $_var;

           public function __construct($var) {

               $this->_var = $var;

           }

      }

      ?>

      E numa outra que seria a Filha(o) (em arquivo separado) eu leria esta 
      variável, certo?

      <?

      namespace UmNomeQualquer;

      class Filha extends Pai {

           public function mostra() {

               return $this->_var;

           }

      }

      ?>

      Mas quando eu vou testar dá erro falando que não passei todos os 
      argumentos ao construtor:

      <?

      include "pai.php";
      include "filha.php";

      use Nome\Pai;
      use Nome\Filha;

      $pai = new Pai("123");

      $filha = new Filha();

      echo $filha->mostra();

      ?>

      Mensagem de erro:

      PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to 
      function Nome\Pai::__construct(), 0 passed in test.php on line 11 and 
      exactly 1 expected in pai.php:8
      Stack trace:
      #0 test.php(11): Nome\Pai->__construct()
      #1 {main}
         thrown in pai.php on line 8

      Onde estou errando??

      Não é para não repetir o código, (DRY), isto não inclui as variáveis??

      Desde já agradeço,

      Paulo
    • By Fábio.info7
      Boa tarde a todos, gostaria de uma ajuda, estou desenvolvendo um pequeno sistema de cadastro de clientes assinastes de um certo pacote de serviços, preciso que ao cadastrar o cliente, automaticamente o sistema grave a data do cadastro e atribui + 30 dias onde esta será a data de vencimento(após os primeiros 30 dias), até aí tudo bem, tudo funcionando, porém preciso também que o sistema liste os clientes em que a data do vencimento está se aproximando(faltando 5 dias para o vencimento), então determinei que o sistema lista os clientes que estão a 5 dias do vencimento, então então peguei a data de cadastro e atribuí + 25 dias, agora que vem o problema, na hora de listar esses clientes cuja data de vencimento se aproxima eu recebo a seguinte mensagem "Warning: Invalid argument supplied for foreach()", sou novo em php OO e não estou conseguindo resolver essa questão, vou deixar aqui a função que criei e a chamada da função também:
       
       
      public function proximosVencimentos(){         //DATA DA ASSINATURA/CADASTRO         $dt_assinatura = $this->assinatura;                  //PEGA A DATA DA ASSINATURA E ACRESCENTA + 30 DIAS (VAI VIRAR A DATA DO VENCIMENTO APÓS 30 DIAS)         $vencimento = date('Y-m-d', strtotime("+30 days" . strtotime($dt_assinatura)));                  //PEGA A DATA DA ASSINATURA E ACRESCENTA + 25 DIAS          $vencimento_proximo = date('Y-m-d', strtotime("+25 days" . strtotime($dt_assinatura)));                                     require 'conexao.php';             $sql = "select * from dados where current_date() between dt_vencimento_proximo = :dt_vencimento_proximo AND dt_vencimento = :dt_vencimento ";             $stmt = $conn->prepare($sql);             $stmt->bindParam(":dt_vencimento_proximo", $vencimento_proximo);             $stmt->bindParam(":dt_vencimento", $vencimento);                                         if($stmt->execute()== TRUE){                 return $stmt->fetchAll(PDO :: FETCH_OBJ);              }else{                 $mensagem = "Não há dados a serem exibidos.";                 return $mensagem;              }        }    
      ABAIXO O TRECHO ONDE EU CHAMO ESSA FUNÇÃO
      foreach ($listadados->proximosVencimentos() as $key => $valor){       echo $valor->nome; }    
    • By Misael Silva
      Olá, membros do forum, gostaria de saber de um livro de PHP que ensina-se a desenvolver códigos php de um loja virtual, um e-commerce, ate encontrei esse  livro https://www.thiengo.com.br/e-commerce-com-php-e-mysql, porém descobri que não é orientado a objeto, um ponto que ficou a desejar, vocês tem dicas de outros livros semelhantes? Agradeço!
    • By marcelobbt
      Comecei a aprender PHP por conta própria e estudei diversos materiais. Com o tempo comecei a usar a programação orientada a objetos, ou pelo menos achei que estava usando. De uns tempos para cá, comecei a ficar em dúvida se estaria fazendo da forma correta. Então busquei outros materiais, revi os antigos e veio uma dúvida que não consegui resposta e gostaria de saber se podem me ajudar.
       
      Quando pego uma série de registros de um banco de dados, devo coloca-los num único objeto, ou criar um objeto para cada registro?
       
      Para clarear minha pergunta segue mais detalhes de como faço até hoje.
      Eu utilizo o CodeIgniter e então criei um model chamado CRUD onde obtenho os valores desejados de qualquer tabela do banco de dados, por exemplo, usando a função abaixo:
       
      public function SelecionaTodos ($tabela) { return $this->db->get($tabela); } Até este ponto está tudo num único objeto. Mas vamos dizer que vou trabalhar com os dados da tabela "aluno". Então queria pegar os dados que essa função retorna e jogar na classe Aluno para fazer as rotinas do sistema. Aí que vem a dúvida se devo jogar os valores todos como um array, ou crio um objeto para cada registro retornado, enfim, gostaria de ouvir a opinião dos especialistas ou mais experientes. 
       
    • By Will871
      Boa tarde, galera.
      Sou novato no PDO, e estou tendo uma dúvida sobre como receber a variável de conexão do banco de dados em um método.
      Tenho o seguinte código:
       
      banco.php
      <?php try {     $BD_host = "localhost";     $BD_banco = "jacyfash_loja";     $BD_usuario = "root";     $BD_senha = "";     $conn = new PDO("mysql:host=".$BD_host.";dbname=".$BD_banco, $BD_usuario, $BD_senha); } catch (PDOException $i) {     die("Erro: <code>" . $i->getMessage() . "</code>"); } usuario.php
      <?php require_once 'banco.php'; class valida{     function login(){                  }          function cadastro(){         $nome = $_POST['nome'];         $usuario = $_POST['usuario'];         $email = $_POST['email'];         $senha = $_POST['senha'];         $sql = "INSERT INTO cliente(nome, usuario, email, senha) VALUES(:nome, :usuario, :email, :senha)"; //===================================================================================== //Sempre que tento acessar o $conn de dentro de uma function ele retorna erro dizendo que a variável não existe. ( Erro: Undefined variable: conn) //=====================================================================================         $stmt = $conn->prepare($sql);         $stmt->bindParam(':nome', $nome );         $stmt->bindParam(':usuario', $site );         $stmt->bindParam(':email', $email);         $stmt->bindParam(':senha', $senha);     }          function bloqueio(){              } } Já pesquisei muito sobre como fazer isso, mas não consegui nada. Se alguém puder ajudar, agradeço.   ^^
×

Important Information

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