Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida passar valor do select para variável PHP


Eduardo_santiago

Pergunta

Boa noite,

Sou novato em PHP, estou com problemas em passar o valor selecionado em um select para uma variável php que usarei em uma nova consulta sql.

Tenho o primeiro select :

<select name="escola" size="1" id="escola" onchange="getDados();" disabled="disabled">
   <option value ="--"> selecione</option>
   <?php
   include "conecta_mysql.php";
   $sql = "SELECT * FROM `nomeescola` ORDER BY `nome` DESC ";
   $result = mysqli_query($conexao, $sql) or die("falha na instrução sql");
   if(mysqli_num_rows($result))
   {
       while($dados=mysqli_fetch_array($result))
       {
           echo "<option value='".$dados['nome']."'>".$dados['nome']."</option>";
       }
   }
       else
           echo "<option value='none'>Nenhum resultado encontrado!</option>" ;
       mysqli_close($conexao);
   ?>
   </select>

 

Quando o usuário escolher um valor desse campo select, preciso atualizar um segundo select com relação ao que foi escolhido pelo usuário no primeiro sem dar refresh.

Tenho esse arquivo ajax.js
 

/**
  * Função para criar um objeto XMLHTTPRequest
  */
 function CriaRequest() {
     try{
         request = new XMLHttpRequest();        
     }catch (IEAtual){
         
         try{
             request = new ActiveXObject("Msxml2.XMLHTTP");       
         }catch(IEAntigo){
         
             try{
                 request = new ActiveXObject("Microsoft.XMLHTTP");          
             }catch(falha){
                 request = false;
             }
         }
     }
     
     if (!request)
         alert("Seu Navegador não suporta Ajax!");
     else
         return request;
 }

function getDados() {
    
    // Declaração de Variáveis
    var teste   = document.getElementById("escola").value;
    var xmlreq = CriaRequest();
    
    // Exibi a imagem de progresso
    //result.innerHTML = '<img src="Progresso1.gif"/>';
    
    // Iniciar uma requisição
    xmlreq.open("GET", "teste.php?escola=" + teste, true);
    
    // Atribui uma função para ser executada sempre que houver uma mudança de ado
    xmlreq.onreadystatechange = function(){
        
        // Verifica se foi concluído com sucesso e a conexão fechada (readyState=4)
        if (xmlreq.readyState == 4) {
            
            // Verifica se o arquivo foi encontrado com sucesso
            if (xmlreq.status == 200) {
                result.innerHTML = xmlreq.responseText;
            }else{
                result.innerHTML = "Erro: " + xmlreq.statusText;
            }
        }
    };
    xmlreq.send(null);
}

 e então no segundo select tenho o seguinte código :

 

<label> Quantidade de turmas: </label>
   <select name="quantidade" size="1" id="quantidade" disabled="disabled">
   <option value ="--"> selecione</option>
   
   <?php
   include "conecta_mysql.php";
    
   $teste = $_GET["escola"];
       if(empty($teste))
       {
           echo "<script>window.alert('VARIÁVEL VAZIA!')</script>";
       }
           else
       {
        $sql = "SELECT * FROM `turma` WHERE escola = $teste";
           
       }
       sleep(1);
       $result = mysqli_query($conexao, $sql) or die("falha na instrução sql");
   if(mysqli_num_rows($result))
   {
       while($dados=mysqli_fetch_array($result))
       {   
           echo "<option value='".$dados['nome']."'>".$dados['nome']."</option>";
         $count++;
       }     
   
   }
       else
           echo "<option value='none'>Nenhum resultado encontrado!</option>" ;
       mysqli_close($conexao);
   
   ?>
   </select>

 O que está acontecendo é que a variável $teste está sempre vazia, não estou conseguindo pegar o valor que foi selecionado no primeiro select. Alguém sabe o que está errado?

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Mano! Não consegui entender o que o sr. queria fazer, mas testei aqui e ficou assim:

Arquivo database.sql:

-- tabelas do banco de dados

drop table if exists nomeescola;
create table nomeescola(
id int(3) primary key auto_increment,
nome varchar(30)
);
insert into nomeescola(nome) values
('Escola Estadual'),('Escola Municipal'),('Escola Federal');

--

drop table if exists turma;
create table turma(
fk_escola int(3),
nome varchar(30)
);
insert into turma values
(1, 'Turma Arara Azul'),(1, 'Turma Pássaro Azul'),
(2, 'Turma da Távola Redonda'), (2, 'Turma da Bola Quadrada'),
(3, 'Turma do Círculo de Stone Henge');

Arquivo js.js

