Jump to content
wandoh

Select dados do usuário

Recommended Posts

Boa Tarde! estou com um dificuldades de puxar os dados do usuário logado no site. Atualmente estou conseguindo puxar somente o NOME, quando tento puxar o restante da erro! Abaixo segue o Código.

 

session_start();
//inicializa variaveis
$id = "accountid";
$name = "";
$email = "";
$errors = array();

//conexão db
$db = mysqli_connect('localhost', 'root', 'senha', 'db') or die("could not connect to database");

//Registrar usuário
if (isset($_POST['reg_user'])) {
  // receives all input values from the form
    $name = mysqli_real_escape_string($db, $_POST['name']);
    $email = mysqli_real_escape_string($db, $_POST['email']);
    $password = mysqli_real_escape_string($db, $_POST['password']);
    $password2 = mysqli_real_escape_string($db, $_POST['password2']);

//form validação: ensure that the form is correctly filled ...
// by adding (array_push)) corresponding error unto $errors array
    if(empty($name)) { array_push($errors, "
        ");
  }
    if(empty($email)) { array_push($errors, "
        ");
  }
    if(empty($pwd)) { array_push($errors, "
        ");
  }
    if($pwd != $pw2) { array_push($errors, "
        ");
  }
    

// To protect MySQL injection (more detail about MySQL injection)
$name = stripslashes($name);
$password = stripslashes($password);
// first check the databese to make sure
// verifica na db se a usuário existente com o mesmo nome de usuário e email
$user_check_query = "SELECT * FROM t_account WHERE name='$name' or email='$email' LIMIT 1";
$result = mysqli_query($db, $user_check_query);
$user = mysqli_fetch_assoc($result);

if($user) { // if user existente
     if ($user['name'] === $name) {
      array_push($errors, "
        ");
     }
     if ($user['email'] === $email) {
      array_push($errors, "
        ");
     }
}
// Registra o usuário se não haver erros
if (count($errors) == 0 ) { 
     $pwd = md5($pwd);
     print $pwd;
     $query = "INSERT INTO t_account (name, email, pwd, pw2) VALUES ('$name', '$email', '$password', '$password2')";
     mysqli_query($db, $query);
     $_SESSION['accountid'] = $id;//
     $_SESSION['name'] = $name;
     $_SESSION['success'] = 'Você está logado em';
     echo "
        ";
     //header('location: index.php');
 }
}
//LOGIN USER
if (isset($_POST['login_user'])) {

  $name = mysqli_real_escape_string($db, $_POST['name']);
  $password = mysqli_real_escape_string($db, $_POST['password']);

  if (empty($name)) {

    array_push($errors, "
        ");
  }
  if (empty($password)) {

    array_push($errors, "
        ");
  }
  if (count($errors) == 0 ) {

    $pwd = md5($pwd);

    $query = "SELECT 'email' FROM t_account WHERE name='$name' AND password='$password'";
    $results = mysqli_query($db, $query);

  if (mysqli_num_rows($results)) {
    $_SESSION['accountid'] = $id;//
   $_SESSION['name'] = $name;
   $_SESSION['success'] = 'Você está logado em';
     echo "
        ";
     //header('location: index.php');
  }else{
      array_push($errors, "
        ");
   }

    }
    
}

Com a variável abaixo, é exibido o nome de quem esta logado.

$_SESSION["name"]

Já com os demais, não e exibido o resultado é apresentado uma msg de erro.

$_SESSION["email"]
Notice: Undefined index: email in 

Passei em todos os post que tem sobre o assunto, mas infelizmente em meu código não deu certo.

 Sou novo em PHP!

Preciso puxar todos os dados cadastrado do usuário.

Share this post


Link to post
Share on other sites
23 horas atrás, wandoh disse:

Boa Tarde! estou com um dificuldades de puxar os dados do usuário logado no site. Atualmente estou conseguindo puxar somente o NOME, quando tento puxar o restante da erro! Abaixo segue o Código.

 


session_start();
//inicializa variaveis
$id = "accountid";
$name = "";
$email = "";
$errors = array();

//conexão db
$db = mysqli_connect('localhost', 'root', 'senha', 'db') or die("could not connect to database");

//Registrar usuário
if (isset($_POST['reg_user'])) {
  // receives all input values from the form
    $name = mysqli_real_escape_string($db, $_POST['name']);
    $email = mysqli_real_escape_string($db, $_POST['email']);
    $password = mysqli_real_escape_string($db, $_POST['password']);
    $password2 = mysqli_real_escape_string($db, $_POST['password2']);

//form validação: ensure that the form is correctly filled ...
// by adding (array_push)) corresponding error unto $errors array
    if(empty($name)) { array_push($errors, "
        ");
  }
    if(empty($email)) { array_push($errors, "
        ");
  }
    if(empty($pwd)) { array_push($errors, "
        ");
  }
    if($pwd != $pw2) { array_push($errors, "
        ");
  }
    

// To protect MySQL injection (more detail about MySQL injection)
$name = stripslashes($name);
$password = stripslashes($password);
// first check the databese to make sure
// verifica na db se a usuário existente com o mesmo nome de usuário e email
$user_check_query = "SELECT * FROM t_account WHERE name='$name' or email='$email' LIMIT 1";
$result = mysqli_query($db, $user_check_query);
$user = mysqli_fetch_assoc($result);

if($user) { // if user existente
     if ($user['name'] === $name) {
      array_push($errors, "
        ");
     }
     if ($user['email'] === $email) {
      array_push($errors, "
        ");
     }
}
// Registra o usuário se não haver erros
if (count($errors) == 0 ) { 
     $pwd = md5($pwd);
     print $pwd;
     $query = "INSERT INTO t_account (name, email, pwd, pw2) VALUES ('$name', '$email', '$password', '$password2')";
     mysqli_query($db, $query);
     $_SESSION['accountid'] = $id;//
     $_SESSION['name'] = $name;
     $_SESSION['success'] = 'Você está logado em';
     echo "
        ";
     //header('location: index.php');
 }
}
//LOGIN USER
if (isset($_POST['login_user'])) {

  $name = mysqli_real_escape_string($db, $_POST['name']);
  $password = mysqli_real_escape_string($db, $_POST['password']);

  if (empty($name)) {

    array_push($errors, "
        ");
  }
  if (empty($password)) {

    array_push($errors, "
        ");
  }
  if (count($errors) == 0 ) {

    $pwd = md5($pwd);

    $query = "SELECT 'email' FROM t_account WHERE name='$name' AND password='$password'";
    $results = mysqli_query($db, $query);

  if (mysqli_num_rows($results)) {
    $_SESSION['accountid'] = $id;//
   $_SESSION['name'] = $name;
   $_SESSION['success'] = 'Você está logado em';
     echo "
        ";
     //header('location: index.php');
  }else{
      array_push($errors, "
        ");
   }

    }
    
}

Com a variável abaixo, é exibido o nome de quem esta logado.


$_SESSION["name"]

Já com os demais, não e exibido o resultado é apresentado uma msg de erro.


$_SESSION["email"]

Notice: Undefined index: email in 

Passei em todos os post que tem sobre o assunto, mas infelizmente em meu código não deu certo.

 Sou novo em PHP!

Preciso puxar todos os dados cadastrado do usuário.

Visualizando seu codígo pude perceber que você não declarou a variavel $_SESSION["email"], por isso o PHP está te informando Notice: undefined index: email in -> Notice: variavel não foi definida.

 

Se você quer trazer todos os dados do banco de dados de um utiliza a função mysqli_fetch_assoc, desse jeito:

<?php

while ($linha = mysqli_fetch_assoc($result)) {
  $_SESSION['email'] = $linha['email'];
}

?>

Exemplo de como fazer uma consulta no banco de dados

<?php
session_start();
/**
  *@param $login, $senha -> Variaveis que armazena o login e a senha do usuário.
  *@param $conexao -> Armazena a conexão do banco de dados.
  *@param $resultado -> Armazena o resultado da função mysql_query para poder utiliza-lo no mysqli_num_rows ou mysqli_fetch_assoc.
  *@param mysqli_connect -> Conecta no banco  de dados.
  *@param mysqli_query -> Executa codígo SQL para fazer a consulta.
  *@param mysqli_num_rows -> Retorna o número de linhas afetadas (Se foi possivel encontrar o usuario e a senha no banco retorna TRUE, caso não foi possivel encontrar função retorna FALSE.
  *@param mysqli_fetch_assoc -> Retorna um array com todos os dados que o mysqli_query retornou.
*/
$login =  $_POST['txtLogin'];
$senha = $_POST['txtSenha'];

$conexao = mysqli_connect("lcoalhost", "root", "", "DATABASE");
$resultado = mysqli_query($conexao, "SELECT * FROM TABELA_USUARIO WHERE login = '$login' AND senha = '$senha'");

if (mysqli_num_rows($resultado)) {
	//Usuário e Senha estão cadastrados no banco de dados
	while($linha = mysqli_fetch_assoc($resultado)){
      	//Armazena o nome do usuário em uma sessão para poder chama-lá em qualquer página PHP
        $_SESSION['id'] = $linha['id'];
		$_SESSION['nome'] = $linha['nome'];
       	$_SESSION['email'] = $linha['email'];
       	$_SESSION['logged'] = "Logado com successo";
      	//Exibe todos os dados obtidos no SELECT da função mysqli_fetch_assoc()
      	var_dump($linha);
     	//Caso queira redirecionar para pagína de login descomente o header abaixo
      	//header("Location: logado.php")
	}
}

?>

 

Share this post


Link to post
Share on other sites

@wandoh

 

Fera é o seguinte, para que você possa DECLARAR uma variável em uma página e possa utilizar em outra página você precisa declarar as variáveis de SESSÃO, o que pelo visto você está fazendo certo.

 

SESSION_START();

$_SESSION['nome'] = "NOME";

 

Porem ao verificar o seu código não vi em nenhum momento você realizar o SELECT na base de dados para obter os dados do seu usuário e em seguida alimentar a "suposta" variável de sessão do e-mail em questão para que você possa utilizar em outra página.

 

Então explicando.

 

Você disse que o "NOME" você consegui exibir, certo? Isso porque você está alimentando a variável $_SESSION['nome'] aqui:

 

if (mysqli_num_rows($results)) {

$_SESSION['accountid'] = $id;//

$_SESSION['name'] = $name;

$_SESSION['success'] = 'Você está logado em';

echo " ";

 

Então em qualquer lugar que você queira exibir o nome deste usuário basta colocar

<?php
SESSTION_START();
echo $_SESSION['nome'];
?>

Você deve fazer o mesmo para o E-MAIL, você precisa fazer um SELECT na BASE DE DADOS e em seguida colocar o resultado obtido em uma variável de sessão.

 

Experimente fazer isso:

<?php
//Aqui você declara o select e os dados que quer obter, no exemplo temos o e-mail.
$query = "SELECT 'email' FROM t_account WHERE name='$name' AND password='$password'";

//Este comando executa o acesso ao banco de dados e obtem
//o campo em questão e joga dentro da variável
$results = mysqli_query($db, $query);

//Se o resultado trouxer um valor ele entra no IF.
if ($resultset = mysqli_fetch_assoc($db, $results)) {

//Vamos criar aqui a sua variável de SESSÃO do E-MAIL.
    $_SESSION['email'] = $resultset['email'];

//Vamos exibir este valor na tela.
    echo $_SESSION['email'];
}
?>

Bom, a lógica é essa, não testei o código, mas caso de algum erro na tela mostre aqui o código do erro para uma melhor analise.

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites
11 horas atrás, Felipe Guedes Coutinho disse:

@wandoh

 

Fera é o seguinte, para que você possa DECLARAR uma variável em uma página e possa utilizar em outra página você precisa declarar as variáveis de SESSÃO, o que pelo visto você está fazendo certo.

 

SESSION_START();

$_SESSION['nome'] = "NOME";

 

Porem ao verificar o seu código não vi em nenhum momento você realizar o SELECT na base de dados para obter os dados do seu usuário e em seguida alimentar a "suposta" variável de sessão do e-mail em questão para que você possa utilizar em outra página.

 

Então explicando.

 

Você disse que o "NOME" você consegui exibir, certo? Isso porque você está alimentando a variável $_SESSION['nome'] aqui:

 

if (mysqli_num_rows($results)) {

$_SESSION['accountid'] = $id;//


$_SESSION['name'] = $name;

$_SESSION['success'] = 'Você está logado em';

echo " ";

 

Então em qualquer lugar que você queira exibir o nome deste usuário basta colocar


<?php
SESSTION_START();
echo $_SESSION['nome'];
?>

Você deve fazer o mesmo para o E-MAIL, você precisa fazer um SELECT na BASE DE DADOS e em seguida colocar o resultado obtido em uma variável de sessão.

 

Experimente fazer isso:


<?php
//Aqui você declara o select e os dados que quer obter, no exemplo temos o e-mail.
$query = "SELECT 'email' FROM t_account WHERE name='$name' AND password='$password'";

//Este comando executa o acesso ao banco de dados e obtem
//o campo em questão e joga dentro da variável
$results = mysqli_query($db, $query);

//Se o resultado trouxer um valor ele entra no IF.
if ($resultset = mysqli_fetch_assoc($db, $results)) {

//Vamos criar aqui a sua variável de SESSÃO do E-MAIL.
    $_SESSION['email'] = $resultset['email'];

//Vamos exibir este valor na tela.
    echo $_SESSION['email'];
}
?>

Bom, a lógica é essa, não testei o código, mas caso de algum erro na tela mostre aqui o código do erro para uma melhor analise.

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Notice: Undefined variable: pwd
Warning: mysqli_fetch_assoc() expects exactly 1 parameter, 2 given in

Apresenta esses 2 erros quando eu utilizo assim

//Aqui você declara o select e os dados que quer obter, no exemplo temos o e-mail.
$query = "SELECT 'email' FROM t_account WHERE name='$name' AND pwd='$pwd'";

//Este comando executa o acesso ao banco de dados e obtem
//o campo em questão e joga dentro da variável
$results = mysqli_query($db, $query);

//Se o resultado trouxer um valor ele entra no IF.
if ($resultset = mysqli_fetch_assoc($db, $results)) {

//Vamos criar aqui a sua variável de SESSÃO do E-MAIL.
    $_SESSION['email'] = $resultset['email'];

//Vamos exibir este valor na tela.
    echo $_SESSION['email'];
}

Se eu adicionar dentro do meu código quando tento visualizar não apresenta nada .

Uma duvida nessa parte tem $db, ou devo retirar pois já existe no 

$results = mysqli_query($db, $query);
if ($resultset = mysqli_fetch_assoc($db, $results)) {

 

Share this post


Link to post
Share on other sites

@wandoh

 

O primeiro erro está dizendo que:

"Notificação: Variável indefinida: pwd".

Notice: Undefined variable: pwd

Ou seja, você esta usando uma variável no seu site que não foi DECLARADA, ou seja:

$pwd = "Qualquer coisa para definir a variável";

 

O outro erro é a própria sintaxe do mysqli_fetch_assoc(); você pode pesquisar na internet, mas o erro diz:

"Aviso: mysqli_fetch_assoc() expera exato 1 parametro, 2 foram dados."

Warning: mysqli_fetch_assoc() expects exactly 1 parameter, 2 given in

Ou seja, existem 2 parametros sendo passados dentro do ( ), acredito que você removendo o $db deve funcionar.

Sobre este comando eu recomendo você a ler o

Manual do Desenvolvedor PHP --> AQUI - Comando MySQLi_Fetch_Assoc() .

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites
Em 18/10/2019 at 10:04, Felipe Guedes Coutinho disse:

@wandoh

 

O primeiro erro está dizendo que "Notificação: Variável indefinida: pwd".


Notice: Undefined variable: pwd

Ou seja, você esta usando uma variável no sei site que não esta sendo DECLARADA, ou seja:

 

$pwd = "Qualquer coisa para definir a variável";

 

O outro erro é a própria sintaxe do mysqli_fetch_assoc(); você pode pesquisar na internet, mas o erro diz:

 

"Aviso: mysqli_fetch_assoc() expera exato 1 parametro, 2 foram dados.


Warning: mysqli_fetch_assoc() expects exactly 1 parameter, 2 given in

Ou seja, existem 2 parametros sendo passados dentro das (), acredito que você recomendo o $db deve funcionar.

Sobre este comendo eu recomendo você a ler o Manual do Desenvolvedor PHP AQUI - Comando MySQLi_Fetch_Assoc()

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Obrigado por responder minhas duvidas! Depois de muitas tentativas consegui resolver meu problema adicionando uma parte do código em que o Hállex da Silva Costa mencionou para mim.

if (mysqli_num_rows($results)) {
      //Usuário e Senha estão cadastrados no banco de dados
      while($exibir = mysqli_fetch_assoc($results)){
        //Armazena o nome do usuário em uma sessão para poder chama-lá em qualquer página PHP
        $_SESSION['id'] = $exibir['accid'];
        $_SESSION['nome'] = $exibir['name'];
        $_SESSION['email'] = $exibir['email'];

        //Exibe todos os dados obtidos no SELECT da função mysqli_fetch_assoc()
        //var_dump($linha);
    } 
   }

Como eu disse no primeiro post, sou iniciante em PHP. Não desisto do que eu quero. Tento de todas as formas resolver os obstáculos que aparecem! Mais uma vez obrigado Hállex da Silva Costa e Felipe Guedes Coutinho por me ajudar.

Share this post


Link to post
Share on other sites
Em 21/10/2019 at 15:37, Felipe Guedes Coutinho disse:

@wandoh

 

Que bom que funcionou, não desista e se estiver com dúvidas poste que sempre tem alguém para lhe ajudar.

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Mais uma vez obrigado!

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 EstilloWeb
      Está ocorrendo um erro em meu comando MySQL na ordenação dos resultados. O código é o seguinte:
      $sql_imos4 = "Select DISTINCT imovel FROM propostas ORDER BY id DESC"; $exe_imos4 = mysqli_query($conexao, $sql_imos4); O objetivo é listar uma única vez um imóvel com proposta, mesmo que haja dois ou mais registros, sempre ordenado mais recente. O que está ocorrendo quando o imóvel tem mais de uma proposta cadastrada, a ordenação está sendo feita pelo ID da proposta mais antiga.
      Exemplo:
      imóvel ref. 4528 tem duas propostas, sendo que a mais recente tem o ID 235 porém aparece na listagem abaixo do imóvel ref. 4325, que tem uma só proposta e ID 230.
      O resultado deveria estar invertido neste caso.
      Onde pode estar o erro? Agradeço a ajuda.
    • By Herberto Silva
      Olá
      Estou com uma dificuldade em elaborar um select de forma que verifique um campo data, (com uma atribuição de uma variável $current_date = date('Y-m-d');) caso exista essa data o select posicione-se no registo, neste caso no registo que contém a data igual a $current_date, mantendo os restantes registos da tabela disponíveis
    • By tii3030
      Olá, gostaria de saber qual a melhor maneira de selecionar e verificar a senha hash(senha) em um banco de dados e comparar com a senha inserida pelo usuário em um formulário de login. É mais adequado armazenar no BD o salt ? No exemplo abaixo eu criei o hash da senha antes de selecionar no banco:
      <?php include('conf.php'); $email = 'lala@123.com'; $senha = 'lala.123'; $custo = '08'; $salt = 'Cf1f11ePArKlBJomM0F6aJ'; $hash = crypt($senha, '$2a$' . $custo . '$' . $salt . '$'); $query_select = "SELECT email, password FROM usuarios WHERE email = '$email' AND password = '$hash'"; $select = mysqli_query($conexao,$query_select); if (mysqli_num_rows($select) == 1) { echo "Login Permitido"; } else { echo "Login ou senha invalidos"; } ?> Já neste exemplo eu selecionei o hash no banco para depois comparar com a senha inserida no formulário utilizando o password_verify():
      <?php #----------------- INCLUDING FILE --> "conf.php" include('conf.php'); if (isset($_POST['submit'])) { $email = mysqli_real_escape_string($conexao, $_POST['email']); $password = mysqli_real_escape_string($conexao, $_POST['password']); $query_select_email = "SELECT email FROM usuarios WHERE email = '$email'"; $select_email = mysqli_query($conexao,$query_select_email); $query_select_password = "SELECT password FROM usuarios"; $select_password = mysqli_query($conexao,$query_select_password); while($array = mysqli_fetch_array($select_password)) { $logarray = $array['password']; if (password_verify($password, $logarray) && mysqli_num_rows($select_email) == 1) { echo "Login permitido"; } } } ?> Aceito qualquer dica relacionado a segurança e para melhorar o código, desde já agradeço.
    • By tii3030
      Olá pessoal, desenvolvi um pequeno código em PHP com a função de verificar e validar usuário e senha de um formulário, juntamente com o meu banco de dados MySql.
      Gostaria de saber como aprimorar o meu código para torna-lo mais seguro e mais próximo de algo "profissional". Lembrando que minha senha no banco está criptografada (PASSWORD_BCRYPT).
       
      <?php
          #----------------- INCLUDING FILE --> "conf.php"
          include('conf.php');
              if (isset($_POST['submit'])) {
             
      #--------------------------------INPUTS ---------------------------------------------#
                  $email = mysqli_real_escape_string($conexao, $_POST['email']);
                  $password = mysqli_real_escape_string($conexao, $_POST['password']);
      #-----------------------#----------------------#-----------------_#-------------------#
                  $query_select_email = "SELECT email FROM usuarios WHERE email = '$email'";
                  $select_email = mysqli_query($conexao,$query_select_email);
                  $query_select_password = "SELECT password FROM usuarios";
                  $select_password = mysqli_query($conexao,$query_select_password);
                  while($array = mysqli_fetch_array($select_password)) {
                  $logarray = $array['password'];
                  
                      if (password_verify($password, $logarray)) {
                          if (mysqli_num_rows($select_email) == 1) {
                              
                          $_SESSION['email'] = $email;
                          header('location: XXX.html');
                          exit();
                          }
                      }
                      else {
                          echo "Loguin ou senha incorretos";
                      }
                  $logarray = '0';
                  }
              }
      ?>
    • By michelmir
      Olá!
       
      Recentemente fiz uma postagem aqui no fórum a respeito de se carregar valores em um input text baseando-se na opção selecionada em uma select box, onde obtive uma solução. Por conta disso resolvi adicionar um complemento neste  meu código onde o mesmo deve carregar valores corretamente dentro de uma input text utilizando o plugin TypeAhead.js e o evento onchange do Jquery.
       
      Como forma de demonstrar a minha dúvida em funcionamento, criei uma página como forma de testar a solução. O que ocorre é que quando seleciona uma opção no select box  "Categorias", o Ajax manda um request para o php script onde o mesmo retorna os valores corretamente em JSON conforme a imagem do console do navegador Chrome abaixo:
       
       
       
      Até aqui os valores relacionados com a opção selecionada no select box "Categorias" são carregados corretamente porém se eu não atualizar a página "F5" e ao mesmo tempo eu selecionar alguma outra opção dentro do select box, o input text carrega além dos valores relacionados, todos os valores não relacionados com a opção selecionada ou seja, o input text somente carrega os valores corretamente se eu atualizar a página em questão.
       
      Abaixo uma imagem demonstrando os valores carregados em uma input text quando seleciono uma outra opçao no select box quando não se atualiza a página. Todos os valores não relacionados também são carregados:
       

       
      Abaixo publico o html e os scripts Ajax, Typeahead e PHP que estou utilizando neste projeto:
       
      HTML
      <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta charset="utf-8"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"> <!-- jQuery library --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <!-- jQuery UI library --> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-3-typeahead/4.0.2/bootstrap3-typeahead.min.js"></script> </head> <body> <div class="container"> <br> <h1>DYNAMIC TWITTER TYPEAHEAD</h1> <br> <div class="row"> <?php // Include the database config file include_once 'dbConfig.php'; // Fetch all the country data $query = "SELECT * FROM categorias ORDER BY categoria ASC"; $result = $db->query($query); ?> <!-- categoria dropdown --> <div class="col-md-4"> <select id="categoriaFK" name="categoriaFK" class="form-control"> <option value="">seleciona categoria</option> <?php if($result->num_rows > 0){ while($row = $result->fetch_assoc()){ echo '<option value="'.$row['categoriaID'].'">'.$row['categoria'].'</option>'; } }else{ echo '<option value="">Categoria não encontrada</option>'; } ?> </select> </div> <div class="col-md-4" id="prod"> <div ><input type="text" name="produtos" id="produtos" class="form-control input-lg typeahead" autocomplete="off" placeholder="" /></div> </div> <div class="col-md-4"> <div id="imagem" name="imagem"></div> </div> </div> </div> </body> </html>  
      No script abaixo, o Ajax envia um request para o script PHP que por sua vez retorna os valores em JSON para o Ajax que envia para o TypeAhead e carrega o input text com valores relacionados. Após selecionar uma opção no input text, o Jquery envia um valor relacionado para a div "#imagem" :
       
      $(document).ready(function(){ var produtos; var nomes = []; // array var lista = {}; // objeto $('#categoriaFK').on('change', function(){ var queryID = $(this).val(); $.ajax({ url:"fetch.php", method:"POST", data:{categoria:queryID}, dataType:"json", success:function(data){ console.log(data); $.each(data, function(i, optionHtml){ $('#produtos').append(optionHtml); }); $("#imagem").empty(''); $(".typeahead").val(''); produtos = data; } }); $('.typeahead').typeahead({ source: function(query, result) { $.each(produtos, function(idx, item){ if(!~nomes.indexOf(item.nomeProduto)) nomes.push(item.nomeProduto); lista[item.nomeProduto] = item.imagem; }); return result(nomes); }, afterSelect: function (data) { var img = lista[data]; $('#imagem').html(img); }, }); }); });  
      Abaixo, o php script que seleciona os valores baseando-se no valor selecionado do select box e os envia em formato JSON para o Ajax:
       
      <?php require_once 'dbConfig.php'; if(!empty($_POST["categoria"])){ $query = " SELECT * FROM produtos WHERE categoriaFK = ".$_POST['categoria']." "; $result = $db->query($query); $data = array (); if ( $result->num_rows > 0 ) { while($row = $result->fetch_assoc ()) { $data[] = $row; } header("Content-type: application/json; charset=utf-8 cache-control: no-cache, no-store, must-revalidate"); echo json_encode($data); exit(); } } ?> No caso como mencionado acima, nesta página que criei demonstra o funcionamento de todo o código acima, porém acredito que devo modificar o script para que o mesmo carregue valores corretamente quando seleciono alguma opção no select box "Categorias" sem precisar atualizar a página para que o mesmo carregue corretamente. 
       
      Como posso proceder? Desde já agradeço a atenção de todos.
×

Important Information

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