Jump to content
Fórum Script Brasil
  • 0

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


Eduardo_santiago
 Share

Question

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 to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...