function CriaRequest() {
    try {
        request = new XMLHttpRequest();
    } catch (IEAtual) {

        try {
            request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (IEAntigo) {

            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (falha) {
                request = false;
            }
        }
    }

    if (!request)
        alert("Seu Navegador não suporta Ajax!");
    else
        return request;
}

function getDados() {

    // Declaração de Variáveis
    var teste = document.getElementById("escola").value;
    var result = document.getElementById('result');
    var xmlreq = CriaRequest();

    // Exibi a imagem de progresso
    //result.innerHTML = '<img src="Progresso1.gif"/>';

    // Iniciar uma requisição
    xmlreq.open("GET", "teste.php?escola=" + teste, true);

    // Atribui uma função para ser executada sempre que houver uma mudança de ado
    xmlreq.onreadystatechange = function () {

        // Verifica se foi concluído com sucesso e a conexão fechada (readyState=4)
        if (xmlreq.readyState == 4) {

            // Verifica se o arquivo foi encontrado com sucesso
            if (xmlreq.status == 200) {
                result.innerHTML = xmlreq.responseText;
            } else {
                result.innerHTML = "Erro: " + xmlreq.statusText;
            }
        }
    };
    xmlreq.send(null);
}

Arquivo connect.php

<?php

// arquivo para conexão com o mysql
// definição de variáveis para conexão
$host = 'localhost'; // endereço do banco
$user = 'root'; // usuário
$pass = '';  // senha
$database = ''; // nome do banco de dados
// se estiver em was
if (preg_match('/^(was)/', $_SERVER['SERVER_NAME'])) {
    $database = 'scriptbrasil'; // nome do banco de dados
    $pass = '';
}

// estabelecer conexão:
$sqli = new mysqli($host, $user, $pass);

// verificando se conectou de boas:
if ($sqli->connect_error) {
    // se houver alguma falha, exibe mensagem:
    echo '<p class="error">Falha na conexão: ' . $sqli->connect_error . '</p>';
}

// definir o padrão de caracteres
if (!$sqli->set_charset('utf8')) {
    // se não conseguir definir o padrão de caracteres, exibe o padrão disponível
    echo "<p class='error'>Seu charset não é utf8, chefe!<br>$sqli->character_set_name()</p>";
}

// selecionar/abrir o banco de dados para trabalhar
if (!$sqli->select_db($database)) {
    // se o banco de dados não for encontrado
    echo "<p class='error'>Banco de dados não encontrado, chefe!</p>";
}

Arquivo teste.php

<script src="js.js" type="text/javascript"></script>
<?php
error_reporting(E_ALL);
// inclui arquivo de conexão com o banco de dados, basta ser incluido apenas uma única vez
include 'connect.php';
// define a query de busca
$sql = 'SELECT * FROM nomeescola ORDER BY nome DESC';
// executa a query de busca
$result = $sqli->query($sql);
// verifica se houve falha na execução da query:
if ($sqli->error) {
    // mostra erro na tela:
    die($sqli->error);
} elseif ($result->num_rows) { // se não houve falhas e há algum resultado
    // inicia o select
    $select = "<select name='escola' id='escola' onchange='getDados();'>
    <option value ='--'> selecione</option>";
    while ($dados = $result->fetch_assoc()) {
        // adiciona options ao select
        $select.= "<option value='$dados[id]'>$dados[nome]</option>";
    }
    // mostra select na tela:
    echo $select . '</select>';
} else { // se nada foi encontrado:
    echo "<option value='none'>Nenhum resultado encontrado!</option>";
}
?>

<label> Quantidade de turmas: </label>
<?php
if (isset($_GET['escola'])) {
    $teste = urlencode($_GET['escola']);
    $sql = "SELECT * FROM turma WHERE fk_escola = $teste";
    sleep(1);
// executa a query de busca
    $result = $sqli->query($sql);
// verifica se houve falha na execução da query:
    if ($sqli->error) {
        // mostra erro na tela:
        die($sqli->error);
    } elseif ($result->num_rows) { // se não houve falhas e há algum resultado
        // inicia o select
        $select = "<select name='quantidade' id='quantidade' onchange='getDados();'>";
        while ($dados = $result->fetch_assoc()) {
            // adiciona options ao select
            $select.= "<option value='$dados[nome]'>$dados[nome]</option>";
        }
        // mostra select na tela:
        echo $select . '</select>';
    } else { // se nada foi encontrado:
        echo "<option value='none'>Nenhum resultado encontrado!</option>";
    }
}
?>
<div id="result"></div>

Mas juro que não entendi!

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Por isso é que deveriam ser arquivos separados.

Um arquivo pra exibir o formulário e outro só pra buscar as turmas.

Se existirem os dois num mesmo arquivo, creio que sempre serão carredos os dois!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...