Jump to content
Hamanom007

Como consumir uma função de consulta SELECT pdo?

Recommended Posts

Sabemos que podemos criar uma class com funções e chamar essa função em outra pagina, é ai que estou tendo problema, meu intuito é criar uma função que consulte o e-mail, senha, usando 'pdo', e para sair do procedural quero modular essa tarefa.


O que estou fazendo:

image.thumb.png.579c98790d76983fac13506357e403c4.png

Como trabalhar essa ideia?
Onde estou errando?
Por favor me mostrem o caminho correto preciso de ajudar amigo.

Share this post


Link to post
Share on other sites

Evite usar um screenshot aqui, é difícil de ler e não é possível localizar pela busca. Use a tag code para isso.

 

Tem algumas coisas que você irá ter de resolver.

A primeira, é quando você quer chamar a função de uma classe, deve usar a variável na qual a instância está salva.

Logo

$c = new Bancodados();
$c->Consulta();

Outra, é que você está usando as variáveis $email e $senha.

Você precisa enviá-las como parâmetros para o método

 

$c->Consulta($email, $senha);

E lá no método, receber esses parâmetros

function Consulta($email, $senha) {
//... restante da função

 

Outro ponto, que não é um problema, mas apenas para saber, não precisa colocar as variáveis dentro de aspas duplas, vai acabar só criando redundância:

$selectionar->bindValue(":email", $email);
$selectionar->bindValue(":senha", $senha);

 

E uma recomendação, é a forma correta de autenticar um usuário:

https://pt.stackoverflow.com/questions/305240/o-que-eu-devo-fazer-para-autenticara-usuario-de-maneira-correta

Share this post


Link to post
Share on other sites

Ta vendo como nos unidos somos mais fortes, muito obrigado pela suas dicas, me ajudo muito vou fazer, e volto para postar.
Desculpe a demora em responder o amigo, e que o tralho toma o tempo.

Mais uma vez muito obrigado.

Share this post


Link to post
Share on other sites

Não está dando certo.
Primeiro pagina:

<?php 
include_once('conecta.php');
include_once('consulta.php');

$email = 'alexsandro.FGG@gmail.com';
$senha = 'senha123';
$c = new Bancodados();
$c->entrada($email, $senha);
?>

Aqui chamamos a conexão e o arquivo onde tem a função.

A classe ganha vida com o "new" seguido do nome da classe, aqui está minha primeira duvida, a classe não tem () no final de seu nome, mas na hora de dar um new temos que colocar o () ou não precisa?

Continuando...

Depois de dar new a classe, como meu colega disse a cima temos que usar a variável que contem a classe, no nosso caso "$c" e chamar a função, até aqui acredito que não fiz nada de errado.

vamos seguir:

<?php
include_once('conecta.php');
class Bancodados{
	function entrada(){
			$inserir = $pdo->prepare("INSERT INTO user(email, senha) VALUE(:email, :senha)");
			$inserir->bindParam(':email', $email);
			$inserir->bindParam(':senha', $senha);
			$inserir->execute();
entrada($email, $senha);		
	}
}
?>

Temos a Classe, e a função, eu sei que a primeira pagina tem a variável com email e senha, deixei assim pois vamos supor que o cliente envio via POST da pagina, vamos continuar...

Agora eu tenho que passar o valor dessas variáveis para dentro da função:
Eu fiz assim:

function entrada($email, $senha){code...}


Nessa parte tenho mais uma duvida, a informação email e senha, está na outra pagina, somente colocando dentro da função o nome da variável como ela vai chegar até a função?

 

Ou eu tenho que deixar essa parte da função sem nada, ex:
 

function entrada(){code...}

e na outra pagina chamar a função colocando a variável?

function entrada($email, $senha) {code...}

É assim que o valor da variável vai parar dentro da função?
 

Mais uma duvida, para que funcione eu tenho que obrigatoriamente chamar a função?
Se sim, devo fazer isso dentro ou fora?
Eu acho que é fora, mas melhor perguntar para vocês
Ex:

function entrada(){
code...
entrada(); Dentro 
}
entrada() ou Fora?


Mesmo assim fazendo tudo de errado não consigo colocar os dados dentro do banco, o INSERT está funcionando, mas quando tento modular colocando dentro da função pra chamar na outra pagina, não funciona.

como resolver isso por favor me ajudem, quero sair do procedural, mas até pegar o jeito tá dando dor de cabeça.
Muito obrigado a todos.

 

ERRO DA TELA:
 

Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\lab\consulta.php:9 Stack trace: #0 C:\xampp\htdocs\lab\index.php(8): Bancodados->entrada('alexsandro.FGG@...', 'senha123') #1 {main} thrown in C:\xampp\htdocs\lab\consulta.php on line 9

 

Share this post


Link to post
Share on other sites

Consegui resolver kkkkkkkkkkkkkkkk
Primeira Pagina:

<?php 
include_once('conecta.php');
include_once('consulta.php');

$email = 'alexsandro.FGG@gmail.com';
$senha = 'senha123';
$c = new Bancodados();
$c->entrada($email, $senha);
?>
<?php
class Bancodados{
	public function entrada($email, $senha){
			global $pdo;
		
			$inserir = $pdo->prepare("INSERT INTO user(email, senha) VALUE(:email, :senha)");
			$inserir->bindParam(':email', $email);
			$inserir->bindParam(':senha', $senha);
			$inserir->execute();
			return $inserir->fetchAll();
	}
}
?>

Todo esse desespero por que não existia conexão com o Banco de dados.
Só dar include_onde('conecta') não adianta.

A Mensagem de erro era por esse motivo o prepare estava dando null por não ter conexao.
para resolver temos que usar o global da variável de conexão no meu caso foi global $pdo.

E pronto Eu amo essa vida de programador, a gnt sobre, mas não desistimos.

Obrigado 

Share this post


Link to post
Share on other sites
21 horas atrás, Hamanom007 disse:

mas na hora de dar um new temos que colocar o () ou não precisa?

Sim, do contrário você está se referindo a um atributo da classe.

 

21 horas atrás, Hamanom007 disse:

somente colocando dentro da função o nome da variável como ela vai chegar até a função?

Não, os valores tem que existir, do contrário os parâmetros usados pelo método terá o valor NULL.

 

21 horas atrás, Hamanom007 disse:

Mais uma duvida, para que funcione eu tenho que obrigatoriamente chamar a função?
Se sim, devo fazer isso dentro ou fora?

Nem dentro, nem fora, separe os dois divisores da programação, um é o funcional outro é o orientado a objeto.

 

Porque você conseguiu?

Para início de conversa o objeto $pdo não existia, logo nenhum dos métodos da classe PDO não existia por isso o erro.

Mas daí você chama uma global (que pode existir ou não) para armazenar um valor que acredito eu que venha do arquivo "conecta.php".

 

O ideal no seu cenário é o arquivo conecta.php ser uma class conecta, assim sendo essa classe é responsável por estabelecer a conexão com o banco de dados e armazenar a conexão em um atributo público para ser acessado por outras classes. Dessa forma você previne erros recursivos caso haja erros ou algum problema na conexão. (Ou seja se não conectar o problema é a classe que conecta, dividindo a responsabilidade de cada coisa dentro da aplicação).

 

Não que você esteja errado, mas só para salientar.

Usar classes significa que você não quer ficar tendo que repeti a mesma coisa, no geral usar uma classe é reaproveitar ao máximo dados.

Se por exemplo o método entrada de cara retorna um valor que pode existir ou não você não pode reaproveitar esse valor. Ao invés de retornar o ideal é que ele armazene o valor em um atributo, em outro método o valor possa se verificado, só então outro método retorne o valor se de fato ele existe.

Se entendeu a lógica quando você envia dados para uma classe essa classe pode conter vários métodos que agem distintamente com os mesmos dados. No resumo uma classe são um aglomerado de funções que compartilham entre si os mesmos dados.

Do contrário o mais coeso é usar uma programação funcional.

Share this post


Link to post
Share on other sites

Só um ponto, o token "new" já diz que é para instanciar uma classe.

Ou seja, pode usar com ou sem parênteses:

$instance = new Foo();

é o mesmo que:

$instance = new Foo;

A obrigatoriedade dos parênteses é apenas quando quer passar algum parâmetro:

$instance = new Foo($bar);

Como ponto pessoal, com os parênteses fica mais fácil de ler.

Share this post


Link to post
Share on other sites

Obrigado Omar~.
Obrigado Gabriel Heming.


Quando a gente tem duvida e encontra pessoas como vocês tudo fica muito mais fácil, com o post de vocês muita coisa foi acrescentada, o omar~ me deu o toque para tomar cuidado com a Class e seus atributos (Armazenar, verificar, só depois usar. isso vai ficar lindo no diagrama na parede kkkk) que pode acabar sendo aproveitado de forma perigosa, a ideia que você me deu é incrível obrigado pela sua orientação.

Sem isso lá na frente ia acabar tendo muita dor de cabeça em estruturar tudo do zero.

E o Gabriel me deixo dessa vez bem claro a questão de (), parece besta, mas isso vale muito, sem falar que esses detalhes não tem na internet.

Sou muito grato aos dois, e o que vocês me ensinaram vou passar para frente.

Valeu gente sem vocês nunca teria conseguido.
 

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 Ferreira_27
      Boa Tarde!
      Alguém pode me ajudar com esse erro do PHP.
      Estou tendo dificuldade para trazer do banco de dados um valor usando a função do php mysql_result,  aparece a seguinte mensagem: Warning: mysql_result() [function.mysql-result]: tarifa not found in MySQL result index 8 in C:\wamp\www\chegala\chegala\webrodoviaria.php on line 242
      o trecho do códigoo que aparece o erro esse  abaixo.
      $sql2_exec = mysql_query($sql2); $preco = mysql_result($sql2_exec,0,'tarifa');  
    • By herculesnetwork
      Olá Pessoal, venho aqui pedir ajuda de vocês porque ja bati cabeça e nao conseguí fazer isso, sou um curioso lerdo e nessa eu nao passei.
       
      EU preciso de um função que eu possa inserir manualmente um valor no post e esse valor seja exibido em outro item do site, no thumbnails.
      onde está o valor: views xxx aqui: guiclo.com (dominio de testes)
       
      Eu estou com um site que exibe os post em grade, miniaturas.
      eu quero poder escrever dentro dos posts de video, length: 05:19
      e quero que apareça no thumbnail desse post la na grade de exibição dos posts: 05:19.
       
      meu dominio de testes: guiclo.com - aqui você podem ver como o campo length: está vazio no post e por isso nao aparece no thumbnail, e nao existe como preenchê-lo no painel admin do wordress.
       
      >>>>>> FIM <<<<<<<<<
       
      Observações para quem quiser me dizer onde alterá, ao inves de fazer uma nova função.
       
       
      o tema possui uma função videofunctions.php que injeta esse valor automaticamente de outros site que ele esa importando o videos, quero fazer
      essa inserção de valores manualmente.
       
      <?php
       
       
       
      /**** Return number of videos found (for titles) ****/
       
      function wp_script_theme_get_nb_video(){
       
       
       
      global $wp_query;
       
       
       
      $nb_videos = $wp_query->found_posts;
       
       
       
      $output = '(';
       
       
       
      if( $nb_videos > 1 ){
       
      $output .= $nb_videos . ' ' . __( 'videos', 'wp_script_theme' );
       
      }else{
       
      $output .= $nb_videos . ' ' . __( 'video', 'wp_script_theme' );
       
      }
       
       
       
      $output .= ')';
       
       
       
      if( $nb_videos ){
       
      return $output;
       
      }else{
       
      return false;
       
      }
       
       
       
      }
       
       
       
      /**** Return video length ****/
       
      function wp_script_theme_get_video_length( $type_length = '' ){
       
       
       
      global $post;
       
       
       
      $length_seconds = get_post_meta(get_the_ID(), 'complete', true);
       
       
       
      if( (int)$length_seconds > 0 ){
       
       
       
      if( (int)$length_seconds > 3600 ){
       
       
       
      return date( 'H:i:s', $length_seconds );
       
       
       
      }else{
       
       
       
      return date( 'i:s', $length_seconds );
       
      }
       
       
       
      }else{
       
       
       
      return false;
       
       
       
      }
       
       
       
      }
       
       
       
      E e no item php que exibe o thumbanil (item2-thumbs.php) possui uma função que chama o valor que do tempo.
       
      <?php if (wp_script_theme_get_video_length()) : ?>
       
      <span class="length"><?php echo wp_script_theme_get_video_length(); ?></span>
       
       
      o valor dos tempos é preenchido automaticamente por um função de um plugin que faz auto mass import de videos de outros sites, eu quero poder preencher esse valor manualmente, alguem poderia me ajudar?
       
      É Isso. Obrigado à todos.
    • By wellingtonmelo
      Olá pessoal,
       
      Creio que minha dúvida seja super simples, porém eu sou leigo em PHP ainda. Trabalho com design, estrutura, monto qualquer tipo de layout, em html e css, mas programação ainda estou iniciando.
       
      Então, eu achei um código na net bem legal que se encaixou perfeitamente a minha necessidade.
       
      É uma função na qual existe vários campos para inserir imagens, dai o php faz uma escolha aleatória e exibi um dos itens.
       
      Veja por favor: http://fb.wellmelo.com/imagemaleatoria/index.php
      ao apertar F5, ele vai sempre exibir uma imagem diferente, ou a mesma, é aleatório.
       
      É este código aqui:
      <?php $imagem = array(); // Criamos um array com o nome das imagens. $imagem[1] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto2.jpg"; // Recheamos este array $imagem[2] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto6.jpg"; $imagem[3] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto5.png"; $imagem[4] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto1.png"; $imagem[5] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto4.jpg"; $imagem[6] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto3.png"; $contador = count($imagem); // Criamos uma variavel para contar (count();) os dados que estão dentro do array. $aleatorio = rand(1,$contador); // Esta variável irá gerar um número aleatório (rand();), partindo do 1 até o número de dados que estão dentro do array.. ?> <img src="<?php echo $imagem[$aleatorio]; ?>"/> Daí vem minha dúvida, no meu site, algumas vezes eu preciso usar mais de 7 imagens, umas 15 talvez, mas não é em todos. Dai eu fiz o seguinte, apenas multipliquei os campos, assim:
      <?php $imagem = array(); // Criamos um array com o nome das imagens. $imagem[1] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto2.jpg"; // Recheamos este array $imagem[2] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto6.jpg"; $imagem[3] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto5.png"; $imagem[4] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto1.png"; $imagem[5] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto4.jpg"; $imagem[6] = "http://www.vilourenco.com.br/exemplos/phpimgaleatoria/foto3.png"; $imagem[7] = ""; $imagem[8] = ""; $imagem[9] = ""; $imagem[10] = ""; $imagem[11] = ""; $imagem[12] = ""; $imagem[13] = ""; $imagem[14] = ""; $contador = count($imagem); // Criamos uma variavel para contar (count();) os dados que estão dentro do array. $aleatorio = rand(1,$contador); // Esta variável irá gerar um número aleatório (rand();), partindo do 1 até o número de dados que estão dentro do array.. ?> <img src="<?php echo $imagem[$aleatorio]; ?>"/> Porém não funcionou como eu esperava, ele seleciona os campos que não tem imagens também, veja: http://fb.wellmelo.com/imagemaleatoria/index2.php
       
      Alguém pode me ajudar a fazer com que eu possa usar esses campos em branco, porém a função não exibir os campos em branco, somente os que contenham imagens?
       
      Grato por toda ajuda! Abraço!!
×

Important Information

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